ソフトがアップデートしているかチェックするスクリプト

以前の記事で「Let’s EncryptのSSL証明書を有効にしたCockpitで証明書エラー」で、dnf updateでパッケージを更新したら、cockpitで使用しているSSL証明書が書き換わり証明書エラーとなったケースがありました。

パッケージを更新するたびに発生しているので、Cockpitが更新されたかどうかをチェックして、更新が行われた際に任意のコマンドを実行するような下記のようなスクリプトを作りました。Cronで登録して定期的に実行すれば、Cocpitの更新でSSL証明書が書き換わってもこれで安心です。

下記では、cockpitの更新をチェックしていますが、current_version=$(rpm -qa cockpit) の箇所のパッケージ名を違うパッケージ名に変更すれば違うパッケージでもチェックできると思います

#!/bin/bash

# 前回のバージョン情報を保存するファイル
VERSION_FILE="/var/tmp/previous_version.txt"

# 現在のCockpitバージョンを取得
current_version=$(rpm -qa cockpit)

# 前回のバージョンを読み込む
if [ -f "$VERSION_FILE" ]; then
  previous_version=$(cat "$VERSION_FILE")
else
  previous_version=""
fi

# バージョンが異なる場合、スクリプトを実行し、バージョン情報を更新
if [ "$current_version" != "$previous_version" ]; then

  # バージョンが異なるとここで任意のコマンドを実行。下記ではSSL証明を更新している
  echo "パッケージが以前のバージョンが異なります。SSL更新書を更新します"
  cat /etc/letsencrypt/live/example.com/fullchain.pem > /etc/cockpit/ws-certs.d/0-self-signed-ca.pem
  cat /etc/letsencrypt/live/example.com/cert.pem > /etc/cockpit/ws-certs.d/0-self-signed.cert
  cat /etc/letsencrypt/live/example.com/privkey.pem > /etc/cockpit/ws-certs.d/0-self-signed.key

  chmod 600 /etc/cockpit/ws-certs.d/0-self-signed.key
  chown root:root /etc/cockpit/ws-certs.d/0-self-signed.key

  systemctl restart cockpit
  
  # バージョン情報を更新
  echo "$current_version" > "$VERSION_FILE"
fi