Como faço para listar os pacotes instalados com URI de origem, distribuição e seção no Debian?

3

Muito parecido com o título diz.

Eu tenho um conjunto de URIs (fontes), distribuições e seções ativadas em minha configuração apt do Debian Wheezy. Agora eu quero uma lista de todos os pacotes instalados, e para cada um deles, o URI de origem, "distribuição" e "seção" da qual a versão atualmente instalada de cada pacote respectivo foi instalada.

Estou basicamente procurando algo como a saída de dpkg -l , mas, em vez da descrição, ela mostraria a URI, a distribuição e a seção de origem. Algo como:

||/ Name       Version           Arch  InstalledFrom
+++-==========-=================-=====-===================
ii  package1   1:4.14-1.1+deb7u1 amd64 ftp://ftp.se.debian.org/debian wheezy main
ii  package2   1.7-1             all   ftp://ftp.se.debian.org/debian wheezy/updates main
ii  package3   1.0.25+3~deb7u1   all   ftp://ftp.se.debian.org/debian wheezy non-free
ii  package4   0.9.8~3           amd64 local
ii  package5   7.2.107           i386  local

Como posso obter essa lista de pacotes?

Bem formatado seria um bônus, mas principalmente qualquer coisa que eu possa grep para substrings de linhas interessantes (ou mesmo apenas navegar) provavelmente fará.

    
por a CVn 08.02.2015 / 16:08

4 respostas

2

Eu me encontrei juntando peças das diferentes respostas, particularmente Braiam e muru's . No final, acabei com este oneliner, o que me deixa perto o suficiente para começar, e eu deveria ser capaz de descobrir o resto:

dpkg-query --showformat '${Package}\n' -W | \
while read package; do \
  apt-cache policy $package | grep -q wheezy/non-free && echo $package ; \
done

O item acima lista os nomes de todos os pacotes que apt-cache policy reporta como provenientes de wheezy / non-free (não exatamente, mas perto o suficiente para o momento). Ajustando o que o script faz com a saída apt-cache policy , enquanto não estiver em um formato tabular agradável (pelo menos fora da caixa), deve ser possível aproximar-se bastante do que eu estou procurando.

Obrigado a todos que ajudaram!

    
por 14.02.2015 / 15:38
3

Você está procurando por apt-cache policy output:

➜  ~  apt-cache policy skype
skype:i386:
  Installed: 4.3.0.37-1
  Candidate: 4.3.0.37-1
  Version table:
 *** 4.3.0.37-1 0
        100 /var/lib/dpkg/status
➜  ~  apt-cache policy irssi
irssi:
  Installed: 0.8.17-1
  Candidate: 0.8.17-1
  Version table:
 *** 0.8.17-1 0
        900 http://http.debian.net/debian/ testing/main amd64 Packages
        500 http://http.debian.net/debian/ unstable/main amd64 Packages
        100 /var/lib/dpkg/status
➜  ~  apt-cache policy megasync
megasync:
  Installed: 1.0.39
  Candidate: 1.0.39
  Version table:
 *** 1.0.39 0
        500 http://mega.nz/linux/MEGAsync/Debian_7.0/ ./ Packages
        100 /var/lib/dpkg/status

Neste caso, a versão instalada do skype não está disponível em nenhum repositório (que inclui instalação local), o irssi é instalado a partir de repositórios da Debian, e o megasync é de um repositório de terceiros.

    
por 08.02.2015 / 16:42
3

Além de apt-cache policy , descrito na resposta da Braiam , você pode usar apt-show-versions e apt-forktracer .

apt-show-versions por padrão listará todos os pacotes instalados com a suíte de onde eles vêm, sua versão e se eles podem ser atualizados; por exemplo

afl:amd64/experimental *manually* upgradeable from 1.28b-1 to 1.36b-1
agedu:amd64/testing 9723-1 uptodate
devio:armhf 1.2-1 installed: No available version in archive

Com a opção -a , ele lista a versão instalada e todas as versões disponíveis em todos os repositórios que você configurou:

afl:amd64 1.28b-1 install ok installed
No stable version
No testing version
No unstable version
afl:amd64 1.36b-1 experimental ftp.fr.debian.org
afl:amd64/experimental *manually* upgradeable from 1.28b-1 to 1.36b-1
agedu:amd64 9723-1 install ok installed
No stable version
agedu:amd64 9723-1 testing  ftp.fr.debian.org
agedu:amd64 9723-1 unstable ftp.fr.debian.org
No experimental version
agedu:amd64/testing 9723-1 uptodate

apt-forktracer lista os pacotes que não vêm dos repositórios padrão ou cuja versão instalada não corresponde aos disponíveis nos repositórios padrão:

afl (1.28b-1) [Debian: 1.36b-1]
bb (1.3rc1-8.2) [Debian: 1.3rc1-8.1+b1 1.3rc1-8.1+b1]
biew (5.7.3.1-0.1) [SK2: 5.7.3.1-0.1]
    
por 08.02.2015 / 18:11
3

-l é uma das opções de dpkg-query , que tem outra opção, -W (ou --show ). -W permite usar para selecionar um formato de saída. Você pode tentar:

dpkg-query --showformat '${Status}\t${Package}\t${Version}\t${Architecture}\t${Origin}\t${Section}\n' -W | 
  column -ts $'\t'

Por exemplo:

$ dpkg-query --showformat '${db:Status-Abbrev}\t${Package}\t${Version}\t${Architecture}\t${Origin}\t${Section}\n' -W | column -ts $'\t' | head
ii  account-plugin-aim           3.8.6-0ubuntu9.1                amd64  gnome
ii  account-plugin-facebook      0.11+14.04.20140409.1-0ubuntu1  all    gnome
ii  account-plugin-flickr        0.11+14.04.20140409.1-0ubuntu1  all    gnome
ii  account-plugin-google        0.11+14.04.20140409.1-0ubuntu1  all    gnome
ii  account-plugin-jabber        3.8.6-0ubuntu9.1                amd64  gnome
ii  account-plugin-salut         3.8.6-0ubuntu9.1                amd64  gnome
ii  account-plugin-twitter       0.11+14.04.20140409.1-0ubuntu1  all    gnome
ii  account-plugin-windows-live  0.11+14.04.20140409.1-0ubuntu1  all    gnome
ii  account-plugin-yahoo         3.8.6-0ubuntu9.1                amd64  gnome
ii  accountsservice              0.6.35-0ubuntu7.1               amd64  admin

O URI não é conhecido por dpkg , pois essa é uma preocupação de frontend ( apt ). Não deve ser tão difícil usar awk ou algo para obtê-lo também.

    
por 08.02.2015 / 19:37