On Sun, Oct 05, 2008 at 07:20:00PM +0400, Alexey Tourbin wrote: > @@ -56,4 +58,19 @@ > postfix-2.4.9-alt1 Requires(post) /bin/sh > +postfix-2.4.9-alt1 Requires(post) /etc/chroot.d > +postfix-2.4.9-alt1 Requires(post) /etc/chroot.d(Fatal) > +postfix-2.4.9-alt1 Requires(post) /etc/chroot.d(copy_resolv_conf) > +postfix-2.4.9-alt1 Requires(post) /etc/chroot.d(copy_resolv_lib) > +postfix-2.4.9-alt1 Requires(post) /etc/chroot.d/functions > +postfix-2.4.9-alt1 Requires(post) /etc/rc.d/init.d(SourceIfNotEmpty) > +postfix-2.4.9-alt1 Requires(post) /etc/rc.d/init.d(action) > +postfix-2.4.9-alt1 Requires(post) /etc/rc.d/init.d(failure) > +postfix-2.4.9-alt1 Requires(post) /etc/rc.d/init.d(is_yes) > +postfix-2.4.9-alt1 Requires(post) /etc/rc.d/init.d(msg_usage) > +postfix-2.4.9-alt1 Requires(post) /etc/rc.d/init.d(status) > +postfix-2.4.9-alt1 Requires(post) /etc/rc.d/init.d(success) > +postfix-2.4.9-alt1 Requires(post) /etc/rc.d/init.d/functions > +postfix-2.4.9-alt1 Requires(post) /lib64/ld-linux-x86-64.so.2 > postfix-2.4.9-alt1 Requires(post) /sbin/chkconfig > postfix-2.4.9-alt1 Requires(post) /sbin/ldconfig > +postfix-2.4.9-alt1 Requires(post) /usr/bin/newaliases > postfix-2.4.9-alt1 Requires(post) /usr/sbin/control > @@ -61,2 +78,18 @@ > postfix-2.4.9-alt1 Requires(post) coreutils > +postfix-2.4.9-alt1 Requires(post) ed > +postfix-2.4.9-alt1 Requires(post) findutils > +postfix-2.4.9-alt1 Requires(post) glibc-utils > +postfix-2.4.9-alt1 Requires(post) grep > +postfix-2.4.9-alt1 Requires(post) libc.so.6(GLIBC_2.2.5)(64bit) > +postfix-2.4.9-alt1 Requires(post) libc.so.6(GLIBC_2.3)(64bit) > +postfix-2.4.9-alt1 Requires(post) libc.so.6(GLIBC_2.3.2)(64bit) > +postfix-2.4.9-alt1 Requires(post) libc.so.6(GLIBC_2.3.4)(64bit) > +postfix-2.4.9-alt1 Requires(post) libc.so.6(GLIBC_2.4)(64bit) > +postfix-2.4.9-alt1 Requires(post) libcdb.so.1()(64bit) > +postfix-2.4.9-alt1 Requires(post) libdb-4.7.so()(64bit) > +postfix-2.4.9-alt1 Requires(post) libdl.so.2(GLIBC_2.2.5)(64bit) > +postfix-2.4.9-alt1 Requires(post) libnsl.so.1(GLIBC_2.2.5)(64bit) > +postfix-2.4.9-alt1 Requires(post) libresolv.so.2(GLIBC_2.2.5)(64bit) > +postfix-2.4.9-alt1 Requires(post) rtld(GNU_HASH) > +postfix-2.4.9-alt1 Requires(post) sed > postfix-2.4.9-alt1 Requires(postun) /sbin/postun_ldconfig > Бинарные зависимости появляются из-за /usr/sbin/postmap, который > слинкован с libpostfix и libpostfix_dict, так что даже появляется > зависимость Requires(post) на libdb-4.7.so. Выглядит чудно, > но вроде правильно. К сожалению, во многих других (типичных) случаях обнаружить файловые зависимости гораздо сложнее. Например, из кода "/usr/sbin/post_service foo" сейчас никак нельзя вывести требование не файл "/etc/rc.d/init.d/foo". И, значит, никак нельзя добавить Requires(post) зависимости, которые соответствовали бы потребностям /etc/rc.d/init.d/foo. А файл /etc/rc.d/init.d/foo в свою очередь содержит ещё одну обёртку: как правило, демон запускается через start_daemon. Так что из скрипта /etc/rc.d/init.d/foo не удастся просто так извлечь зависимость на бинарик демона. А если бы мы извлекли зависимость на этот бинарик, тогда все бинарные зависимости этого бинарика продублировались бы в Requires(post). Тогда это получается ближе ко второму сценирю: если обнаруживается, что в %post-скритпе вызывается какая либо программа, запакованная в том же самом пакете, тогда *все* Requires зависимости пакета неоходимо продублирова (точнее, как бы "сдвинуть") на Requires(post). Но, опять же, нельзя достаточно надёжно засечь, дёргается ли в %post-скрипте какая-либо запакованная программа или нет. Что-то я прямо не знаю что делать. С одной стороны, реализован правильный механизм, который в принципе может работать. С другой стороны, он не будет работать в типичных (унифицированных) случаях. А если бы он хорошо работал во всех случаях, тогда бы мы получили простое дублирование ("сдвиг") зависимостей Requires -> Requires(post).