注意:在我写这个问题(和答案)时,Debian Stable 是buster,而 Debian Testing 是bullseye。
我正在使用 Debian Stable,并且我想安装更新版本的软件包 - 它在 Debian 测试中可用。
传统观点认为这样做的程序是
deb行添加到/etc/sources.listdeb http://deb.debian.org/debian/ bullseye main non-free
deb-src http://deb.debian.org/debian/ bullseye main non-free
Run Code Online (Sandbox Code Playgroud)
/etc/apt/apt.conf并将此行放入其中:APT::Default-Release "buster";
Run Code Online (Sandbox Code Playgroud)
然后我可以使用apt install -t testing packagename.
然而,尽管添加了该Default-Release指令,当我运行时,我的系统仍然提供了一些更新:
apt update。
apt upgrade当我作为正常系统维护的一部分运行时,如何防止安装这些更新?
导致问题的软件包已安装或从该stable-updates版本升级。
该Default-Release指令仅增加发布的优先级stable,因此新添加的testing存储库具有与 相同的优先级stable-updates,并且由于版本号较高,因此testing将安装来自的版本。
这还有一个副作用,即未来发布的版本stable-updates将不会被安装,因为您已经告诉 apt 该stable版本是首选。
您可以使用 来调查所提供的版本的来源及其优先级apt-cache policy [packagename]。
更好的方法是使用Apt-Pinning。
首先,删除该APT::Default-Release "buster";行/etc/apt/apt.conf(或者删除整个文件,如果这是其中唯一的内容)。
创建或修改/etc/apt/preferences并添加以下行:
Package: *
Pin: release n=bullseye
Pin-Priority: 50
Run Code Online (Sandbox Code Playgroud)
这会查看*名为 的发行版中的任何包( )bullseye,并分配优先级 50。
这低于已安装软件包的值 (100) - 因此即使它可以在bullseye.
它也低于其他存储库中未安装的软件包的值 (500) - 因此您仍然可以在软件包可用时升级它们,但它会更喜欢旧存储库中的最新版本,而不是最新版本bullseye。(查看Debian 手册的相关部分以了解更多详细信息。)
现在您可以运行apt update并且apt ugprade不会意外更改任何内容。
注意:在我的系统上,我仍然有两个可供升级的软件包 - 这些要归功于系统安装的首选项文件,该文件固定了两个安全更新,我对此感到满意。