SpecTips/triggers: различия между версиями
< SpecTips
м (Правка ссылки) |
(→Ссылки) |
||
(не показано 9 промежуточных версий 4 участников) | |||
Строка 1: | Строка 1: | ||
[[ | [[category:RPM spec]] | ||
=== Порядок выполнения скриптов === | === Порядок выполнения скриптов === | ||
Для справки: порядок, в котором выполняются скрипты при обновлении одного пакета: | Для справки: порядок, в котором выполняются скрипты при обновлении одного пакета (<code>/usr/share/doc/rpm-4.0.4/manual/triggers</code>): | ||
<pre>new-%pre для новой версии пакета (которая устанавливается) | <pre> new - %pre для новой версии пакета (которая устанавливается) | ||
... | ... (установка всех новых файлов) | ||
new-%post для новой версии пакета (которая устанавливается) | new - %post для новой версии пакета (которая устанавливается) | ||
any-%triggerin (%triggerin из других пакетов, сработавшие на установку новой версии) | any - %triggerin (%triggerin из других пакетов, сработавшие на установку новой версии) | ||
new-%triggerin | new - %triggerin | ||
old-%triggerun | old - %triggerun | ||
any-%triggerun (%triggerun из других пакетов, сработавшие на удаление старой версии) | any - %triggerun (%triggerun из других пакетов, сработавшие на удаление старой версии) | ||
old-%preun для старой версии пакета, которая удаляется | old - %preun (для старой версии пакета, которая удаляется) | ||
... | ... (удаление всех старых файлов) | ||
old-%postun для старой версии пакета, которая удаляется | old - %postun (для старой версии пакета, которая удаляется) | ||
old-%triggerpostun | old - %triggerpostun | ||
any-%triggerpostun (%triggerpostun из других пакетов, сработавшие на удаление старой версии)</pre> | any - %triggerpostun (%triggerpostun из других пакетов, сработавшие на удаление старой версии)</pre> | ||
=== Примеры === | === Примеры === | ||
Наиболее типичная проблема, которая может потребовать этого знания, описана [[ | Наиболее типичная проблема, которая может потребовать этого знания, описана в [[PseudoUserPolicy]]. | ||
Вторая — переименование сервиса; примером предложен пакет [http://sisyphus.ru/srpm/etcnet/spec etcnet]: | |||
<pre> | |||
$ rpm -q --triggers etcnet | $ rpm -q --triggers etcnet | ||
triggerun script (through /bin/sh) -- etcnet < 0.5.1 | triggerun script (through /bin/sh) -- etcnet < 0.5.1 | ||
Строка 39: | Строка 31: | ||
/sbin/chkconfig --del etcnet | /sbin/chkconfig --del etcnet | ||
/sbin/chkconfig --add network | /sbin/chkconfig --add network | ||
fi</pre> | fi | ||
</pre> | |||
=== | === Определение типа операции с пакетом === | ||
'''1) пакет ставится в систему в первый раз''' | |||
<code>[ $1 -eq 1 ]</code> в <code>%post</code> и <code>%pre</code> | |||
'''2) пакет обновляется (удаляется старый и ставится одновременно новый)''' | |||
<code>[ $1 -eq 2 ]</code> в <code>%post</code> и <code>%pre</code>, <code>[ $1 -eq 1 ]</code> в <code>%preun</code> и <code>%postun</code> | |||
[ $1 -eq 1 ] в % | |||
''' | '''3) пакет вообще удаляется из системы''' | ||
<code>[ $1 -eq 0 ]</code> в <code>%preun</code> and <code>%postun</code> | |||
[ $1 -eq 0 ] в %preun and %postun | |||
'''4) при использовании <tt>%trigger* -- target</tt> в $2 попадает количество остающихся пакетов target. | |||
=== Ссылки === | |||
* [http://www.ibm.com/developerworks/library/l-rpm2/ Packaging software with RPM, Part 2: Upgrading and uninstalling software] | |||
* http://www.rpm.org/max-rpm/s1-rpm-inside-scripts.html |
Текущая версия от 14:52, 1 ноября 2010
Порядок выполнения скриптов
Для справки: порядок, в котором выполняются скрипты при обновлении одного пакета (/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.