¿Cómo determinar si un paquete es un metapaquete desde la línea de comandos?

14

¿Cómo puedo determinar si un paquete es un metapaquete desde la línea de comandos, posiblemente a través de apt-get, aptitude o apt-cache?

Yo he tratado:

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

pero la única forma en que puedo decir que este paquete es meta es leyendo el campo "en-description".

¿Hay una manera más automática de hacer esto, que me dará una respuesta sí / no, o al menos tendrá un campo como "en-description" dedicado a esto?

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
fuente
1
Además del hecho de que esta pregunta y las respuestas son bastante interesantes, ¿por qué quieres saber esto?
Joe
1
Estaba instalando cosas con apt-get, y noté que si instalo un metapaquete (texlive-full), instala las dependencias que quiero, pero si desinstalo el metapaquete, las dependencias permanecen allí (apt-get install texlive-full, apt-get purge texlive-full; apt-get autoremove). Luego descubrí que este es el caso solo para los metapaquetes brainstorm.ubuntu.com/idea/17785 . aptitude, por otro lado, elimina las dependencias innecesarias de un metapaquete.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Respuestas:

7

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 copyrightarchivo, 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 showen uno muestra "No se pueden seleccionar versiones del paquete 'zcav' ya que es puramente virtual". Running aptitude showmuestra 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\$"
Gilles 'SO- deja de ser malvado'
fuente
gracias por esos métodos: ¡no sabía sobre debtags! Además, leí en alguna parte que cuando instalas un metapaquete con apt-get, es exactamente como si hubieras instalado cada dependencia a mano individualmente, lo que significa que eliminar el paquete original no eliminará inmediatamente sus dependencias, mientras que para los paquetes normales, eliminar eliminar las dependencias instaladas ¿Es esto cierto? Si es así, ¿cómo puede apt-get notar la diferencia? Esto también podría explotarse ... (también parece que a la aptitud no le importa si es meta o no, ¿es esto cierto?)
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
@cirosantilli La característica de eliminar automáticamente dependencias no está relacionada con los metapaquetes. Esto sucede porque si no solicita un paquete explícitamente, se marca como instalado automáticamente , y un paquete marcado como instalado automáticamente se elimina si no se instala ningún paquete que dependa de él. Vea apt-get autoremove, aptitude (un)markautoel Mcomando en la interfaz interactiva de aptitude.
Gilles 'SO- deja de ser malvado'
@cirosantilli Después de reflexionar, me pregunto si lo que tenía en mente eran paquetes virtuales y no metapaquetes. Ver mi respuesta actualizada.
Gilles 'SO- deja de ser malvado'
Realmente no sabía acerca de los paquetes virtuales, pero creo que texlive-full no es virtual ya que apt-cache show texlive-full muestra los resultados habituales. Aun así, después de hacerlo apt-get install texlive-full, apt-get purge texlive-full; apt-get autoremoveno eliminé todas las dependencias instaladas. Leí en alguna parte que esto se debe a que texlive-full era un metapaquete, y que este era el comportamiento normal de un metapaquete, pero tal vez esto estaba mal. aptitude, por otro lado, parecía eliminar muy bien las dependencias instaladas automáticamente.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
2

Podrías intentar entrar

apt-cache search 'metapackage | meta-package'

que le dará una lista larga y luego usará greppara mostrar todos los metapaquetes relacionados con la ciencia con

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

Esto devolverá una larga lista (la acorté aquí)

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

Puede usar cualquier cantidad de alternativas para la ciencia, como KDEencontrar todos los KDEmetapaquetes.

Probablemente sea lo mejor que puede hacer apt-cache, pero debe localizar rápidamente la mayoría de los metapaquetes que desea encontrar. Si no encuentra exactamente todo lo que estaba buscando, lo más simple es buscar en la sección de metapaquete en Synaptic.


fuente