dnf-automaticを使ってパッケージの自動アップデート Rocky ,Alma, CentOS

Linux

<景品表示法に基づく表記> 本サイトのコンテンツには、商品プロモーションが含まれている場合があります。

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*

 

あとがき

最近はアップデートによって、サービスが止まるような事は無くなりました。過去の経緯からアップデートは手動で実施していますが面倒くさいです。アップデートを自動で実施させるように設定を変更中です。