rpm: перечислить ненужные зависимости, как это делает dpkg-shlibdeps? - PullRequest
2 голосов
/ 06 марта 2019

При сборке пакета .deb dpkg-shlibdeps вызывается (или может быть) для автоматического добавления зависимостей от библиотек, используемых вашим пакетом.

Производит полезный вывод, например:

dpkg-shlibdeps: warning: package could avoid a useless dependency if ./foo.so were not linked against libboost_regex.so.1.62.0 (they use none of the library's symbols)

Есть ли эквивалентная функция для об / мин? или ранее существовавший платформенно-нейтральный инструмент?

Ответы [ 2 ]

0 голосов
/ 19 марта 2019

У меня есть частичный ответ.

RPM не поддерживает это напрямую. RPM находит то, что требует пакет, и предоставляет его через скрипты find-requires и find-provides, обычно в /usr/lib/rpm.

Они выполняются следующим образом:

>find . | /usr/lib/rpm/find-provides
libfoobar.so.1()(64bit)

>find . | /usr/lib/rpm/find-requires
libasound.so.2()(64bit)
libboost_atomic-mt.so.1.53.0()(64bit)
libboost_chrono-mt.so.1.53.0()(64bit)
libboost_date_time-mt.so.1.53.0()(64bit)
libboost_filesystem-mt.so.1.53.0()(64bit)
libboost_regex-mt.so.1.53.0()(64bit)
libboost_system-mt.so.1.53.0()(64bit)
libboost_thread-mt.so.1.53.0()(64bit)
libboost_unit_test_framework-mt.so.1.53.0()(64bit)
libc.so.6()(64bit)
libc.so.6(GLIBC_2.14)(64bit)

Существует также скомпилированная программа / usr / lib / rpm / elfdeps, которая работает так же. Кажется, что rpmbuild использует это, а не сценарии.

См. http://ftp.rpm.org/max-rpm/s1-rpm-depend-auto-depend.html (обратите внимание, что настоящие сценарии не очень похожи на приведенный там пример).

Оставшаяся часть вопроса - как это делает dpkg-shlibdeps? Я добавлю это, когда найду время разобраться, если никто не придет туда первым.

0 голосов
/ 13 марта 2019

Да и нет:)

rpmbuild автоматически добавляет .so зависимости.

Вы можете проверить, что rpm -qR bash перечисляет эти требования:

...
libc.so.6(GLIBC_2.11)(64bit)
libc.so.6(GLIBC_2.14)(64bit)
libc.so.6(GLIBC_2.15)(64bit)
...

но как вы можете видеть в источниках: https://src.fedoraproject.org/rpms/bash/blob/master/f/bash.spec нет такой строки, как:

Requires: libc.so.6(GLIBC_2.11)(64bit)

Это работает для библиотек .so, модулей Perl и совсем недавно в Fedora для модулей Python. Любая другая библиотека должна быть добавлена ​​вручную в spec-файл.

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

...