rpm5
TRANSCRIPT
RPM5: история
● 2005 год — расхождение веток RPM4● 2007 год — официальный запуск RPM5● январь 2008 года — RPM 5.0.0● ...● июль 2012 года — RPM 5.4.10
RPM5: использование
Основной пакетный менеджер:
● Mandriva● ROSA● WindRiver Linux● Unity Linux● OpenPKG● ...
Улучшения для мантейнеров
Реализованные:● Файловые триггеры● «Мягкие» зависимости● Встроенные интерпретаторы● Улучшенная работа с пакетами по сети● Различные подходы к уменьшению размера spec-
файлов
Обсуждаемые:● Локализация описаний пакетов● Использование параллелизма при сборке
Файловые триггеры
Цель — вынести на уровень RPM действия, общие для многих pre- и post-скриптов:
● Вызов ldconfig при установке/удалении библиотек● Обновление кэша иконок● Переконфигурирование загрузчика при установке
ядра ● Перезапуск сервисов (например, Apache) при
установке web-приложения● ...
Файловый триггер — пример grub2
grub2.filter
^./boot/vmlinuz
grub2.script
#!/bin/sh/usr/sbin/grub2mkconfig o \ /boot/grub2/grub.cfg
Мягкие зависимости
Дополнительный атрибут зависимости - RPMSENSE_MISSINGOK
● Чтобы это заметил пользователь, необходима поддержка со стороны менеджера пакетов более высокого уровня (Urpmi, Smart, …) и соответствующего GUI-инструментария (Rpmdrake, Smart-gui, …)
● Не путать с SUGGESTS вместо REQUIRES
Встроенные интерпретаторы
Цель — возможность использовать в pre- и post-скриптах что-то кроме shell:
● Ruby● Python● Perl● Tcl● Lua● …
+ ODBC, SQL, Git, SVN, ...
Облагораживание spec-файлов
● Генераторы зависимостей● Генераторы списков файлов с переводами● Автоматическое заполнение %name, %buildroot,
...● …
В реальности: + помощь со стороны сред сборки:
● Автогенерация Changelog● Вспомогательные макросы:
%cmake, %gem_build, ...
Работа с сетью
Если какое-то действие можно произвести над локальным файлом, то его же можно выполнить для файла, доступного по HTTP или FTP:
● rpm qip http://mysite.com/mypackage.rpm● Указание удаленного источника в полях Source иPatch
● ...
Локализация описаний пакетов
Существующие подходы:
● Локализация в spec-файлахразрастание размера, трудности совместной работы, ...
● Отдельные пакеты с локализацией(specspo, mandriva-rpm-summary, …)привязка к процессу сборки, трудности с обновлением, ...
Локализация описаний — предложения RPM5
Использование content-addressable storage
Ключ: <id пакета, язык>
Значение:summary/descriptionна указанном языке
Система сборки(ABF)
Системалокализации
(Transifex)
RPM
Использование параллелизма при сборке пакета
● Сборка подпакетов● Использование параллельных алгоритмов сжатия
(gz -> pigz, bz2 -> pbzip2, xz — встроенная поддержка)
Улучшения для пользователей
● Транзакционное управление пакетами (RPM ACID)● Использование параллелизма при установке
пакетов● Использование СКВ (Git, SVN) для отслеживания
изменений файлов конфигурации
Транзакционное управление пакетами
Установка/удаление/обновление пакета как атомарная транзакция:
● Транзакция на уровне rpmdb● Отслеживание производимых системных вызовов ● ● ...
Использование параллелизма при установке
При обработке группы пакетов:● проверка GPG-подписей ● проверка контрольных сумм● проверка зависимостей● …
При обработке отдельного пакета:● параллельное разархивирование
(проблемы: нет реализации для xz, завязки в rpm на callback-функции для отслеживания прогресса, ...)
Config-файлы
Файлы конфигурации, входящие в состав пакетов, которые могут изменяться пользователями.
Что делать при обновлении пакета, в котором есть новый файл?
Текущий подход:а) оставляем старый файл, ставим новый с суффиксом .rpmnewb) сохраняем старый файл с суффиксом .rpmsave и ставим новый вместо него
СКВ для config-файлов
Предлагаемый подход:Храним файлы конфигурации в системе контроля версий (Git, SVN, ...)
● Отслеживаем полную историю, не только на уровне текущий/предыдущий файл
● Возможность слияния (merge) файлов средствами СКВ● Нет замусоривания файловой системы
RPM5 vs RPM4
Параллельное развитие, по возможности — поддержка совместимости(большинство пакетов, собранных с помощью RPM4, установятся в системах с RPM5)
● Поддержка тильды в версиях (чтобы foo-1.0.rpm был новее, чем foo-1.0~beta.rpm)
● Поддержка set-versions● ...