在Ubuntu/Debian Linux上apt-get保留软件包
如何在Ubuntu/Debian Linux上保留软件包以防止更新特定软件包?
如何使用apt命令/apt-get命令将软件包更新列入黑名单?
我们可以在Debian或Ubuntu Linux下使用apt,apt-mark,aptitude,dpkg和dselect命令行选项阻止软件包。
我们有多种选择来保留软件包。
让我们一一看一下。
使用apt-get/apt时保留软件包(方法1)
apt-mark方法适用于已安装和已卸载的软件包。
通常,我们运行以下两个命令来更新所有软件包:
$ sudo apt update && sudo apt upgrade ## OR ## $ sudo apt-get update && sudo apt-get upgrade
步骤1列出可用更新
运行apt命令:
$ sudo apt list --upgradable
步骤2强制apt-get使用apt-mark阻止名为mariadb-server的软件包
如下所示,将hold选项传递给apt-mark命令以将软件包标记为保留,这将阻止该软件包被自动安装,升级或删除:
$ sudo apt-mark hold package-name $ sudo apt-mark hold mariadb-server
mariadb-server set on hold.
步骤3显示保留的软件包列表
让我们打印保留的软件包列表:
$ apt-mark showhold
步骤4取消保留
是否要取消对软件包的先前设置的保留以再次允许所有操作?
尝试:
$ sudo apt-mark unhold pacakgeName $ sudo apt-mark unhold mariadb-server
Canceled hold on mariadb-server.
如何使用dpkg命令防止特定软件包的更新(方法2)
使用dpkg方法时,必须安装软件包以使其暂停。
否则,您将收到如下错误:dpkg:警告:软件包不在状态或第1行上没有可用的数据库dpkg:警告:发现未知的软件包;这可能意味着可用的数据库已过时,需要通过前端方法进行更新;请参阅常见问题解答<https://wiki.debian.org/Teams/Dpkg/FAQ>
我们可以将软件包搁置如下:
$ echo "{pkgName} hold" | sudo dpkg --set-selections # Put a bash package on hold # $ echo "bash hold" | sudo dpkg --set-selections
获取您的软件包状态:
$ dpkg --get-selections pkgname ## Use the grep command/egrep command as filter to see the status of a single package named bash ## $ dpkg --get-selections | grep bash
是否要删除保全?
尝试:
$ echo "pkgName install" | sudo dpkg --set-selections $ echo "bash install" | sudo dpkg --set-selections
使用aptitude命令更新黑名单软件包
此方法适用于已安装和已卸载的程序包。
让我们拿着一个叫做nginx的包:
$ sudo aptitude hold pkgNameHere $ sudo aptitude hold nginx
让我们删除/删除名为nginx的软件包的保留:
$ sudo aptitude unhold pkgNameHere $ sudo aptitude unhold nginx
我们还可以禁止将软件包升级到特定版本,同时允许将其自动升级到将来的版本。
例如,这对于避免已知的grub等软件包的损坏版本很有用:
$ sudo aptitude forbid-version {pkg}={version} $ sudo aptitude forbid-version bash=5.0-6ubuntu1.1
当您尝试使用aptitude命令升级软件包时,将看到以下消息:
$ sudo aptitude upgrade
The following packages will be upgraded: libcomerr2 libx11-data 2 packages upgraded, 0 newly installed, 0 to remove and 1 not upgraded. ....
显示如何禁用或锁定/黑名单程序包的示例
打开终端应用程序,然后刷新存储库:
$ sudo apt update
列表升级:
$ apt list --upgradable
保留基本文件,mailutils-common,mailutils和mariadb-common软件包:
$ sudo apt-mark hold base-files mailutils-common mailutils mariadb-common
尝试更新系统:
$ sudo apt upgrade
取消打包:
$ sudo apt-mark unhold base-files mailutils-common mailutils mariadb-common
应用待处理的更新:
$ sudo apt upgrade
通过apt update命令将软件包列入黑名单或保留该软件包。
使用Ansible IT自动化/DevOps工具阻止软件包
这是用于保存软件包的示例剧本:
# Prevent nginx from being upgraded - dpkg_selections: name: python selection: hold # Kept multiple packages back (hold packages) - dpkg_selections: name={{ item }} selection=hold with_items: - apache2 - php7-fpm - nginx - mariadb-server # Removing hold using Ansible - dpkg_selections: name: python selection: install