zl程序教程

您现在的位置是:首页 >  其它

当前栏目

如何从 apt-get 升级中排除特定软件包

如何 升级 get 特定 apt 软件包 排除
2023-09-14 09:15:45 时间

在处理某些项目时,有时您需要环境的稳定性。更新包可能会导致整个项目失败。有时,我们不小心升级了这些软件包,这会在服务器上造成严重问题。这就是为什么维护特定版本的软件包很重要的原因。

本教程将向您展示如何从 Ubuntu 或 Debian 发行版的升级中排除特定软件包。

1)用一些命令排除包

在系统的全面升级过程中,存在一些排除或保留特定包的各种方法。可以将包裹标记为保留。在本文中,我们将使用 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

您可以使用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

您也可以使用该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

您也可以使用 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

您可以使用 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=用于保持在结果上具有三颗星,如下所示

2) 使用apt配置文件的block包

标记包的一种方法是编辑 /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

保存并退出。这就是您阻止包裹的全部内容。要取消保留包,您可以注释文件的行或简单地删除文件。

您可以看到可以使用一些方法来阻止一个包。这对于维护项目的稳定版本很有用。您可以选择您喜欢的方法。您不需要为同一目标使用两种或多种方法。