Файловые триггеры RPM

Материал из Rosalab Wiki
Версия от 22:38, 29 мая 2013; D uragan (обсуждение | вклад) (added En link)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

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