Неожиданные сбойные зависимости при удалении пакета с помощью RPM - PullRequest
0 голосов
/ 03 сентября 2018

При проверке пакетов, которые зависят от определенного пакета (в данном случае lz4) с использованием rpm, в нем не перечисляются пакеты, для которых требуется lz4-1.7.5-2.el7.i686 и lz4-1.7.5-2.el7.x86_64 ...

# rpm -q --whatrequires lz4-1.7.5-2.el7.i686
no package requires lz4-1.7.5-2.el7.i686
# rpm -q --whatrequires lz4-1.7.5-2.el7.x86_64
no package requires lz4-1.7.5-2.el7.x86_64
#

Но я не могу удалить ни одну из них без использования rpm --nodeps, поскольку они необходимы systemd и / или systemd-libs.

# rpm --erase --allmatches lz4
error: Failed dependencies:
        liblz4.so.1()(64bit) is needed by (installed) systemd-libs-219-57.el7_5.1.x86_64
        liblz4.so.1()(64bit) is needed by (installed) systemd-219-57.el7_5.1.x86_64
        liblz4.so.1 is needed by (installed) systemd-libs-219-57.el7_5.1.i686
#

Похоже, вывод rpm --whatrequires неверен, но так ли это? (Я сомневаюсь, что это на самом деле неправильно - но я не понимаю, почему это не включает systemd или systemd-libs?

Я подумал, если использовать rpm --erase --test вместо rpm --whatrequires, чтобы определить, есть ли у пакетов зависимости, но есть ли другой более надежный способ сделать это?

Спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Следующая команда дает ожидаемый результат, хотя я до сих пор не понимаю, почему rpm --whatrequires не работает. (Я, вероятно, не пойму этого, пока не соберу свой первый пакет).

# repoquery --alldeps --whatrequires --cache --installed lz4
systemd-0:219-57.el7.x86_64
systemd-libs-0:219-57.el7.i686
systemd-libs-0:219-57.el7.x86_64
#

Однако в некоторых случаях вывод может быть "интересным" ...

# repoquery --alldeps --whatrequires --cache --installed lvm2-libs
lvm2-7:2.02.177-4.el7.x86_64
lvm2-libs-7:2.02.177-4.el7.x86_64
# 

# repoquery --whatrequires --cache --installed lvm2
lvm2-7:2.02.177-4.el7.x86_64
# 
0 голосов
/ 03 сентября 2018

это немного сложно. rpm --whatrequires дорожки возможности ; не просто пакеты.

Если вы попробуете снова; вы увидите, что:

rpm --whatrequires "liblz4.so.1()(64bit)"

предоставит вам результаты.

rpm --erase --test кажется хорошим способом для меня. Альтернативой было бы зациклить возможности, предоставляемые пакетом, который вы хотите удалить; но это будет медленнее. Вот небольшой скрипт bash, который перебирает возможности lz4 и печатает пакеты, которые зависят от этих возможностей:

packageToRemove=lz4
for capability in $(rpm -q $packageToRemove --provides | awk '{print $1}')
do
    echo "packages requiring $capability:"
    rpm -q --whatrequires "$capability"
done
...