이 패키지에 의존하는 RPM을 확인하세요.

이 패키지에 의존하는 RPM을 확인하세요.

요청한 패키지에 의존하는 패키지 목록을 얻고 싶습니다. 예를 들어, 모든 종속성을 가져오고 싶습니다 telnet. 다음 스크립트를 생각해냈습니다.

for i in `rpm -qa | sort`;
   do rpm -qR $i | grep telnet > /dev/null;
   if [ $? -eq 0 ]; then
       echo $i;
   fi;
done

더 좋은 방법이 있나요?

감사해요.

답변1

필요한 명령은 다음과 같습니다.

rpm -q --whatrequires <packagename>

그래서:

rpm -q --whatrequires telnet

매뉴얼 페이지에서

  --whatrequires CAPABILITY
         Query all packages that require CAPABILITY for proper functioning.

답변2

불행히도 rpm -q --whatrequires때로는 그것만으로는 충분하지 않습니다.

$ rpm -q --whatrequires perl-libwww-perl
no package requires perl-libwww-perl

$ rpm -e perl-libwww-perl
error: Failed dependencies:
       perl(LWP) is needed by (installed) perl-XML-Parser-2.36-7.el6.x86_64

그 이유는 --whatrequiresa를 인수로 취하기  때문입니다.함수 이름, 하나 대신 패키지 이름. 일반적으로 RPM 패키지가 동일한 이름을 가진 함수 하나만 제공하는 경우 패키지 이름을 --whatrequires매개변수로 전달하는 것은 괜찮지만 그렇지 않은 경우( perl-libwww-perl위의 예에서와 같이) 다른 솔루션이 필요합니다.


해결책 #1:rpm --test -e

명령이 성공하고(실제로 시스템을 변경하지 않고!) 종속성이 없는 경우 ;given --test("시험 실행") 옵션을 사용하십시오.-e

$ rpm --test -e emacs-common && echo 'No dependencies!'
No dependencies!

;실패하면 위에서 이미 본 오류 출력이 표시됩니다.

$ rpm --test -e perl-libwww-perl && echo 'No dependencies!'
error: Failed dependencies:
       perl(LWP) is needed by (installed) perl-XML-Parser-2.36-7.el6.x86_64

해결책 #2:repoquery --installed --whatrequires

repoquery(1)명령은 yum-utilsRPM의 일부로 제공되며 패키지 이름을 기능 이름으로 확인하거나 그 반대로 확인하는 데 충분합니다.

$ repoquery --installed --whatrequires perl-libwww-perl
perl-libwww-perl-0:5.833-5.el6.noarch
perl-XML-Parser-0:2.36-7.el6.x86_64
perl-libwww-perl-0:5.833-5.el6.noarch

결점:

  • yum-utils아직 시스템에 없을 수도 있습니다.
  • yum( yum-utils필수)가 아직 시스템에 없을 수 있습니다.
  • 중복 출력 없음(추가하여 쉽게 수정 가능 | sort -u)
  • 입력 패키지 이름을 필터링하지 마세요(수정하기 쉬움)


따라서 솔루션 1은 지저분하지만 전반적으로 더 안정적이고 사용하기 쉬운 것 같습니다.

답변3

해결 방법 #3:rpmdep --depending

패키지 종속성을 표시하는 대신(rpm -qR) rpmdep은 향상된 rpm -q --whatrequires명령으로 작동합니다. [rpmdep 매뉴얼 페이지에서 발췌]

또한 솔루션 #2에는 많은 패키지를 설치해야 한다는 점을 지적하고 싶습니다. openSUSE Leap 15.4에서 zypper는 repoquery 명령을 활성화하기 위해 설치해야 하는 총 23개 패키지(3.7MB)에 대한 종속성을 해결합니다.

rpmdep은 rpmorphan 패키지의 유틸리티 중 하나입니다. rpm -q --provides/ 와 비슷하지만 --requires, 주요 차이점은 함수가 아닌 패키지에 적용된다는 것입니다. 이것이 바로 OP가 요청한 것입니다.

예:

$ rpmdep --depending firewalld
no depending : firewalld is an orphan

$ rpmdep --depending iptables
iptables is needed by firewalld

관련 정보