如何保持Rocky Linux 9服务器更新
引言
在本教程中,您将探索一些使您的Rocky Linux 9服务器堆栈保持最新的最佳实践。就像网络安全强化一样,您可以采取许多步骤,以确保您的服务器将继续安全地工作,无需未来干预。
在大多数Rocky Linux服务器上,除了自动配置之外,还可以应用一些工具和设置。如果您自己进行服务器管理,手动修补所有环境可能会非常繁琐且容易出错。
本教程将涵盖以下内容:
- Testing graceful reboots following best practices for application management, to minimize any complications from maintenance updates
- Configuring automatic updates for most of the packages and libraries running on your machine
- Live kernel patching, and other best practices around kernel updates
先决条件
- A Rocky Linux 9 server and a non-root user with sudo privileges. You can learn more about how to set up a user with these privileges in our Initial Server Setup with Rocky Linux 9 guide.
第一步-遵循最佳的应用管理实践
配置服务器进行自动升级的一个基本部分是确保服务器上运行的所有应用程序在意外停机或重新启动后能够正确地重新启动。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-自动不会在安装后自动启用。相反,它提供了几种不同的服务,您可以在 Systemd 中注册以自定义其行为。这些服务包括:
- dnf-automatic – this service follows the dnf-automatic configuration file options in /etc/dnf/automatic.
- dnf-automatic-notifyonly – this overrides the configuration file by only notifying you of available updates and not installing them.
- dnf-automatic-download – this overrides the configuration file by only downloading packages and not installing them.
- dnf-automatic-install – this overrides the configuration file by always installing downloaded packages.
在这个教程中,您将启用dnf-automatic-install服务,但首先,您需要对dnf-automatic配置文件进行一次更改。使用vi或您喜欢的文本编辑器打开该文件。
- sudo vi /etc/dnf/automatic
[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 automatic install updates 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被实现为一个定时器,而不是作为一个长时间在后台运行的服务。这意味着只要服务被加载且日志反映成功运行,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内核的一个功能,称为实时补丁。该功能使得可以在不重新启动系统的情况下实施内核更新。在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容器镜像。