在 Debian、Ubuntu、Linux Mint,或基于 Debian/Ubuntu 的 Linux 发行版系统中,有多种方法可以将软件包锁定在一个特定的版本。也就是说,可以将某个软件固定维护在老版本,不让其随系统更新而升级。
为什么要阻止软件包更新呢?通常是用户对某个软件版本有特定的需求,或更新之后会导致问题,所以才要维持特定版本不进行升级。例如:LotServer 就需要特定的 Linux Kernel 版本,笔者就是用 apt-mark 阻止内核升级的。
需要注意的是:如果你要保持特定版本的软件包被其它软件所依赖,那么阻止其升级可能会导致问题。因此,尽量不要将太多软件包固定在老版本,尤其是「库」。
以下是在 Debian、Ubuntu 和 Linux Mint 中阻止软件包更新的 3 种常用方法。
方法1:使用 GUI 工具防止程序包更新
「新立得包管理器」是一款用于 apt 的 GTK 图形包管理程序,可以用于锁定并阻止特定应用程序更新升级。
您可以使用以下命令安装 Synaptic Package Manager:
sudo apt install synaptic
在「心立得」中防止软件更新,请选中要锁定的软件包——在「软件包」菜单中勾选「锁定版本」选项。
如果要查看在 Synaptic 中已锁定的所有软件包,可以点击左侧「状态」——选择「标记为永不升级的软件包」进行查看。
需要注意的是:
- 使用「新立得包管理器」锁定的软件包并不能阻止 apt upgrade 或 apt-get upgrade 命令对应用程序的更新。
- 「新立得包管理器」中锁定的软件包仅能阻止「Ubuntu 软件」或一些其它图形化包管理器对软件版本的升级。
- 「新立得包管理器」中锁定的软件包不能阻止 使用 Linux Mint Update Manager 更新软件包。
方法2:使用 apt-mark 锁定应用程序版本
使用 apt-mark 命令可以阻止「Ubuntu 软件」和「终端」命令(apt upgrade 或 apt-get upgrade)对锁定的应用程序进行升级。
您可以使用以下命令锁定版本:
sudo apt-mark hold PACKAGE
可以使用以下命令检查标记为保留(锁定)的包:
sudo apt-mark showhold
要解除锁定可以使用如下命令:
sudo apt-mark unhold PACKAGE
hold 和 unhold 参数后可以指定多个包,就像使用 apt 安装软件一样(用空格分隔开就行)。
方法3:使用 dpkg 防止软件包更新
此前有段时间一些不遵守规则的「图形包管理器」直接给忽略了 apt-mark 锁定的软件(好加在我没中招),为了保险和一些在使用老旧 Debian、Ubuntu、Linux Mint 版本的用户,还可以使用 dpkg 防止软件包更新。
要使用 dpkg 阻止程序包升级,请使用:
echo "PACKAGE hold" | sudo dpkg --set-selections
您可以使用以下命令查看所有 hold 的软件包:
dpkg --get-selections | grep hold
要删除保留(允许升级包),请使用:
echo "PACKAGE install" | sudo dpkg --set-selections
与 apt-mark 不同,此方法不允许一次指定多个包。