122 lines
3.3 KiB
Bash
Executable File
122 lines
3.3 KiB
Bash
Executable File
#!/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 <<USAGE
|
|
Usage: pve-gui-sensors-refresh [--quiet] [--force] [--status]
|
|
--quiet Log to file without normal terminal output
|
|
--force Re-run installer after confirming files are unpatched
|
|
--status Report patch state and exit
|
|
USAGE
|
|
}
|
|
|
|
MODE="refresh"
|
|
while (($#)); do
|
|
case "$1" in
|
|
--quiet) QUIET=1 ;;
|
|
--force) FORCE=1 ;;
|
|
--status) MODE="status" ;;
|
|
-h|--help) usage; exit 0 ;;
|
|
*) echo "Unknown option: $1" >&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."
|