卸载/清除时,“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-firewiredepends onjackd2qjackctldepends on jackd

后一个依赖项意味着当jackd2被删除时,qjackctl也必须被删除(如果没有严格的依赖项,则无法安装包)。其他软件包不依赖于jackd,因此没有被删除;他们本来会被apt autoremove,除了因为jackd2-firewire依赖jackd2,没有一个包变得不必要......(apt不记得了具体是哪个包导致安装另一个软件包;autoremove只检查自动安装的软件包以查看是否不再有任何东西依赖于它们。作为一个额外的变化,autoremove认为建议足够重要以保持安装包。)

第二次安装时jackdapt查看其依赖项,IE jackd2或者jackd1,注意到jackd2已经安装,并停在那里;因此它没有注意到qjackctl“缺失”,因为它是由 推荐的jackd2,而不是jackd它自己推荐的。

aptitude一旦删除了依赖的包,就会删除不必要的包,无需单独的autoremove步骤;您可能会发现它更容易使用。命令与 的相同apt;它还有一个基于文本的全屏用户界面,我发现这非常有用。

相关内容