SpecTips/triggers

Материал из ALT Linux Wiki

< SpecTips(Различия между версиями)
Перейти к: навигация, поиск
м (Замена <tt> на <code>)
(Ссылки)
 
(8 промежуточных версий не показаны.)
Строка 1: Строка 1:
-
[[Category:Devel]]
+
[[category:RPM spec]]
-
{{MovedFromFreesourceInfo|AltLinux/Sisyphus/devel/SpecTips/triggers}}
+
-
 
+
-
== RPM triggers ==
+
-
 
+
-
Начинающий майнтейнер (судя по себе) вполне способен сделать достаточно нетривиальные в идентификации и особенно исправлении ляпы.  Одним из наиболее характерных примеров является удаление псевдопользователя, созданного в секции <code>%pre</code> пакета для обеспечения разделения привилегий при работе кода...
+
-
 
+
-
Для того, чтобы понять происходящее, заглянем в /usr/share/doc/rpm-4.0.4/manual/triggers:
+
=== Порядок выполнения скриптов ===
=== Порядок выполнения скриптов ===
-
Для справки: порядок, в котором выполняются скрипты при обновлении одного пакета:
+
Для справки: порядок, в котором выполняются скрипты при обновлении одного пакета (<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>
=== Примеры ===
=== Примеры ===
-
Наиболее типичная проблема, которая может потребовать этого знания, описана [[TypicalPackagingErrors/UserDel|тут]].
+
Наиболее типичная проблема, которая может потребовать этого знания, описана в [[PseudoUserPolicy]].
-
 
+
-
Вторая -- переименование сервиса; примером предложен пакет [http://sisyphus.ru/srpm/etcnet/spec etcnet]:
+
-
<pre>Ну там посмотри на тот же etcnet, в котором тоже менялось имя сервиса:
+
 +
Вторая — переименование сервиса; примером предложен пакет [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
-
''(raorn@)''
+
</pre>
-
=== Ссылки ===
+
=== Определение типа операции с пакетом ===
-
* [http://www-128.ibm.com/developerworks/library/l-rpm3.html Packaging software with RPM, Part 3]
+
 +
'''1) пакет ставится в систему в первый раз'''
-
=== Определение типа операции с пакетом === &gt; Подскажите, как можно отличить ситуации:
+
<code>[ $1 -eq 1 ]</code> в <code>%post</code> и <code>%pre</code>
-
Параметры для post скриптов.
+
-
* @param arg1          no. instances of package installed after scriptlet exec
+
'''2) пакет обновляется (удаляется старый и ставится одновременно новый)'''
-
*                      (-1 is no arg)
+
-
* @param arg2          ditto, but for the target package
+
-
'''1) пакет ставится в систему в первый раз'''
+
<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 ] в %post и %pre
+
-
 
+
-
'''2) пакет обновляется (удаляется старый и ставится одновременно новый)'''
+
-
[ $1 -eq 2 ] в %post и %pre, [ $1 -eq 1 ] в %preun и %postun
+
'''3) пакет вообще удаляется из системы'''
'''3) пакет вообще удаляется из системы'''
-
[ $1 -eq 0 ] в %preun and %postun
 
-
Более подробно см. [http://www.rpm.org/max-rpm/s1-rpm-inside-scripts.html http://www.rpm.org/max-rpm/s1-rpm-inside-scripts.html]
+
<code>[ $1 -eq 0 ]</code> в <code>%preun</code> and <code>%postun</code>
-
''Epiphanov Sergei, Sir Raorn, Vladimir Kamarzin''
+
'''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

Текущая версия на 11: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.

Ссылки

 
Личные инструменты