Rocky Linux 9服务器更新与维护:终极指南
引言
在本教程中,您将探索一些使您的Rocky Linux 9服务器保持最新状态的最佳实践。就像网络安全强化一样,您可以采取许多步骤,以确保您的服务器将继续安全地工作,无需未来干预。
在大多数Rocky Linux服务器上,除了自动配置之外,还可以应用一些工具和设置。如果您自己进行服务器管理,手动修补所有环境可能会非常繁琐且容易出错。
本教程将涵盖以下内容:
- 遵循应用程序管理最佳实践,测试平滑重启,以最大程度地减少维护更新带来的复杂性。
- 配置机器上运行的大多数软件包和库的自动更新。
- 实时内核修补以及其他内核更新的最佳实践。
先决条件
- 一台Rocky Linux 9服务器和一个具有sudo权限的非root用户。您可以在我们的《Rocky Linux 9服务器初始设置指南》中了解如何设置具有这些权限的用户。
第一步 – 遵循最佳的应用管理实践
配置服务器进行自动升级的一个基本部分是确保服务器上运行的所有应用程序在意外停机或重新启动后能够正确地重新启动。Linux软件包管理器被设计为在后台进行非中断式运行,以确保必要的维护不会带来额外的开销。尽管如此,对于没有建立良好更新策略的最常见原因之一是担心服务器在重新启动后的行为。
尽可能地,您的堆栈中的应用程序应该由服务器的初始化系统管理,大多数现代Linux发行版(包括Rocky Linux)使用的是systemd。systemd提供了systemctl
命令,用于与正在运行的服务进行交互,并根据需要自动重新启动它们。通过包管理器安装并设计为在后台运行的几乎所有软件都应该自动提供systemd服务和配置单元文件,这是最佳实践。
在运行自己的软件或从Git仓库部署的软件时,编写自己的单元文件与systemd集成是一个不错的主意。作为一种轻量级替代方案,您可以选择使用类似supervisor的工具。您还可以使用系统的定时任务调度器以 @reboot
语法来实现。
确认您的配置生效后,务必通过重新启动来测试。您可以通过运行sudo shutdown now -r
来重新启动,这将停止您正在运行的进程并立即重新启动。您还可以指定一个hh:mm
的时间,或者指定从现在开始的分钟数来安排未来的重新启动。在任何未计划的停机后,生产部署通常不需要您的关注,所有必要的服务和终端点应该会自动恢复正常。
既然您确保您的环境在维护重启时不会有任何问题,接下来的步骤是学习如何安排自动升级。
第二步 – 配置自动升级
Rocky的软件包管理器dnf有两种主要的全系统升级方式。您可以运行dnf upgrade
命令,而不指定要升级的软件包,从而升级系统上的每个软件包。您还可以运行dnf upgrade-minimal
命令,仅将每个软件包升级到最新的错误修复或安全补丁版本,这将执行必要的维护工作,同时避免任何可能的上游破坏性更改。您可以从dnf文档中了解更多关于dnf命令的信息。
Rocky还提供了一个独特的工具,名为dnf-automatic
,可以自动检索和安装服务器的安全补丁和其他必要的升级。您可以使用dnf来安装它。
- sudo dnf install dnf-automatic -y
dnf-automatic
不会在安装后自动启用。相反,它提供了几种不同的服务,您可以在Systemd中注册以自定义其行为。这些服务包括:
dnf-automatic
– 此服务遵循/etc/dnf/automatic.conf
中的dnf-automatic
配置文件选项。dnf-automatic-notifyonly
– 此服务通过仅通知您可用更新而不安装它们来覆盖配置文件。dnf-automatic-download
– 此服务通过仅下载软件包而不安装它们来覆盖配置文件。dnf-automatic-install
– 此服务通过始终安装已下载的软件包来覆盖配置文件。
在本教程中,您将启用dnf-automatic-install
服务,但首先,您需要对dnf-automatic
配置文件进行一次更改。使用vi或您喜欢的文本编辑器打开该文件。
- sudo vi /etc/dnf/automatic.conf
/etc/dnf/automatic.conf
文件内容如下:
[commands]
# What kind of upgrade to perform:
# default = all available upgrades
# security = only the security upgrades
upgrade_type = security
random_sleep = 0
# Maximum time in seconds to wait until the system is on-line and able to
# connect to remote repositories.
network_online_timeout = 60
# To just receive updates use dnf-automatic-notifyonly.timer
# Whether updates should be downloaded when they are available, by
# dnf-automatic.timer. notifyonly.timer, download.timer and
# install.timer override this setting.
download_updates = yes
# Whether updates should be applied when they are available, by
# dnf-automatic.timer. notifyonly.timer, download.timer and
# install.timer override this setting.
apply_updates = no
…
该文件中的大多数选项对应于不同Systemd服务提供的各种覆盖选项。一个例外是upgrade_type
选项,默认情况下设置为default
。如果您要实施自动升级(最积极的配置),建议默认仅安装安全升级,以避免功能的意外变化。将upgrade_type
值更改为与上面示例中的security
相同,然后保存并关闭该文件。如果您使用vi,可以通过输入:x
来保存并退出。
现在您可以使用systemctl
来启用该服务。
- sudo systemctl enable dnf-automatic-install.timer
您可以使用systemctl
来检查dnf-automatic-install
服务是否正常运行。
- sudo systemctl status dnf-automatic-install
● dnf-automatic-install.service – dnf 自动安装更新
Loaded: loaded (/usr/lib/systemd/system/dnf-automatic-install.service; static; vendor preset: disabled)
Active: inactive (dead)
Jul 14 21:01:03 droplet-name dnf-automatic[40103]: No security updates needed, but 154 updates available
Jul 14 21:01:03 droplet-name systemd[1]: dnf-automatic-install.service: Succeeded.
Jul 14 21:01:03 droplet-name systemd[1]: Started dnf automatic install updates.
与一些 systemd 服务不同,dnf-automatic
被实现为一个定时器(timer),而不是一个长时间在后台运行的服务。这意味着只要服务被加载且日志反映成功运行,Active: inactive (dead)
状态是正常的。
你可以使用 systemctl cat
命令来查看该定时器的详细信息。
- sudo systemctl cat dnf-automatic-install.timer
[Unit]
Description=dnf-automatic-install timer
# See comment in dnf-makecache.service
ConditionPathExists=!/run/ostree-booted
Wants=network-online.target
[Timer]
OnCalendar=*-*-* 6:00
RandomizedDelaySec=60m
Persistent=true
[Install]
WantedBy=timers.target
默认情况下,该服务配置为每天大约在 6:00 运行。您不需要更改此值。
现在您应该有了解决方案,以确保服务器上的所有软件包都能在没有额外干预的情况下接收到必要的安全更新。在最后一步中,您将学习如何保持内核更新,并在必要时最佳处理服务器重启。
第三步 – 更新和实时修补内核
与其他软件包相比,您需要更新系统内核的频率较低。Linux 内核几乎包含了所有运行中的硬件驱动程序,并负责大部分底层系统交互。仅当需要解决高危漏洞、使用公开发布的新内核功能,或者您的内核变得太旧以至于存在累积的错误和漏洞风险时,才需要进行内核更新。
没有一种通用的方法可以自动安排 Linux 内核更新。这是因为历史上内核更新需要进行整个系统重新启动,而在没有对您的环境进行假设的情况下无法安排重新启动任务。许多服务器被期望提供尽可能接近全天候的可用性,而重新启动可能需要不确定的时间,或者需要手动干预。
大多数生产部署需要在重新启动时添加额外的复杂性,以确保服务的可用性。例如,您可以使用负载均衡器自动将流量重定向到可以在水平扩展部署期间提供相同功能的服务器,同时按顺序逐个重新启动它们,以避免任何可见的停机时间。
为了在内核更新期间确保服务器的正常运行时间,启用实时修补。
为了避免在内核升级期间出现停机时间,您可以使用 Linux 内核的一个功能,称为实时补丁(Live Patching)。该功能使得可以在不重新启动系统的情况下实施内核更新。在 Rocky Linux 生态系统中,有两个主要的内核实时补丁维护者:Red Hat 的 kpatch,为 Red Hat Enterprise Linux 提供实时补丁服务;以及 KernelCare,支持 Rocky Linux 以及其他主要 Linux 发行版。这两者都需要进行注册才能使用。
由于红帽企业版 Linux 的许可模型,当运行 Rocky Linux 时,您将无法通过 kpatch 获得实时的内核补丁——在许多方面,Rocky 就像一个未经许可的红帽版本,没有办法在不运行完全许可的红帽实例的情况下加入内核实时修补。然而,启用它的方法在 Rocky 和 RHEL 上是相同的。首先,安装 kpatch-dnf
软件包。
- sudo dnf install kpatch-dnf
接下来,运行 dnf kpatch auto
命令自动订阅实时修补服务。
- sudo dnf kpatch auto
Last metadata expiration check: 0:00:06 ago on Thu 14 Jul 2022 09:12:07 PM UTC. Dependencies resolved. Nothing to do. Complete!
kpatch 将会检查所配置的打补丁服务,并发现没有找到的情况下,会正常退出。在红帽操作系统上,相反地,它将执行许可检查并注册到红帽的 kpatch 服务器上。在 Rocky 操作系统上,你可能会想要探索 KernelCare 作为商业支持的选项。
结论
在本教程中,您探索了多种策略来实现 Rocky Linux 服务器的自动更新。您还了解了软件包存储库、内核更新和处理服务器重新启动的一些细微差别。这些都是 DevOps 和与服务器更广泛地工作的重要基础知识,几乎所有的生产配置都建立在这些核心概念之上。
接下来,您可能想要学习如何使用 Watchtower 来自动更新 Docker 容器镜像。