2.11.2.2.4 Скриптлеты
Консультации и оказание технической поддержки по данной статье не предоставляются.
Вы можете подробнее ознакомиться с принципами сборки пакетов для РЕД ОС, просмотрев наши обучающие видео:
-
на RuTube — Курс по принципам сборки пакетов для РЕД ОС;
-
в Яндекс.Дзен — Курс по принципам сборки пакетов для РЕД ОС;
-
в VK Видео — Курс по принципам сборки пакетов для РЕД ОС.
На наших каналах вы также сможете найти много другой полезной информации.
В спецификации RPM существует ряд директив, которые можно использовать для внесения необходимых или желаемых изменений в систему во время установки или удаления пакета. Такие директивы называются скриптлетами.
Некоторыми из основных примеров того, когда это может понадобиться, являются:
-
установка пакетом системной службы, которая предоставляет файл модуля systemd, после чего нужно будет уведомить systemd о появлении нового модуля, возможно и запустить его. Обратная ситуация: при удалении пакета, содержащего модуль systemd, необходимо остановить выполнение сервиса и проинформировать systemd об удалении модуля;
-
установка или удаление библиотек с последующей перестройкой их кеша;
-
установка или удаление элементов графического интерфейса или схем GLib, после чего необходимо перестраивать кеши или перекомпилировать схемы;
-
создание или удаление системных пользователей и/или групп при установке или удалении пакетов.
Количество стандартных (встроенных) скриптлетов весьма невелико, все они похожи на блоки тела спецификации, такие как %build или %install, в том, что определяются многострочными сегментами кода, представляющим собой стандартный сценарий оболочки (но могут быть использованы и некоторые скриптовые языки, например, Lua).
В своём роде, скриптлеты являют собой дополнительные блоки в теле спецификации, предоставляющие расширенные возможности при работе уже с двоичными пакетами.
Далее приведены встроенные скриптлеты сборочной системы в РЕД ОС.
Скриптлеты поддерживают специальный флаг -p, который позволяет напрямую вызывать одну указанную программу, а не создавать сеанс оболочки для вызова программ (например, %post -p /sbin/ldconfig):
-
%pretrans - выполняется до начала любых операций по установке пакета;
-
%pre - выполняется непосредственно перед установкой файлов из пакета;
- %post - выполняется сразу после завершения установки файлов из пакета;
-
%preun - выполняется непосредственно перед удалением пакета;
-
%postun - выполняется после завершения удаления файлов пакета;
- %posttrans - выполняется после установки или обновления пакета.
При вызове скриптлетов им всегда передаётся аргумент, доступ к которому осуществляется через переменную $1 (для сценариев оболочки).
|
Скриптлет |
Установка (install) |
Обновление (upgrade) |
Удаление (uninstall) |
|---|---|---|---|
|
%pretrans |
$1 == 1 |
$1 == 2 |
(N/A) |
|
%pre |
$1 == 1 |
$1 == 2 |
(N/A) |
|
%post |
$1 == 1 |
$1 == 2 |
(N/A) |
|
%preun |
(N/A) |
$1 == 1 |
$1 == 0 |
|
%postun |
(N/A) |
$1 == 1 |
$1 == 0 |
|
%posttrans |
$1 == 1 |
$1 == 2 |
(N/A) |
Таким образом, анализируя аргумент внутри скриптлета, можно точно идентифицировать действие, которое выполняется в системе, а также определить, имеются ли в системе пакеты с таким же именем, что бывает необходимо знать при обновлении с целью сохранения имеющихся настроек, а не их перезаписью.
Дата последнего изменения: 18.12.2025
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.