如何在 Linux 中停止/禁用/保留软件包的自动更新?



我已经在 Ubuntu 18.04 LTS 上为我的 Kubernetes 集群安装了一些软件包(Docker, Kubeadm, Kubelet, Kubectl)。

不希望这些软件包自动更新,因为当彼此之间发生更新时,它们之间会出现一些问题。我只想在它们稳定时手动更新。

停止包自动更新的正确命令是什么?

我用来在 Ubuntu 18.04 上安装它们的命令

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository 
"deb [arch=amd64] https://download.docker.com/linux/ubuntu 
$(lsb_release -cs) 
stable"
sudo apt-get update
sudo apt-get install -y docker-ce=18.06.1~ce~3-0~ubuntu
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
cat << EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
sudo apt-get update
sudo apt-get install -y kubelet=1.12.7-00 kubeadm=1.12.7-00 kubectl=1.12.7-00

动机:您不想对 Linux 机器上的敏感软件包承担任何风险(当您的应用程序处于生产状态并且客户使用它时,或者一些重要的任务在内部运行时,就会发生这种情况,较新的版本可能会破坏更改并意外导致停机)。在这种情况下 - 您希望将特定版本固定到包,并确保在没有明确操作和批准的情况下不会进行升级。

解决方案:应禁用unattended-upgrades功能,并将包pin到使用的当前版本中(换句话说 - 保留此版本)。

步骤 1:禁用自动升级(也称为无人值守升级)

$ sudo vim /etc/apt/apt.conf.d/20auto-upgrades
#edit these lines - which disabling the upgrade feature.
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "0";

步骤2:按住并冻结您想要防止自我升级的特定软件包:

sudo apt-mark hold <package-name>

您可以使用包(或一组包)的hold状态,使其不涉及升级。 这为您提供了更精细的能力,可以基于每个包决定应该升级或不应该升级的内容。 在已知的题外话、错误和行为的微妙变化中非常有帮助。

从手册页进行dpkg和编辑/缩进:

--get-selections [package-name-pattern...]
Get list of package selections, and write it to stdout. Without a pattern,
non-installed packages (i.e. those which have been previously purged) will
not be shown.
--set-selections
Set package selections using file read from stdin. This file should be in
the format “package state”, where state is one of install, hold, deinstall 
or purge. Blank lines and comment lines beginning with ‘#’ are also 
permitted.
The available file needs to be up-to-date for this command to be useful, 
otherwise unknown packages will be ignored with a warning. See the 
--update-avail and  --merge-avail  commands  for more information.

这种格式可以说有点奇怪 - 但这非常强大和有用。 在我使用 Debian/Ubuntu 的二十五年里,我依赖过几次它(!!)。我可能有一个 shell 脚本助手 somwhere,但我可能需要挖掘。

当天的查找:)。Ubuntuapt给你保存软件包自动更新的命令。感谢德克给我提示。

sudo apt-mark hold docker-ce kubelet kubeadm kubectl
apt

在执行安装或更新时没有像标志--enable-repo--disablerepo这样的yum。此处显示了管理存储库的方法

但是对于您的情况,您添加它们已附加到的存储库的方式/etc/apt/sources.list因此您可以使用sed注释掉您为安装dockerkubernetes而添加的存储库行。
注意:您应该在安装后和执行sudo apt-get update之前注释掉行

例:

禁用 docker 存储库:sed -i 's/^deb.*docker.*/# &/g' /etc/apt/sources.list

启用 docker 存储库以进行手动更新:

sed -i '/^# deb .*docker.*/s/^# //' /etc/apt/sources.list

相关内容

  • 没有找到相关文章

最新更新