Files
proxmox/scripts/archive/consolidated/fix/fix-npmplus-install.sh
defiQUG fbda1b4beb
Some checks failed
Deploy to Phoenix / deploy (push) Has been cancelled
docs: Ledger Live integration, contract deploy learnings, NEXT_STEPS updates
- ADD_CHAIN138_TO_LEDGER_LIVE: Ledger form done; public code review repo bis-innovations/LedgerLive; init/push commands
- CONTRACT_DEPLOYMENT_RUNBOOK: Chain 138 gas price 1 gwei, 36-addr check, TransactionMirror workaround
- CONTRACT_*: AddressMapper, MirrorManager deployed 2026-02-12; 36-address on-chain check
- NEXT_STEPS_FOR_YOU: Ledger done; steps completable now (no LAN); run-completable-tasks-from-anywhere
- MASTER_INDEX, OPERATOR_OPTIONAL, SMART_CONTRACTS_INVENTORY_SIMPLE: updates
- LEDGER_BLOCKCHAIN_INTEGRATION_COMPLETE: bis-innovations/LedgerLive reference

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-12 15:46:57 -08:00

196 lines
6.6 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
# Load IP configuration
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
source "${PROJECT_ROOT}/config/ip-addresses.conf" 2>/dev/null || true
# Fix NPMplus installation - handles the compose.yaml issue
set -e
PROXMOX_HOST="${1:-192.168.11.11}"
CONTAINER_ID="${2}"
if [ -z "$CONTAINER_ID" ]; then
echo "Usage: $0 [PROXMOX_HOST] [CONTAINER_ID]"
echo ""
echo "Find container ID:"
echo " ssh root@$PROXMOX_HOST 'pct list | tail -5'"
exit 1
fi
TZ="${3:-America/New_York}"
ACME_EMAIL="${4:-nsatoshi2007@hotmail.com}"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "🔧 Fixing NPMplus Installation"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "Container ID: $CONTAINER_ID"
echo ""
# Check if container exists and is running
CONTAINER_STATUS=$(ssh root@"$PROXMOX_HOST" "pct status $CONTAINER_ID 2>&1" || echo "not found")
if echo "$CONTAINER_STATUS" | grep -q "not found\|does not exist"; then
echo "❌ Container $CONTAINER_ID does not exist"
exit 1
fi
if ! echo "$CONTAINER_STATUS" | grep -q "running"; then
echo "🚀 Starting container..."
ssh root@"$PROXMOX_HOST" "pct start $CONTAINER_ID"
sleep 3
fi
echo "📦 Fixing NPMplus installation..."
ssh root@"$PROXMOX_HOST" "pct exec $CONTAINER_ID -- bash" << FIX_EOF
set -e
echo "📋 Checking current state..."
cd /opt
# Check if compose.yaml exists
if [ ! -f compose.yaml ]; then
echo " ⚠️ compose.yaml not found, downloading..."
curl -fsSL "https://raw.githubusercontent.com/ZoeyVid/NPMplus/refs/heads/develop/compose.yaml" -o compose.yaml || {
echo " ❌ Failed to download compose.yaml"
exit 1
}
echo " ✅ compose.yaml downloaded"
else
echo " ✅ compose.yaml exists"
fi
# Verify compose.yaml is valid
if ! docker compose config >/dev/null 2>&1; then
echo " ⚠️ compose.yaml is invalid, re-downloading..."
mv compose.yaml compose.yaml.bak
curl -fsSL "https://raw.githubusercontent.com/ZoeyVid/NPMplus/refs/heads/develop/compose.yaml" -o compose.yaml
fi
# Update compose file with timezone and email
echo " 📝 Updating compose.yaml with timezone and email..."
if command -v yq >/dev/null 2>&1; then
yq -i "
.services.npmplus.environment |=
(map(select(. != \"TZ=*\" and . != \"ACME_EMAIL=*\")) +
[\"TZ=$TZ\", \"ACME_EMAIL=$ACME_EMAIL\"])
" compose.yaml
echo " ✅ Updated with TZ=$TZ and ACME_EMAIL=$ACME_EMAIL"
else
echo " ⚠️ yq not found, skipping environment variable update"
echo " 💡 You may need to update compose.yaml manually"
fi
# Check if Docker is running
if ! pgrep dockerd >/dev/null; then
echo " 🐳 Starting Docker..."
rc-service docker start
rc-update add docker default
sleep 5
fi
# Check if docker compose plugin is available
if ! docker compose version >/dev/null 2>&1; then
echo " 📦 Installing docker compose plugin..."
# Install docker compose plugin
DOCKER_COMPOSE_VERSION=\$(curl -fsSL https://api.github.com/repos/docker/compose/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
DOCKER_CONFIG=\${DOCKER_CONFIG:-\$HOME/.docker}
mkdir -p \$DOCKER_CONFIG/cli-plugins
curl -fsSL "https://github.com/docker/compose/releases/download/\$DOCKER_COMPOSE_VERSION/docker-compose-linux-x86_64" -o \$DOCKER_CONFIG/cli-plugins/docker-compose
chmod +x \$DOCKER_CONFIG/cli-plugins/docker-compose
echo " ✅ Docker compose plugin installed"
fi
# Verify we're in the right directory
echo " 📍 Current directory: \$(pwd)"
echo " 📄 Files in /opt:"
ls -la /opt/ | head -10
# Try to start NPMplus
echo ""
echo "🚀 Starting NPMplus..."
cd /opt
docker compose up -d || {
echo " ⚠️ docker compose up failed, checking logs..."
docker compose ps
echo ""
echo " 💡 Try running manually:"
echo " cd /opt"
echo " docker compose up -d"
exit 1
}
echo " ✅ NPMplus started"
# Wait for container to be ready
echo ""
echo "⏳ Waiting for NPMplus to be ready..."
CONTAINER_ID=""
for i in {1..60}; do
CONTAINER_ID=\$(docker ps --filter "name=npmplus" --format "{{.ID}}")
if [ -n "\$CONTAINER_ID" ]; then
STATUS=\$(docker inspect --format '{{.State.Health.Status}}' "\$CONTAINER_ID" 2>/dev/null || echo "starting")
if [ "\$STATUS" = "healthy" ]; then
echo " ✅ NPMplus is running and healthy"
break
fi
fi
echo " ⏳ Waiting... (\$i/60)"
sleep 2
done
# Get admin password
echo ""
echo "🔑 Retrieving admin password..."
PASSWORD_LINE=\$(docker logs "\$CONTAINER_ID" 2>&1 | grep -i "Creating a new user" | tail -1 || echo "")
if [ -n "\$PASSWORD_LINE" ]; then
PASSWORD=\$(echo "\$PASSWORD_LINE" | grep -oP "password: \K[^\s]+" || echo "")
if [ -n "\$PASSWORD" ]; then
echo "username: admin@example.org" > /opt/.npm_pwd
echo "password: \$PASSWORD" >> /opt/.npm_pwd
echo " ✅ Admin password saved to /opt/.npm_pwd"
echo " 📋 Password: \$PASSWORD"
else
echo " ⚠️ Could not extract password from logs"
fi
else
echo " ⚠️ Password not found in logs yet"
echo " 💡 Check manually: docker logs \$CONTAINER_ID | grep -i password"
fi
echo ""
echo "✅ NPMplus installation fixed!"
FIX_EOF
if [ $? -eq 0 ]; then
# Get container IP
CONTAINER_IP=$(ssh root@"$PROXMOX_HOST" "pct exec $CONTAINER_ID -- hostname -I | awk '{print \$1}'")
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "✅ Installation Fixed!"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "📋 Container Information:"
echo " • Container ID: $CONTAINER_ID"
echo " • Container IP: $CONTAINER_IP"
echo " • Access URL: https://$CONTAINER_IP:81"
echo " • Admin Email: admin@example.org"
echo ""
echo "🔑 Get admin password:"
echo " ssh root@$PROXMOX_HOST \"pct exec $CONTAINER_ID -- cat /opt/.npm_pwd\""
echo ""
echo "📋 Next step: Run configuration migration:"
echo " bash scripts/nginx-proxy-manager/post-install-migration.sh $PROXMOX_HOST $CONTAINER_ID $CONTAINER_IP"
echo ""
else
echo ""
echo "❌ Fix failed. Check the output above."
exit 1
fi