Como determinar se um pacote é um meta-pacote a partir da linha de comando?

12

Como posso determinar se um pacote é um meta-pacote a partir da linha de comando, possivelmente via apt-get, aptitude ou apt-cache?

Eu tentei:

apt-cache show texlive-full
apt-cache showpkg texlive-full

mas a única maneira que eu posso dizer este pacote é meta lendo o campo "en-description".

Existe uma maneira mais automática de fazer isso, que me dará uma resposta sim / não, ou pelo menos tem um campo como "en-description" dedicado a isso?

    

2 respostas

6

Não há uma definição formal de um metapacote. A definição informal é que um meta-pacote é aquele que se destina apenas a ser instalado para suas dependências e não contém nenhum arquivo útil próprio.

Você pode definir um meta-pacote como um pacote que não contém nenhum arquivo. Não há como determinar isso no banco de dados de pacotes. Você pode usar o banco de dados de arquivos e verificar se o pacote contém apenas diretórios (muitos desses pacotes contêm alguns diretórios). Na verdade, a maioria dos meta-pacotes contém alguns arquivos no arquivo /usr/share/doc/<package name> : a copyright , um changelog, às vezes mais alguns. Aqui está uma aproximação que define um metapacote como contendo apenas arquivos em /usr/share/doc/<some directory> (não em subdiretórios dele) e os diretórios principais:

if ! apt-file -F list $package | grep -qvE '^/(usr(/share(/doc(/[^/]*(/[^/]*)?)?)?)?)?$'; then
  echo "$package looks like a metapackage"
fi

Outra abordagem é procurar por uma tag de pacote com debtags . Existem várias tags que são comumente usadas em meta-pacotes.

debtags tag ls $package | grep -x -e 'role::metapackage' -e 'role::dummy' -e 'special::meta'

Outra abordagem é procurar pacotes com um tamanho pequeno. Cada diretório conta como 4 kB, portanto, planeje de acordo ao escolher um limite (novamente, isso é uma aproximação).

aptitude -F '%I %p' search "~n^$package$"

Após refletir, gostaria de saber se você quer dizer pacotes virtuais ao invés de meta-pacotes. Pacotes virtuais não são pacotes, mas nomes de pacotes usados em Provides: fields. Você pode listá-los com aptitude search '~v' . A execução de apt-cache show em um exibe "Não é possível selecionar versões do pacote 'zcav', pois é puramente virtual". A execução de aptitude show lista os pacotes que a fornecem. Uma maneira conveniente de mostrar pacotes virtuais é com apt-cache : isso imprime uma linha para um pacote não virtual e potencialmente várias linhas (uma para cada provedor) para um pacote virtual - você pode saber se o pacote é virtual mesmo se houver um único provedor porque o nome do provedor é diferente.

apt-cache -n search "^$package$"
    
por Gilles 27.09.2012 / 00:16
2

Você pode tentar entrar

apt-cache search 'metapackage | meta-package'

que lhe dará uma longa lista e, em seguida, usar grep para, digamos, mostrar todos os meta-pacotes relacionados à ciência com

apt-cache search 'metapackage | meta-package' | grep -i science

Isso retornará uma longa lista (eu encurtou aqui)

science-astronomy - Debian Science Astronomy packages
science-astronomy-dev - Debian Science Astronomy-dev packages
science-biology - Debian Science Biology packages
science-chemistry - Debian Science Chemistry packages
science-dataacquisition - Debian Science data acquisition packages
science-dataacquisition-dev - Debian Science data acquisition development packages
science-distributedcomputing - Debian Science Distributed Computing packages
science-electronics - Debian Science Electronics packages
science-electrophysiology - Debian Science packages for Electrophysiology
science-engineering - Debian Science Engineering packages
science-engineering-dev - Debian Science Engineering-dev packages
science-geography - Debian Science Geography packages
science-highenergy-physics - Debian Science High Energy Physics packages

Você pode usar qualquer número de alternativas para ciências, como KDE para encontrar todos os meta-pacotes KDE .

Este é provavelmente o melhor que você pode fazer com apt-cache , mas deve localizar rapidamente a maioria dos meta-pacotes que você deseja encontrar. Se não encontrar exatamente tudo o que procurava, o mais simples é procurar na seção de meta-pacotes em Synaptic .

    
por user76204 26.09.2012 / 22:36