¿Cómo comprueba `apt` la eliminación de dependencias al desinstalar/purgar? AkA Ayúdame a entender el comportamiento de "apt"

¿Cómo comprueba `apt` la eliminación de dependencias al desinstalar/purgar? AkA Ayúdame a entender el comportamiento de "apt"

Estaba jugueteando con el sonido en Linux e intenté instalar el paquete jackd. Este es el extracto relevante de lo que aptdevolvió:

$ sudo apt install jackd
The following additional packages will be installed:
  jackd2 jackd2-firewire libconfig++9v5 libffado2 libglibmm-2.4-1v5 libsigc++-2.0-0v5 libxml++2.6-2v5 python-dbus python-gi qjackctl

Entonces el resultado de una purga:

$ sudo apt purge jackd
The following packages will be REMOVED:
  jackd* qjackctl*

Una instalación posterior:

$ sudo apt install jackd
The following NEW packages will be installed:
  jackd

----------EDITAR----------

Y luego :

sudo apt autoremove
The following packages will be REMOVED:
  libfwup1

(que es un paquete que ya se mencionó antes de instalar jackd)

----------FIN DE EDITAR----------

De este experimento, aptno parece eliminar las dependencias. Sin embargo, la purga eliminó otro paquete ( qjackctl) además del que mencioné específicamente ( jackd).

qjackctles el paquete para la interfaz GUI correspondiente del demonio jackdy entiendo que no será necesario si no tengo jackdmás. Pero, lógicamente, también se instalan las demás dependencias, así que:

  • ¿Por qué no se desinstalaron?
  • ¿Por qué se qjackctldesinstaló?
  • ¿Por qué qjackctlno se recuperó en la segunda instalación?

Solohiloencontrado era específico del paquete en cuestión.

Muchas gracias por tu ayuda

PD: Acabo de terminar de instalar una partición Arch Linux (que está destinada a reemplazar mi partición Ubuntu en el futuro). No estoy muy familiarizado con pacmaneste momento. ¿Se gestiona mejor este comportamiento con este administrador de paquetes? (más precisamente: operaciones indempotentes y comportamiento predecible)

Respuesta1

Los paquetes adicionales se instalaron porque son dependencias (posiblemente indirectas) de jackd: jackd2directamente, el resto a través de jackd2. qjackctlse instaló porque jackd2lo recomienda y los paquetes recomendados se instalan de forma predeterminada.

En detalle, el árbol de dependencias de los paquetes instalados es el siguiente:

jackd
└─ jackd2
   ├─ python-dbus
   │  └─ python-gi (recommended)
   ├─ jackd2-firewire (recommended)
   │  └─ libffado2
   │     ├─ libconfig++9v5
   │     ├─ libglibmm-2.4-1v5
   │     │  └─ libsigc++-2.0-0v5
   │     └─ libxml++2.6-2v5
   └─ qjackctl (recommended)

Dos dependencias adicionales no influyen en el paso de instalación, pero se vuelven importantes más adelante: jackd2-firewiredepende de jackd2y qjackctldepende de jackd.

La última dependencia significa que cuando jackd2se eliminó, qjackctltambién tuvo que eliminarse (no se puede instalar un paquete sin sus dependencias estrictas). Los otros paquetes no dependen de jackd, por lo que no se eliminaron; habrían sido por apt autoremove, excepto porque jackd2-firewiredepende de jackd2, ninguno de los paquetes se vuelve innecesario... ( aptno recuerdaqué paquete específicoprovocó la instalación de otro paquete; autoremovesólo comprueba los paquetes instalados automáticamente para ver si ya nada depende de ellos. Como beneficio adicional, autoremoveconsidera que las recomendaciones son lo suficientemente importantes como para mantener un paquete instalado).

La segunda vez que instaló jackd, aptmiró sus dependencias,es decir jackd2o jackd1notó que jackd2ya estaba instalado y se detuvo ahí; por lo tanto, no se dio cuenta de que qjackctl“faltaba”, ya que es recomendado por él jackd2y no jackdpor sí mismo.

aptitudeeliminará los paquetes innecesarios tan pronto como se eliminen los paquetes dependientes, sin ningún autoremovepaso separado; puede que le resulte más fácil de usar. Los comandos son los mismos que aptlos de; también tiene una interfaz de usuario de pantalla completa basada en texto que encuentro muy útil.

información relacionada