Proxmox VE 8.3「有効なサブスクリプションがありません(No valid subscription)」非表示 無効化 更新対応 永続設定

Proxmox VE

 Proxmox VEでは、商用サブスクリプション未契約の状態でWeb管理画面にアクセスすると、毎回「有効なサブスクリプションがありません(No valid subscription)」というポップアップが表示されます。

(邪魔)

このポップアップを自動的に無効化できないか試行錯誤してみました。
対象ファイル proxmoxlib.jsを手動で改変しても、Proxmoxのアップデートで元の状態に戻ってしまうため、
aptによるアップデート後に自動で改変できるように設定しました。バージョン8.3で動作確認しています。

対象ファイルについて

改変対象は以下のファイルです。

/usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js

 このファイルはProxmoxのアップデート時に上書きされるため、手動で書き換えしていた場合も、ポップアップが復活してしまいます。これを踏まえて、aptの更新処理後に自動でパッチを再適用する構成を作りました。


1. パッチスクリプトの作成

以下のスクリプトを /usr/local/bin/fix-pve-popup.sh に保存しました。

#!/bin/bash

TARGET="/usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js"
BACKUP="/usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js.bak"
LOG="/var/log/fix-pve-popup.log"

# サブスク警告ポップアップが未パッチか確認(No valid subscription の直前が Ext.Msg.show({ のままか)
if grep -B 1 'No valid subscription' "$TARGET" | grep -q 'Ext.Msg.show({'; then
  cp "$TARGET" "$BACKUP"

  # サブスク警告のみに限定して Ext.Msg.show({ を void({ に置換
  awk '
  {
    if ($0 ~ /Ext.Msg.show\(\{/) {
      buffer = $0
      getline nextline
      if (nextline ~ /No valid subscription/) {
        print "void({"
        print nextline
        patched = 1
        next
      } else {
        print buffer
        print nextline
        next
      }
    }
    print
  }
  ' "$BACKUP" > "$TARGET"

  echo "$(date): Patched proxmoxlib.js (subscription popup only). Backup saved." >> "$LOG"
  systemctl restart pveproxy
else
  echo "$(date): No patch needed. Already patched or target string not found." >> "$LOG"
fi


保存後、実行権限を付与。

chmod +x /usr/local/bin/fix-pve-popup.sh


2. apt フックによる自動パッチの実行

以下の設定ファイルを新規作成しました。

/etc/apt/apt.conf.d/99pve-nagfix

内容は以下のとおりです。

DPkg::Post-Invoke { "bash /usr/local/bin/fix-pve-popup.sh || true"; };

これにより、apt installapt upgrade の終了時に自動でパッチが適用されます。

スクリプトの手動テスト

動作確認時は以下を手動実行しました。

bash /usr/local/bin/fix-pve-popup.sh

3. logrotate の設定

スクリプトのログは /var/log/fix-pve-popup.log に出力されます。放置すると肥大化するので、ログローテーションの設定を追加しておきます。

設定ファイルの作成

以下の内容を /etc/logrotate.d/fix-pve-popup に記述しました。

/var/log/fix-pve-popup.log {
    monthly
    rotate 12
    compress
    delaycompress
    missingok
    notifempty
    create 640 root adm
}
設定項目意味・解説
monthly毎月1回ローテート
rotate 12最大12世代を保存(=12ヶ月分)
compress古いログをgzip圧縮
delaycompress前月分のみ非圧縮、以降は圧縮
missingokログファイルがなくてもエラーにしない
notifempty空のログはスキップ
createローテート後に新しいログを作成(パーミッションと所有者を指定)
動作確認(手動テスト)

設定内容に問題がないか確認。

logrotate -d /etc/logrotate.d/fix-pve-popup

問題なければ、強制ローテーションを実施。

logrotate -f /etc/logrotate.d/fix-pve-popup

4. パッチ適用後の確認方法

以下のコマンドで、サブスクリプション警告が無効化されたこと、および他のポップアップが壊れていないことを確認できます。

grep -B 1 'No valid subscription' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js

void({ と表示されていれば、正常にパッチが適用されています。

grep 'Ext.Msg.show({' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js

他の Ext.Msg.show({ が残っていれば、削除確認など他の機能はそのままです。

まとめ

将来、Proxmoxのアップデートや仕様変更により不具合が発生した場合でも、パッチ適用時に作成するバックアップファイルを使って、元の状態へ戻すことができます。

cp /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js.bak /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js

pveproxy を再起動することで、復元がWebインターフェースに反映されます。

systemctl restart pveproxy

 不具合発生時は(ひと手間ありますが)復旧も可能ですし、Proxmoxのアップデート後もサブスクリプションポップアップを永続的に抑制する手段としては比較的安全で実用的だと思います。

コメント

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