패키지에 문제가 있었는데 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 파일은 종속성 트리를 생성하는 프로그램에 대한 입력으로 사용됩니다. 실제로 이로 인해 여러 개의 트리가 생성될 수 있습니다. 각 트리의 루트는 내가 관심 있는 값입니다.
저는 앞으로 며칠 동안 여가 시간에 이 프로그램을 작업할 예정이며, 완료되면 게시하겠습니다.