No existe una definición formal de un metapaquete. La definición informal es que un metapaquete es uno que solo está destinado a ser instalado para sus dependencias y no contiene ningún archivo útil propio.
Puede definir un metapaquete como un paquete que no contiene ningún archivo. No hay forma de determinar esto a partir de la base de datos del paquete. Puede usar la base de datos de archivos y verificar que el paquete contenga solo directorios (muchos de estos paquetes contienen algunos directorios). De hecho, la mayoría de los metapaquetes contienen algunos archivos en /usr/share/doc/<package name>
: un copyright
archivo, un registro de cambios, a veces algunos más. Aquí hay una aproximación que define un metapaquete que contiene solo archivos /usr/share/doc/<some directory>
(no en subdirectorios de eso) y los directorios principales:
if ! apt-file -F list $package | grep -qvE '^/(usr(/share(/doc(/[^/]*(/[^/]*)?)?)?)?)?$'; then
echo "$package looks like a metapackage"
fi
Otro enfoque es buscar una etiqueta de paquete con debtags
. Hay varias etiquetas que se usan comúnmente en metapaquetes.
debtags tag ls $package | grep -x -e 'role::metapackage' -e 'role::dummy' -e 'special::meta'
Otro enfoque es buscar paquetes con un tamaño pequeño. Cada directorio cuenta como 4 kB, así que planifique en consecuencia cuando elija un umbral (nuevamente, esto es una aproximación).
aptitude -F '%I %p' search "~n^$package\$"
Después de reflexionar, me pregunto si te refieres a paquetes virtuales en lugar de metapaquetes. Los paquetes virtuales en realidad no son paquetes sino nombres de paquetes utilizados en los Provides:
campos. Puedes enumerarlos con aptitude search '~v'
. La ejecución apt-cache show
en uno muestra "No se pueden seleccionar versiones del paquete 'zcav' ya que es puramente virtual". Running aptitude show
muestra los paquetes que lo proporcionan. Una forma conveniente de mostrar paquetes virtuales es con apt-cache
: imprime una línea para un paquete no virtual y potencialmente varias líneas (una para cada proveedor) para un paquete virtual: puede saber si el paquete es virtual incluso si hay un único proveedor porque el nombre del proveedor es diferente.
apt-cache -n search "^$package\$"