https://git.altlinux.org/tasks/339399/logs/events.3.1.log x86_64: NEW unmet dependencies detected: cryptsetup#2.6.1-alt1:sisyphus+339399.1300.3.1@1706643605 /usr/sbin/blkid dbus#1.14.10-alt1:sisyphus+339399.1500.3.1@1706643710 /usr/sbin/chkconfig dhcp-client#1:4.4.3.P1-alt2:sisyphus+339399.1600.3.1@1706643793 /usr/sbin/start-stop-daemon dhcp-server#1:4.4.3.P1-alt2:sisyphus+339399.1600.3.1@1706643793 /usr/bin/shell-config systemd#1:254.7-alt1:sisyphus+339399.2700.3.1@1706644609 /usr/bin/kmod systemd#1:254.7-alt1:sisyphus+339399.2700.3.1@1706644609 /usr/bin/rm systemd#1:254.7-alt1:sisyphus+339399.2700.3.1@1706644609 /usr/bin/run-parts systemd#1:254.7-alt1:sisyphus+339399.2700.3.1@1706644609 /usr/sbin/ldconfig systemd#1:254.7-alt1:sisyphus+339399.2700.3.1@1706644609 /usr/sbin/systemd-repart Когда я локально воспроизвёл ситуацию из этого задания, у меня эти пакеты в чрут смогли установиться (т. е. зависимости там удовлетворились).
Created attachment 15617 [details] экспериментальный патч, с которым работает Любопытно, что проблема не проявляется, если в пакет rpm (scripts/functions берутся оттуда) внести приложенное сюда изменение.
https://packages.altlinux.org/en/tasks/327286/ Предлагаю вот такое решение проблемы (там есть подзадание с rpm-build). Смысл тот же: если в процессе разбора и каноникализации пути нужно пройти по /bin или /sbin, они игнорируются (как будто это не симлинки). Таким образом, /sbin/chkconfig каноникализуется^W переходит в /sbin/chkconfig, а не в /usr/sbin/chkconfig, что соответствует существующим Provides: в пакетах. Например, если: — /a/b — это ссылка на каталог ddd/p/q, — /a/ddd/p/q/c — это ссылка на /a/x (не на /a/c), — /a/ddd/p/q/k — это ссылка на /a/k, — и мы игнорируем /a/b, то мы из пути /a/b/k получим тот же /a/b/k, а из /a/b/c/d/e не получим: вылезет ENOENT, ибо по /a/ddd/p/q/c ничего нет. В предыдущей реализации использовалась команда `readlink -vm`, но ни readlink(1), ни realpath(1) нельзя заставить не проходить по ссылкам в некоторых компонентах пути, поэтому там "realpath с особенностями" на C.
(In reply to Arseny Maslennikov from comment #2) > https://packages.altlinux.org/en/tasks/327286/ > > Предлагаю вот такое решение проблемы (там есть подзадание с rpm-build). > Смысл тот же: если в процессе разбора и каноникализации пути нужно пройти по > /bin или /sbin, они игнорируются (как будто это не симлинки). Таким образом, > /sbin/chkconfig каноникализуется^W переходит в /sbin/chkconfig, а не в > /usr/sbin/chkconfig, что соответствует существующим Provides: в пакетах. > > Например, если: > — /a/b — это ссылка на каталог ddd/p/q, > — /a/ddd/p/q/c — это ссылка на /a/x (не на /a/c), > — /a/ddd/p/q/k — это ссылка на /a/k, > — и мы игнорируем /a/b, > то мы из пути /a/b/k получим тот же /a/b/k, а из /a/b/c/d/e не получим: > вылезет ENOENT, ибо по /a/ddd/p/q/c ничего нет. Т. е. это то же самое, что было, но с ignore-листами. Кроме того, поведение отличается вот в каком случае: было: [root@horse ~]# /bin/sh -ec '. /usr/lib/rpm/functions; CanonPath /etc/init.d/.' /etc/init.d [root@horse ~]# /bin/sh -ec '. /usr/lib/rpm/functions; CanonPath /etc/init.d/' /etc/init.d [root@horse ~]# /bin/sh -ec '. /usr/lib/rpm/functions; CanonPath /etc/init.d' /etc/init.d стало: [builder@localhost ~]$ /bin/sh -ec '. /usr/lib/rpm/rpmb-functions; CanonPath /etc/init.d/.' /etc/rc.d/init.d [builder@localhost ~]$ /bin/sh -ec '. /usr/lib/rpm/rpmb-functions; CanonPath /etc/init.d/' /etc/rc.d/init.d [builder@localhost ~]$ /bin/sh -ec '. /usr/lib/rpm/rpmb-functions; CanonPath /etc/init.d' /etc/init.d
* Tue Mar 26 2024 Arseny Maslennikov <arseny@altlinux.org> 4.0.4.198-alt1 - brp: Added brp-dupe-bin module to help fix ~20 packages for usrmerge (thx obirvalger@). - tools: New tool: remappath2. - Re-implemented CanonPath() using remappath2. This allows to skip following some symlinks during path component resolution, so find-requires does not generate dependencies on e. g. /usr/bin/sh.