動作対象
- AlmaLinux 8
- 通知メールを送信したい場合は、
dnf install mailx
の実施および別途メール送信設定が必要
このスクリプトについて
dnf-automatic
を使ったパッケージの自動アップデートのようなことをシェルスクリプトで作成してみました。異なる点としては、カーネルアップデートを適用させるためにOS再起動もできるようになっています。
-
--reboot
オプションでOS再起動も指定できるようになっています。 -
dnf autoremove
,dnf clean all
で次回起動以降のディスクスペース節約する処理追加。(※依存されなくなったものを削除dnf autoremove
はまずいという環境では任意で当スクリプトから消してください)
設置手順
-
/root
ディレクトリにsecurity_update.sh
を設置。(場所は任意) - オーナー・グループを、
chown root:root security_update.sh
に設定。 - パーミッションを、
chmod 744 security_update.sh
に設定。 -
crontab
にスクリプトを追記。
(例)28日午前4時にセキュリティアップデート後再起動する。
# Linuxセキュリティアップデート
0 4 28 * * root /root/security_update.sh --reboot
シェルスクリプト
- セキュリティアップデートのみにしている。
- 通知メールアドレス、メール送信処理もしています。
- dnf 以外にもsnap 更新もしています。
-
/var/log/update_log/update_log
にメール通知内容と同じ内容でログを出すようにしています。 - リブート前に、
systemctl stop httpd
しているが実施するかは任意。apachectl -k graceful-stop
ではないのは、apachectl を使用して httpd に引数を渡すことはサポートされなくなるため。(まぁ、なんとかなるっしょ!でとりまアパッチ停止しま~す、か~ら~の~OS再起動しま~す)
security_update.sh
#!/bin/bash
function usage {
cat <<EOF
AlmaLinux8のセキュリティアップデートシェルスクリプト
使用方法: $(basename ${0}) [引数]
もしくは: $(basename ${0}) [help|--help|-h] ヘルプ(このメッセージ)を表示し終了する
もしくは: $(basename ${0}) [version|--version|-v] バージョン情報を表示し終了する
引数:
--reboot セキュリティアップデート後にOS再起動を実施する
説明:
AlmaLinux8のセキュリティアップデートを実施します。
root権限ユーザーでの実施をしてください。
EOF
}
function version {
echo "$(basename ${0}) version 1.0 "
}
function proc() {
mailaddress="通知メールアドレス"
folderpath="/var/log/update_log"
filepath=${folderpath}/update_log
if [ ! -d $folderpath ]; then
mkdir ${folderpath}
fi
if [ ! -e $filepath ]; then
touch ${filepath}
fi
dnf autoremove
dnf clean all
dnf upgrade --security -y 2>&1 | tee ${filepath}
snap refresh 2>&1 | tee -a ${filepath}
cat ${filepath} | mail -s "【通知】 - AlmaLinux 8 SECURITY UPDATE" ${mailaddress}
if [ $# = 1 ]; then
if [ $1 = "--reboot" ]; then
systemctl stop httpd
reboot
fi
fi
}
case ${1} in
help|--help|-h)
usage
;;
version|--version|-v)
version
;;
*)
proc $1
;;
esac
さいごに
たぶん設置しても大丈夫だろう的な温度感で著者は考えているためOS再起動失敗したらのことを考慮していないまま◯◯社で本番設置しています。ワンオペ職場のためコードレビューしてもらえません😢。親切な兄貴、姉貴からここ問題ありそう的な指摘をもらえたらありがたいです。ぺこりん子。