当 repo 有更新版本时安装特定版本?

tym*_*tam 13 dependencies

让我们有一个依赖于以下包的元包

Depends: A (=2),
 B (=2),
 C (=2)
Run Code Online (Sandbox Code Playgroud)

请注意 '=' - 我想安装这些特定版本,而不是最新版本。

此外:

B取决于A (>=1)

C取决于B (>=1) 和A (>=1)

如果存储库中 A、B、C 的最新版本为 2,则此方法有效。

由于我已将 A 的第 3 版和 B 的第 3 版放入 repo sudo apt-get install my-meta-package 拒绝完成以下信息:

The following packages have unmet dependencies:
  my-meta-package: Depends: B (= 2) but 3 is to be installed
                   Depends: A (= 2) but 3 is to be installed
Run Code Online (Sandbox Code Playgroud)

如果我手动安装 A 和 B 的版本 2,那么元包会正确安装,这强烈表明对 A3 或 B3 没有隐藏的依赖。这不是问题的解决方案,因为元包是自动安装在许多机器上的。

问题:如何使 sudo apt-get install my-meta-package 安装版本 2、2、2?

此外,有没有一种方法可以获得扩展信息,实际上是什么创建了对 A 的第 3 版和 B 的第 3 版的需求?

Sep*_*ero 11

您必须选择要安装的特定版本,并在安装元软件包的同时安装所有版本。

sudo apt-get install meta-package package1=2 package2=2 package3=2
Run Code Online (Sandbox Code Playgroud)

就像int_ua 的回答所说的那样,您可以通过以下方式找出反向依赖关系:

apt-cache rdepends package
Run Code Online (Sandbox Code Playgroud)

如果您想了解有关这些软件包(可用版本、依赖项等)的更多信息,请使用以下命令:

apt-cache show package
Run Code Online (Sandbox Code Playgroud)

完成安装后,并希望在进行系统升级时将它们保留在这些版本中,您需要按照belacqua 的建议使用apt-pinning

APT 固定

APT 固定功能允许管理员强制 APT 选择特定版本的软件包,这些软件包可能在不同存储库的不同版本中可用。这允许管理员确保软件包不会升级到可能与系统上的其他软件包冲突的版本,或者尚未针对不受欢迎的更改进行充分测试的版本。为此,必须修改 APT 首选项文件 (/etc/apt/preferences) 中的引脚。