DNFの自動アップデートを設定する(dnf-automatic)

2022-07-20

dnf-automatic でdnf アップデートを自動実行する

CentOS 7 では、yum-cron で、パッケージのアップデートを自動実行できていましたが、CentOS 8 では「dnf-automatic」で、パッケージのダウンロードしてインストールまで自動で行ってくれます。また、更新作業の実行結果をメールで通知できる事もできます

dnf-automatic をインストールする

dnf で「dnf-automatic」をインストールします

$ sudo dnf install dnf-automatic

/etc/dnf/automatic.conf」の設定ファイルを変更して、自動でダウンロードしてインストールするようにしまう。また、更新作業の結果はメールで送信するように設定します。

$ sudo vim /etc/dnf/automatic.conf

[commands]
upgrade_type = default
random_sleep = 0
network_online_timeout = 60
download_updates = yes
# 「no」から「yes」に変更
apply_updates = yes

[emitters]
# 「stdio」から「command_email」に変更します
emit_via = command_email 

[command_email] # dnf-automatic の結果をメール通知します設定

# コメントアウトを外す
command_format = "mail -Ssendwait -s {subject} -r {email_from} {email_to}"

# コメントアウトを外す
stdin_format = "{body}"

# 送信元のメールアドレスを設定
email_from = info@example.com

# 送信先のメールアドレスを設定
email_to = admin@example.jp

[base]
debuglevel = 1

設定内容の詳細は、以下になります

[commands]
  • upgrade_type = default アップデートするパッケージの種類を指定します。「default」では全てのパッケージで「security」の場合は、セキュリティ関連のみとなります
  • apply_updates = yes アップデート後にパッケージを適用するかの設定です。「yes」だとパッケージの反映までおこないます「no」だと反映をおこなわずにダウンロードのみとなります

[emitters]

  • emit_via アップデートの通知方法を設定します。デフォルトではstdioで、stdioは標準出力です。command_email でメールコマンドを利用して通知する方法に変更します。

[command_email]

  • command_format = “mail -Ssendwait -s {subject} -r {email_from} {email_to}" メール送信する際のメールコマンドとオプションを指定します
  • stdin_format = “{body}" メール本文のフォーマット
  • email_from 送信元のメールアドレス
  • email_to 送信先のメールアドレス

「dnf-automatic」の自動起動の設定と、サービスの起動

# 自動起動に登録
$ sudo systemctl enable --now dnf-automatic.timer

# サービスの起動
$ sudo systemctl status dnf-automatic.timer

「dnf-automatic」で実行されるタイミングは「/etc/systemd/system/timers.target.wants/dnf-automatic.timer」で設定されています。下記の設定では毎日6時に実行されます。

dnf-automatic-4.7.0-8.el8.noarch では、実行されるタイミングが設定されているファイルの箇所が変更されていました。
変更後は「/etc/systemd/system/timers.target.wants/dnf-automatic-install.timer 」にファイルがありました

# 「dnf-automatic」で実行されるタイミングのファイルは、dnf-automatic.timer か dnf-automatic-install.timerはどちらかになります
$ cat /etc/systemd/system/timers.target.wants/dnf-automatic.timer
 # or
$ cat /etc/systemd/system/timers.target.wants/dnf-automatic-install.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

 

LinuxCentOS 8,RockyLinux

Posted by admin