Como o `apt` verifica a remoção de dependências ao desinstalar/limpar? AkA Ajude-me a entender o comportamento do `apt`

Como o `apt` verifica a remoção de dependências ao desinstalar/limpar? AkA Ajude-me a entender o comportamento do `apt`

Eu estava mexendo no som no Linux e tentei instalar o pacote jackd. Este é o trecho relevante do que aptretornou:

$ 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

Então o resultado de uma purga:

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

Uma instalação subsequente:

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

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

E então :

sudo apt autoremove
The following packages will be REMOVED:
  libfwup1

(que é um pacote que já foi mencionado antes de instalar o jackd)

----------FIM DA EDIÇÃO----------

A partir deste experimento, aptnão parece remover dependências. No entanto, a limpeza removeu outro pacote ( qjackctl) além daquele que mencionei especificamente ( jackd).

qjackctlé o pacote para a interface GUI correspondente do daemon jackde entendo que não será necessário se eu não tiver jackdmais. Mas, logicamente, as outras dependências também estão instaladas, então:

  • por que eles não foram desinstalados?
  • por que foi qjackctldesinstalado?
  • por que não foi qjackctlbuscado na segunda instalação?

Apenasfioencontrado era específico para o pacote em questão.

Muito obrigado por sua ajuda

PS: Acabei de instalar uma partição Arch Linux (que visa substituir minha partição Ubuntu no futuro). Não estou muito familiarizado pacmanagora. Esse comportamento é melhor gerenciado com este gerenciador de pacotes? (mais precisamente: operações indempotentes e comportamento previsível)

Responder1

Os pacotes adicionais foram instalados porque são dependências (possivelmente indiretas) de jackd: jackd2diretamente, o restante por meio de jackd2. qjackctlfoi instalado porque jackd2é recomendado e os pacotes recomendados são instalados por padrão.

Em detalhes, a árvore de dependências dos pacotes instalados é a seguinte:

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)

Duas dependências adicionais não influenciam a etapa de instalação, mas tornam-se significativas posteriormente: jackd2-firewiredepende jackd2e qjackctldepende de jackd.

A última dependência significa que quando jackd2foi removida, qjackctltambém teve que ser removida (você não pode ter um pacote instalado sem suas dependências estritas). Os outros pacotes não dependem do jackd, portanto não foram removidos; eles teriam passado apt autoremove, exceto que porque jackd2-firewiredepende de jackd2, nenhum dos pacotes se torna desnecessário... ( aptnão me lembroqual pacote específicofez com que outro pacote fosse instalado; autoremoveapenas verifica os pacotes instalados automaticamente para ver se nada mais depende deles. Como um toque adicional, autoremoveconsidera as recomendações importantes o suficiente para manter um pacote instalado.)

Na segunda vez que você instalou jackd, aptolhou suas dependências,ou seja jackd2ou jackd1, notei que jackd2já estava instalado e parei por aí; portanto, não percebeu que qjackctlestava “faltando”, pois é recomendado por jackd2, e não jackdpor si mesmo.

aptituderemoverá pacotes desnecessários assim que seus pacotes dependentes forem removidos, sem nenhuma autoremoveetapa separada; você pode achar mais fácil de usar. Os comandos são iguais aos aptde; ele também possui uma interface de usuário em tela inteira baseada em texto que considero muito útil.

informação relacionada