From a59c5cbd97f69cc41e495ceac55aa6732e525af4 Mon Sep 17 00:00:00 2001 From: jessikitty Date: Wed, 27 May 2026 16:02:06 +1000 Subject: [PATCH] feat: prompt for HA token interactively when SSH fails, honour HA_TOKEN env var as fallback --- setup-npm-lxc.sh | 49 ++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 39 insertions(+), 10 deletions(-) diff --git a/setup-npm-lxc.sh b/setup-npm-lxc.sh index ac5792e..674b200 100644 --- a/setup-npm-lxc.sh +++ b/setup-npm-lxc.sh @@ -41,7 +41,6 @@ BRIDGE="vmbr0" HAOS_IP="10.0.0.55" ADDON_SLUG="a0d7b954_nginxproxymanager" -NPM_DATA="/opt/npm/data" echo "============================================" echo " Nginx Proxy Manager LXC Setup + Migration" @@ -129,7 +128,7 @@ DCEOF echo "[7/9] Attempting data migration from HA addon..." MIGRATED=false -# Try SSH first (ports 22222 and 22) +# --- Approach 1: Try SSH (ports 22222 and 22) --- for PORT in 22222 22; do if ssh -o ConnectTimeout=3 -o StrictHostKeyChecking=no -p ${PORT} \ root@${HAOS_IP} "test -d /addon_data/${ADDON_SLUG}" 2>/dev/null; then @@ -157,14 +156,29 @@ for PORT in 22222 22; do fi done -# Try HA Supervisor partial backup if SSH failed +# --- Approach 2: HA Supervisor partial backup (prompt for token) --- if [ "$MIGRATED" = false ]; then - echo " SSH failed. Trying HA Supervisor partial backup..." - echo " (requires HA long-lived token set in HA_TOKEN env var)" + echo "" + echo " SSH to HAOS failed." + echo "" + echo " To migrate your NPM data automatically, this script can" + echo " use the Home Assistant API to create a partial backup." + echo "" + echo " You need a Long-Lived Access Token from HA:" + echo " Profile > Security > Long-lived access tokens > Create" + echo "" + + if [ -n "${HA_TOKEN:-}" ]; then + echo " Using HA_TOKEN from environment." + else + read -r -p " Paste your HA token (or press Enter to skip): " HA_TOKEN + fi if [ -n "${HA_TOKEN:-}" ]; then HA_URL="http://${HAOS_IP}:8123" TMPDIR=$(mktemp -d) + + echo " Creating partial backup of NPM addon..." BACKUP_SLUG=$(curl -s -X POST \ -H "Authorization: Bearer ${HA_TOKEN}" \ -H "Content-Type: application/json" \ @@ -184,8 +198,10 @@ if [ "$MIGRATED" = false ]; then if [ -n "${ADDON_TAR}" ]; then mkdir -p "${TMPDIR}/npm_data" tar xzf "${ADDON_TAR}" -C "${TMPDIR}/npm_data/" 2>/dev/null || true + DB_SRC=$(find "${TMPDIR}/npm_data" -name "database.sqlite" -type f 2>/dev/null | head -1) [ -n "${DB_SRC}" ] && pct push "${CT_ID}" "${DB_SRC}" /opt/npm/data/database.sqlite && echo " DB migrated" + CERT_DIR=$(find "${TMPDIR}/npm_data" -type d -name "letsencrypt" 2>/dev/null | head -1) if [ -n "${CERT_DIR}" ]; then tar -czf "${TMPDIR}/c.tar.gz" -C "${CERT_DIR}" . 2>/dev/null @@ -194,27 +210,40 @@ if [ "$MIGRATED" = false ]; then echo " Certs migrated" fi MIGRATED=true + else + echo " Could not find addon data in backup" fi + else + echo " Backup download failed" fi + + # Clean up the backup from HA curl -s -X DELETE -H "Authorization: Bearer ${HA_TOKEN}" \ "${HA_URL}/api/hassio/backups/${BACKUP_SLUG}" 2>/dev/null || true + else + echo " Backup creation failed (check token permissions)" fi rm -rf "${TMPDIR}" + else + echo " Skipping API migration." fi fi if [ "$MIGRATED" = false ]; then echo "" - echo " AUTO-MIGRATION FAILED." - echo " Manual steps after setup:" + echo " =========================================" + echo " DATA MIGRATION SKIPPED" + echo " =========================================" + echo " NPM will start fresh. To migrate later:" echo " 1. HA > Settings > Backups > Create > Partial" - echo " Select ONLY 'Nginx Proxy Manager', create it" - echo " 2. Download the backup .tar file" + echo " Select ONLY 'Nginx Proxy Manager'" + echo " 2. Download the .tar backup" echo " 3. Copy to Proxmox: scp backup.tar root@10.0.0.240:/tmp/" - echo " 4. Extract and push the database:" + echo " 4. Extract:" echo " cd /tmp && tar xf *.tar" echo " tar xzf *nginxproxymanager*.tar.gz -C /tmp/npm_extract/" echo " find /tmp/npm_extract -name database.sqlite" + echo " 5. Push to NPM LXC:" echo " pct exec ${CT_ID} -- bash -c 'cd /opt/npm && docker compose down'" echo " pct push ${CT_ID} /database.sqlite /opt/npm/data/database.sqlite" echo " pct exec ${CT_ID} -- bash -c 'cd /opt/npm && docker compose up -d'"