Non esiste una definizione formale di un metapacchetto. La definizione informale è che un metapacchetto è destinato esclusivamente ad essere installato per le sue dipendenze e non contiene alcun file utile.
È possibile definire un metapacchetto come pacchetto che non contiene file. Non è possibile determinarlo dal database del pacchetto. È possibile utilizzare il database dei file e verificare che il pacchetto contenga solo directory (molti di questi pacchetti contengono alcune directory). In effetti, la maggior parte dei metapacchetti contiene alcuni file in /usr/share/doc/<package name>
: un copyright
file, un log delle modifiche, a volte qualche altro. Ecco un'approssimazione che definisce un metapacchetto come contenente solo i file /usr/share/doc/<some directory>
(non nelle relative sottodirectory) e le directory principali:
if ! apt-file -F list $package | grep -qvE '^/(usr(/share(/doc(/[^/]*(/[^/]*)?)?)?)?)?$'; then
echo "$package looks like a metapackage"
fi
Un altro approccio è cercare un tag del pacchetto con debtags
. Esistono diversi tag che vengono comunemente utilizzati sui metapacchetti.
debtags tag ls $package | grep -x -e 'role::metapackage' -e 'role::dummy' -e 'special::meta'
Un altro approccio è quello di cercare pacchetti di piccole dimensioni. Ogni directory conta come 4 kB, quindi pianifica di conseguenza quando scegli una soglia (di nuovo, questa è un'approssimazione).
aptitude -F '%I %p' search "~n^$package\$"
Riflettendomi, mi chiedo se intendi i pacchetti virtuali piuttosto che i metapacchetti. I pacchetti virtuali non sono in realtà pacchetti ma nomi di pacchetti utilizzati nei Provides:
campi. Puoi elencarli con aptitude search '~v'
. In esecuzione apt-cache show
su uno visualizza "Impossibile selezionare le versioni dal pacchetto 'zcav' in quanto è puramente virtuale". In esecuzione aptitude show
elenca i pacchetti che lo forniscono. Un modo conveniente per mostrare i pacchetti virtuali è con apt-cache
: questo stampa una riga per un pacchetto non virtuale e potenzialmente più righe (una per ciascun provider) per un pacchetto virtuale - puoi dire se il pacchetto è virtuale anche se esiste un solo fornitore perché il nome del provider è diverso.
apt-cache -n search "^$package\$"