apt/aptitude - 패키지 모음 전체에 대한 패키지 종속성 트리를 표시하는 방법은 무엇입니까?

apt/aptitude - 패키지 모음 전체에 대한 패키지 종속성 트리를 표시하는 방법은 무엇입니까?

패키지에 문제가 있었는데 apt해결했습니다. 문제와 해결 방법은 여기에서 논의됩니다. 적성은 많은 패키지를 제거해야 한다고 말합니다...?

그런데 이 질문에 대해 토론을 하던 중, 제가 답을 찾고 싶은 부수적인 질문이 있다는 것을 깨달았고 apt, 그래서 이번 질문을 게시하게 되었습니다.

실수로 1,400개가 넘는 "자동" 패키지가 고아가 되어 "더 이상 사용되지 않음"으로 표시되는 일을 했는데, aptitude이제 그 이유는 모두 궁극적으로 기본 수준 패키지 또는 메타에 의존했기 때문인 것으로 보입니다. -실수로 삭제된 패키지.

이 경우 apt패키지 목록을 입력으로 사용하고 전체 패키지 세트에 대한 종속성 트리를 생성하는 데 사용할 수 있는 유틸리티나 프로시저가 있습니까? 그렇다면 이 트리 상단에서 실수로 삭제한 패키지를 식별한 다음 해당 패키지를 다시 설치하여 문제를 해결할 수 있습니다.

즉, 패키지 목록을 입력으로 사용하고 이와 유사한 것을 출력으로 생성하는 프로시저나 유틸리티를 찾고 있습니다.

top-package
|--package-000
|-+package-001
| |--package-002
|-+package-003
| |--package-004
| |--package-005
| |-+package-006
| | |--package-007
| |--package-008
|--package-009
... etc. ...

... package-NNN입력 패키지 목록과 이들이 종속되고 top-package종속성 트리의 루트가 되는 기타 패키지 목록은 어디에 있습니까? 문제가 상위 수준 메타패키지를 실수로 제거했기 때문에 발생했다는 가정이 맞다면 top-package제거된 패키지가 식별됩니다. 그런 다음 다시 설치하여 top-package문제를 해결할 수 있습니다.

명확히 하자면, 나는 내 특정 문제를 다른 방식으로 해결했음을 반복하고 싶습니다(인용된 토론 참조). 나는 이 특정 문제를 해결하기 위해 여기에 요청하는 것이 아니라, 앞으로 일어날 수 있는 문제를 진단하고 수정하는 데 도움이 되는 위에 설명된 것과 같은 일종의 종속성 트리 목록 도구를 원하기 때문입니다.

어떤 참고나 조언이라도 주시면 정말 감사하겠습니다.

답변1

당신은 그것을 사용할 수 있습니다 :

apt depends <package>
apt-cache depends <package>   

또는 부채 나무:

sudo apt install debtree
debtree <package>

남자 빚나무:

지정된 패키지에 대한 종속성 그래프("점" 구문)를 생성합니다...

기본적으로 종속성 그래프에는 (사전)종속성, 권장 패키지, 버전이 지정되지 않은 충돌 및 요청된 패키지에서 제공하는 가상 패키지가 표시됩니다. 선택적으로 제안된 패키지 및 버전 충돌을 포함할 수도 있습니다.

패키지 목록을 파일에 넣은 후 다음을 수행하십시오.

cat file |xargs -n 1 apt-cache depends
cat file |xargs -n 1 debtree

답변2

위의 제안을 시도했지만 원하는 결과를 얻지 못했습니다. 나는 다음을 수행했습니다.

no-longer-in-use.txt나는 1,400개 이상의 패키지 이름 목록을 한 줄에 하나씩 패키지 이름 이라는 파일에 넣었습니다 .

그런 다음 다음 명령을 실행했습니다.

% xargs -n 1 debtree <no-longer-in-use.txt | dot -Tjpg >depgraph.jpg

2~3시간 동안 실행되었으며 결과 depgraph.jpg파일은 3.4GB 이상의 디스크 공간을 차지했습니다.

이 파일을 보려고 하면 4개 항목이 포함된 작은 차트만 표시됩니다. 나는 이 명령이 결국 1,400개 이상의 별도 차트를 생성한 다음 이를 출력에 하나씩 추가한 것으로 추측합니다. 이는 내 이미지 뷰어가 첫 번째 이미지만 볼 수 있음을 의미합니다.

어쨌든, 여러 개의 개별 차트가 아닌 단일 차트로 병합하고 싶습니다. 나는 이것을 달성하기 위해 debtree(또는 apt-cache depends그 문제를 위해) 종속성 트리를 포함하는 것으로 통합된 모든 개별 패키지 종속성을 나타내기 위해 출력을 전처리해야 한다고 생각합니다.

그리고저것통해 먹일 수 있는 것입니다 dot.

하지만 이는 여전히 거대한 이미지 파일이 될 수 있으므로 해당 보기는 필요하지 않습니다.

이 접근 방식을 취하는 대신 다음을 시도해 보겠습니다.

각 패키지에 대해 실행 하고 아래와 같이 apt-cache depends각 행에 패키지 이름과 데이터가 포함된 CSV 파일로 출력 형식을 지정합니다 . Depends:예를 들어 ftp패키지를 사용하면 다음과 같습니다.

apt-cache depends ftp산출:

ftp
  Depends: libc6
  Depends: libreadline8
  Depends: netbase
  Replaces: <netstd>

처리된 CSV 출력:

ftp,libc6
ftp,libreadline8
ftp,netbase

1,400개가 넘는 모든 패키지에 대해 이 작업을 수행한 다음 개별 CSV 출력을 하나의 큰 CSV 파일로 연결합니다.

이 큰 CSV 파일은 종속성 트리를 생성하는 프로그램에 대한 입력으로 사용됩니다. 실제로 이로 인해 여러 개의 트리가 생성될 수 있습니다. 각 트리의 루트는 내가 관심 있는 값입니다.

저는 앞으로 며칠 동안 여가 시간에 이 프로그램을 작업할 예정이며, 완료되면 게시하겠습니다.

관련 정보