Файловые триггеры RPM — различия между версиями

Материал из Rosalab Wiki
Перейти к: навигация, поиск
(General info about file triggers)
 
Строка 25: Строка 25:
 
ldconfig -X
 
ldconfig -X
 
</pre>
 
</pre>
 +
 +
[[Категория:Packaging Guidelines]]

Версия 00:39, 23 октября 2012

Файловые триггеры позволяют запускать произвольные скрипты при добавлении или удалении определенных файлов в систему. Каждый триггер 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