listando pacotes no Debian, a la 'dpkg -l', mas incluindo a origem / origem do pacote

5

Eu quero listar todos os pacotes do formulário

$ dpkg -l libav\*

mas, além desta saída, eu gostaria da origem / fonte (não tenho certeza do termo preferido) de cada pacote. Se o pacote não corresponder a nenhuma fonte, deve ser desconhecido ou similar. No topo da minha cabeça, a abordagem mais promissora seria usar dctrl-tools , mas eu não sou Certifique-se de como fazê-lo. Para o fundo, eu estava tentando depurar uma incompatibilidade de biblioteca com ffmpeg. Veja relatório de erros do Debian - ffmpeg: backport de 4: 0.6.1-5 da unstable produz AVISO: biblioteca incompatibilidade de configuração . O relatório de bug não é mais um problema, mas ainda estou interessado nesta questão.

Só para ficar claro no formato, isso deve ser parecido com

ii  libavahi-client-dev  0.6.27-2+squeeze1  Development files for the Avahi client library  squeeze
ii  libavcodec-dev       4:0.6.1-5          Development files for libavcodec                unstable

Se o mesmo pacote estiver disponível em várias categorias, ou seja. em squeeze e testing, então a categoria menor > mais antiga disponível deve ser usada. Nesse caso, aperte.

    
por Faheem Mitha 28.03.2011 / 11:17

1 resposta

5

O Dpkg não acompanha esta informação. Onde você obteve cada arquivo .deb não é sua preocupação.

O Apt também não rastreia essas informações, mas sabe onde você pode agora pegar o pacote, o que é bom o suficiente.

Como 9000 escreveu em um comentário, apt-cache policy '^libav' mostra quais versões de pacotes com nomes correspondentes ao regexp ^libav estão instalados ou disponíveis. A saída não é particularmente conveniente para analisar, mas aqui está um script minimamente testado que fornece aproximadamente o formato desejado:

{ LC_CTYPE=C apt-cache policy '^libav'; echo .; } | perl -l -ne '
    if (!/^ /) {
        if (defined $version) {print "$package: $version unknown"}
        s/: *$//; $package=$_; $installed=1; $version=undef;
    }
    if (/^ *Installed: *\(none\)$/) {$installed=0}
    if ($installed && /^ \*+ +([^ ]+)/) {$version=$1}
    if (/^     [^ ]/) {$version=undef}
    if ($installed && defined $version && /^ +[0-9]+ +[^ ]+ +([^ \/]+)/) {
        print "$package: $version $1";
        $version=undef;
    }
'

Outra maneira de obter as informações solicitadas é com aptitude versions . Novamente, o fragmento minimamente testado abaixo fornece aproximadamente o formato desejado. O padrão "^libav" ~i corresponde a pacotes instalados e cujo nome corresponde ao regexp fornecido.

aptitude versions '"^libav" ~i' |
awk -vRS= '{if ($6 !~ /[^0-9]/) {$6="unknown"}
            print $3, $2, $5, $6}'

Há também um utilitário de pacotes separados apt-show-versions que, mais uma vez, fornece as informações que você deseja em aproximadamente o formato que você está perguntando.

apt-show-versions | grep '^libav'
    
por 28.03.2011 / 20:41

Tags