#!/usr/bin/env bash set -euo pipefail CONFIG="/etc/pve-gui-sensors-auto/config" STATE_DIR="/var/lib/pve-gui-sensors-auto" WORK_DIR="$STATE_DIR/upstream" LOG="/var/log/pve-gui-sensors-auto.log" PVE_JS="/usr/share/pve-manager/js/pvemanagerlib.js" NODES_PM="/usr/share/perl5/PVE/API2/Nodes.pm" QUIET=0 FORCE=0 usage() { cat <&2; usage >&2; exit 2 ;; esac shift done mkdir -p "$STATE_DIR" "$WORK_DIR" touch "$LOG" chmod 700 "$STATE_DIR" log() { printf '%s\n' "$*" >>"$LOG" if [[ "$QUIET" -eq 0 ]]; then printf '%s\n' "$*"; fi } if [[ ! -r "$CONFIG" ]]; then log "ERROR: missing configuration: $CONFIG" exit 1 fi # shellcheck disable=SC1090 source "$CONFIG" for required in CPU_DISPLAY SHOW_ZERO_FANS TEMPERATURE_UNIT ENABLE_UPS SYSTEM_INFORMATION INSTALLER_URL; do if [[ -z "${!required:-}" ]]; then log "ERROR: missing setting $required in $CONFIG" exit 1 fi done if [[ ! -f "$PVE_JS" || ! -f "$NODES_PM" ]]; then log "INFO: Proxmox GUI files are not installed; nothing to do." exit 0 fi js=0; perl=0 grep -q 'sensorsOutput' "$PVE_JS" && js=1 || true grep -q 'sensorsOutput' "$NODES_PM" && perl=1 || true if [[ "$MODE" == "status" ]]; then case "$js:$perl" in 1:1) echo "installed" ;; 0:0) echo "not-installed" ;; *) echo "partial" ;; esac exit 0 fi log "" log "==================================================" log "PVE GUI sensors check: $(date -Is)" log "==================================================" if [[ "$js" -eq 1 && "$perl" -eq 1 && "$FORCE" -eq 0 ]]; then log "Sensor modification is already fully installed." exit 0 fi if [[ "$js" -ne "$perl" ]]; then log "ERROR: partial sensor modification detected." log "Refusing to patch automatically; repair or restore the Proxmox files first." exit 2 fi if [[ "$FORCE" -eq 1 && "$js" -eq 1 ]]; then log "ERROR: --force cannot overwrite an installed modification." exit 2 fi INSTALLER="$WORK_DIR/pve-mod-gui-sensors.sh" TMP="$INSTALLER.tmp" log "Downloading official Meliox installer..." curl --fail --silent --show-error --location "$INSTALLER_URL" -o "$TMP" if ! grep -q 'pve-mod-gui-sensors' "$TMP" && ! grep -q 'sensors display mod' "$TMP"; then log "ERROR: downloaded file does not look like the expected installer." rm -f "$TMP" exit 3 fi mv "$TMP" "$INSTALLER" chmod 700 "$INSTALLER" # Remove only the installer's old backup directory after confirming both target # files are unpatched. This lets each Proxmox update create fresh compatible backups. rm -rf "$WORK_DIR/backup" "$WORK_DIR/PVE-MODS" log "Applying saved choices: average CPU, zero-RPM fans shown, Celsius, UPS off, system information 1." cd "$WORK_DIR" printf '%s\n%s\n%s\n%s\n%s\n\n' \ "$CPU_DISPLAY" "$SHOW_ZERO_FANS" "$TEMPERATURE_UNIT" "$ENABLE_UPS" "$SYSTEM_INFORMATION" \ | bash "$INSTALLER" install systemctl restart pveproxy log "Sensor modification successfully installed."