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では「パッケージ更新の確認とダウンロードの自動化」ができることを
広く知ってもらうことも良いと考え、敢えてほぼコピーに近いものを公開します。
本記事で示す方法は、
CentOS、Rocky Linux、AlmaLinuxなどのRHELクローンOSにも、
おそらく適用できるものと思っています。
# RHELにおいては、できないと思っていた
# システム設定を残したままのバージョンアップもできるようです。
# この方法についても、後々整理したものをアップしたいと思っています。
2 RHEL 8 / 9でのソフトウェア更新の自動化
パッケージの更新を自動的かつ定期的に確認してダウンロードするには、
dnf-automaticパッケージに含まれるDNF Automaticツールを使用します。
DNF Automaticは、
必要に応じてパッケージメタデータを同期し、利用可能な更新を確認してから、
ツールの設定方法に応じて以下のアクションのいずれかを実行します。
・ 終了
・ 更新済みパッケージのダウンロード
・ 更新のダウンロードおよび適用
選択したメカニズムによって操作された結果は、標準出力やメールなどで報告されます。
こういったツールは使用するまでの設定が面倒と思われがちですが、
DNF Automaticには複雑な設定が無く、
図2-1に示すようでインストールから実行まで
わずか数ステップで設定が完了します。
2.1 dnf-automaticパッケージのインストール
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 start dnf-automatic-download.timer
2.3.2 dnf-automatic-install.timer・・・利用可能な更新をダウンロードとインストール
利用可能な更新をダウンロードとインストールするsystemdタイマーユニットを
選択、有効化および起動するには、以下のコマンドを実行します。
# systemctl start dnf-automatic-install.timer
2.3.3 enable dnf-automatic-notifyonly.timer・・・利用可能な更新をレポート
利用可能な更新をレポートする systemdタイマーユニットを
選択、有効化、および起動するには、以下のコマンドを実行します。
# systemctl start dnf-automatic-notifyonly.timer
2.3.4 dnf-automatic.timer
DNF Automatic設定ファイルの設定にしたがってダウンロード、ダウンロードとインストール、
または利用可能な更新の報告を行うsystemdタイマーユニットを 選択、有効化、および起動するには、
次のコマンドを使用します。
# systemctl start dnf-automatic.timer
2.4 DNF Automaticの実行
2.3節で示したいずれかのsystemdタイマーユニットが有効になっていれば、
利用可能な更新パッケージの報告やダンロード、インストールが実際に実行されるのは、
次のコマンドを実行した時となります。
<config file>
指定されない場合は、次のパスのファイルが適用される。
/etc/dnf/automatic.conf
上記コマンドをcronに登録しておけば、
ソフトウェアの更新が決まった日時に自動的に行えるようになります。
下に示す例は、毎月1日午前4時に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
-
default、securityのいずれか。
defaultは利用可能なすべてのアップデートを探し、
securityはセキュリティ勧告が発行されたものだけを探します。
- reboot
-
never、when-changed、when-needed、デフォルト: neverのいずれか。
when-neededはsystemdやカーネルがアップグレードされたときなど、
変更を適用するために再起動が必要なときだけ再起動をトリガーします。
- 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ファイルの内容、また本文中の記述に、
誤字や脱字、誤った内容の記述など見つかりましたら、
下に示すフォームでご連絡いただければ幸いです。