[Linux] yum-cronによるパッケージ自動更新

Linux

はじめに

Linuxのパッケージ更新可否を日次でチェックして、更新が可能な場合はパッケージの自動更新とOS再起動を行います。
※仕事で必要となったので自宅で検証します。今更CentOS 7 なのはご愛敬です。

検証環境

OSCentOS 7.9 (3.10.0-1160.81.1.el7.x86_64)
導入パッケージyum-cron-3.4.3-168.el7.centos.noarch
yum-utils.noarch 0:1.1.31-54.el7_8

作業内容

パッケージのインストール

(1) yum-cronパッケージをインストールします。

# yum -y install yum-cron

(2) yum-utilsパッケージをインストールします。
 ※OS再起動が必要かどうかの判定に使用します。

# yum -y install yum-utils

yum-cron設定

(1) yum-cron設定ファイル及び、cronスクリプトの配置ディレクトリ作成します。
 ※デフォルトで配置された設定ファイルは使用しません。

# mkdir -p /root/yum-cron/{conf,script}

(2) デフォルトのyum-cron設定ファイルをコピーして配置します。

# cp -p /etc/yum/yum-cron.conf /root/yum-cron/conf

(3) デフォルトのcronスクリプトファイル(daily)をコピーして配置します。

# cp -p /etc/cron.daily/0yum-daily.cron /root/yum-cron/script/0yum-cron.cron

(4) yum-cron設定ファイルの編集します。

# vi /root/yum-cron/conf/yum-cron.conf
[commands]
update_cmd = default  ←CentOSでは、default以外のパラメータは使用不可
update_messages = yes  ←パッケージ更新が必要な際にメッセージ出力
download_updates = yes ←パッケージのダウンロードを行う
apply_updates = yes   ←パッケージの更新を行う(no→yes)
random_sleep = 0    ←cronでスケジューリングするためスリープ時間不要(360→0)

[emitters]
system_name = None
emit_via = stdio
output_width = 80

[email]
email_from = root@localhost
email_to = root

[groups]
group_list = None
group_package_types = mandatory, default

[base]
debuglevel = -2
mdpolicy = group:main
# assumeyes = True

(5) yum-cron設定ファイルの編集内容(差分)の確認します。

# diff /etc/yum/yum-cron.conf /root/yum-cron/conf/yum-cron.conf

20c20
< apply_updates = no
---
> apply_updates = yes
28c28
< random_sleep = 360
---
> random_sleep = 0

(6) cronスクリプトの編集します。

# vi /root/yum-cron/script/0yum-cron.cron
#!/bin/bash

if [[ ! -f /var/lock/subsys/yum-cron ]]; then
  exit 0
fi

# Cache clear
yum clean all

# Action!
/usr/sbin/yum-cron /root/yum-cron/conf/yum-cron.conf

# OS reboot
/bin/needs-restarting -r > /dev/null
if [ $? -eq 1 ]; then
  shutdown -r +1
elif [ $(/bin/needs-restarting -s | wc -l) -ge 1 ]; then
  shutdown -r +1
fi

デフォルトのyum-cron設定ファイルの無効化

(1) デフォルトのyum-cron設定ファイルのバックアップします。

# cp -p /etc/yum/yum-cron.conf /etc/yum/yum-cron.conf.org

(2) デフォルトのyum-cron設定ファイルの無効化します。

# vi /etc/yum/yum-cron.conf
[commands]
update_messages = no     ←noに変更
download_updates = no    ←noに変更

(3) デフォルトのyum-cron設定ファイルの編集内容(差分)の確認します。

# diff /etc/yum/yum-cron.conf /etc/yum/yum-cron.conf.org

13c13
< update_messages = no
---
> update_messages = yes
16c16
< download_updates = no
---
> download_updates = yes

yum-cronの実行スケジュール設定

(1) crontabにyum-cronの実行スケジュールを追記します。
 (例)毎日3時に実行する場合

# vi /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed
  0  3  *  *  * root /bin/bash /root/yum-cron/script/0yum-cron.cron > /dev/null

yum-cronサービスの起動

(1) yum-cronサービスの起動します。

# systemctl start yum-cron.service

(2) yum-cronサービスの稼働を確認します。

# systemctl status yum-cron.service

● yum-cron.service – Run automatic yum updates as a cron job
Loaded: loaded (/usr/lib/systemd/system/yum-cron.service; enabled; vendor preset: disabled)
Active: active (exited) since 水 2023-01-25 20:43:03 JST; 1h 39min ago
Process: 713 ExecStart=/bin/touch /var/lock/subsys/yum-cron (code=exited, status=0/SUCCESS)
Main PID: 713 (code=exited, status=0/SUCCESS)
CGroup: /system.slice/yum-cron.service

(3) yum-cronサービスの自動起動設定の確認(規定値:有効)をします。

# systemctl is-enabled yum-cron.service

enabled

動作確認

(1) 手動実行でyum-cronの動作確認を実施します。

# /bin/bash /root/yum-cron/script/0yum-cron.cron

読み込んだプラグイン:fastestmirror
リポジトリーを清掃しています: base extras updates
Cleaning up list of fastest mirrors
The following updates will be applied on centos7-xx.localhost:
…省略…

Shutdown scheduled for 水 2023-01-25 23:28:17 JST, use ‘shutdown -c’ to cancel.

Broadcast message from root@centos7-xx.localhost (Wed 2023-01-25 23:27:17 JST):
The system is going down for reboot at Wed 2023-01-25 23:28:17 JST!

※注意:パッケージ更新後にOS再起動が必要な場合、1分後にOS再起動されます。
「shutdown -c」コマンドでキャンセル可。

あとがき

これでCentOS7でのパッチ自動更新は検証完了ですが、パッチが適用されたことやOSが再起動されたことを知るためにメール通知なども実装したいと思いますので、別途検証します。
またRHEL8系では、yumがdnfに変わっておりyum-cronもdnf-automaticに変わっているようです。RHELクローンOSのAlmaLinuxやRocky Linuxで検証したいと思います。

コメント

タイトルとURLをコピーしました