Yüklenmiş başka bir pakete bağlı olan Yum'da listeleme paketleri


48

RHEL5'e, sqlite'nin 3.4 sürümüne bağlı olarak bir üçüncü taraf RPM paketi kurmaya çalışıyorum. Yum'a göre zaten 3.3.6 yüklü.

Sqlite 3.3.6'ya bağlı kurulu paketleri listelemenin bir yolu var mı?

Yanıtlar:


47

İstediğiniz rpm seçeneği:

rpm -q --whatrequires sqlite

Düzenlendi: eklendi - tartışmalara eklenmiş diğer cevaplara / yorumlara

Düzenlendi: kaldırıldı - rpm için geçersiz bir seçenek olduğundan yüklü


3
Ayrıca, repoquerybelirli bir paket gerektiren tüm paketlerin yapısını oluşturan güzel bir ağaç benzeri yapı oluşturmak için de kullanılabilir, örneğin:repoquery --pkgnarrow=installed --tree-whatrequires sqlite
pdp

3
Bu cevabın güvenilir olduğunu kabul etmiyorum - kesinlikle CentOS 7.x'te değil. Test etmek için ImageMagick'i yükleyin. OpenEXR-lib'leri de ImageMagick buna bağlı olarak kurulacaktır. Şimdi rpm -q komutunu çalıştırın - OpenEXR-lib'leri gerekli kılar ve geri dönüşü ise INCORRECT olan "hiçbir paket OpenEXR-libs gerektirmez" dir. Şimdi "repoquery -q --installed --wrereEXR-libs" komutunu çalıştırın ve doğru şekilde "ImageMagick-0: 6.7.8.9-15.el7_2.x86_64" komutunu çalıştırın. Sadece rastgele bir adamın cevapları aşağıda doğru cevap olmalı.
Pancho

6
--installediçin bir seçenek repoqueryama için geçersiz rpm.
Dan Rice,

36

Cevap

repoquery -q --installed --whatrequires sqlite

açıklamalar

rpm -q --whatrequires sqlite yalnızca paket adlarındaki bağımlılıkları bildirir.

Aksine, repoqueryaşağıdaki gibi davranır (man sayfalarından):

   --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.

Örnek

Paket alalım libdb.

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

Hiçbir paket bağlı değildir libdb, bu yüzden sorunsuz bir şekilde çıkarabilmeliyiz. Ancak...

# 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

Gördüğünüz gibi diğer bazı paketler doğrudan pakete değil, libdb-5.3.so()(64bit)sağladığı dosyaya bağlıydı.

Son olarak, işte size bağlı olarak gerçek paketlerin listesi 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

1
Bu cevap kabul edilen cevaptan daha iyidir
Pancho

11

Dnf (yeni yum sürümü) repoquery wrapper komutuyla deneyebilirsiniz:

dnf repoquery --whatrequires sqlite

Mevcut değilse, aşağıdaki komutu kullanarak yükleyebilirsiniz:

dnf -y install dnf-plugins-core

--installed --recursiveSonunda ihtiyacın var , bu yüzden sadece gerçekte kurulu olanları geri
yükler


3

Gerçekten bilmek istediğin şeyin "sqlite-3.3.6 gerektiren paketler nelerdir, ancak sqlite-3.4.z ile mutlu olmayacaklarını" düşünüyorum ve bunu bulmanın tek iyi yolu ... dene. Sevmek:

echo | yum upgrade sqlite

1

As Wes Hardaker söyledi , iyi bir dahili yöntemle kullanmaktır rpm -q --whatrequires <package>. Mesele şu ki, yalnızca Debian / Ubuntu Linux dağıtımları ailesinde olduğu gibi sadece paketlerde değil, bağımlılık çözümü için rpmde yetenekler üzerinde çalışıyor dpkg. Diğerlerinin de belirttiği gibi, basitçe yapmak rpm -q --whatrequires sqlitehikayenin tamamını anlatmaz, bu yüzden neden bazılarının kullanılması önerildi repoquery. repoqueryAncak, varsayılan olarak RHEL / CentOS 7 minimal (belki de masaüstü de olabilir) içine kurulmaz, bu yüzden herkes için uygun olmayabilir.

Bir kullanıcı rpm -q --provides <pkgname>bir paketin sağladığı tüm yetenekleri görmek için yapabilir, daha sonra rpm -q --whatrequires <capability>hangi yeteneklerin yüklü olduğunu görmek için kullanabilir . Bu bilgi, tek bir BASH astarı kullanılarak kısa sürede sorgulanabilir (burada uzunluk için iki satıra ayrılmıştır):

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

Bu, yalnızca rpmkendi içinde yerleşik olan seçenekleri kullanır ve bu nedenle herhangi bir ek paket yüklenmesini gerektirmez (örn . yum-utilsİçeren paket olan CentOS 7'de repoquery).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.