On Fri, Sep 12, 2008 at 12:53:29AM +0400, Dmitry V. Levin wrote: > > > Кстати, вот как это сделано в Мандриве (glibc-2.8-1.20080520.5mnb2.src.rpm), > > > glibc.spec: > > > 1015 # automatic ldconfig cache update on rpm installs/removals > > > 1016 # (see http://wiki.mandriva.com/en/Rpm_filetriggers) > > > 1017 install -d %buildroot%{_var}/lib/rpm/filetriggers > > > 1018 cat > %buildroot%{_var}/lib/rpm/filetriggers/ldconfig.filter << EOF > > > 1019 ^.((/lib|/usr/lib)(64)?/[^/]*\.so\.|/etc/ld.so.conf.d/[^/]*\.conf) > > > 1020 EOF > > > 1021 cat > %buildroot%{_var}/lib/rpm/filetriggers/ldconfig.script << EOF > > > 1022 #!/bin/sh > > > 1023 ldconfig -X > > > 1024 EOF > > > 1025 chmod 755 %buildroot%{_var}/lib/rpm/filetriggers/ldconfig.script > > > > Кстати, при подобном раскладе (если содержать триггер в glibc-core), > > у пакета glibc-core появится зависимость на sh (а у sh уже есть > > зависимость на glibc-core). Впрочем, триггер можно написать на Си... > > В glibc-core уже есть несколько таких скриптов на C. > А вот если там появится зависимость на @RPMCONFIGDIR@, то будет не очень > здорово. Вот как я себе представляю более аккуратную реализацию. /usr/lib/rpm/0ldconfig.filetrigger 1 #!/bin/sh 2 3 IFS= 4 while read -r f; do 5 case "$f" in 6 /lib/lib*/*.so* |\ 7 /lib64/lib*/*.so* |\ 8 /usr/lib/lib*/*.so* |\ 9 /usr/lib64/lib*/*.so* ) 10 # false positives 11 continue ;; 12 /lib/lib*.so |\ 13 /lib64/lib*.so |\ 14 /usr/lib/lib*.so |\ 15 /usr/lib64/lib*.so ) 16 # maybe soname 17 if set $f.* && [ -f "$1" ]; then 18 continue 19 fi 20 ;; 21 /lib/lib*.so.* |\ 22 /lib64/lib*.so.* |\ 23 /usr/lib/lib*.so.* |\ 24 /usr/lib64/lib*.so.* ) 25 # soname 26 ;; 27 /etc/ld.so.conf.d/*.conf) 28 ;; 29 *) continue ;; 30 esac 31 exec /sbin/ldconfig 32 done Такой триггер должен кооркетно обрабатывать установку и удаление *-devel пакетов с симлинками (для них запускать ldconfig не надо). В принципе можно запаковать такой триггер не в glibc-core, а в rpm.