В следующем году ожидается публикация значительной ветки RPM 6, в которой будет задействован новый формат архива, позволяющий в отличие от ныне используемого формата cpio создавать пакеты размером более 4 ГБ (преодоление данного ограничения важно так как SRC-пакет с Chromium близок к пределу и имеет размер 3.7 ГБ). В новой ветке также намерены разрешить использование языка C++ для разработки RPM. Новая значительная ветка будет приурочена юбилею проекта — 27 ноября 2025 году исполнится 30 лет с момента первого коммита в RPM. Версии RPM 5.x будут пропущены для исключения пересечений с проектом RPM5, который непосредственно не связан с RPM от Red Hat, развивался независимой командой разработчиков и не обновляется с 2010 года.
Наиболее заметные улучшения в RPM 4.20:
- В состав включена новая утилита rpm2archive, которая пришла на смену утилите rpm2cpio и в дальнейшем упростит переход на новый формат пакетов, не использующий cpio. В отличие от rpm2cpio новая утилита преобразует RPM-файл не в архив cpio, а в архив в формате tar, сжатый при помощи gzip. Старая утилита rpm2cpio заменена символической ссылкой на rpm2archive.
- Предложена декларативная система сборки, основанная на использовании новой директивы «BuildSystem«, через которую может быть определена система сборки, используемая при формировании пакета. Исходный код автоматически подготавливается, компилируется и устанавливается с учётом указанной системы сборки, без необходимости отдельного определения в SPEC-файле скриптов подготовки, сборки и установки в блоках «%prep», «%build» и «%install». В RPM поддерживаемые системы сборки определяются в форме коллекций макросов.
Основная идея в том, что декларативный формат настройки позволит разработчикам дистрибутивов создавать отдельные макросы для типовых процессов сборки, чтобы не определять повторяющиеся сценарии в каждом пакете. Например, вместо определения последовательностей запуска команд configure и make для программ, использующих Autotools, теперь достаточно указать «BuildSystem: autotools» и обойтись без секций «%prep», «%build» и «%install».
В настоящее время подобные макросы подготовлены для Autotools и CMake. При необходимости реализации нестандартного поведения сопровождающим пакеты предоставлена возможность подключения своих макросов для переопределения разных стадий формирования пакета, включая стадии подготовки, сборки и установки.
- Добавлена поддержка прикрепления дополнительных секций c командами подготовки, сборки, установки, настройки, очистки и проверки, в дополнение к базовым секциям %prep, %conf, %build, %install, %check и %clean. Для запуска скрипта перед выполнением кода из базовой секции предложена опция «-p», а после базовой секции — опция «-a». Подобные подстановки могут оказаться полезными для точечной корректировки поведения при использовании вышеописанного декларативного режима сборки.
- В динамически формируемые части SPEC-файлов разрешено включение директив и секций, не влияющих на процесс сборки.
- Добавлен макрос %builddir и реализована возможность привязки своих сборочных каталогов к отдельным пакетам, управляемая через RPM.
- Предложен новый протокол «multi-file», значительно ускоряющий генерацию зависимостей.
- В команду rpm добавлена опция «—json» для вывода результатов запросов в формате JSON.
- Добавлен плагин rpm-plugin-unshare, обеспечивающий изоляцию скриптов, выполняемых в сборочных секциях, используя пространства имён в Linux. Например, плагин позволяет запретить доступ к сети и ограничить доступ к файловой системе, а также использовать отдельные приватные каталоги /tmp и /home, что блокирует совершение атак при небезопасной работе со временными файлами при сборке пакетов.
- Предложен публичный API для разработки плагинов, который будет сохранять совместимость между релизами. Раньше API для плагинов был рассчитан только на внутреннее использование и мог меняться от релиза к релизу.
- В команду rpmkeys добавлены опции «—list» и «—delete».
- В команду rpmsign добавлена поддержка создания цифровых подписей для пакетов, используя ключи ECDSA.
- Улучшена поддержка повторяемых сборок. Добавлен макрос «%build_mtime_policy», позволяющий управлять содержимом добавляемых при сборке меток со временем (через значение clamp_to_source_date_epoch можно использовать фиксированную метку, а через clamp_to_buildtime указывать фактическое время сборки).
- В файлах sysusers.d разрешено добавлять строки для определения членов группы.
- Обеспечена корректная и независимая от дистрибутивов поддержка файлов debuginfo.
- Объявлен устаревшим синтаксис макросов %patchN (без пробела перед N), использование которого теперь будет приводить к ошибке (следует использовать синтаксис «%patch N» или «%patch -P N», где N — номер патча).
- Удалён устаревший парсер OpenPGP.
- Генераторы зависимостей для Perl и Python ABI вынесены в отдельные репозитории.
Источник: http://www.opennet.ru/opennews/art.shtml?num=62035