APT::Default-Release“稳定”不足以阻止添加另一个存储库后自动升级软件包

APT::Default-Release“稳定”不足以阻止添加另一个存储库后自动升级软件包

注意:在我写这个问题(和答案)时,Debian Stable 是巴斯特,Debian 测试是靶心

我正在使用 Debian Stable,并且我想安装更新版本的软件包 - 它在 Debian 测试中可用。

传统观点认为这样做的程序是

  1. 将相关deb行添加到/etc/sources.list
deb     http://deb.debian.org/debian/ bullseye main non-free
deb-src http://deb.debian.org/debian/ bullseye main non-free
  1. 为了防止所有软件包都被升级,您应该创建或修改/etc/apt/apt.conf并将此行放入其中:
APT::Default-Release "buster";

然后我可以使用apt install -t testing packagename.


然而,尽管添加了该Default-Release指令,当我运行时,我的系统仍然提供了一些更新: apt update

apt upgrade当我作为正常系统维护的一部分运行时,如何防止安装这些更新?

答案1

导致问题的软件包已从以下位置安装或升级stable-updates发布。

Default-Release指令仅增加发布的优先级stable,因此新添加的testing存储库具有与 相同的优先级,并且由于版本号较高,因此将安装stable-updates来自的版本。testing

这还有一个副作用,即未来发布的版本stable-updates将不会被安装,因为您已经告诉 apt 该stable版本是首选。

您可以使用 来调查所提供的版本的来源及其优先级apt-cache policy [packagename]


更好的方法是使用易于固定

首先,删除该APT::Default-Release "buster";/etc/apt/apt.conf(或者删除整个文件,如果这是其中唯一的内容)。

创建或修改/etc/apt/preferences并添加以下行:

Package: *
Pin: release n=bullseye
Pin-Priority: 50

这会查看*名为 的发行版中的任何包( )bullseye,并分配优先级 50。

这低于已安装软件包的值 (100) - 因此即使它可以在bullseye.

它也低于其他存储库中未安装的软件包的值 (500) - 因此您仍然可以在软件包可用时升级它们,但它会更喜欢旧存储库中的最新版本而不是最新版本bullseye。 (看看Debian 手册的相关部分了解更多详情。)

现在您可以运行apt update并且apt ugprade不会意外更改任何内容。


注意:在我的系统上,我仍然有两个可供升级的软件包 - 这些要归功于系统安装的首选项文件,该文件固定了两个安全更新,我对此感到满意。

相关内容