#!/bin/sh # FabledScryer container entrypoint. # # When NUT_MANAGED=1: # - Generates /etc/nut/*.conf from environment variables # - Starts NUT driver (upsdrvctl) and network daemon (upsd) # - Connects to the UPS over the network — no USB passthrough required # - Then drops to 'app' user via gosu to run fabledscryer # # When NUT_MANAGED=0 (default): # - Drops directly to 'app' user and runs the command # # Required env vars when NUT_MANAGED=1: # NUT_UPS_HOST IP or hostname of the UPS management card (required) # NUT_DRIVER NUT driver — snmp-ups (default) or netxml-ups for Eaton # NUT_UPS_NAME UPS name in NUT (default: ups) — must match UPS plugin setting # NUT_SNMP_COMMUNITY SNMP community string (default: public) [snmp-ups only] # NUT_SNMP_VERSION SNMP version: v1, v2c (default: v1) [snmp-ups only] # NUT_USERNAME Optional upsd auth username # NUT_PASSWORD Optional upsd auth password set -e NUT_MANAGED_JSON="/data/nut_managed.json" if [ "${NUT_MANAGED:-0}" = "1" ] || [ -f "$NUT_MANAGED_JSON" ]; then NUT_OK=1 if [ -f "$NUT_MANAGED_JSON" ]; then echo "[entrypoint] Found $NUT_MANAGED_JSON — configuring NUT from settings..." python3 /app/fabledscryer/nut_setup.py --from-file "$NUT_MANAGED_JSON" || { echo "[entrypoint] Warning: NUT config failed — UPS host may not be set yet. Skipping NUT startup." NUT_OK=0 } else echo "[entrypoint] NUT_MANAGED=1 — configuring NUT from environment..." python3 /app/fabledscryer/nut_setup.py || { echo "[entrypoint] Warning: NUT config failed — check NUT_UPS_HOST. Skipping NUT startup." NUT_OK=0 } fi if [ "$NUT_OK" = "1" ]; then echo "[entrypoint] Starting NUT driver..." /sbin/upsdrvctl start || echo "[entrypoint] Warning: upsdrvctl returned non-zero" echo "[entrypoint] Starting NUT daemon..." /sbin/upsd || echo "[entrypoint] Warning: upsd returned non-zero" sleep 1 echo "[entrypoint] NUT ready on 127.0.0.1:3493." fi fi exec gosu app "$@"