RHEL(Red Hat Enterprise Linux)系のディストリビューションで利用されているRPMパッケージの自動アップデートを実施する手順をまとめました。
関連記事 dnf update後にサービス再起動が必要か確認する Rocky ,Alma, CentOS
最近は手動アップデートが面倒に感じるようになってきたので、自動でパッケージのアップデートを実施しています。

- Rocky ,Almaで自動アップデートを行いたい
- RPMパッケージをアップデートしたい
Windows系のサーバーOSも容赦なく更新プログラムを適応しようとしてきます。セキュリティを考えたら、正しい行動なんですけどタイミングを考えろ・・・と言いたい。
CentOS の代わりとなる「Rocky Linux (ロッキーリナックス)」と「AlmaLinux(アルマリナックス)」という2つの新しい Linux ディストリビューションが立ち上がりました。どちらも CentOS Linux の後継として RHEL(Red Hat Enterprise Linux)の完全クローンです。
dnf-automaticコマンドを使う
dnf-automaticとは
RHEL7系のOSまでは、RPMパッケージを yum コマンドで管理していたので、yum-cron コマンドで自動化を実施していました。
RHEL8系のOSからは、パッケージ管理を dnf コマンドに変更されました。dnfの自動アップデートは dnf-automatic で提供されるようになったようです。
dnf-automaticは、自動アップデートの更新結果をメールで通知することが可能となっています。また、自動アップデートの定期スケジュール設定は、cron ではなく systemd を利用して設定を行います。
dnf-automatic のインストール
RHEL9系ディストリビューションの Rocky Linux(AlmaLinux) では、dnf-automaticコマンドは BaseOS リポジトリに含まれていますので、インストールをすぐに実行することが可能です。
早速、dnf-automatic パッケージをインストールします。
# dnf install dnf-automatic
dnf-automatic の実行
dnf-automatic 設定ファイル
dnf-automaticの設定ファイルを修正することでパッケージ更新の方法、自動更新の有無、メール通知を制御することができます。
- 自動アップデートの有効/無効
- パッケージ更新の種類
- 例外処理
- アップデート結果のメール通知
とりあえず、自動アップデート機能を動作させる場合の設定箇所は次の通りです。
/etc/dnf/automatic.conf # アップデートの種類 # default すべてのパッケージ # security セキュリティ関係のみ upgrade_type = default # 利用可能な更新パッケージをダウンロードするかどうか download_updates = yes # アップデート適用のタイミング # yes 自動更新 # no ダウンロードのみ apply_updates = yes
細かな制御については別の項目で解説します。
dnf-automatic の定期実行
自動アップデートの定期実行をスケジュール化するには、systemd の Timer 機能を利用します。自動起動の設定と機能を有効にします。
# systemctl enable --now dnf-automatic.timer # systemctl start dnf-automatic.timer
有効化すると設定ファイルが /etc/systemd/system/timers.target.wants/dnf-automatic.timer に作成されます。
デフォルト設定では毎日6時頃にタイマーがセットされ自動アップデートが実行されます。
/etc/systemd/system/timers.target.wants/dnf-automatic.timer [Unit] Description=dnf-automatic 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
特に、こだわりが無ければ設定変更を実施する必要はありません。
dnf-automatic.timerファイルを修正した場合、設定を反映させるにはサービスのリロードが必要になりますので忘れずに実行してください。
# systemctl restart dnf-automatic.timer
設定が正しく反映しているか確認します。Activeの出力結果を確認してください。時間が設定されているか確認してください。
# systemctl status dnf-automatic.timer ● dnf-automatic.timer - dnf-automatic timer Loaded: loaded (/usr/lib/systemd/system/dnf-automatic.timer; enabled; vendor preset: disabled) Active: active (waiting) since Wed 2023-04-05 16:23:02 JST; 10min ago Until: Wed 2023-04-05 16:23:02 JST; 10min ago Trigger: Thu 2023-04-06 06:14:08 JST; 13h left Triggers: ● dnf-automatic.service
エラーがあるとinactive (dead)と表示されます。
# systemctl status dnf-automatic.timer ○ dnf-automatic.timer - dnf-automatic timer Loaded: loaded (/usr/lib/systemd/system/dnf-automatic.timer; enabled; vendor preset: disabled) Active: inactive (dead) Trigger: n/a Triggers: ● dnf-automatic.service
dnf-automatic の詳細設定
結果のメール通知
アップデートの通知はデフォルトだと標準出力です。設定によりメール通知に変更することができます。
/etc/dnf/automatic.conf [emitters] emit_via = email [email] email_from = [email protected] email_to = root email_host = localhost
emit_via:アップデートの通知方法を設定。stdioは標準出力。emailはメール通知
email_from : 送信元のメールアドレスを設定
email_to : 宛先メールアドレスを設定
email_host : SMTPサーバーを設定
パッケージを更新対象から除外
自動アップデートされると困るパッケージを対象外に設定することができます。dnf.confのexcludeに設定を追記することで、アップデート対象からパッケージを除外できます。
/etc/dnf/dnf.conf excludepkgs=kernel* httpd*
あとがき
最近はアップデートによって、サービスが止まるような事は無くなりました。過去の経緯からアップデートは手動で実施していますが面倒くさいです。アップデートを自動で実施させるように設定を変更中です。