Debian 기반 시스템에 설치된 모든 패키지의 소스 찾기

Debian 기반 시스템에 설치된 모든 패키지의 소스 찾기

나는 쉽게 구문 분석할 수 있는 내 시스템에 저장된 각 패키지의 저장소를 찾는 좋은 방법을 찾으려고 노력하고 있습니다.

뒷이야기:

나는 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패키지로 제공됩니다. 실행되면 기본적으로 현재 설치된 릴리스가 아닌 모든 패키지가 표시됩니다.

https://packages.debian.org/stable/apt-forktracer

관련 정보