如何从apt-get升级中排除特定软件包
在进行某些项目时,有时我们需要环境的稳定性。
更新程序包可能会导致整个项目失败。
有时,我们不小心升级了那些软件包,这在服务器上造成了严重的问题。
这就是为什么维护特定版本的软件包很重要的原因。
本教程将向我们展示如何在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 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 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配置文件阻止程序包
标记软件包的一种方法是编辑“/etc/apt/preferences”文件。
为了在升级整个系统时不升级软件包,我们必须将apt引脚优先级设置为小于零(0)。
如果文件不存在,则必须创建它。
我们需要遵守以下语法
Package: <package-name> ('*' for all packages) Pin: release * (o=Ubuntu for Ubuntu origin) Pin-Priority: <less than 0>
在“释放引脚”行上,我们可以添加程序包的始发者,对于“引脚优先级”编号,数字越大表示优先级越高,“-1”等于忽略该程序包。
还有一些其他选项可以使用。
要阻止virtualbox软件包,请如下编辑文件
Package: virtualbox Pin: release o=Ubuntu Pin-Priority: -1
保存并退出。
我们只需要阻止该软件包即可。
要取消打包,我们可以注释文件的行或者直接删除文件。
我们会看到可以使用某些方法来阻止程序包。
这对于维护项目的稳定版本很有用。
我们可以选择自己喜欢的方法。
我们无需为同一目标使用两种或者多种方法。