it-swarm-eu.dev

Výpis balíčků v Yum, které závisí na jiném nainstalovaném balíčku)

Snažím se nainstalovat balíček RPM třetích stran na RHEL5, který závisí na verzi 3.4 sqlite. Podle Yum jsem již nainstaloval 3.3.6.

Existuje způsob, jak vypsat nainstalované balíčky, které závisí na sqlite 3.3.6?

53
Rich

Požadovaná volba otáček je:

rpm -q --whatrequires sqlite

praveno: přidáno - nainstalováno do diskuse v dalších odpovědích/komentářích

praveno: odstraněno - nainstalováno, protože je to neplatná volba pro rpm

50
Wes Hardaker

Odpovědět

repoquery -q --installed --whatrequires sqlite

Vysvětlení

rpm -q --whatrequires sqlite Hlásí pouze závislosti na názvech balíků.

Naopak, repoquery se chová následovně (z manpages):

   --alldeps
          When used with --whatrequires, look for non-explicit dependencies in addition to explicit ones (e.g. files and Provides  in  addition  to  package  names).
          This is the default.

Příklad

Vezměme balíček libdb.

# rpm -q --whatrequires libdb
no package requires libdb

Žádný balíček nezávisí na libdb, takže bychom ho měli mít možnost hladce odstranit. Nicméně...

# yum remove -y libdb
Loaded plugins: fastestmirror
Resolving Dependencies
--> Running transaction check
---> Package libdb.x86_64 0:5.3.21-19.el7 will be erased
--> Processing Dependency: libdb(x86-64) = 5.3.21-19.el7 for package: libdb-utils-5.3.21-19.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: pam-1.1.8-12.el7_1.1.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-libs-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: libdb-utils-5.3.21-19.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: cyrus-sasl-lib-2.1.26-20.el7_2.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-python-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: python-libs-2.7.5-39.el7_2.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-devel-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: 2:postfix-2.10.1-6.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-build-libs-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: iproute-3.10.0-54.el7_2.1.x86_64
--> Running transaction check
. . .
. . .
. . .
Error: Trying to remove "systemd", which is protected
Error: Trying to remove "yum", which is protected

Jak vidíte, některé další balíčky nebyly závislé přímo na balíčku, ale na souboru libdb-5.3.so()(64bit), který poskytuje.

Konečně je zde skutečný seznam balíčků v závislosti na libdb:

# repoquery -q --installed --whatrequires libdb
cyrus-sasl-lib-0:2.1.26-20.el7_2.x86_64
iproute-0:3.10.0-54.el7_2.1.x86_64
libdb-utils-0:5.3.21-19.el7.x86_64
pam-0:1.1.8-12.el7_1.1.x86_64
postfix-2:2.10.1-6.el7.x86_64
python-libs-0:2.7.5-39.el7_2.x86_64
rpm-0:4.11.3-17.el7.x86_64
rpm-build-libs-0:4.11.3-17.el7.x86_64
rpm-devel-0:4.11.3-17.el7.x86_64
rpm-libs-0:4.11.3-17.el7.x86_64
rpm-python-0:4.11.3-17.el7.x86_64
43

Pro dnf (nová verze yum) můžete zkusit příkaz repoquery wrapper:

dnf repoquery --whatrequires sqlite

Pokud není k dispozici, můžete jej nainstalovat pomocí příkazu:

dnf -y install dnf-plugins-core
12
teoincontatto

Tento příkaz můžete také vyzkoušet.

repoquery --whatrequires sqlite

Tento příkaz jsem dostal od ServerFault a také od The Fedora Forums.

7
FilBot3

Myslím, že to, co opravdu chcete vědět, je „co jsou balíčky, které vyžadují sqlite-3.3.6, ale nebudou spokojeni s sqlite-3.4.z“ ... a jediný dobrý způsob, jak to zjistit, je Zkus to. Jako:

echo | yum upgrade sqlite
3
James Antill

Jak řekl Wes Hardaker , dobrá vestavěná metoda je pomocí rpm -q --whatrequires <package>. Jde o to, že rpm pracuje na schopnostech pro řešení závislostí, nejen na balíčcích, např. dpkg dělá v distribuci Debian/Ubuntu Linuxových distribucí. Jak již poznamenali ostatní, jednoduše děláme rpm -q --whatrequires sqlite neříká celý příběh, proto proč někteří navrhovali použití repoquery. repoquery však ve výchozím nastavení není v systému RHEL/CentOS 7 nainstalován minimální (možná i stolní počítač?), takže nemusí být k dispozici pro všechny.

Uživatel může udělat rpm -q --provides <pkgname> Chcete-li vidět všechny možnosti, které balíček nabízí, použijte rpm -q --whatrequires <capability> a podívejte se, jaké nainstalované balíčky tuto schopnost vyžadují. Tyto informace lze stručně dotazovat pomocí jednoplášťové lodi BASH (zde rozdělené do dvou řádků na délku):

capabilities=($(rpm -q --provides sqlite | awk -F= '{print $1}'));
for c in "${capabilities[@]}"; do rpm -q --whatrequires "$c"; done

Toto používá pouze možnosti vestavěné do samotného rpm, a proto nevyžaduje instalaci dalších balíčků (např. yum-utils v CentOS 7, což je balíček, který obsahuje repoquery).

1
villapx