apt-get이 패키지를 설치하는 이유를 어떻게 알 수 있습니까?


18

이 질문은 패키지가 설치된 이유어떻게 알 수 있습니까? 와 비슷합니다 . 하지만 제 경우에는 실제로 패키지를 설치 하기 전에 특정 종속성을 설치하는 이유 를 알고 싶습니다 .

예를 들어

sudo apt-get install superfoo

출력 결과는 다음과 같습니다.

The following extra packages will be installed:
  foo bar baz ... libderp libjunk

그리고 이것은 정말 큰 목록 일 수 있습니다. 어떤 경우에는 설치하려는 항목이 실제로 의미가없는 설치 될 항목을 보게되므로 특정 종속성이 설치 될 이유 를 알고 싶습니다 .

위의 예에서 libderp설치 이유를 이해하고 싶다고 가정 해 봅시다 . 어떻게 든 간의 종속성 체인이 있음을 알 수 superfoolibderp하지만 패키지의 거대한 목록은 (는) 자기이 체인이 무엇인지 볼 수 있습니다를 설치하는 방법은.

종속성 체인을 알고 나면 원래 패키지를 실제로 설치할지 여부 및 / 또는 해당 패키지의 관리자에게 연락하여 해당 종속성이 실제로 필요한지 여부를 확인할 수 있습니다.


다른 사람의 답변이 도움이 되었다면, 다른 사람이 나중에 더 쉽게 찾을 수 있도록 허용 된 답변 으로 표시하십시오 . 또한 도움을 주신 것에 대해 귀하의 질문에 답변 한 사람에게 감사하는 정중 한 방법입니다.
Danatela

답변:


14

당신이 정말로 요구하는 것은 "어떻게 의존성을 도표화합니까?"입니다. 따라서 어떤 패키지가 어떤 종속성을 가져 오는지 알 수 있습니다.

apt-cache기본 설치의 일부인 apt 패키지에 포함 된 명령 에서 텍스트 및 다이어그램 종속성을 모두 얻습니다 .

다음은 'hello'패키지의 종속성을 텍스트 형식으로 나열하기위한 apt-cache의 예입니다. 텍스트 출력은 항상 한 수준입니다.

$ apt-cache depends hello
hello
  Depends: libc6
 |Depends: dpkg
  Depends: install-info

다음과 같은 도트 파일 뷰어를 사용하여 다이어그램을 읽을 수 있습니다 dotty( 예 : 기본 설치의 일부인 graphviz 패키지에 포함됨)

다음은 전체 종속성 트리를 그래픽 형식으로 가져 와서 표시하는 예입니다. 그래픽 출력은 항상 전체 트리가됩니다.

$ apt-cache dotty hello > dotfile
$ dotty dotfile

살펴보면 'hello'패키지가 수많은 Perl 패키지를 가져오고 어떤 종속성을 수행하는지 알 수 있습니다.


그것이 효과가 있지만 패키지가 종속성의 종속성 인 경우 특정 패키지에서 무엇을 가져 왔는지 확인하려면이 방법을 사용하는 것이 중요합니다.
tgm4883

전혀. 도트 파일 그림 만보십시오.
user535733

1
apt-cache depends --recurse전체 그림을 제공하지만 권장 또는 제안되지 않은 실제 종속성 만 따르기 때문에 아래의 apt-rdepends가 더 좋습니다.
mhsmith

apt-get은 --no-install-recommends플래그 를 사용하지 않으면 실제로 권장되는 종속성을 설치합니다 .
mhsmith 2019

2
그 바는 무엇을 의미합니까? |
CMCDragonkai

9

apt-rdependscruft의 50 개 이상의 라이브러리를 설치 하지 않고이 작업을 수행합니다 ubuntu-dev-tools.

durr@scraper:~$ apt-rdepends mercurial
Reading package lists... Done
Building dependency tree
Reading state information... Done
mercurial
  Depends: libc6 (>= 2.14)
  Depends: mercurial-common (= 2.8.2-1ubuntu1)
  Depends: python (<< 2.8)
  Depends: ucf (>= 2.0020)
libc6
  Depends: libgcc1
libgcc1
  Depends: gcc-4.9-base (= 4.9-20140406-0ubuntu1)
  Depends: libc6 (>= 2.14)
  PreDepends: multiarch-support
gcc-4.9-base
multiarch-support
  Depends: libc6 (>= 2.3.6-2)
mercurial-common
  Depends: python (<< 2.8)
  Depends: python:any (>= 2.7.1-0ubuntu2)
python
  Depends: libpython-stdlib (= 2.7.5-5ubuntu3)
  Depends: python-minimal (= 2.7.5-5ubuntu3)
  Depends: python2.7 (>= 2.7.5-1~)
libpython-stdlib
  Depends: libpython2.7-stdlib (>= 2.7.5-1~)
libpython2.7-stdlib
  Depends: libbz2-1.0
  Depends: libc6 (>= 2.15)
  Depends: libdb5.3
  Depends: libexpat1 (>= 2.1~beta3)
  Depends: libffi6 (>= 3.0.4)
  Depends: libncursesw5 (>= 5.6+20070908)
  Depends: libpython2.7-minimal (= 2.7.6-8)
  Depends: libreadline6 (>= 6.0)
  Depends: libsqlite3-0 (>= 3.5.9)
  Depends: libssl1.0.0 (>= 1.0.0)
  Depends: libtinfo5
  Depends: mime-support
libbz2-1.0
  Depends: libc6 (>= 2.4)
  PreDepends: multiarch-support
libdb5.3
  Depends: libc6 (>= 2.17)
  PreDepends: multiarch-support
libexpat1
  Depends: libc6 (>= 2.14)
  PreDepends: multiarch-support
libffi6
  Depends: libc6 (>= 2.14)
  PreDepends: multiarch-support
libncursesw5
  Depends: libc6 (>= 2.15)
  Depends: libtinfo5 (= 5.9+20140118-1ubuntu1)
  PreDepends: multiarch-support
libtinfo5
  Depends: libc6 (>= 2.15)
  PreDepends: multiarch-support
libpython2.7-minimal
libreadline6
  Depends: libc6 (>= 2.15)
  Depends: libtinfo5
  Depends: readline-common
  PreDepends: multiarch-support
readline-common
  Depends: dpkg (>= 1.15.4)
  Depends: install-info
dpkg
  PreDepends: libbz2-1.0
  PreDepends: libc6 (>= 2.14)
  PreDepends: liblzma5 (>= 5.1.1alpha+20120614)
  PreDepends: libselinux1 (>= 2.1.0)
  PreDepends: tar (>= 1.23)
  PreDepends: zlib1g (>= 1:1.1.4)
liblzma5
  Depends: libc6 (>= 2.14)
  PreDepends: multiarch-support
libselinux1
  Depends: libc6 (>= 2.14)
  Depends: libpcre3
  PreDepends: multiarch-support
libpcre3
  Depends: libc6 (>= 2.14)
  PreDepends: multiarch-support
tar
  PreDepends: libacl1 (>= 2.2.51-8)
  PreDepends: libc6 (>= 2.17)
  PreDepends: libselinux1 (>= 1.32)
libacl1
  Depends: libattr1 (>= 1:2.4.46-8)
  Depends: libc6 (>= 2.14)
  PreDepends: multiarch-support
libattr1
  Depends: libc6 (>= 2.4)
  PreDepends: multiarch-support
zlib1g
  Depends: libc6 (>= 2.14)
  PreDepends: multiarch-support
install-info
  Depends: libc6 (>= 2.14)
  PreDepends: dpkg (>= 1.16.1)
libsqlite3-0
  Depends: libc6 (>= 2.14)
  PreDepends: multiarch-support
libssl1.0.0
  Depends: debconf (>= 0.5)
  Depends: debconf-2.0
  Depends: libc6 (>= 2.14)
  PreDepends: multiarch-support
debconf
  PreDepends: perl-base (>= 5.6.1-4)
perl-base
  PreDepends: dpkg (>= 1.14.20)
  PreDepends: libc6 (>= 2.14)
debconf-2.0
mime-support
python-minimal
  Depends: dpkg (>= 1.13.20)
  Depends: python2.7-minimal (>= 2.7.5-1~)
python2.7-minimal
  Depends: libpython2.7-minimal (= 2.7.6-8)
  Depends: zlib1g (>= 1:1.2.0)
  PreDepends: libc6 (>= 2.15)
python2.7
  Depends: libpython2.7-stdlib (= 2.7.6-8)
  Depends: mime-support
  Depends: python2.7-minimal (= 2.7.6-8)
python:any
ucf
  Depends: coreutils (>= 5.91)
  Depends: debconf (>= 1.5.19)
coreutils
  PreDepends: libacl1 (>= 2.2.51-8)
  PreDepends: libattr1 (>= 1:2.4.46-8)
  PreDepends: libc6 (>= 2.17)
  PreDepends: libselinux1 (>= 1.32)

깨끗한 우분투 서버 설치에서는 설치 apt-rdepends에만 필요 libapt-pkg-perl합니다. 그때는 훨씬 가벼우 ubuntu-dev-tools지만 여전히 재귀 적이므로 반환 과 같은 1 차 종속성 대신 모든 종속성 을 얻 습니다apt-cache depends .


내가 잘못 이해하면 미안하지만 apt-rdepends는 reverse-depends와 같지 않다고 생각합니다. apt-rdepends는 패키지의 재귀 적 종속성을 나열하고 reverse-depends는 주어진 패키지에 의존하는 패키지를 나열합니다.
rsuarez

apt-rdepends -r은 역방향 종속성을 나열합니다.
Keith

8

이 작업을 수행하는 더 쉬운 방법이있을 수 있지만 리버스 종속을 사용하면 가능합니다. 다음을 수행하여 ubuntu-dev-tools 패키지를 설치해야합니다.

apt-get install ubuntu-dev-tools

또는이 버튼을 클릭하여 :

소프트웨어 센터를 통해 설치

설치가 완료되면 역 의존을 사용하여 특정 패키지에 따라 달라지는 것을 확인할 수 있습니다. 예를 들어, 여러 개의 추가 패키지를 설치하려는 경우 "libsmpeg0"이 설치되는 이유를 확인하려는 경우

reverse-depends libsmpeg0

다음을 출력합니다.

Reverse-Recommends
==================
* sandboxgamemaker

Reverse-Depends
===============
* btanks
* fenix-plugin-mpeg [armel armhf i386 powerpc]
* fillets-ng
* gltron [amd64 armel i386 powerpc]
* libalien-sdl-perl
* libsdl-perl [i386]
* libsmpeg-dev
* libtaoframework-sdl1.2-cil
* python-pygame
* ruby-sdl
* sdlbrt
* smpeg-gtv
* smpeg-plaympeg
* tdfsb

Packages without architectures listed are reverse-dependencies in: amd64, armel, armhf, i386, powerpc

설치하려는 패키지가 해당 목록에 있는지 확인하십시오. 그렇지 않은 경우, 초기 설치 중에 가져 오는 다른 패키지 중 하나가 해당 목록에 표시되며 해당 패키지에 대해 역방향으로 실행해야합니다. 결국 해당 목록에 설치하려는 초기 패키지가 표시됩니다. 이때 해당 패키지가 설치된 이유를 정확하게 보여주는 체인이 있어야합니다.

덧붙이 자면, 권장 사항은 기본적으로 켜져 있으므로 권장 사항으로 설정되어 있으면 권장 사항이 적용됩니다. 꺼져 있으면 제안하지만 역 의존하면 해당 정보도 표시 할 수 있습니다.


2
이 답변이 효과가 있다고 확신하지만 OP가 피하려고하는 문제를 개인화합니다. ubuntu-dev-tools다음 패키지가 설치됩니다. bzr bzr-builddeb dctrl-tools debian-archive-keyring debian-keyring debootstrap devscripts diffstat distro-info distro-info-data dput genisoimage gettext hardening-includes intltool-debian libapt-pkg-perl libarchive-zip-perl libasprintf-dev libassuan0 libauthen-sasl-perl libautodie-perl libclone-perl libcommon-sense-perl libcroco3 libdigest-hmac-perl libdistro-info-perl libemail-valid-perl libencode-locale-perl liberror-perl
가짜 이름

2
[계속] python-launchpadlib python-lazr.restfulclient python-lazr.uri python-oauth python-paramiko python-reportbug python-secretstorage python-simplejson python-soappy python-support python-wadllib python3-debian python3-magic quilt reportbug t1utils unzip wdiff xdelta (참고 : 위는 상당히 깨끗한 우분투 서버 인스턴스 에서 필요한 패키지 일뿐입니다sudo apt-get install ubuntu-dev-tools ). 엄청난 양의 크래프트를 설치 하지 않으려는 경우 이것이 최악의 해결책 일 것입니다.
가짜 이름
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.