在处理某些项目时,有时您需要环境的稳定性。更新包可能会导致整个项目失败。有时,我们不小心升级了这些软件包,这会在服务器上造成严重问题。这就是为什么维护特定版本的软件包很重要的原因。
本教程将向您展示如何从 Ubuntu 或 Debian 发行版的升级中排除特定软件包。
在系统的全面升级过程中,存在一些排除或保留特定包的各种方法。可以将包裹标记为保留。在本文中,我们将使用 virtualbox 包作为示例。可以看到安装的版本
# dpkg -l | grep virtualbox
ii virtualbox 5.0.18-dfsg-2build1 amd64 x86 virtualization solution - base binaries
现在您可以看到我们有可用的更新版本
# apt list --upgradable
Listing... Done
virtualbox/xenial-updates 5.0.40-dfsg-0ubuntu1.16.04.2 amd64 [upgradable from: 5.0.18-dfsg-2build1]
您可以使用以下命令标记包
您可以使用apt-mark
命令后跟hold
选项。这将防止软件包被自动安装、升级或删除。语法如下
apt-mark hold package
您可以按如下方式实际使用它
# apt-mark hold virtualbox
virtualbox set on hold.
现在你可以检查如下
# apt upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
virtualbox
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
可以看到无法升级包。
要取消标记,请使用以下语法
apt-mark unhold package
实际上你有下面的命令
# apt-mark unhold virtualbox
Canceled hold on virtualbox.
您也可以使用该dpkg --set-selection
命令标记包。语法如下
# echo " hold" | dpkg --set-selections
实际上,您可以按以下方式进行
# echo "virtualbox hold" | dpkg --set-selections
您没有任何显示结果的回报。所以,直接检查升级
# apt upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
virtualbox
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
你可以看到它有效。
现在取消保留,命令不同并且尊重语法
echo "package install" | sudo dpkg --set-selections
所以,使用命令
# echo "virtualbox install" | dpkg --set-selections
你不会有回报。因为我们已经是 root 用户,所以我们不使用sudo
您也可以使用 aptitude 命令。默认情况下,您的系统上不存在此命令,因此您需要按以下方式安装它
# apt install aptitude
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
aptitude-common libcwidget3v5
要使用命令标记包,请使用语法
aptitude hold package
当你用 aptitude 标记一个包裹时,你没有回报。
# aptitude hold virtualbox
No packages will be installed, upgraded, or removed.
0 packages upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
Need to get 0 B of archives. After unpacking 0 B will be used.
如果您使用 来检查结果aptitude upgrade
,您将不会提及已标记的包,但如果您尝试,您将拥有它apt upgrade
。
您可以使用语法取消保留
aptitude unhold package
如下
# aptitude unhold virtualbox
No packages will be installed, upgraded, or removed.
0 packages upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
您可以使用 dselect
dpkg 的前端命令,该命令用于管理 Debian 和基于 Debian 的 Linux 发行版中的软件包。默认情况下不存在,因此您需要安装它
# apt install dselect
启动命令
现在仔细阅读帮助。
现在您可以使用空格键盘退出帮助并找到要保存的包。你可以/
用来做研究
现在您可以使用H
或=
现在你可以退出了Q
。它将打开第一个菜单,选择退出。您可以通过升级检查
# apt upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
virtualbox
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
你可以看到它有效。
如果要取消标记包,则需要使用+
而不是H
或=
用于保持在结果上具有三颗星,如下所示
标记包的一种方法是编辑 /etc/apt/preferences
文件。要在升级整个系统的同时不升级软件包,我们必须设置一个小于零 (0) 的 apt pin 优先级。如果文件不存在,则必须创建它。您需要尊重以下语法
Package: <package-name> ('*' for all packages)
Pin: release * (o=Ubuntu for Ubuntu origin)
Pin-Priority: <less than 0>
在 Release Pin 行上,您可以添加包的发起者,对于 Pin-Priority 数字,数字越大意味着偏好越高, -1
等于忽略该包。还有一些其他选项可以使用。
要阻止 virtualbox 包,请编辑文件如下
Package: virtualbox
Pin: release o=Ubuntu
Pin-Priority: -1
保存并退出。这就是您阻止包裹的全部内容。要取消保留包,您可以注释文件的行或简单地删除文件。
您可以看到可以使用一些方法来阻止一个包。这对于维护项目的稳定版本很有用。您可以选择您喜欢的方法。您不需要为同一目标使用两种或多种方法。