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

Материал из ALT Linux Wiki
Перейти к: навигация, поиск
м (Правка форматирования)
(викификация)
Строка 1: Строка 1:
[[Category:Devel]]
+
[[Категория:Devel]]
{{MovedFromFreesourceInfo|AltLinux/Sisyphus/devel/SpecTips/triggers}}
 
 
 
== RPM triggers ==
 
 
 
Начинающий майнтейнер (судя по себе) вполне способен сделать достаточно нетривиальные в идентификации и особенно исправлении ляпы.  Одним из наиболее характерных примеров является удаление псевдопользователя, созданного в секции <code>%pre</code> пакета для обеспечения разделения привилегий при работе кода...
 
 
 
Для того, чтобы понять происходящее, заглянем в <code>/usr/share/doc/rpm-4.0.4/manual/triggers</code>:
 
  
 
=== Порядок выполнения скриптов ===
 
=== Порядок выполнения скриптов ===
  
Для справки: порядок, в котором выполняются скрипты при обновлении одного пакета:
+
Для справки: порядок, в котором выполняются скрипты при обновлении одного пакета (/usr/share/doc/rpm-4.0.4/manual/triggers):
 
<pre>new-%pre для новой версии пакета (которая устанавливается)
 
<pre>new-%pre для новой версии пакета (которая устанавливается)
 
   ... (установка всех новых файлов)
 
   ... (установка всех новых файлов)
Строка 28: Строка 21:
  
 
=== Примеры ===
 
=== Примеры ===
Наиболее типичная проблема, которая может потребовать этого знания, описана [[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]
 
 
 
  
 
=== Определение типа операции с пакетом ===
 
=== Определение типа операции с пакетом ===
&gt; Подскажите, как можно отличить ситуации:
 
Параметры для 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) пакет ставится в систему в первый раз'''
Строка 66: Строка 48:
 
<code>[ $1 -eq 0 ]</code> в <code>%preun</code> and <code>%postun</code>
 
<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-128.ibm.com/developerworks/library/l-rpm3.html Packaging software with RPM, Part 3]
''Epiphanov Sergei, Sir Raorn, Vladimir Kamarzin''
+
* http://www.rpm.org/max-rpm/s1-rpm-inside-scripts.html

Версия 10:02, 11 октября 2008


Порядок выполнения скриптов

Для справки: порядок, в котором выполняются скрипты при обновлении одного пакета (/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

Ссылки