odmin@opslog: ~/blog
← cd ..
odmin@opslog:~/blog$ cat rpm-6-1-0.md

Выпущен RPM 6.1.0

Выпущен RPM 6.1.0

RPM 6.1.0 — стабильное обновление, в котором появились новые возможности и исправлены ошибки.

Изменения по сравнению с версией 6.0.2

Краткий обзор

  • Улучшен механизм блокировки хранилища ключей.
  • По умолчанию восстановлен поиск пользователей и групп через NSS.
  • Добавлена поддержка литеральных и одноразовых макросов с помощью нового синтаксиса модификаторов.
  • Для %define появились параметры раскрытия во время определения и размещения в глобальном контексте.
  • Улучшена и исправлена обработка ошибок при сборке и проверке пакетов.
  • Улучшена работа rpm-plugin-syslog(8) с журналом systemd.
  • Исправлены ошибки и предупреждения при компиляции с помощью Clang.
  • Введена новая модель выпусков, вдохновлённая моделью ядра Linux.
  • Добавлены новые страницы руководства.

Транзакции

  • Хранилище ключей теперь использует отдельную блокировку вместо блокировки транзакции. Это исправляет регрессию, появившуюся в версии 6.0.0, из-за которой во время транзакций блокировались все запросы к rpmdb. (#4110)
  • Поиск пользователей и групп по умолчанию снова выполняется через Name Service Switch (NSS). Ранее эта возможность была преждевременно отключена в версии 4.19.0. Поиск по-прежнему можно отключить вручную, определив макросы %_passwd_path и %_group_path — в стандартной конфигурации оба теперь не определены. При операциях с параметром --root поиск через NSS всегда отключён. (#3994, #882)
  • Помимо пакетов, пользователи и группы теперь также могут предоставляться средой выполнения системы через NSS. (#4057)
  • В Linux 5.11 и новее с glibc 2.34 и новее файловые дескрипторы теперь закрываются эффективнее. При определённых условиях это может сократить время установки примерно на 26%. (#4149)

Обработчик макросов

  • Поведение макроса теперь можно изменить с помощью модификаторов, указанных при его определении. Новый синтаксис представляет собой список аргументов в угловых скобках (< и >), следующих за именем макроса. Сейчас поддерживаются два модификатора: литеральное (l) и одноразовое (o) раскрытие. Подробности приведены в rpm-macros(7). (#4145, #1155)
  • %define теперь принимает параметры -e и -g: первый раскрывает тело макроса во время определения, второй помещает макрос в глобальный контекст. Их одновременное использование эквивалентно %global. (#4163)
  • Исправлены rpm --undefine и Lua-функция rpm.undefine(): теперь они не обходят проверки корректности. (#4133)

Сборка пакетов

  • Окружение сценария сборки теперь экспортируется в файл rpmbuild.env в каталоге %{builddir}. Этот файл можно подключить в командной оболочке, благодаря чему другим программам проще воспроизводить окружение сценария сборки и работать с ним. (#3147)
  • Утилита rpmuncompress(1) теперь учитывает параметры rpm-common(8) и поддерживает файлы CAR.
  • rpmuncompress(1) и rpm-setup-autosign(1) перенесены в стандартный $PATH, чтобы их было удобнее использовать как самостоятельные инструменты. Для обратной совместимости символические ссылки на обе утилиты устанавливаются в /usr/lib/rpm.
  • Если в пакет пытаются включить исполняемые файлы, не соответствующие его архитектуре, например в пакет noarch, сообщение об ошибке теперь содержит фактическое имя основного или подпакета и список вызвавших ошибку файлов с указанием их типов. Это упрощает диагностику. (#3600)
  • rpmbuild(1) теперь распознаёт аргумент этапа сборки k, запускающий скриптлет %check. Это особенно полезно вместе с параметром --short-circuit. (#3015)

Подпись и проверка пакетов

  • rpmsign(1) теперь умеет подписывать файлы с помощью токенов PKCS #11. (#4124)
  • Исправлен избыточный, вводящий в заблуждение или неверный вывод в различных сценариях проверки. (#3303, #4036)

Плагины

  • rpm-plugin-syslog(8) больше не выводит неверные названия операций и повторяющиеся сообщения. Кроме того, строка идентификатора изменена с [RPM] на rpm, чтобы записи было проще искать с помощью grep. Теперь историю транзакций удобно просматривать командой journalctl -t rpm. (#4172, #1254)

Руководства

Добавлено несколько новых страниц руководства. Часть из них написана с нуля, остальные основаны на старом и зачастую устаревшем справочном руководстве (#3612):

  • elfdeps(1)
  • rpm-dependency-generators(7)
  • rpm-design(7)
  • rpm-scriptlets(7)
  • rpm-sysusers(7)

Кроме того:

  • В страницу rpmbuild(1) добавлен раздел с более подробным описанием процесса сборки.
  • Страница rpmkeys(8) теперь также описывает общую политику проверки.

API

  • Lua-скриптлеты теперь учитывают вызов функции rpmtsSetScriptFd(), что позволяет перенаправлять их стандартный вывод и поток ошибок в файловый дескриптор. (#3328)
  • Обработчики плагинов psm_pre и psm_post теперь выполняются только для основных операций с пакетами: установки, удаления и восстановления. (#1254)
  • Добавлена функция rpmKeyringVerifySig3(), которая также возвращает предупреждения анализатора. (#4069)
  • Добавлена Python-привязка rpm.ds.Ti() для получения текущего индекса триггера.
  • Расширения тегов теперь можно использовать при сопоставлении с шаблонами в rpmdb. (#4077)
  • Возвращаемое значение rpmtxnImportPubkey() теперь учитывает код ошибки из pgpPubKeyLint(). (#4096)
  • Теперь проверяется корректность строки режима, переданной в Fdopen(). (#3058)
  • В Python-привязках исправлены различные ошибки rpm.ds. (#3943)

Сборка RPM

  • Исправлены все ошибки и предупреждения Clang. Теперь проект собирается без предупреждений с помощью набора инструментов Clang. (#4105)
  • Добавлено несколько полезных предустановок конфигурации CMake. (#4118)

Источник: заметки о выпуске RPM 6.1.0