
나는 쉽게 구문 분석할 수 있는 내 시스템에 저장된 각 패키지의 저장소를 찾는 좋은 방법을 찾으려고 노력하고 있습니다.
뒷이야기:
나는 Debian wheezy 시스템을 가지고 있고 wheezy-backports 저장소를 설정했기 때문에 최신 버전의 패키지를 얻을 수 있습니다. 고정 구성의 패턴에 실수를 했는데 눈치채지 못했습니다. *
백포트 저장소에 고정했습니다 . 몇 주 후에 나는 a를 발행했지만 apt-get -y dist-upgrade
주의를 기울이지 않았고 관심이 있었던 것보다 훨씬 더 많은 패키지를 wheezy-backports로 업그레이드했습니다.
백업이 있어서 쉽게 복원할 수 있었지만 이 상황으로 인해 각 패키지가 어느 저장소에서 왔는지 찾는 방법을 꼭 찾고 싶었습니다.
지금까지 내가 찾은 가장 가까운 방법은 다음과 같습니다. apt-cache policy $(dpkg -l | awk '/ii/ {print $2}' )
. 다소 비슷하지만 이상적으로는 모든 패키지에 대해 이와 같은 보고서를 받고 싶습니다.
Package<tab>Version<tab>Origin<tab>Suite
Origin/Suite는 저장소 릴리스 파일의 값입니다.
답변1
다음 Python 스크립트는 apt-cache policy
출력 형식을 사용하여 설치된 모든 패키지의 출력을 구문 분석하고 목록을 생성합니다.
Package<tab>Version<tab>Origin<tab>Suite
적절한 쇼 원산지
#!/usr/bin/env python
# Should be written with python-apt
# but for now parse the output of apt-cache policy
import os
import re
command = "apt-cache policy $(dpkg -l | awk '/ii/ {print $2}' )"
stream = os.popen(command);
content = stream.readlines()
getOrigin = False
pkgList = []
#Parse the output generated by apt-cache
for s in content:
if(not s.startswith(' ')):
pkg = type('', (), {})() #Create an empty object
pkg.name = s[:-2] #Remove trailing ':\n'
elif(getOrigin):
pkg.origin = re.split('\s+',s)[2]
pkg.suite = re.split('\s+',s)[3]
pkgList.append(pkg)
getOrigin = False
elif(s.startswith(' ***')):
pkg.version = re.split('\s+',s)[2]
getOrigin = True
#Display the list
for pkg in pkgList:
print pkg.name + '\t'\
+ pkg.version + '\t'\
+ pkg.origin + '\t'\
+ pkg.suite
노트:
- 댓글에 언급된 내용은
apt-show-versions
여전히 유지되고 있으니 확인해보세요.공식 메일링 리스트. 하지만 패키지의 출처를 출력하지 않기 때문에 도움이 될 수 없습니다.
답변2
이 질문을 게시한 지 꽤 시간이 지났습니다. 어쨌든 몇 년 전에 시스템에 설치된 추가/오래된/외부 패키지를 찾는 것이 내 기본 문제를 해결하는 도구가 추가되었습니다.
이 명령은 apt-forktracer
패키지로 제공됩니다. 실행되면 기본적으로 현재 설치된 릴리스가 아닌 모든 패키지가 표시됩니다.