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?

gotgenes
fonte
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
tshepang
fonte
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.

gotgenes
fonte
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.

Ensolarado
fonte
Pragmático. Estou surpreso que essa informação não esteja acessível através de nenhum dos front-ends dpkg, no entanto.
gotgenes
@got Está disponível: superuser.com/questions/106794/…
tshepang
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$.

TranslucentCloud
fonte
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.

kanaka
fonte
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.

Tim
fonte