Como saber de que repositório Ubuntu ou Debian vem um pacote?

164

Em um sistema baseado no Debian, incluindo o Ubuntu, como alguém pode dizer de qual repositório um pacote será baixado, sem realmente iniciar o download? aptitude show e apt-cache info mostrarão a seção (por exemplo, meta-pacote, base, gráficos), mas não o repositório ao qual um pacote pertence (por exemplo, link ou link ).

Ao instalar o pacote, o repositório atual aparece durante o download (ele é impresso na saída "downloading from ..." do apt e programas semelhantes), mas como obter informações no repositório que contém o pacote ( ou uma versão específica de um pacote) sem baixar e instalar primeiro?

Além disso, como se pode determinar o repositório de origem para um pacote já instalado?

    
por gotgenes 09.02.2010 / 20:14

6 respostas

202

Eu corro apt-cache policy <package name> :

$ apt-cache policy wajig
wajig:
  Installed: 2.1
  Candidate: 2.1
  Version table:
 *** 2.1 0
        100 /var/lib/dpkg/status
     2.0.47 0
        500 file:/home/wena/.repo_bin/ squeeze/main i386 Packages
        500 ftp://ftp.is.co.za/debian/ squeeze/main i386 Packages

Isso significa que existem três pacotes wajig :

  • Um que está instalado ( /var/lib/dpkg/status )

  • Um que está disponível em um repositório local ( file:/home/wena/.repo_bin/ )

  • Um que está disponível a partir de um repositório remoto ( ftp://ftp.is.co.za/debian ), que também tem a mesma versão ( 2.0.47 ) que o de um repositório local

Além disso, apt-cache madison <package name> exibirá informações semelhantes em um formato tabular.

 wajig |        2.2 | mirror://mirrors.ubuntu.com/mirrors.txt/ precise/universe amd64 Packages
 wajig |        2.2 | mirror://mirrors.ubuntu.com/mirrors.txt/ precise/universe Sources
    
por 22.01.2011 / 23:00
27

Aha! Aparentemente, o comando apt apropriado não é apt-cache info , mas apt-cache showpkg .

$ apt-cache showpkg linux-generic
Package: linux-generic
Versions: 
2.6.31.19.32 (/var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic-updates_main_binary-amd64_Packages) (/var/lib/apt/lists/security.ubuntu.com_ubuntu_dists_karmic-security_main_binary-amd64_Packages) (/var/lib/dpkg/status)
 Description Language: 
                 File: /var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic-updates_main_binary-amd64_Packages
                  MD5: 5d722da329763b9342d322f5a140005c

2.6.31.14.27 (/var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic_main_binary-amd64_Packages)
 Description Language: 
                 File: /var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic_main_binary-amd64_Packages
                  MD5: 5d722da329763b9342d322f5a140005c


Reverse Depends: 
Dependencies: 
2.6.31.19.32 - linux-image-generic (5 2.6.31.19.32) 
2.6.31.14.27 - linux-image-generic (5 2.6.31.14.27) 
Provides: 
2.6.31.19.32 - 
2.6.31.14.27 - 
Reverse Provides: 

A linha File: fornece as informações do repositório após o /var/lib/apt/lists/ .

Existe um relatório de erros que aptitude não pode exibir o repositório de origem , mas parece que no momento o recurso ainda está na lista de desejos.

    
por 10.02.2010 / 01:57
8

Isso funciona para mim (mostra onde está o pacote 2vcard):

$ grep 2vcard /var/lib/apt/lists/* | grep "Filename:"

/var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic_universe_binary-i386_Packages:Filename: pool/universe/2/2vcard/2vcard_0.5-3_all.deb

Você pode aplicar filtragem adicional para verificar versões, etc., se houver várias versões disponíveis.

    
por 09.02.2010 / 20:41
8

Eu me pergunto por que ninguém mencionou aptitude . Eu uso isso o tempo todo.

Aptidão é:

  • enviado por padrão com muitas distribuições baseadas no Debian. Pode ser instalado em outro (como o Ubuntu) via sudo apt install aptitude
  • não requer privilégios administrativos (pelo menos para o comando abaixo)
  • tem uma boa ncurses GUI (mas a maior parte do tempo usada sem ela)
  • fornece uma saída muito bonita. Para mostrar versões de pacotes, use o comando aptitude versions :

    me@wheezy:~$ aptitude versions kde-standard
    Package kde-standard:                        
    i A 5:77+deb7u1     stable              500
    p A 5:84            testing,unstable    130
    
  • não tem poderes de super vaca

A letra na frente de cada string indica o status do pacote, i é instalado e p é removido (ou nunca instalado), stable , testing e unstable são definições de repositório, o número no final é uma prioridade de pin .

Uma ressalva em relação às versões recentes do aptitude vale a pena mencionar aqui: por padrão, ele mostra todos os pacotes, que incluem o nome que você procura, então use um regex mágica um pouco para procurar pelo nome restrito, por exemplo aptitude versions ^kde-workspace$ .

    
por 12.01.2015 / 12:32
6

Infelizmente, essas informações não são registradas durante a instalação do pacote. Você pode fazer um palpite decente se o repositório ainda estiver na lista de fontes e o repositório ainda tiver o pacote:

grep -l PKG /var/lib/apt/lists/*

apt-cache showpkg está mostrando dados do banco de dados do repositório (não o que está instalado), então é outra forma da mesma informação do grep.

Mesmo o synaptic não pode dizer (na tela de origem) se você desabilitar o repositório e atualizar.

    
por 20.10.2010 / 23:42
2

Ou, inspirado por Sunny, você pode tentar:

# list installed restricted packages
for i in 'dpkg --get-selections | awk '{ print $1 }''; do egrep -lRI "^Filename: .*/${i}_[^/]+.deb" /var/lib/apt/lists/ | grep -q 'restricted' && echo $i; done

# list installed multiverse packages
for i in 'dpkg --get-selections | awk '{ print $1 }''; do egrep -lRI "^Filename: .*/${i}_[^/]+.deb" /var/lib/apt/lists/ | grep -q 'multiverse' && echo $i; done

ps. não é 100% preciso.

    
por 22.01.2011 / 16:55