【RHEL 8 / 9】RHEL 8 / 9のアップデートを自動化する

1 はじめに

本記事は、RHEL(Red Hat Enterprise Linux) 8 / 9における、
パッケージの更新の確認とダウンロードを自動的に行う方法について記したものです。

本記事は、下に示すページを整理したものです。
記事内容は、下に示すページとほとんど変わらないことを前以ってお断りしておきます。

Product Documentation for Red Hat Enterprise Linux 8
7.5.6 ソフトウェア更新の自動化

Product Documentation for Red Hat Enterprise Linux 9
第7章 RHEL 9 でのソフトウェア更新の自動化

本記事は自分の備忘録を目的に作成しましたが、
RHEL 8 / 9では「パッケージ更新の確認とダウンロードの自動化」ができることを
広く知ってもらうことも良いと考え、敢えてほぼコピーに近いものを公開します。

本記事で示す方法は、
CentOSRocky LinuxAlmaLinuxなどのRHELクローンOSにも、
おそらく適用できるものと思っています。

# RHELにおいては、できないと思っていた
# システム設定を残したままのバージョンアップもできるようです。
# この方法についても、後々整理したものをアップしたいと思っています。

2 RHEL 8 / 9でのソフトウェア更新の自動化

パッケージの更新を自動的かつ定期的に確認してダウンロードするには、
dnf-automaticパッケージに含まれるDNF Automaticツールを使用します。

DNF Automaticは、
必要に応じてパッケージメタデータを同期し、利用可能な更新を確認してから、 ツールの設定方法に応じて以下のアクションのいずれかを実行します。

終了
更新済みパッケージのダウンロード
更新のダウンロードおよび適用

選択したメカニズムによって操作された結果は、標準出力やメールなどで報告されます。

こういったツールは使用するまでの設定が面倒と思われがちですが、
DNF Automaticには複雑な設定が無く、
図2-1に示すようでインストールから実行まで わずか数ステップで設定が完了します。

2.1 dnf-automaticパッケージのインストール

dnf-automaticパッケージは、次のようにしてインストールします。

# dnf install dnf-automatic

次のコマンドで、インストールが正常に完了したことを確認することができます。

# rpm -qi dnf-automatic

2.2 DNF Automatic設定ファイル

DNF Automaticは、
/etc/dnf/automatic.conf”を設定ファイルとして使用し、動作を定義します。

設定ファイルは、以下のトピックセクションに分かれています。

[commands]セクション
DNF Automaticの操作モードを設定します。
[emitters]セクション
DNF Automaticの結果が報告される方法を定義します。
・ [command_email]セクション
電子メールの送信に使用する外部コマンドのメールエミッター設定を提供します。
[email]セクション
電子メールエミッターの設定を提供します。
[base]セクション
DNFのメイン設定ファイルの設定を上書きします。

設定ファイルの詳しい内容については、3章で示します。

/etc/dnf/automatic.conf”ファイルのデフォルト設定では、
DNF Automaticは利用可能な更新を確認し、
ダウンロードして、標準出力として結果を報告するようになっています。

報告をstdioからemailに変更した時、元メールアドレスを実態に合わせて変更するくらいで、
基本的にはデフォルトのままでよく、あまり変更する必要はないと思います。

2.3 DNF Automaticツールの有効化

DNF Automaticを実行するには、
常に特定のsystemdタイマーユニットを有効にして起動する必要があります。

dnf-automaticパッケージで提供されるタイマーユニットのいずれかを使用するか、
必要に応じて独自のタイマーユニットを作成することができます。

dnf-automaticパッケージで提供されるタイマーユニットは、 表2.3-1のようになっています。

2.3.1 dnf-automatic-download.timer・・・利用可能な更新をダウンロード

利用可能な更新をダウンロードするsystemdタイマーユニット
選択、有効化、および起動するには、以下のコマンドを実行します。

# systemctl enable dnf-automatic-download.timer
# systemctl start dnf-automatic-download.timer

2.3.2 dnf-automatic-install.timer・・・利用可能な更新をダウンロードとインストール

利用可能な更新をダウンロードとインストールするsystemdタイマーユニット
選択、有効化および起動するには、以下のコマンドを実行します。

# systemctl enable dnf-automatic-install.timer
# systemctl start dnf-automatic-install.timer

2.3.3 enable dnf-automatic-notifyonly.timer・・・利用可能な更新をレポート

利用可能な更新をレポートする systemdタイマーユニット
選択、有効化、および起動するには、以下のコマンドを実行します。

# systemctl enable dnf-automatic-notifyonly.timer
# systemctl start dnf-automatic-notifyonly.timer

2.3.4 dnf-automatic.timer

DNF Automatic設定ファイルの設定にしたがってダウンロード、ダウンロードとインストール、
または利用可能な更新の報告を行うsystemdタイマーユニットを 選択、有効化、および起動するには、
次のコマンドを使用します。

# systemctl enable dnf-automatic.timer
# systemctl start dnf-automatic.timer

2.4 DNF Automaticの実行

2.3節で示したいずれかのsystemdタイマーユニットが有効になっていれば、
利用可能な更新パッケージの報告やダンロード、インストールが実際に実行されるのは、
次のコマンドを実行した時となります。

# dnf-automatic [<config file>]

<config file>
指定されない場合は、次のパスのファイルが適用される。
/etc/dnf/automatic.conf

上記コマンドをcronに登録しておけば、
ソフトウェアの更新が決まった日時に自動的に行えるようになります。

下に示す例は、毎月1日午前4時にdnf-automaticを実行する例となります。

0 4 1 * * /usr/bin/dnf-automatic

3 DNF Automatic設定ファイル

本章では、DNF Automatic設定ファイルの内容について詳説します。

設定ファイルのデフォルトパスは、“/etc/dnf/automatic.conf”ですが、
任意のパスに置くことも可能です。

DNF Automatic設定ファイルはいくつかのセクションから構成されていますが、
それらの概要については2.2節に示しました。

3.1 [commands] section

プログラムの動作モードを設定します。

apply_updates
ブール値、デフォルト False
 
利用可能なアップデートを構成するパッケージをdnf-automatic.timerで適用するかどうか、
つまりRPM経由でインストールするかどうか、download_updatesを意味します。
 
Falseに設定している場合、ダウンロードされたパッケージは
次にDNFトランザクションが成功するまでキャッシュに残されます。
 
他のタイマーユニットは、この設定を上書きします。
download_updates
ブール値、デフォルト False
 
利用可能なアップデートを構成するパッケージを
dnf-automatic.timerによってダウンロードするかどうか。
 
他のタイマーユニットは、この設定を上書きします。
network_online_timeout
時間 (秒)、デフォルト: 60
 
システムがオンラインになるまでdnf-automaticが待機する最大時間。
0はネットワークの可用性検出がスキップされることを意味します。
random_sleep
時間 (秒)、デフォルト: 0
 
ダウンロード前のランダム遅延の最大値。
デフォルトでは、systemdタイマー最大1時間のランダム遅延が適用されます。
upgrade_type
defaultsecurityのいずれか。
 
defaultは利用可能なすべてのアップデートを探し、
securityはセキュリティ勧告が発行されたものだけを探します。
reboot
neverwhen-changedwhen-needed、デフォルト: neverのいずれか。
 
when-neededsystemdカーネルがアップグレードされたときなど、
変更を適用するために再起動が必要なときだけ再起動をトリガーします。
reboot_command
文字列、デフォルト:“shutdown -r +5 ‘Rebooting after applying package updates’
 
システムの再起動をトリガーするために実行するコマンドを指定します。
例えば、5分間の遅延と注意メッセージをスキップするには、“shutdown -r”を使用します。

3.2 [emitters] section

結果をどのように報告するかを選択します。

emit_via
<リスト>、デフォルト: email, stdio, motd
 
結果を報告するエミッターのリスト。
利用可能なエミッターは、
結果を標準出力に出力するstdio
結果をカスタム・コマンドに送信するcommand
コマンドを使って電子メールを送信するcommand_email
電子メールでレポートを送信するemail
結果を/etc/motdファイルに送信するmotd
です。
system_name
文字列、デフォルト:指定されたシステムのホスト名
 
レポート内でシステムがどのように呼び出されるか。

3.3 [command] section

コマンド・エミッターを設定します。
フォーマット文字列の引数で使用可能な変数は、メッセージの本文と一緒です。

command_format
フォーマット文字列、デフォルト: cat
 
実行するシェルコマンド。
stdin_format
フォーマット文字列、デフォルト:{body}。
 
stdinでコマンドに渡すデータ。

3.4 [command_email] section

コマンド・メール・エミッターを設定します。
フォーマット文字列の引数で使える変数は、
bodyがメッセージ本文、subjectがメールの件名、email_fromが“From: ”アドレス、
email_toがスペースで区切られた受信者のリストです。

command_format
書式文字列、
デフォルト: “mail -Sendwait -s {subject} -r {email_from -r {email_from} {email_to}
 
実行するシェルコマンド。
email_from
文字列、デフォルト: root
 
メッセージの "From:"アドレス。
email_to
<リスト>、デフォルト: root
 
メッセージの受信者のリスト。
stdin_format
フォーマット文字列、デフォルト: {body}。
 
stdinでコマンドに渡すデータ。

3.5 [email] section

emailエミッターを設定します。

email_from
文字列、デフォルト: root
 
メッセージの "From: "アドレス。
email_host
文字列、デフォルト: localhost
 
メッセージの送信に使われるSMTPサーバーのホスト名。
email_port
整数、デフォルト: 25
 
SMTPサーバーに接続するポート番号。
email_to
<リスト>、デフォルト: root   メッセージの受信者のリスト。

3.6 [base] section

DNFのメイン・コンフィギュレーション・ファイルの設定を上書きするために使用できます。
DNF Configuration Reference を参照してください。

以上

HTMLだと、
思うように編集することは難しく、やろうすればとっても時間が掛かります。
ですので、本記事の元となっているWordで作成したPDFを
ページ最後に貼り付けました。

少しでも役に立てていただければ、うれしく思います。

このPDFファイルは、自由に配布されてもかまいません。
ただし、再配布の際には、
入手元著者名は明らかにしてください

なお、上のPDFファイルの内容、また本文中の記述に、
誤字や脱字、誤った内容の記述など見つかりましたら、
下に示すフォームでご連絡いただければ幸いです。

お問い合わせ