はじめに
Linuxのパッケージ更新可否を日次でチェックして、更新が可能な場合はパッケージの自動更新とOS再起動を行います。
※仕事で必要となったので自宅で検証します。今更CentOS 7 なのはご愛敬です。
検証環境
OS | CentOS 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で検証したいと思います。
コメント