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?
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
repoquery -q --installed --whatrequires sqlite
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.
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
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
Tento příkaz můžete také vyzkoušet.
repoquery --whatrequires sqlite
Tento příkaz jsem dostal od ServerFault a také od The Fedora Forums.
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
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
).