tech4him Asked: 2019-01-21 13:38:55 +0800 CST2019-01-21 13:38:55 +0800 CST 2019-01-21 13:38:55 +0800 CST 为什么删除“元包”不会删除它安装的依赖项? 772 如果我尝试卸载元包,apt实际上并没有删除元包的依赖项,只有“包装器”本身。即使在运行时apt autoremove,也不会列出这些子包。我发现autoremove删除大多数普通包的依赖项令人困惑,但元包并不多。为什么是这样? metapackages deb 2 个回答 Voted Best Answer Guss 2019-01-21T13:47:20+08:002019-01-21T13:47:20+08:00 元包在任何方面都不是魔法:“元包”的概念不是 APT 系统的一部分——元包只是一个没有实际内容的包,只是依赖项。因此删除它们与删除包含实际内容的包具有相同的效果,该包还依赖于其他一些东西,例如 Web 服务器应用程序模块将需要 Web 服务器,但是当您删除它时 - Web 服务器仍应保持安装状态。 话虽如此,APT 会跟踪自动安装了哪些包,因为另一个包请求了它们(例如请求“实际”包的元包,或需要 Web 服务器的 Web 服务器应用程序模块),并且一旦您删除了需要的包 APT会建议您运行apt autoremove以摆脱此类自动安装的软件包。 在 Ubuntu 操作系统中使用“元包”的主要问题是它们依赖于很多包,本质上是通过一次安装来安装大量软件。当安装这么多包时,尤其是那些非常紧密联系在一起的包时——你会得到很多交叉依赖:元包需要包A,对你来说,B还依赖于并且(可能令人惊讶)也依赖于. 因此,如果您删除元包,只会被删除。CABBAC 作为一个具体的例子,让我们考虑一下 LXDE 元包lubuntu-desktop: lubuntu-desktop需要lxqt-core lxqt-core需要lxqt-panel lxqt-panel取决于lxqt-core。实际上,这种依赖关系不是Requires,而是Recommends- 但这足以让 apt 决定不自动删除任何一个包。 以下答案有更多详细信息: https://unix.stackexchange.com/a/447957/4323 https://unix.stackexchange.com/a/265186/4323 user535733 2019-01-21T22:59:56+08:002019-01-21T22:59:56+08:00 由 Ubuntu 的ubiquity安装程序安装的所有软件包都带有 apt 标记的“手动”(而不是“自动”),这使得所有这些软件包都无法自动删除。 当然,您仍然可以删除它们,只是不能自动删除它们。 Ubuntu Server、Minimal Image 和 Cloud Image 安装程序不是基于 ubiquity 的,它们的软件包符合自动删除的条件。 如果您不熟悉apt-marking,这只是 apt 如何跟踪管理员指定的依赖项('Manual'),以及作为依赖项引入的依赖项('Auto')。man apt-mark有关它的更多信息,请参阅。 非标准 Ubiquity 行为的原因是为了保护您:人们以各种方式修改他们的桌面系统,包括需要删除元包的方式。大多数用户通常不打算删除他们的整个桌面,这样做出乎意料可能是一个相当重要的情感事件,因此 Ubuntu 开发人员做出了更改以保护用户免受他们自己(无意的)愚蠢的影响。毕竟,Ubuntu 也适用于新手和不熟练的用户。 想要将他们的包修剪成他们实际使用的东西(我们都曾经尝试过)的人们会发现从最小图像开始并建立起来比对抗 apt-marking 减少要容易得多。
元包在任何方面都不是魔法:“元包”的概念不是 APT 系统的一部分——元包只是一个没有实际内容的包,只是依赖项。因此删除它们与删除包含实际内容的包具有相同的效果,该包还依赖于其他一些东西,例如 Web 服务器应用程序模块将需要 Web 服务器,但是当您删除它时 - Web 服务器仍应保持安装状态。
话虽如此,APT 会跟踪自动安装了哪些包,因为另一个包请求了它们(例如请求“实际”包的元包,或需要 Web 服务器的 Web 服务器应用程序模块),并且一旦您删除了需要的包 APT会建议您运行
apt autoremove
以摆脱此类自动安装的软件包。在 Ubuntu 操作系统中使用“元包”的主要问题是它们依赖于很多包,本质上是通过一次安装来安装大量软件。当安装这么多包时,尤其是那些非常紧密联系在一起的包时——你会得到很多交叉依赖:元包需要包
A
,对你来说,B
还依赖于并且(可能令人惊讶)也依赖于. 因此,如果您删除元包,只会被删除。C
A
B
B
A
C
作为一个具体的例子,让我们考虑一下 LXDE 元包
lubuntu-desktop
:lubuntu-desktop
需要lxqt-core
lxqt-core
需要lxqt-panel
lxqt-panel
取决于lxqt-core
。实际上,这种依赖关系不是Requires
,而是Recommends
- 但这足以让 apt 决定不自动删除任何一个包。以下答案有更多详细信息:
由 Ubuntu 的ubiquity安装程序安装的所有软件包都带有 apt 标记的“手动”(而不是“自动”),这使得所有这些软件包都无法自动删除。
当然,您仍然可以删除它们,只是不能自动删除它们。
Ubuntu Server、Minimal Image 和 Cloud Image 安装程序不是基于 ubiquity 的,它们的软件包符合自动删除的条件。
如果您不熟悉apt-marking,这只是 apt 如何跟踪管理员指定的依赖项('Manual'),以及作为依赖项引入的依赖项('Auto')。
man apt-mark
有关它的更多信息,请参阅。非标准 Ubiquity 行为的原因是为了保护您:人们以各种方式修改他们的桌面系统,包括需要删除元包的方式。大多数用户通常不打算删除他们的整个桌面,这样做出乎意料可能是一个相当重要的情感事件,因此 Ubuntu 开发人员做出了更改以保护用户免受他们自己(无意的)愚蠢的影响。毕竟,Ubuntu 也适用于新手和不熟练的用户。
想要将他们的包修剪成他们实际使用的东西(我们都曾经尝试过)的人们会发现从最小图像开始并建立起来比对抗 apt-marking 减少要容易得多。