Выпущен 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