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.sh2. apt フックによる自動パッチの実行
以下の設定ファイルを新規作成しました。
/etc/apt/apt.conf.d/99pve-nagfix内容は以下のとおりです。
DPkg::Post-Invoke { "bash /usr/local/bin/fix-pve-popup.sh || true"; };これにより、apt install や apt upgrade の終了時に自動でパッチが適用されます。
スクリプトの手動テスト
動作確認時は以下を手動実行しました。
bash /usr/local/bin/fix-pve-popup.sh3. 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-popup4. パッチ適用後の確認方法
以下のコマンドで、サブスクリプション警告が無効化されたこと、および他のポップアップが壊れていないことを確認できます。
grep -B 1 'No valid subscription' /usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.jsvoid({ と表示されていれば、正常にパッチが適用されています。
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.jspveproxy を再起動することで、復元がWebインターフェースに反映されます。
systemctl restart pveproxy不具合発生時は(ひと手間ありますが)復旧も可能ですし、Proxmoxのアップデート後もサブスクリプションポップアップを永続的に抑制する手段としては比較的安全で実用的だと思います。


コメント