SpecTips/triggers: различия между версиями

Материал из ALT Linux Wiki
м (Замена <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:




=== Определение типа операции с пакетом === &gt; Подскажите, как можно отличить ситуации:
=== Определение типа операции с пакетом ===
Параметры для post скриптов.
&gt; Подскажите, как можно отличить ситуации:
 
Параметры для 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

Freesource-logo.png Blue Glass Arrow.svg MediaWiki logo.png
Эта страница была перемещена с freesource.info.
Эта страница наверняка требует чистки и улучшения — смело правьте разметку и ссылки.
Просьба по окончанию убрать этот шаблон со страницы.


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