2. RPM5: история
● 2005 год — расхождение веток RPM4
● 2007 год — официальный запуск RPM5
● январь 2008 года — RPM 5.0.0
● ...
● июль 2012 года — RPM 5.4.10
3. RPM5: использование
Основной пакетный менеджер:
● Mandriva
● ROSA
● WindRiver Linux
● Unity Linux
● OpenPKG
● ...
4. Улучшения для мантейнеров
Реализованные:
● Файловые триггеры
● «Мягкие» зависимости
● Встроенные интерпретаторы
● Улучшенная работа с пакетами по сети
● Различные подходы к уменьшению размера spec-
файлов
Обсуждаемые:
● Локализация описаний пакетов
● Использование параллелизма при сборке
5. Файловые триггеры
Цель — вынести на уровень RPM действия,
общие для многих pre- и post-скриптов:
● Вызов ldconfig при установке/удалении библиотек
● Обновление кэша иконок
● Переконфигурирование загрузчика при установке
ядра
● Перезапуск сервисов (например, Apache) при
установке web-приложения
● ...
7. Мягкие зависимости
Дополнительный атрибут зависимости -
RPMSENSE_MISSINGOK
● Чтобы это заметил пользователь, необходима
поддержка со стороны менеджера пакетов более
высокого уровня (Urpmi, Smart, …) и
соответствующего GUI-инструментария (Rpmdrake,
Smart-gui, …)
● Не путать с SUGGESTS вместо REQUIRES
8. Встроенные интерпретаторы
Цель — возможность использовать в pre- и
post-скриптах что-то кроме shell:
● Ruby
● Python
● Perl
● Tcl
● Lua
● …
+ ODBC, SQL, Git, SVN, ...
9. Облагораживание spec-файлов
● Генераторы зависимостей
● Генераторы списков файлов с переводами
● Автоматическое заполнение %name, %buildroot,
...
● …
В реальности: + помощь со стороны сред
сборки:
● Автогенерация Changelog
● Вспомогательные макросы:
%cmake, %gem_build, ...
10. Работа с сетью
Если какое-то действие можно произвести
над локальным файлом, то его же можно
выполнить для файла, доступного по HTTP
или FTP:
● rpm qip http://mysite.com/mypackage.rpm
● Указание удаленного источника в полях Source и
Patch
● ...
11. Локализация описаний пакетов
Существующие подходы:
● Локализация в spec-файлах
разрастание размера, трудности совместной
работы, ...
● Отдельные пакеты с локализацией
(specspo, mandriva-rpm-summary, …)
привязка к процессу сборки, трудности с
обновлением, ...
12. Локализация описаний —
предложения RPM5
Использование content-addressable
storage
Система сборки
(ABF)
Ключ:
<id пакета, язык>
RPM
Значение:
Система summary/description
локализации на указанном языке
(Transifex)
13. Использование параллелизма
при сборке пакета
● Сборка подпакетов
● Использование параллельных алгоритмов сжатия
(gz -> pigz, bz2 -> pbzip2, xz — встроенная поддержка)
14. Улучшения для пользователей
● Транзакционное управление пакетами (RPM ACID)
● Использование параллелизма при установке
пакетов
● Использование СКВ (Git, SVN) для отслеживания
изменений файлов конфигурации
15. Транзакционное управление
пакетами
Установка/удаление/обновление пакета как
атомарная транзакция:
● Транзакция на уровне rpmdb
● Отслеживание производимых системных вызовов
●
● ...
16. Использование параллелизма
при установке
При обработке группы пакетов:
● проверка GPG-подписей
● проверка контрольных сумм
● проверка зависимостей
● …
При обработке отдельного пакета:
● параллельное разархивирование
(проблемы: нет реализации для xz, завязки в rpm на
callback-функции для отслеживания прогресса, ...)
17. Config-файлы
Файлы конфигурации, входящие в состав
пакетов, которые могут изменяться
пользователями.
Что делать при обновлении пакета, в котором есть
новый файл?
Текущий подход:
а) оставляем старый файл, ставим новый с
суффиксом .rpmnew
b) сохраняем старый файл с суффиксом .rpmsave и
ставим новый вместо него
18. СКВ для config-файлов
Предлагаемый подход:
Храним файлы конфигурации в системе контроля
версий (Git, SVN, ...)
● Отслеживаем полную историю, не только на уровне
текущий/предыдущий файл
● Возможность слияния (merge) файлов средствами СКВ
● Нет замусоривания файловой системы
19. RPM5 vs RPM4
Параллельное развитие, по возможности —
поддержка совместимости
(большинство пакетов, собранных с помощью RPM4,
установятся в системах с RPM5)
● Поддержка тильды в версиях (чтобы foo-1.0.rpm был
новее, чем foo-1.0~beta.rpm)
● Поддержка set-versions
● ...
20. RPM5 vs RPM4 — commits per month
(по данным http://ohloh.net)
RPM4
RPM5