Файловые триггеры RPM — различия между версиями
PastorDi (обсуждение | вклад) |
D uragan (обсуждение | вклад) (added En link) |
||
Строка 27: | Строка 27: | ||
[[Категория:Packaging Guidelines]] | [[Категория:Packaging Guidelines]] | ||
+ | |||
+ | [[En:Rpm_filetriggers]] |
Текущая версия на 22:38, 29 мая 2013
Файловые триггеры позволяют запускать произвольные скрипты при добавлении или удалении определенных файлов в систему. Каждый триггер foo состоит из двух файлов:
- foo.filter, содержащий регулярное выражение; триггер активируется при совпадении имени устанавливаемого/удаляемого файла с этим выражением
- foo.script, содержащий непосредственно скрипт, который будет запущен на каждом файле, удовлетворяющем регулярному выражению из foo.filter
Эти файлы устанавливаются в директорию /var/lib/rpm/filetriggers (в spec-файле настоятельно рекомендуется использовать макрос %_filetriggers_dir).
Типичные примеры использования файловых триггеров:
- обновление /etc/ld.so.cache при добавлении новых библиотек в /usr/lib или /lib
- обновление кэша иконок при добавлении файлов в /usr/share/icons
Использование
Если вы хотите, что бы ваш пакет добавил в систему файловый триггер, вы должны установить соответствующие файлы filter и script в директорию %_filetriggers_dir.
Файл filter должен содержать обычное регулярное выражение, с которым будут сравниваться имена файлов. Чтобы различать добавление и удаление файлов, перед именем файла ставится дополнительный символ - '+' соответствует добавлению файла, '-' - удалению. Например, триггер с регулярным выражением \+/etc/gconf/schemas/[^/]*\.schemas$ сработает при добавлении файлов с расширением '.schema' в поддиректории /etc/gconf/schemas/. Если вы хотите обрабатывать как добавление, так и удаление файлов, можете использовать в начале регулярного выражения точку ('.'), которая соответствует любому символу.
Стандартный пример - это триггер, запускающий ldconfig при добавлении новых библиотек в директории /lib, /lib64, /usr/lib или /usr/lib64:
$ cat /var/lib/rpm/filetriggers/ldconfig.filter ^.((/lib|/usr/lib)(64)?/[^/]*\.so\.|/etc/ld.so.conf.d/[^/]*\.conf) $ cat /var/lib/rpm/filetriggers/ldconfig.script #!/bin/sh ldconfig -X