При обновлении пакета с новыми возможностями (facilities) для управления через control возникает проблема установки прав, по умолчанию. Например, в пакете sudo добавляется новая утилита sudoreplay. Делаем так: @@ -83,6 +83,7 @@ mkdir -p %buildroot/var/run/sudo chmod u+rwx %buildroot%prefix/*bin/* install -pD -m755 sudo.control %buildroot/etc/control.d/facilities/sudo install -pD -m755 sudoers.control %buildroot/etc/control.d/facilities/sudoers +install -pD -m755 sudoreplay.control %buildroot/etc/control.d/facilities/sudoreplay # sudoedit ln -snf sudo %buildroot%_bindir/sudoedit @@ -91,10 +92,12 @@ ln -snf sudo.8 %buildroot%_man8dir/sudoedit.8 %pre %pre_control sudo %pre_control sudoers +%pre_control sudoreplay %post %post_control -s wheelonly sudo %post_control -s strict sudoers +%post_control -s wheelonly sudoreplay %files %config /etc/control.d/facilities/sudo* При обновлении получаем вот так: [sin@inf sudo]$ sudo rpm -Uv --oldpackage sudo-1.6.8p12-alt8.i586.rpm Password: Подготовка пакетов для установки... sudo-1.6.8p12-alt8 предупреждение: /etc/sudoers создан как /etc/sudoers.rpmnew Running /usr/lib/rpm/posttrans-filetriggers [sin@inf sudo]$ sudo rpm -Uv /home/sin/RPM/RPMS/athlon/sudo-1.7.5-alt1.athlon.rpm [sudo] password for sin: Preparing packages for installation... control: No such facility: sudoreplay sudo-1.7.5-alt1 warning: /etc/sudoers created as /etc/sudoers.rpmnew control-restore: No status available for "sudoreplay" facility Running /usr/lib/rpm/posttrans-filetriggers Соответственно неопределённое состояние для возможности sudoreplay: [sin@inf ~]$ sudo control sudoreplay Password: unknown Причина в макросе post_control, который не учитывает установку значения, по умолчанию, при обновлении для новых control facilities. $ grep post_control -R /usr/lib/rpm -A8 /usr/lib/rpm/macros.d/control:%post_control(s:) \ /usr/lib/rpm/macros.d/control-if [ $1 -ge 2 ]; then \ /usr/lib/rpm/macros.d/control- /usr/sbin/control-restore %* \ /usr/lib/rpm/macros.d/control-else \ /usr/lib/rpm/macros.d/control- for facility in %*; do \ /usr/lib/rpm/macros.d/control- /usr/sbin/control "$facility" %{-s*}%{!-s:public} \ /usr/lib/rpm/macros.d/control- done \ /usr/lib/rpm/macros.d/control-fi \ /usr/lib/rpm/macros.d/control-%nil
*** Bug 37480 has been marked as a duplicate of this bug. ***