dpkg-query placeholders “Nome do arquivo”, “MD5sum” e “Tamanho” estão sempre vazios

3

Atualmente, estou tentando obter algumas informações sobre os pacotes e sistemas instalados que usam dpkg . Então eu tentei usar dpkg-query . A maioria dos marcadores funciona bem e eu recebo o que preciso, mas notei que os espaços reservados Filename , MD5sum e Size estão sempre vazios.

Comando simples para ver o problema:

dpkg-query -W -f '"location":"${Filename}","md5":"${MD5sum}","size":"${Size}"\n'

Isso resultará em cargas de linhas de apenas

"location":"","md5":"","size":""
    
por BrainStone 22.08.2018 / 14:52

2 respostas

4

Como mencionado em the manpage , esses campos são "internos, relacionados ao front-end" . Na verdade, eles são usados apenas em dselect .

Isso significa que você não pode confiar neles em dpkg-query , por padrão. Eles correspondem a valores armazenados no banco de dados “disponível”, /var/lib/dpkg/available ; Por padrão, dpkg-query considera apenas /var/lib/dpkg/status atualmente. Você pode adicionar a opção --load-avail para mesclar as informações do banco de dados “disponível”, em teoria - mas isso requer o uso de dselect como sua ferramenta de instalação de pacotes, pois /var/lib/dpkg/available é mantido atualizado apenas por dselect . Se você usar o APT, isso não funcionará, conforme descrito na documentação do comando -p :

Users of APT-based frontends should use apt-cache show package-name instead as the available file is only kept up-to-date when using dselect.

Pode ajudar se eu expandir um pouco o significado dos campos: Filename , MD5sum e Size (e MSDOS-Filename ) fornecem informações sobre o arquivo que contém um pacote (seu nome de arquivo, soma de verificação e Tamanho). Eles não são pertinentes aos próprios pacotes, por isso, o banco de dados status não precisa deles e não os armazena. Um pacote, instalado ou não, permanece o mesmo, independentemente de onde seu arquivo de pacote se encontre e quais são suas características. Essa informação é útil apenas para front-ends que recuperam pacotes e os fornecem para dpkg .

    
por 22.08.2018 / 15:00
4

Você pode usar a ferramenta grep-available em vez disso (ou mais melhor grep-aptavail como mencionado @Stephen Kitt ):

grep-available -s  Filename,MD5sum,size -PX <package_name>

Exemplo:

grep-available -s  Filename,MD5sum,size -PX dpkg

exemplo de saída:

Filename: pool/main/d/dpkg/dpkg_1.18.24_amd64.deb
MD5sum: 5553b3fac608f5c4f9fa3ddbff18c2c5
Size: 2106696
    
por 22.08.2018 / 15:34