On Mon, Sep 15, 2008 at 02:05:27PM +0400, Dmitry V. Levin wrote: > > /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 > > Могут возникнуть (раньше были) дополнительные каталоги, > возможно стоит запустить /usr/lib/rpm/dump_ld_config. dump_ld_config не документирован, а из исходников не совсем очевидно, какой у него synopsis и что он должен выводить. В любом случае, идея понятна: лучше исходить не из фиксированного набора каталогов, которые перечисляются в шаблонах, а из списка каталогов в общем виде. while read -r f; do case "$f" in /etc/ld.so.conf.d/*.conf) exec /sbin/ldconfig ;; esac case "${f##*/} in lib*.so*) ;; *) continue ;; esac found= for dir in $dirs; do case "$f" in # XXX /usr/lib64/sse2 "$dir"/*/*) continue ;; "$dir"/*) found=1; break ;; *) continue ;; esac done [ -n "$found" ] || continue case "${f##*/} in lib*.so) if set "$f".* && [ -f "$1" ]; then continue fi ;; esac exec /sbin/ldconfig done