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


168

Em um sistema baseado no Debian, incluindo o Ubuntu, como saber em qual repositório um pacote será baixado, sem realmente iniciar o download? aptitude showe apt-cache infomostrará a seção (por exemplo, metapacote, base, gráficos), mas não o repositório ao qual um pacote pertence (por exemplo, http://ppa.launchpad.net/mactel-support/ppa/ubuntu ou http: // us .archive.ubuntu.com / ubuntu / ).

Ao instalar o pacote, o repositório real aparece durante o download (ele é impresso na saída "download de ..." de programas apt e similares), mas como obter informações sobre o repositório que contém o pacote (ou um arquivo específico) versão de um pacote) sem fazer o download e instalá-lo primeiro?

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


1
acho essa uma das deficiências do Apt; não é fácil saber de qual repositório fornece um determinado pacote nas ferramentas do instalador do pacote.
quack quixote

Respostas:


203

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 wajigpacotes:

  • 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 possui a mesma versão ( 2.0.47 ) da versão 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

Mas não mostra de onde veio o pacote instalado, mostra?
Adobe

2
@Adobe No meu caso, a 2.1versão não está disponível em nenhum repositório. É construído localmente.
tshepang

2
O que é sinal de pacote instalado? ***ou /var/lib/dpkg/status?
SuB

Talvez ambos? Não tenho certeza.
tshepang

Quando o pacote não está instalado, apt-cache policydiz: Installed: (none).
John McGehee

28

Aha! Aparentemente, o aptcomando apropriado não é apt-cache info, mas sim 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 File:linha fornece as informações do repositório após o /var/lib/apt/lists/.

um relatório de erro que aptitudenão pode exibir o repositório de origem , mas parece que atualmente o recurso ainda está na lista de desejos.


Esse recurso de aptidão ainda está no whislist 8 anos depois e não sei por que essa resposta ( apt-cache showpkg) não está marcada como correta.
Csaba Toth 24/03

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 várias versões estiverem disponíveis.


Pragmático. Estou surpreso que essa informação não esteja acessível através de nenhum dos front-ends dpkg, no entanto.
gotgenes


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) viasudo apt install aptitude
  • não requer privilégios administrativos (pelo menos para o comando abaixo)
  • tem uma boa ncursesinterface gráfica (mas na maioria das vezes é usada sem ela)
  • fornece uma saída realmente bonita. Para mostrar versões de pacotes, use o aptitude versionscomando:

    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 Super Cow Powers

A letra na frente de cada string indica o status do pacote, i está instalado ep é eliminado (ou nunca instalado), estável , testing e instável são definições de repositório, o número no final é uma prioridade de pinos .

Uma ressalva sobre as versões recentes do aptitude que vale a pena mencionar aqui: por padrão, mostra todos os pacotes, que incluem o nome que você pesquisa, portanto, use um regex mágico para pesquisar pelo nome estrito, por exemplo aptitude versions ^kde-workspace$.


1
Comando Nice, mas não lista o repositório conforme solicitado.
bjhend

Na verdade , sim .
TranslucentCloud

Você não entende. PPAs adicionais podem ser instalados. É importante saber se um pacote é desse PPA. Na verdade, é isso que estou tentando descobrir agora - se for, posso remover o PPA, reduzindo o risco de problemas.
Reinierpost

Sim, você está certo, versionsbasta verificar os valores de fixação apropriados dos pacotes fornecidos, não os repositórios associados. No entanto, ainda é útil se você souber todos os seus repositórios e como eles são fixados.
TranslucentCloud

6

Infelizmente, essas informações não são registradas durante a instalação do pacote. Você pode adivinhar se o repositório ainda está na lista de fontes e o repositório ainda possui 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), por isso é outra forma das mesmas informações do grep.

Mesmo o sináptico não pode dizer (na tela Origem) se você desabilitar o repositório e atualizar.


2

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.