SpecTips/triggers: различия между версиями
м (Замена <tt> на <code>) |
м (Правка форматирования) |
||
Строка 6: | Строка 6: | ||
Начинающий майнтейнер (судя по себе) вполне способен сделать достаточно нетривиальные в идентификации и особенно исправлении ляпы. Одним из наиболее характерных примеров является удаление псевдопользователя, созданного в секции <code>%pre</code> пакета для обеспечения разделения привилегий при работе кода... | Начинающий майнтейнер (судя по себе) вполне способен сделать достаточно нетривиальные в идентификации и особенно исправлении ляпы. Одним из наиболее характерных примеров является удаление псевдопользователя, созданного в секции <code>%pre</code> пакета для обеспечения разделения привилегий при работе кода... | ||
Для того, чтобы понять происходящее, заглянем в /usr/share/doc/rpm-4.0.4/manual/triggers: | Для того, чтобы понять происходящее, заглянем в <code>/usr/share/doc/rpm-4.0.4/manual/triggers</code>: | ||
=== Порядок выполнения скриптов === | === Порядок выполнения скриптов === | ||
Строка 46: | Строка 46: | ||
=== Определение типа операции с пакетом === > Подскажите, как можно отличить ситуации: | === Определение типа операции с пакетом === | ||
Параметры для post скриптов. | > Подскажите, как можно отличить ситуации: | ||
Параметры для post скриптов. | |||
* @param arg1 no. instances of package installed after scriptlet exec | * @param arg1 no. instances of package installed after scriptlet exec | ||
* (-1 is no arg) | * (-1 is no arg) | ||
Строка 54: | Строка 55: | ||
'''1) пакет ставится в систему в первый раз''' | '''1) пакет ставится в систему в первый раз''' | ||
[ $1 -eq 1 ] в %post и %pre | |||
<code>[ $1 -eq 1 ]</code> в <code>%post</code> и <code>%pre</code> | |||
'''2) пакет обновляется (удаляется старый и ставится одновременно новый)''' | '''2) пакет обновляется (удаляется старый и ставится одновременно новый)''' | ||
[ $1 -eq 2 ] в %post и %pre, [ $1 -eq 1 ] в %preun и %postun | |||
<code>[ $1 -eq 2 ]</code> в <code>%post</code> и <code>%pre</code>, <code>[ $1 -eq 1 ]</code> в <code>%preun</code> и <code>%postun</code> | |||
'''3) пакет вообще удаляется из системы''' | '''3) пакет вообще удаляется из системы''' | ||
[ $1 -eq 0 ] в %preun and %postun | |||
<code>[ $1 -eq 0 ]</code> в <code>%preun</code> and <code>%postun</code> | |||
Более подробно см. [http://www.rpm.org/max-rpm/s1-rpm-inside-scripts.html http://www.rpm.org/max-rpm/s1-rpm-inside-scripts.html] | Более подробно см. [http://www.rpm.org/max-rpm/s1-rpm-inside-scripts.html http://www.rpm.org/max-rpm/s1-rpm-inside-scripts.html] | ||
''Epiphanov Sergei, Sir Raorn, Vladimir Kamarzin'' | ''Epiphanov Sergei, Sir Raorn, Vladimir Kamarzin'' |
Версия от 21:52, 9 октября 2008
RPM triggers
Начинающий майнтейнер (судя по себе) вполне способен сделать достаточно нетривиальные в идентификации и особенно исправлении ляпы. Одним из наиболее характерных примеров является удаление псевдопользователя, созданного в секции %pre
пакета для обеспечения разделения привилегий при работе кода...
Для того, чтобы понять происходящее, заглянем в /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 из других пакетов, сработавшие на удаление старой версии)
Примеры
Наиболее типичная проблема, которая может потребовать этого знания, описана тут.
Вторая -- переименование сервиса; примером предложен пакет etcnet:
Ну там посмотри на тот же 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
(raorn@)
Ссылки
Определение типа операции с пакетом
> Подскажите, как можно отличить ситуации: Параметры для post скриптов. * @param arg1 no. instances of package installed after scriptlet exec * (-1 is no arg) * @param arg2 ditto, but for the target package
1) пакет ставится в систему в первый раз
[ $1 -eq 1 ]
в %post
и %pre
2) пакет обновляется (удаляется старый и ставится одновременно новый)
[ $1 -eq 2 ]
в %post
и %pre
, [ $1 -eq 1 ]
в %preun
и %postun
3) пакет вообще удаляется из системы
[ $1 -eq 0 ]
в %preun
and %postun
Более подробно см. http://www.rpm.org/max-rpm/s1-rpm-inside-scripts.html
Epiphanov Sergei, Sir Raorn, Vladimir Kamarzin