설치된 다른 패키지에 의존하는 Yum의 패키지 나열


48

sqlite의 버전 3.4에 따라 RHEL5에 타사 RPM 패키지를 설치하려고합니다. Yum에 따르면 이미 3.3.6이 설치되어 있습니다.

sqlite 3.3.6에 의존하여 설치된 패키지를 나열하는 방법이 있습니까?

답변:


47

원하는 rpm 옵션은 다음과 같습니다.

rpm -q --whatrequires sqlite

편집 : 추가-다른 답변 / 의견에서 토론 당 설치

편집 : rpm에 대한 잘못된 옵션이므로 제거-설치


3
또한 repoquery특정 패키지가 필요한 모든 패키지의 구조와 같은 멋진 트리를 생성하는 데 사용할 수 있습니다.repoquery --pkgnarrow=installed --tree-whatrequires sqlite
pdp

3
이 답변이 신뢰할 수 있다는 데 동의하지 않습니다. 확실히 CentOS 7.x에서는 그렇지 않습니다. 테스트하려면 ImageMagick을 설치하십시오. ImageMagick이 의존하는 OpenEXR-lib도 설치됩니다. 이제 rpm -q --what을 실행하면 OpenEXR-lib가 필요하며 반환 값은 "OpenEXR-libs가 필요없는 패키지"입니다. 이는 INCORRECT입니다. 이제 "repoquery -q --installed --whatrequires OpenEXR-libs"를 실행하면 "ImageMagick-0 : 6.7.8.9-15.el7_2.x86_64"가 올바르게 반환됩니다. @ 아래의 임의의 사람의 대답이 여기에 정답이어야합니다.
판초

6
--installed에 대한 옵션 repoquery이지만 유효하지 않습니다 rpm.
Dan Rice

36

대답

repoquery -q --installed --whatrequires sqlite

설명

rpm -q --whatrequires sqlite 패키지 이름에 대한 종속성 만보고합니다.

반대로 repoquery맨 페이지에서 다음과 같이 작동합니다.

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

package를 보자 libdb.

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

에 의존하는 패키지가 libdb없으므로 원활하게 제거 할 수 있어야합니다. 하나...

# 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

보시다시피 다른 패키지는 패키지가 아니라 패키지가 libdb-5.3.so()(64bit)제공 한 파일에 의존 하고 있습니다.

마지막으로 다음에 따라 실제 패키지 목록이 있습니다 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
이 답변은 허용되는 답변보다 낫습니다
Pancho

11

dnf (새 버전의 yum)의 경우 repoquery wrapper 명령을 사용해보십시오.

dnf repoquery --whatrequires sqlite

사용할 수없는 경우 다음 명령으로 설치할 수 있습니다.

dnf -y install dnf-plugins-core

당신은 필요 --installed --recursive가 실제로 설치되어 있는지 반환하고 저장소에서 잡아 당기지 않도록 끝에서
Hashbrown

7

이 명령을 시도해 볼 수도 있습니다.

repoquery --whatrequires sqlite

ServerFaultFedora 포럼 에서이 명령을 받았습니다 .


이것은 내가 설치하지 않은 패키지를 반환했습니다.
2rs2ts

3

당신이 정말로 알고 싶어하는 것은 "sqlite-3.3.6을 필요로하는 패키지는 무엇이고 sqlite-3.4.z에 만족하지 않을 것"이라고 생각합니다. 그리고 그것을 알아내는 유일한 좋은 방법은, 시도 해봐. 처럼:

echo | yum upgrade sqlite

1

웨스 Hardaker 말했다 좋은 내장 방법은 사용하는 것입니다 rpm -q --whatrequires <package>. 문제는 데비안 / 우분투 리눅스 배포판에서 와 같이 단순한 패키지가 아닌 의존성 해결 기능으로rpm 작동 한다는 것입니다 . 다른 사람들이 지적했듯이 단순히 수행하는 것이 전체 이야기를 알려주지 않으므로 일부 사용자가을 사용하는 것이 좋습니다 . 그러나 RHEL / CentOS 7 최소 (데스크탑도 가능)에 기본적으로 설치되지 않으므로 모든 사람이 사용할 수있는 것은 아닙니다.dpkgrpm -q --whatrequires sqliterepoqueryrepoquery

사용자는 rpm -q --provides <pkgname>패키지가 제공하는 모든 기능 rpm -q --whatrequires <capability>을 확인한 다음 설치된 기능이 필요한 패키지를 확인하는 데 사용할 수 있습니다. 이 정보는 BASH one-liner를 사용하여 간결하게 쿼리 할 수 ​​있습니다 (길이를 위해 두 줄로 구분).

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

여기에는 기본 제공 옵션 만 사용 rpm되므로 추가 패키지를 설치할 필요가 없습니다 (예 : yum-utilsCentOS 7,이 패키지가 포함 된 패키지 repoquery).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.