SpecTips/triggers
< SpecTips
Порядок выполнения скриптов
Для справки: порядок, в котором выполняются скрипты при обновлении одного пакета (/usr/share/doc/rpm-4.0.4/manual/triggers):
new - %pre для новой версии пакета (которая устанавливается) ... (установка всех новых файлов) new - %post для новой версии пакета (которая устанавливается) any - %triggerin (%triggerin из других пакетов, сработавшие на установку новой версии) new - %triggerin old - %triggerun any - %triggerun (%triggerun из других пакетов, сработавшие на удаление старой версии) old - %preun (для старой версии пакета, которая удаляется) ... (удаление всех старых файлов) old - %postun (для старой версии пакета, которая удаляется) old - %triggerpostun any - %triggerpostun (%triggerpostun из других пакетов, сработавшие на удаление старой версии)
Примеры
Наиболее типичная проблема, которая может потребовать этого знания, описана в PseudoUserPolicy.
Вторая — переименование сервиса; примером предложен пакет etcnet:
$ rpm -q --triggers etcnet
triggerun script (through /bin/sh) -- etcnet < 0.5.1
if [ $2 -gt 0 ]; then
# This is etcnet upgrade.
/sbin/chkconfig --del etcnet
/sbin/chkconfig --add network
fi
Определение типа операции с пакетом
1) пакет ставится в систему в первый раз
[ $1 -eq 1 ] в %post и %pre
2) пакет обновляется (удаляется старый и ставится одновременно новый)
[ $1 -eq 2 ] в %post и %pre, [ $1 -eq 1 ] в %preun и %postun
3) пакет вообще удаляется из системы
[ $1 -eq 0 ] в %preun and %postun
4) при использовании %trigger* -- target в $2 попадает количество остающихся пакетов target.