SpecTips/Requires

Материал из ALT Linux Wiki


Автогенерируемые зависимости

В ALT RPM доступен и используется ряд механизмов автоматического порождения списков зависимостей -- установочные генерируются в конце сборки пакета, сборочные помогает выяснять и обновлять утилита buildreq.

Если в req/prov скриптах использовать опцию --verbose, то можно узнать что-нибудь интересное:

$ rpm -ql rpm-utils |file -NF$'\t' -f - |/usr/lib/rpm/shell.req.files |/usr/lib/rpm/shell.req -v 2>&1| head
shell.req: /usr/bin/add_changelog: cat -> /bin/cat -> ... (via which)
shell.req: /usr/bin/add_changelog: /bin/cat -> coreutils (via rpmdb)

Если пакет собирается хешером, то разрешение файловых путей в имена пакетов происходит не только по наличным в чруте пакетам, а и по содержанию $build/cache/contents/contents_index_bin.

Этот contents index как раз нужен, чтобы лучше искать зависимости вопреки минимальной сборочной среде и в ряде случаев давать более точные зависимости; например, зависимость на mutt должна разрешиться в /usr/bin/mutt, а не в mutt или mutt1.5, т.к. любой из них сгодится.

at@ внес много исправлений в find-package (это диспетчер, занимающийся поиском такого рода зависимостей), теперь в ряде "сложных" случаев результат будет более корректным. См. commit messages, там есть примеры с /sbin/ifup, openssl-config, arpsend и vim.

rpmlib(CompressedFileNames)

Это внутренние зависимости librpm, которые не попадают в базу данных, поскольку определяются самой библиотекой и, таким образом, могут измениться при установке другой версии librpm.