注意:在我写这个问题(和答案)时,Debian Stable 是巴斯特,Debian 测试是靶心。
我正在使用 Debian Stable,并且我想安装更新版本的软件包 - 它在 Debian 测试中可用。
传统观点认为这样做的程序是
- 将相关
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
- 为了防止所有软件包都被升级,您应该创建或修改
/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
不会意外更改任何内容。
注意:在我的系统上,我仍然有两个可供升级的软件包 - 这些要归功于系统安装的首选项文件,该文件固定了两个安全更新,我对此感到满意。