3.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 == 0 | $1 == 0 | (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 == 0 | $1 == 0 | (N/A) |
Таким образом, анализируя аргумент внутри скриптлета, можно точно идентифицировать действие, которое выполняется в системе, а также определить, имеются ли в системе пакеты с таким же именем, что бывает необходимо знать при обновлении с целью сохранения имеющихся настроек, а не их перезаписью.
Дата последнего изменения: 19.09.2024
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.