Предыстория: стал изучать отчеты repocop по своим пакетам, имеющим проблемы с правилами udev. В качестве примера посмотрел отчет repocop простого пакета antpm - https://repocop.altlinux.org/pub/repocop/reports/txt/by-srpm/antpm-1.24-alt1.src.txt , там есть сообщение: antpm-1.24-alt1.x86_64 sisyphus_check fail sisyphus_check failed: /ALT/Sisyphus/files/x86_64/RPMS/antpm-1.24-alt1.x86_64.rpm: invalid udev rules path: /usr/lib/udev/rules.d/60-antpm.rules sisyphus_check: check-udev ERROR: udev rules path violation . Общее количество сообщений с этой проблемой: ``` $ curl -s https://repocop.altlinux.org/pub/repocop/reports/txt/by-test/sisyphus_check.txt | grep "ERROR: udev rules path violation" --count 156 ``` В спек-файле https://packages.altlinux.org/en/sisyphus/srpms/antpm/specfiles/#line-64 макрос %_udevrulesdir не переопределяю. На странице https://www.altlinux.org/Spec/Предопределенные_макросы#Макросы написано, что Макросу _udevrulesdir соответствует замена /lib/udev/rules.d . Однако при компиляции и пакетировании откуда-то возникает /usr/lib/udev/rules.d . При этом на странице https://www.altlinux.org/Usrmerge#Стадия_3 макрос _udevrulesdir упомянут, т.е. его значение должно соответствовать путям, ожидаемым при применении usrmerge. Для поиска причины проблемы сделал следующее на полностью обновленной регулярке: ``` $ git clone git://git.altlinux.org/gears/a/antpm.git $ cd antpm $ rm -rf ~/hasher ; mkdir ~/hasher $ gear --commit -v --hasher -- hsh -v --no-sisyphus-check=packager,gpg --lazy-cleanup $ rpm -qlp ~/hasher/repo/x86_64/RPMS.hasher/antpm-*.rpm | grep udev /usr/lib/udev/rules.d/60-antpm.rules ``` Т.е. после сборки файл udev-правил находится в /usr/lib/udev/rules.d/ вместо /lib/udev/rules.d/. Далее зашел в хешер ``` $ hsh-shell ``` посмотреть откуда берется /usr/lib/udev/rules.d : ``` $ rpm -qa | grep -E "rpm-(macros|build)" rpm-macros-python-0.43.2-alt1.noarch rpm-build-4.0.4.205-alt1.x86_64 rpm-build-perl-0.85-alt6.noarch rpm-build-file-4.26-alt19.x86_64 rpm-macros-cmake-4.0.0-alt1.noarch rpm-macros-alternatives-0.5.3-alt1.noarch rpm-macros-systemd-6-alt2.noarch rpm-macros-python3-0.1.28-alt1.noarch $ grep -r "/usr/lib/udev/rules.d" /usr/lib/rpm/ /usr/lib/rpm/macros.d/systemd:%_udev_rulesdir /usr/lib/udev/rules.d $ grep -r %_udev_rulesdir /usr/lib/rpm/ /usr/lib/rpm/macros.d/systemd:%_udev_rulesdir /usr/lib/udev/rules.d /usr/lib/rpm/macros.d/systemd:%_udevrulesdir %_udev_rulesdir $ rpm -E %_udev_rulesdir /usr/lib/udev/rules.d $ rpm -E %_udevrulesdir /usr/lib/udev/rules.d $ rpm -qf /usr/lib/rpm/macros.d/systemd rpm-macros-systemd-6-alt2.noarch ``` т.е. значение /usr/lib/udev/rules.d задано в файле пакета rpm-macros-systemd (конкретно тут - https://git.altlinux.org/gears/r/rpm-build-systemd.git?p=rpm-build-systemd.git;a=blob;f=systemd.macros;h=eeb0e3ffe0b668c6649b34598eef85948aba0c8b;hb=61431a871add3416b1eb250836b9f64ba53204d5#l70 ) . Итог: для правильной работы sisyphus_check и следованию usrmerge следует определить %_udev_rulesdir как /lib/udev/rules.d вместо /usr/lib/udev/rules.d . P.S. Возможно я не прав, но, следуя этой логике, возможно, нужно изменить и в остальных макросах /usr/lib на просто /lib - как минимум %_udevhwdbdir, %_journalcatalogdir, %_tmpfilesdir (упоминается уже в отчете repocop - например, "fail MySQL-server-8.0.42-alt1.x86_64 sisyphus_check failed: /ALT/Sisyphus/files/x86_64/RPMS/MySQL-server-8.0.42-alt1.x86_64.rpm: Invalid path names: /usr/lib/tmpfiles.d/mysql.conf sisyphus_check: check-fhs ERROR: FHS violation;"), %_sysctldir .
После usrmerge %_udev_rulesdir изменился на /usr/lib/udev/rules.d. Так и задумано.