CentOS 8 中的无人值守自动更新

CentOS 无疑是使用最广泛的 Linux 发行版之一,主要是在 Linux 服务器中。 它是 Red Hat Enterprise Linux (RHEL) 的免费、社区支持的分支,提供稳定且经过微调的操作系统。

最新版本 CentOS 8 引入了一个名为 DNF 的新软件包管理器,它是 Dandified YUM(Yellowdog Updater,Modified)。 YUM 是所有 CentOS 版本的默认包管理器。 正因为如此,更新过程并没有太大变化,并且继续简单明了。 问题是当我们有几个 CentOS 实例时。 最好寻找替代方法来自动化该过程。 这就是我们将在本文中介绍的内容。

在开始自动化之前,有必要解决我们如何手动检查 CentOS 的升级、应用它们、维护我们的系统、排除特定软件包以及一些提示和技巧。

如何检查更新

CentOS 8 支持 dnf 和 yum,因此我们将涵盖这两个包管理器,随后的代码块按此顺序呈现。

一些实用程序可以帮助提高系统的速度和性能,并在安装更新时扩展包管理器的使用。 dnf 和 yum 的推荐插件如下。

编号:

  • python3-dnf-plugin-versionlock
  • 释放
  • dnf插件核心
  • dnf-自动

嗯:

  • yum-plugin-versionlock
  • 释放
  • yum-utils
  • yum-cron
  • yum-plugin-fastestmirror

为了确保安装了这些,我们需要运行这个命令(取决于你选择的包管理器)。

dnf install python3-dnf-plugin-versionlock epel-release dnf-plugins-core dnf-automatic
yum install yum-plugin-versionlock epel-release yum-utils yum-cron yum-plugin-fastestmirror

为了在 dnf 上启用最快的镜像(如果使用 yum,安装 yum-plugin-fastestmirror 就可以了),我们需要编辑它的配置文件(位于 /etc/dnf/dnf.conf)并在下面添加以下几行 [main] 部分。

sudo vi /etc/dnf/dnf.conf  [main] ... skip_if_unavailable=True fastestmirror=1

添加后,最好在检查更新之前从启用的存储库中清除所有累积的缓存数据。

dnf clean all
yum clean all

注意:清理不会影响已安装的软件包。

现在让我们验证哪些更新可用。

LiquidWeb # dnf check-update NetworkManager.x86_64               1:1.26.0-12.el8_3              BaseOS NetworkManager-libnm.x86_64         1:1.26.0-12.el8_3              BaseOS NetworkManager-team.x86_64          1:1.26.0-12.el8_3              BaseOS NetworkManager-tui.x86_64           1:1.26.0-12.el8_3              BaseOS authselect.x86_64                   1.2.1-2.el8                    BaseOS authselect-libs.x86_64              1.2.1-2.el8                    BaseOS bash.x86_64                         4.4.19-12.el8                  BaseOS bind--libs.x86_64             32:9.11.20-5.el8_3.1           BaseOS ...
LiquidWeb # yum check-updates 176 packages excluded due to repository priority protections LiquidWeb #

手动更新包

在本节中,我们将讨论具体的软件包更新。

1. 一般更新

要将所有软件包更新到最新版本,请使用以下命令。

dnf update
yum update

此命令将更新整个 CentOS 系统,包括过时的软件包、内核和任何过时的系统实用程序,以确保系统是最新的。

2. 仅安全更新

另一个有趣的用例是我们只需要维护最新的安全补丁。 对于 yum,插件 yum-security 将完成该任务,而不会触及其余已安装的软件包。 由于它从 CentOS 7 开始集成,我们只需要使用该命令即可。

LiquidWeb # dnf upgrade --security No security updates needed, but 15 updates available Dependencies resolved. Nothing to do. Complete!
LiquidWeb # yum update --security No security updates needed, but 207 updates available Dependencies resolved. Nothing to do. Complete!

3. 不包括包裹

在某些情况下,我们可能希望让某个软件在特定版本上运行。 假设我们有 MariaDB 作为我们的数据库管理系统,并且我们的站点和应用程序在 10.1.12 版本中运行得非常好。 自动升级最终破坏所有站点将是一种不受欢迎的情况。 为了避免这种情况,我们可以使用我们之前为 dnf 和 yum 安装的 versionlock 插件。 下面是将包锁定到特定版本的命令。

LiquidWeb # dnf versionlock add mariadb Adding versionlock on: mariadb-10.1.12.el7*
LiquidWeb # yum versionlock add mariadb Loaded plugins: fastestmirror, priorities, universal-hooks, versionlock Adding versionlock on: 0:mariadb-10.1.12.el7 versionlock added: 1

此操作将创建一个包含所有自定义块的文件(/etc/dnf/plugins/versionlock.list 或 /etc/yum/pluginconf.d/versionlock.list)。 或者,我们可以使用 -x 标记从更新命令中排除某些包。

dnf -x mariadb update
yum -x mariadb update

4. 排除内核更新

如果我们的环境对突然变化很敏感,我们可以排除重要的内核更新以保持稳定。 和上一节一样,我们将使用 -x 标记。

dnf update -x kernel -x redhat-release*
yum update -x kernel -x redhat-release*

为了使更改永久化,我们可以直接修改配置文件(始终在 [main] 部分)。

sudo vi /etc/dnf/dnf. conf  [main] ... # Excluded packages exclude=kernel, redhat-release*
sudo vi /etc/yum.conf [main] ... # Excluded packages exclude = kernel, redhat-release*

自动化升级过程

现在我们知道如何手动更新我们的系统,让我们开始享受乐趣。 我们将讨论两个主要工具:dnf-automatic 或 yum-cron 和 cron 实用程序。 我们将展示一些有关使用这些工具和设置自定义配置自动化更新过程的想法。

1. 包管理器实用程序

Dnf-automatic 和 yum-cron 是与调度实用程序 cron 非常相似的服务。 但是,这些插件经过优化,可以升级每天运行的任务。 充分利用插件的推荐方法是详细浏览配置文件以确定最合适的选项。

有几个设置需要调整:

  • 我们要执行的更新类型。
  • 如果我们想下载或安装升级,我们应该如何处理通知。

我们甚至可以从更新中排除包。 我们之前安装了插件,所以现在我们必须启用它们。

LiquidWeb # systemctl enable --now dnf-automatic.timer Created symlink /etc/systemd/system/timers.target.wants/dnf-automatic.timer → /usr/lib/systemd/system/dnf-automatic.timer.
LiquidWeb # systemctl enable yum-cron LiquidWeb # systemctl start yum-cron LiquidWeb # systemctl status yum-cron ● yum-cron.service - Run automatic yum updates as a cron job    Loaded: loaded (/usr/lib/systemd/system/yum-cron.service; enabled; vendor preset: disabled)    Active: active (exited)   Main PID: 44673 (code=exited, status=0/SUCCESS)

既然服务已启用,我们就可以自由地按照我们认为合适的方式自定义和设置它们。 配置文件是/etc/dnf/automatic.conf 和/etc/yum/yum-cron.conf。

以下是一些最重要的指令。

[commands] ... upgrade_type = default download_updates = yes apply_updates = no  [emitters] ... emit_via = email  [email] ... email_from = [email protected] email_to = [email protected]  [base] ... debuglevel = 1 exclude = mariadb*

从 [commands] 部分,我们可以突出显示这三个命令:

  • upgrade_type:确定我们要执行的升级类型(默认、安全、最小)。
  • download_updates:下载更新文件。
  • apply_updates:安装下载的文件。

在里面 [emitters] 部分,emit_via 选项让我们可以设置我们希望如何获取通知(stdio、email 或 motd)。 本节与 [email] 部分来建立邮件设置。

最后,我们有 [base] 部分。 它允许我们覆盖主要的 dnf.conf 或 yum.conf 文件(配置文件)。 这里可以设置几个选项,包括调试级别、排除规则和自定义命令。

2. 定时任务

我们可以使用命令 crontab -e 自动化服务器脚本。 该命令允许我们打开 cron 作业文件并添加计划任务。 下面列出了一些最常见的要安排的任务。

0 0 * * * /usr/bin/dnf update # Daily full updates  0 0 * * * /usr/bin/dnf update --security # Daily security updates  0 0 * * * /usr/bin/dnf -x mariadb update # Daily updates excluding a single package   0 0 * * * /usr/bin/dnf update -x kernel -x redhat-release* # Daily executions excluding kernel updates 0 0 1 * * /usr/bin/dnf update kernel* redhat-release* # To use along the previous job, updates the kernel each 1st day of the month
0 0 * * * /usr/bin/yum update # Daily full updates  0 0 * * * /usr/bin/yum update --security # Daily security updates  0 0 * * * /usr/bin/yum -x mariadb update # Daily updates excluding a single package   0 0 * * * /usr/bin/yum update -x kernel -x redhat-release* # Daily executions excluding kernel updates 0 0 1 * * /usr/bin/yum update kernel* redhat-release* # To use along the previous job, updates the kernel each 1st day of the month

结论

Unix/Linux 系统为用户提供了极大的灵活性,CentOS 也不例外。 初始配置可能需要一段时间,但一旦正确设置,您的系统将达到满足您特定需求的速度,并且只会更新需要更新的内容。

有额外的网站需求? 探索 Liquid Web 的托管附加组件,以帮助提高您的站点存储、安全性和性能。