Bug 54924 - %_udev_rulesdir определена как /usr/lib/udev/rules.d вместо ожидаемого /lib/udev/rules.d при задействовании usrmerge
Summary: %_udev_rulesdir определена как /usr/lib/udev/rules.d вместо ожидаемого /lib/u...
Status: CLOSED NOTABUG
Alias: None
Product: Sisyphus
Classification: Development
Component: rpm-build-systemd (show other bugs)
Version: unstable
Hardware: x86_64 Linux
: P5 normal
Assignee: Alexey Shabalin
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2025-06-25 11:56 MSK by Nikolay Strelkov
Modified: 2025-07-04 15:59 MSK (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Nikolay Strelkov 2025-06-25 11:56:34 MSK
Предыстория: стал изучать отчеты 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 .
Comment 1 Alexey Shabalin 2025-07-04 15:59:37 MSK
После usrmerge %_udev_rulesdir изменился на /usr/lib/udev/rules.d.
Так и задумано.