RPMFileTrigger: различия между версиями
Ilis (обсуждение | вклад) Нет описания правки |
м (thx ldv@ in devel@) |
||
Строка 5: | Строка 5: | ||
вместо того, чтобы делать это в '''разноообразных''' секциях {{term|%post}} / {{term|%postun}} после | вместо того, чтобы делать это в '''разноообразных''' секциях {{term|%post}} / {{term|%postun}} после | ||
установки/удаления '''каждого''' пакета транзакции. | установки/удаления '''каждого''' пакета транзакции. | ||
Файлы {{path|/usr/lib/rpm/*.filetrigger}} обрабатываются скриптом | |||
{{path|/usr/lib/rpm/posttrans-filetriggers}} последовательно, | |||
в алфавитном порядке. | |||
''Файл-триггер выполняется после установки и/или удаления всех пакетов транзакции и получает на вход ({{term|STDIN}}) список файлов всех затронутых пакетов транзакции.'' | ''Файл-триггер выполняется после установки и/или удаления всех пакетов транзакции и получает на вход ({{term|STDIN}}) список файлов всех затронутых пакетов транзакции.'' | ||
Строка 26: | Строка 30: | ||
fi</source> | fi</source> | ||
Однако | Однако наличие файла в системе ({{cmd|[ -f "$file" ]}}) свидетельствует о том, что его пакет-обладатель был установлен, | ||
а отсутствие — что удалён. Эту информацию | а отсутствие — что удалён. Эту информацию также можно использовать. Например, см. {{path|/usr/lib/rpm/gtk-icon-cache.filetrigger}} | ||
<source lang="bash">#!/bin/sh -e | <source lang="bash">#!/bin/sh -e | ||
Версия от 16:35, 12 мая 2011
Пакетный менеджер RPM в свежих дистрибутивах 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
Однако наличие файла в системе ([ -f "$file" ]) свидетельствует о том, что его пакет-обладатель был установлен, а отсутствие — что удалён. Эту информацию также можно использовать. Например, см. /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