
Estou tentando encontrar um bom método para encontrar o repositório de cada pacote armazenado em meu sistema que possa ser facilmente analisado.
História de fundo:
Eu tenho sistemas wheezy Debian e configurei o repositório wheezy-backports, para poder obter uma versão mais recente de um pacote. Cometi um erro com meus padrões na configuração de fixação, que não percebi. Eu fixei *
no repositório backports. Algumas semanas depois, emiti um apt-get -y dist-upgrade
e não estava prestando atenção e atualizei muito mais pacotes para wheezy-backports do que estava interessado.
Eu tinha backups, então poderia restaurar as coisas facilmente, mas essa situação me fez realmente querer encontrar uma maneira de descobrir de qual repositório cada pacote veio.
O método mais próximo que encontrei até agora é assim. apt-cache policy $(dpkg -l | awk '/ii/ {print $2}' )
. O que é um pouco próximo, mas o ideal seria obter um relatório como este para todos os pacotes.
Package<tab>Version<tab>Origin<tab>Suite
Onde Origin/Suite são os valores dos arquivos Release do repositório.
Responder1
O script python a seguir analisa a saída apt-cache policy
e gera a lista de todos os pacotes instalados com o formato de saída
Package<tab>Version<tab>Origin<tab>Suite
apt-show-origins
#!/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
Notas:
- Ao contrário do que é dito nos comentários
apt-show-versions
ainda se mantém, verifique olista de discussão oficial. Mas não pode ajudar porque não mostra a origem do pacote.
Responder2
Já faz um tempo desde que postei esta pergunta. De qualquer forma, uma ferramenta foi adicionada há alguns anos que também teria resolvido meu problema subjacente, que era encontrar pacotes extras/desatualizados/estrangeiros instalados no sistema.
O comando apt-forktracer
está disponível como um pacote. Quando executado, basicamente mostrará todos os pacotes que não são da versão atualmente instalada.