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


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 seção (por exemplo, meta-pacote, base, gráficos), mas não o repositório a qual pertence um pacote (por exemplo, http://ppa.launchpad.net/mactel-support/ppa/ubuntu ou http://us.archive.ubuntu.com/ubuntu/).

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 um arquivo específico)? versão de um pacote) sem baixando e instalando primeiro?

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


164


origem


Eu acho esta uma das deficiências de Apt; simplesmente não é fácil dizer a partir de qual repositório fornece um determinado pacote dentro das ferramentas do instalador de pacotes. - quack quixote


Respostas:


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 wajig pacotes:

  • 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 em um repositório remoto (ftp://ftp.is.co.za/debian), que também passa a ter a mesma versão (2,0,47) como aquele em 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

202



Mas não mostra de onde veio o pacote instalado, não é? - Adobe
@Adobe No meu caso, o 2.1 versão não está disponível em nenhum repositório. É construído localmente. - Tshepang
Qual é o sinal do pacote instalado? *** ou /var/lib/dpkg/status ? - SuB
Talvez ambos? Não tenho certeza. - Tshepang
Quando o pacote não está instalado, apt-cache policy diz: Installed: (none). - John McGehee


Ah! Aparentemente, o bom apt comando não é apt-cache info, mas ao invés, 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: 

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

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


27



Esse recurso de aptidão ainda está no whisker 8 anos depois e eu não sei porque esta resposta (apt-cache showpkg) não está marcado como o correto. - Csaba Toth


Isso funciona para mim (mostra onde 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 várias versões estiverem disponíveis.


8



Pragmático. Surpreende-me que esta informação não seja acessível através de qualquer um dos front-ends dpkg, Apesar. - gotgenes
@got Está disponível: superuser.com/questions/106794/… - Tshepang


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 um bom ncurses GUI (mas a maior parte do tempo usado sem ele)
  • fornece uma saída realmente bonita. Para mostrar versões de pacotes, use aptitude versions comando:

    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, Eu está instalado e p é removido (ou nunca instalado), estável, testando e instável são definições de repositório, o número no final é um prioridade de alfinete.

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 magia um pouco para procurar pelo nome estrito, por exemplo aptitude versions ^kde-workspace$.


8



Bom comando, mas não lista o repositório conforme solicitado. - bjhend
Na realidade faz. - TranslucentCloud
Você não entende. PPAs adicionais podem ser instalados. É importante saber se um pacote é de tal PPA. De fato, é isso que estou tentando descobrir agora - se for, posso remover o PPA, reduzindo o risco de problemas. - reinierpost
Sim, você está certo, com versions você pode simplesmente verificar os valores de fixação apt dos pacotes fornecidos, não os repos associados. Ainda assim é útil se você souber todos os seus repositórios e como eles são fixados. - TranslucentCloud


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 showpkgestá 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.


6





Ou, inspirado pelo 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.


2