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$"