Триггер - это скрипт, который запускается в момент установки или удаления пакета. Триггеры позволяют пакету, который зависит от других пакетов, правильно настроить его окружение в зависимости от того, какие версии этих пакетов установлены и обновлялись ли они.
Триггеры, определенные в пакете, можно вывести с помощью опции --triggers. Например:
| 
 $ rpm -q --triggers sendmail 
  
triggerpostun script (through /bin/sh) -- sendmail < 8.10.0 
  
/sbin/chkconfig --add sendmail  
  
 | 
Из примера видно, что в пакете sendmail определен короткий скрипт-триггер.
С этим случаем контрастирует пакет anonftp, имеющий сказочно сложный набор триггеров, как показано ниже:
| 
 $ rpm -q --triggers anonftp 
  
triggerin script (through /bin/sh) -- glibc 
  
copy() { file="`ls --sort=time $1 |head -n 1`"; ln -f "$file" "$2" 2>/dev/null | 
| cp -df "$file" "$2"; } 
  
# Kill off old versions 
  
rm -f /var/ftp/lib/ld-* /var/ftp/lib/libc* /var/ftp/lib/libnsl* /var/ftp/lib/lib 
nss_files* &>/dev/null || : 
  
# Copy parts of glibc, needed by various programs in bin. 
  
LIBCVER=`basename $(ls --sort=time /lib/libc-*.so |head -n 1) .so |cut -f2- -d-` 
  
copy /lib/ld-${LIBCVER}.so /var/ftp/lib 
  
copy /lib/libc-${LIBCVER}.so /var/ftp/lib 
  
copy /lib/libnsl-${LIBCVER}.so /var/ftp/lib 
  
copy /lib/libnss_files-${LIBCVER}.so /var/ftp/lib 
  
md5sum /var/ftp/lib/lib*-*.so /var/ftp/lib/libtermcap.so.*.*.* 2>/dev/null 
>/var/ftp/lib/libs.md5 
  
chmod 0400 /var/ftp/lib/libs.md5 
  
# Use ldconfig to build symlinks and whatnot. 
  
[ ! -e /var/ftp/etc/ld.so.conf ] && touch /var/ftp/etc/ld.so.conf 
  
/sbin/ldconfig -r /var/ftp 
  
triggerin script (through /bin/sh) -- fileutils 
  
copy() { file="`ls --sort=time $1 |head -n 1`"; ln -f "$file" "$2" 2>/dev/null | 
| cp -df "$file" "$2"; } 
  
copy /bin/ls /var/ftp/bin 
  
md5sum `ls /var/ftp/bin/* |grep -v bin.md5` >/var/ftp/bin/bin.md5 
  
chmod 0400 /var/ftp/bin/bin.md5 
  
triggerin script (through /bin/sh) -- cpio 
  
copy() { file="`ls --sort=time $1 |head -n 1`"; ln -f "$file" "$2" 2>/dev/null | 
| cp -df "$file" "$2"; } 
  
copy /bin/cpio /var/ftp/bin 
  
md5sum `ls /var/ftp/bin/* |grep -v bin.md5` >/var/ftp/bin/bin.md5 
  
chmod 0400 /var/ftp/bin/bin.md5 
  
triggerin script (through /bin/sh) -- tar 
  
copy() { file="`ls --sort=time $1 |head -n 1`"; ln -f "$file" "$2" 2>/dev/null | 
| cp -df "$file" "$2"; } 
  
copy /bin/tar /var/ftp/bin 
  
md5sum `ls /var/ftp/bin/* |grep -v bin.md5` >/var/ftp/bin/bin.md5 
  
chmod 0400 /var/ftp/bin/bin.md5 
  
triggerin script (through /bin/sh) -- gzip 
  
copy() { file="`ls --sort=time $1 |head -n 1`"; ln -f "$file" "$2" 2>/dev/null | 
| cp -df "$file" "$2"; } 
  
copy /bin/gzip /var/ftp/bin 
  
ln -sf gzip /var/ftp/bin/zcat 
  
md5sum `ls /var/ftp/bin/* |grep -v bin.md5` >/var/ftp/bin/bin.md5 
  
chmod 0400 /var/ftp/bin/bin.md5 
  
triggerin script (through /bin/sh) -- libtermcap 
  
copy() { file="`ls --sort=time $1 |head -n 1`"; ln -f "$file" "$2" 2>/dev/null | 
| cp -df "$file" "$2"; } 
  
rm -f /var/ftp/lib/libtermcap.so.*.*.* &>/dev/null || : 
  
copy '/lib/libtermcap.so.*.*.*' /var/ftp/lib 
  
md5sum /var/ftp/lib/lib*-*.so /var/ftp/lib/libtermcap.so.*.*.* 2>/dev/null 
>/var/ftp/lib/libs.md5 
  
chmod 0400 /var/ftp/lib/libs.md5 
  
# Use ldconfig to build symlinks and whatnot. 
  
[ ! -e /var/ftp/etc/ld.so.conf ] && touch /var/ftp/etc/ld.so.conf 
  
/sbin/ldconfig -r /var/ftp 
  
triggerin script (through /bin/sh) -- ncompress 
  
copy() { file="`ls --sort=time $1 |head -n 1`"; ln -f "$file" "$2" 2>/dev/null | 
| cp -df "$file" "$2"; } 
  
copy /usr/bin/compress /var/ftp/bin 
  
md5sum `ls /var/ftp/bin/* |grep -v bin.md5` >/var/ftp/bin/bin.md5 
  
chmod 0400 /var/ftp/bin/bin.md5 
  
triggerpostun script (through /bin/sh) -- anonftp 4.0 
  
if [ "$2" != 1 ] ; then 
  
# The user has multiple glibc packages installed. We can't read the 
  
# user's mind, so don't do anything. 
  
exit 0 
  
fi 
  
copy() { file="`ls --sort=time $1 |head -n 1`"; ln -f "$file" "$2" 2>/dev/null | 
| cp -df "$file" "$2"; } 
  
# Kill off old versions 
  
rm -f /var/ftp/lib/ld-* /var/ftp/lib/libc* /var/ftp/lib/libnsl* /var/ftp/lib/lib 
nss_files* &>/dev/null || : 
  
# Copy parts of glibc, needed by various programs in bin. 
  
LIBCVER=`basename /lib/libc-*.so .so | cut -f2- -d-` 
  
copy /lib/ld-${LIBCVER}.so /var/ftp/lib 
  
copy /lib/libc-${LIBCVER}.so /var/ftp/lib 
  
copy /lib/libnsl-${LIBCVER}.so /var/ftp/lib 
  
copy /lib/libnss_files-${LIBCVER}.so /var/ftp/lib 
  
copy /bin/ls /var/ftp/bin 
  
copy /bin/cpio /var/ftp/bin 
  
copy /bin/tar /var/ftp/bin 
  
copy /bin/gzip /var/ftp/bin 
  
ln -sf gzip /var/ftp/bin/zcat 
  
copy /usr/bin/compress /var/ftp/bin 
  
rm -f /var/ftp/lib/libtermcap.so.*.*.* &>/dev/null || : 
  
copy '/lib/libtermcap.so.*.*.*' /var/ftp/lib 
  
# Use ldconfig to build symlinks and whatnot. 
  
[ ! -e /var/ftp/etc/ld.so.conf ] && touch /var/ftp/etc/ld.so.conf 
  
/sbin/ldconfig -r /var/ftp 
  
# Generate md5sums for verifyscript 
  
md5sum /var/ftp/lib/lib*-*.so /var/ftp/lib/libtermcap.so.*.*.* 2>/dev/null 
>/var/ftp/lib/libs.md5 
  
chmod 0400 /var/ftp/lib/libs.md5 
  
md5sum `ls /var/ftp/bin/* |grep -v bin.md5` >/var/ftp/bin/bin.md5 
  
chmod 0400 /var/ftp/bin/bin.md5  
  
 | 
Анализ текста триггера показывает, что данный пакет и его окружение зависит от версии библиотеки glibc. Этот факт можно подтвердить с помощью опции --triggeredby, как показано ниже:
| 
 $ rpm -q --triggeredby glibc 
  
anonftp-4.0-9  
  
 | 
Пакет anonftp нуждается в уведомлениях об изменении пакета glibc. Если в glibc произошли изменения и администратор установил новую версию пакета, anonftp должен перестроить свое окружение правильным образом, поэтому при обновлении glibc будут вновь запущены триггеры пакета.
Таким образом, триггеры можно рассматривать как расширенную форму увязки зависимостей одних пакетов от других. В примере выше показано, что пакет anonftp столь сильно привязан к реализации glibc, что нуждается в перенастройке при каждом изменении пакета, от которого он зависит.
 Далее - Раздел 6. Транзакции 
 Назад - Какой пакет предоставляет данную возможность? 
 Содержание