RPMFileTrigger
Материал из ALT Linux Wiki
м (+refs) |
м (+категория) |
||
Строка 47: | Строка 47: | ||
== Примечания == | == Примечания == | ||
<references/> | <references/> | ||
- | [[Категория:RPM]][[Категория:devel]] | + | [[Категория:RPM]] |
+ | [[Категория:RPM spec]] | ||
+ | [[Категория:devel]] |
Версия 14:00, 9 апреля 2014
Пакетный менеджер RPM в свежих[1] дистрибутивах ALT Linux собран с поддержкой запуска файл-триггеров.
Основная идея файл-триггера — выполнять единообразное действие, связанное с установкой/удалением пакетов, один раз по окончании транзакции вместо того, чтобы делать это в разноообразных секциях %post / %postun после установки/удаления каждого пакета транзакции.
Файлы /usr/lib/rpm/*.filetrigger обрабатываются скриптом /usr/lib/rpm/posttrans-filetriggers последовательно, в алфавитном порядке.
Файл-триггер выполняется после установки и/или удаления всех пакетов транзакции и получает на вход (STDIN) список файлов всех затронутых пакетов транзакции.
Авторам файл-триггеров обычно требуется выполнить определённую команду, фиксирующую изменения в системе, независимо от того, был пакет удалён или установлен. Например, см. /usr/lib/rpm/menu.filetrigger
#!/bin/sh # # RPM filetrigger for system menus. # # Copyright (C) 2008 Alexey Tourbin <at@altlinux.org> # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. if egrep -qs '^/etc/menu-methods/|^/usr/(lib|lib64|share)/menu/'; then /usr/sbin/update-menus fi
Однако наличие файла в системе[2] свидетельствует о том, что его пакет-обладатель был установлен, а отсутствие — что удалён. Эту информацию также можно использовать. Например, см. /usr/lib/rpm/gtk-icon-cache.filetrigger
#!/bin/sh -e egrep -o '^/usr/share/icons/[^/]+/' |sort -u | while read -r dir; do dir=${dir%/} if [ -f "$dir"/index.theme ]; then ### установлен или удалён index.theme ? gtk-update-icon-cache --force --quiet "$dir" elif [ -f "$dir"/icon-theme.cache ]; then rm -f "$dir"/icon-theme.cache rmdir --ignore-fail-on-non-empty "$dir" fi done