Как `apt` проверяет удаление зависимостей при деинсталляции/очистке? AkA Помогите мне понять поведение `apt`

Как `apt` проверяет удаление зависимостей при деинсталляции/очистке? AkA Помогите мне понять поведение `apt`

Я возился со звуком на Linux и попытался установить пакет jackd. Вот соответствующий отрывок из того, что aptвернулось:

$ 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

Итак, результат чистки:

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

Последующая установка:

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

----------РЕДАКТИРОВАТЬ----------

А потом :

sudo apt autoremove
The following packages will be REMOVED:
  libfwup1

(это пакет, который уже упоминался до установки jackd)

----------КОНЕЦ РЕДАКТИРОВАНИЯ----------

Из этого эксперимента, aptпохоже, не удаляет зависимости. Однако очистка удалила еще один пакет ( qjackctl) в дополнение к тому, который я специально упомянул ( jackd).

qjackctlэто пакет для соответствующего интерфейса GUI демона jackd, и я понимаю, что он не понадобится, если у меня больше нет jackd. Но, логично, что установлены и другие зависимости, поэтому:

  • почему их не удалили?
  • почему было qjackctlудалено?
  • почему qjackctlне было извлечено во второй установке?

Тольконитьнайдено, что относится к рассматриваемому пакету.

Большое спасибо за вашу помощь

PS: Я только что закончил установку раздела Arch Linux (который должен заменить мой раздел Ubuntu в будущем). Я не очень хорошо с ним знаком pacmanсейчас. Лучше ли управлять этим поведением с помощью этого менеджера пакетов? (точнее: недемпотентные операции и предсказуемое поведение)

решение1

Дополнительные пакеты были установлены, поскольку они (возможно, косвенные) являются зависимостями jackd: jackd2напрямую, остальные через jackd2. qjackctlбыли установлены, поскольку jackd2рекомендует это, а рекомендуемые пакеты устанавливаются по умолчанию.

Подробное дерево зависимостей установленных пакетов выглядит следующим образом:

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)

Две дополнительные зависимости не влияют на этап установки, но становятся значимыми позже: jackd2-firewireзависит от jackd2и qjackctlзависит от jackd.

Последняя зависимость означает, что когда jackd2был удален, qjackctlдолжен был быть удален также (нельзя установить пакет без его строгих зависимостей). Другие пакеты не зависят от jackd, поэтому они не были удалены; они были бы удалены apt autoremove, за исключением того, что поскольку jackd2-firewireзависит от jackd2, ни один из пакетов не становится ненужным... ( aptне помниткакой конкретный пакетвызвал установку другого пакета; autoremoveпроверяет только автоматически установленные пакеты, чтобы узнать, не зависит ли от них больше ничего. В качестве дополнительного поворота, autoremoveсчитает рекомендации достаточно важными, чтобы сохранить пакет установленным.)

Во второй раз, когда вы установили jackd, aptпосмотрели на его зависимости,то есть jackd2или jackd1, заметил, что jackd2он уже установлен, и остановился на этом; следовательно, он не заметил, что qjackctlон «отсутствует», поскольку он рекомендован jackd2, а не jackdим самим.

aptitudeудалит ненужные пакеты, как только будут удалены их зависимые пакеты, без отдельного autoremoveшага; вам может показаться, что это проще в использовании. Команды те же, что и apt's; также имеет текстовый полноэкранный пользовательский интерфейс, который я нахожу очень полезным.

Связанный контент