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.
ステップ1:アプリケーション管理のベストプラクティスに従うこと
サーバーの自動アップグレードを設定するための基本的な部分は、サーバー上で実行されているすべてのアプリケーションが、計画外の停止または再起動後に正しく再開できるようにすることです。Linuxパッケージマネージャーはバックグラウンドで非中断的に実行されるように設計されているため、必要なメンテナンスには追加のオーバーヘッドが発生しません。それにもかかわらず、サーバーが再起動された後の動作について心配することが、良いアップデート戦略がない最も一般的な理由の1つです。
可能な限り、スタック内のアプリケーションは、Rocky LinuxなどのほとんどのモダンなLinuxディストリビューションで利用されている systemd を含むサーバーの init システムによって管理されるべきです。systemd は、実行中のサービスとのやり取りや必要に応じた自動再起動を行うための systemctl コマンドを提供しています。バックグラウンドで実行されるように設計されたパッケージマネージャーを経由してインストールされるほとんどのソフトウェアは、ベストプラクティスとして systemd サービスと設定ユニットのファイルを自動的に提供するはずです。
自分自身のソフトウェアを実行したり、Gitリポジトリから展開したソフトウェアを実行する際には、systemdと連携するために独自のユニットファイルを作成することは悪い考えではありません。軽量な代替手段として、supervisorのようなツールを使用することもできます。また、@reboot構文を使用してシステムのcronスケジューラを利用することもできます。
設定が完了したら、再起動を通じてテストすることを確認してください。sudo shutdown now -r を実行することで再起動できます。これにより、実行中のプロセスが正常に停止し、即座に再起動が行われます。また、現在時刻の代わりに hh:mm の形式や現在からの経過時間(分数)を指定することで、将来の再起動を予約することもできます。通常、本番環境での展開では、予期しない停止後にあなたの注意が必要とされず、必要なすべてのサービスとエンドポイントが自動的に再開されるべきです。
今、メンテナンス再起動を通じて環境に問題がないことを確認したので、次のステップでは自動アップグレードのスケジュール設定方法を学びます。
ステップ2 – 自動アップグレードの設定
Rockyのパッケージマネージャーであるdnfには、システム全体のアップグレードを行うための2つの主要な方法があります。パッケージを指定せずにdnf upgradeを実行すると、システム上のすべてのパッケージがアップグレードされます。また、dnf upgrade-minimalを実行すると、最新のバグ修正やセキュリティパッチのリリースのみを含むパッケージがアップグレードされます。これにより、必要なメンテナンスが行われつつ、上流の互換性のない変更を避けることができます。dnfのコマンドについては、dnfのドキュメンテーションを参照することができます。
Rockyはまた、サーバーのセキュリティパッチやその他の必要なアップグレードを自動的に取得してインストールするためのdnf-automaticというユニークなツールも提供しています。dnfを使用してそれをインストールすることができます。
- sudo dnf install dnf-automatic -y
インストール後、dnf-automaticは自動的に有効化されません。代わりに、異なるサービスを提供し、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
「/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オプションはデフォルトでデフォルトに設定されています。自動アップグレードを実装する予定の場合は(最も積極的な設定)、予期しない機能の変更を避けるために、デフォルトでセキュリティアップグレードのみをインストールすることがおすすめです。上記の例のように、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時ごろに設定されています。この値を変更する必要はありません。
現在、追加の干渉を必要とせずに、サーバー上のすべてのパッケージが必要なセキュリティの更新を受けるための対策が必要です。最後のステップでは、カーネルを最新の状態に保つ方法と、サーバーリブートが必要な場合の最適な対処方法について学びます。
ステップ3 – カーネルの更新とライブパッチング
他のパッケージに比べて、システムのカーネルをアップデートする必要は少ないです。Linuxのカーネルには(ほぼ)すべてのハードウェアドライバが含まれ、大部分の低レベルシステムの相互作用を担当しています。カーネルのアップデートは、一般には重要な脆弱性を解決する必要がある場合や、公開されている新しいカーネルの機能を利用する必要がある場合、またはカーネルが古くなりすぎて、積み重なったバグや脆弱性のリスクが増えている場合にのみ必要です。
Linuxカーネルの更新の自動スケジューリングには汎用的な方法はありません。これは、カーネルの更新が歴史的には完全なシステムの再起動を必要とし、再起動のスケジューリングは環境に関する仮定をすることなしには不可能だからです。多くのサーバーは可能な限り24時間365日稼働することが期待されており、再起動は時間がかかるか、手動での介入が必要かもしれません。
多くのプロダクション展開では、サービスの可用性を確保するためにこのような再起動に関連する追加の複雑さが必要です。例えば、負荷分散装置を使用して、水平スケールで展開されたサーバーの個別の再起動時にも中断が見えないように、同じ機能を提供できるサーバーにトラフィックを自動的にリダイレクトすることがあります。
カーネルの更新中もサーバーの稼働時間を確保するために、ライブパッチングの有効化
カーネルのアップグレード中のダウンタイムを避けるために、Linuxカーネルの機能であるライブパッチングを使用することができます。この機能により、再起動することなくカーネルのアップデートを実装することが可能です。Rocky Linuxエコシステムには、カーネルのライブパッチのメジャーなメンテナーが2つあります。Red Hatのkpatchは、Red Hat Enterprise Linuxに対してライブパッチングを提供し、KernelCareはRocky Linuxを含む他の主要なLinuxディストリビューションもサポートしています。いずれも利用するためには登録が必要です。
Red Hat Enterprise Linuxのライセンスモデルの仕組みにより、Rocky Linuxを実行している場合、kpatchを介してライブカーネルパッチを受け取ることはできません。Rocky Linuxは、多くの点で無ライセンスのRed Hatのように機能し、完全なライセンスを持つRed Hatインスタンスを実行しない限り、カーネルのライブパッチを有効にする方法はありません。ただし、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は設定されているパッチサービスを確認し、それが存在しない場合、正常に終了します。Red Hatでは代わりにライセンスチェックを実行し、Red Hat kpatchサーバーに登録します。Rockyでは、代わりに商用サポートオプションとしてKernelCareを調査することがおすすめです。
結論を述べる。
このチュートリアルでは、Rocky Linuxサーバーを自動的に最新に保つための複数の戦略について探求しました。また、パッケージリポジトリ、カーネルの更新、サーバーの再起動の扱いといったニュアンスについても学びました。これらは全てDevOpsやサーバーの仕事における重要な基礎知識であり、ほぼすべてのプロダクション設定はこれらの核となる概念に基づいて構築されています。
次に、Dockerコンテナイメージを自動的に更新するためにWatchtowerの使用方法を学ぶことをおすすめします。