
dnfの自動アップデートを設定する
こんにちは。パーソルプロセス&テクノロジー プロダクト推進部 プロダクトインフラグループ の小泉です。
不定期投稿の技術ネタ記事となります。
Linuxでは、パッケージマネージャを使うことが日常茶飯事ですよね。今回は、業務で調査したdnfコマンドの自動アップデート機能であるdnf-automaticについてご紹介します。
dnf-automaticとは
RedHat系OSでは、バージョン8以降、パッケージ管理はyumではなくdnfを使用します。このdnfの自動アップデート機能がdnf-automaticです。
dnfでインストールしたパッケージについて、自動でアップデートがあるかをチェックし、必要なら自動で最新バージョンをインストールしてくれます。
また、アップデートを検知したときにメール通知をすることもできます。
インストール手順
dnf-automaticパッケージをインストールするだけです。簡単ですね。
なお、下記手順はRocky Linux 8.8上で動作確認したものになります。
# インストール
sudo dnf install dnf-automatic
# パッケージがインストールされたかの確認
rpm -qi dnf-automatic
設定ファイル
今回は最低限の設定をご紹介します。
/etc/dnf/automatic.confの設定
[commands]セクションの upgrade_typeを変更すると、セキュリティアップデートのみ自動アップデートするよう設定できます。
default : 全パッケージをアップデート対象とする
security : セキュリティアップデートのみ
設定の有効化
利用したい機能ごとに、systemdタイマーユニットが用意されています。systemdタイマーユニットはcronに似た機能で、一定期間ごとにタスクを実行することができます。
3パターンの挙動から選び、有効化します。
dnf-automatic-download.timer
キャッシュにパッケージをダウンロードするのみ。dnf-upgradeを手動実行するまではアップデートされない。
dnf-automatic-install.timer
更新パッケージをダウンロードしてインストール
dnf-automatic-notifyonly.timer
リポジトリデータのみをダウンロード。更新があったら通知。
設定例
# automatic.confの設定
vi /etc/dnf/automatic.conf
[commands]
# What kind of upgrade to perform:
# default= all available upgrades
# security= only the security upgrades
#upgrade_type = default
upgrade_type = security
# timerの設定編集
vi /usr/lib/systemd/system/dnf-automatic-install.timer
[Timer]
OnCalendar=*-*-* 01:00 # 毎日1:00に実行
RandomizedDelaySec=0 # 設定した秒数だけランダムに遅らせて実行(負荷軽減したい場合に設定)
Persistent=true
# 有効化
sudo systemctl enable --now dnf-automatic-install.timer
# 確認
sudo systemctl status dnf-automatic-install.timer
自動アップデート機能が実行されると、/var/log/messagesに次のログが出るようになります。
systemd[1]: Starting dnf automatic install updates...
dnf-automatic[8328]: Last metadata expiration check: 1:12:46 ago on Wed 22 Nov 2023 04:47:32 PM JST.
systemd[1]: dnf-automatic-install.service: Succeeded.
systemd[1]: Started dnf automatic install updates.
その他の設定パラメータについては、こちらに記載されています。
導入時の注意
便利な機能ですが、プロダクション環境では闇雲に導入しないことをお勧めします。カーネルアップデートによってサーバが起動しなくなったり、ソフトウェア間の互換性がなくなってしまったりするリスクがあるためです。
適切にインストールパッケージの除外設定をするとか、小規模な影響の小さいサーバの保守を楽にするために使用するなど、リスク許容度に合う時のみ使用すると良いと思います。
またdnfについては、他にも気を付けるべきポイントがあります。
dnfのキャッシュは、dnf-makecache.timerというタイマー設定で定期的にキャッシュダウンロードが実行されています。
OSによってはデフォルトで有効になっているので、意図せずキャッシュダウンロードをしてディスク圧迫してしまうなんてこともあり得ますのでご注意ください。
停止するには、タイマーを無効化します。
systemctl disable dnf-makecahce.timer
以上です。最後まで読んでいただきありがとうございました。
<一緒に働いていただける方(中途/新卒) 募集中です!>
就職/転職活動中や、まだ情報収集中の方、少しでも興味を持っていただけた方は、以下のアドレスに「note見た!」とご連絡いただけると幸いです💡
プロダクト統括部/採用担当アドレス:pdo_js@persol-pt.co.jp