不要卸载 Apt 上的标志?

不要卸载 Apt 上的标志?

Debian/Ubuntu 软件包基础设施是否有某种方式来标记软件包,以便无论其他软件包是否固定,它们都不会被卸载?

我的问题是,有时,Puppet 安装的软件包(当然来自非标准存储库)会导致其他软件包被卸载 - 特别是 openssh-{server,client}。

这种情况的发生原因是,软件包 A 和 B 依赖于软件包 C 的不同版本。如果安装了 A,然后有人要求安装 B,那么 C 的版本就会改变。新版本的 C 与 A 不兼容,因此 A 会被卸载。

有趣的是,这个过程随后被逆转,因为在下一次运行时,Puppet 注意到 A 尚未安装并尝试安装它。

所以,基本上,我想确保绝不卸载,这将阻止 B 的安装。这将被报告为错误,让我意识到这个问题。

如果有人关心的话,Puppet 使用以下命令来安装软件包:

/usr/bin/apt-get -q -y -o DPkg::Options::=--force-confold install <package>

答案1

你需要“保管”包裹,这样apt-get upgrade就不会在升级到新版本时会将其删除。

echo "package-name hold" | sudo dpkg --set-selections

但是,请注意,明确执行apt-get install package-nameWILL 会覆盖保留,而明确执行apt-get remove package-nameWILL 会卸载它。

如果将其固定到优先级为 1001 或更高的特定版本,甚至apt-get install不会升级它,但仍可以将其删除。

答案2

这个问题或许可以通过将以下内容添加到 apt.conf[.d] 来解决:

Aptitude::Always-Use-Safe-Resolver "true";

并在 puppet 中对 site.pp 进行如下操作:

Package { provider => 'aptitude' }

但尚未正确测试过。

相关内容