84 lines
3.1 KiB
Bash
84 lines
3.1 KiB
Bash
|
|
#!/usr/bin/env bash
|
|||
|
|
# Create NPMplus Fourth container (VMID 10236) for dev/Codespaces at 192.168.11.170
|
|||
|
|
# See: docs/04-configuration/DEV_CODESPACES_76_53_10_40.md, DEV_CODESPACES_NEXT_STEPS_CHECKLIST.md
|
|||
|
|
set -euo pipefail
|
|||
|
|
|
|||
|
|
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
|
|||
|
|
[ -f "$PROJECT_ROOT/.env" ] && set +u && source "$PROJECT_ROOT/.env" 2>/dev/null || true && set -u
|
|||
|
|
|
|||
|
|
VMID="${NPMPLUS_FOURTH_VMID:-10236}"
|
|||
|
|
HOST="${PROXMOX_HOST_R630_01:-192.168.11.11}"
|
|||
|
|
IP="${IP_NPMPLUS_FOURTH:-192.168.11.170}"
|
|||
|
|
TEMPLATE="${TEMPLATE:-local:vztmpl/debian-12-standard_12.12-1_amd64.tar.zst}"
|
|||
|
|
STORAGE="${STORAGE:-local-lvm}"
|
|||
|
|
NETWORK="${NETWORK:-vmbr0}"
|
|||
|
|
GATEWAY="${NETWORK_GATEWAY:-192.168.11.1}"
|
|||
|
|
|
|||
|
|
GREEN='\033[0;32m'
|
|||
|
|
YELLOW='\033[1;33m'
|
|||
|
|
RED='\033[0;31m'
|
|||
|
|
BLUE='\033[0;34m'
|
|||
|
|
NC='\033[0m'
|
|||
|
|
log() { echo -e "${BLUE}[INFO]${NC} $1"; }
|
|||
|
|
success() { echo -e "${GREEN}[✓]${NC} $1"; }
|
|||
|
|
warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
|
|||
|
|
error() { echo -e "${RED}[ERROR]${NC} $1"; }
|
|||
|
|
|
|||
|
|
log "Creating NPMplus Fourth (dev/Codespaces) container (VMID $VMID) on $HOST at $IP..."
|
|||
|
|
|
|||
|
|
exists() {
|
|||
|
|
ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 root@"$HOST" "pct list 2>/dev/null | grep -q '^[[:space:]]*$VMID[[:space:]]' && echo yes || echo no" 2>/dev/null || echo "no"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if [[ "$(exists)" == "yes" ]]; then
|
|||
|
|
warn "Container $VMID already exists. Skipping creation."
|
|||
|
|
success "Container $VMID is ready. Next: install NPMplus and cloudflared (see DEV_CODESPACES_NEXT_STEPS_CHECKLIST.md Phase 1.3–1.5)."
|
|||
|
|
exit 0
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# Check SSH
|
|||
|
|
if ! ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 root@"$HOST" "echo ok" >/dev/null 2>&1; then
|
|||
|
|
error "Cannot SSH to $HOST. Ensure you can reach root@$HOST."
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# Check template exists on host
|
|||
|
|
if ! ssh -o StrictHostKeyChecking=no root@"$HOST" "pveam list local 2>/dev/null | grep -q 'debian-12-standard'"; then
|
|||
|
|
warn "Debian 12 template may not exist. Checking..."
|
|||
|
|
TEMPLATE_ALT=$(ssh -o StrictHostKeyChecking=no root@"$HOST" "pveam list local 2>/dev/null | grep -E 'debian|ubuntu' | head -1 | awk '{print \$1}'" || echo "")
|
|||
|
|
if [ -n "$TEMPLATE_ALT" ]; then
|
|||
|
|
TEMPLATE="$TEMPLATE_ALT"
|
|||
|
|
log "Using template: $TEMPLATE"
|
|||
|
|
else
|
|||
|
|
error "No Debian/Ubuntu template found. Download one: pveam download local debian-12-standard_12.12-1_amd64.tar.zst"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
log "Creating container..."
|
|||
|
|
ssh -o StrictHostKeyChecking=no root@"$HOST" "pct create $VMID $TEMPLATE \
|
|||
|
|
--hostname npmplus-fourth \
|
|||
|
|
--memory 2048 \
|
|||
|
|
--cores 2 \
|
|||
|
|
--rootfs $STORAGE:20 \
|
|||
|
|
--net0 name=eth0,bridge=$NETWORK,ip=$IP/24,gw=$GATEWAY \
|
|||
|
|
--description 'NPMplus Fourth - dev/Codespaces, Gitea, Proxmox admin (76.53.10.40)' \
|
|||
|
|
--start 1 \
|
|||
|
|
--onboot 1 \
|
|||
|
|
--unprivileged 1 \
|
|||
|
|
--features nesting=1" 2>&1 || {
|
|||
|
|
error "Failed to create container"
|
|||
|
|
exit 1
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
sleep 5
|
|||
|
|
if [[ "$(exists)" == "yes" ]]; then
|
|||
|
|
success "Container $VMID created and started at $IP"
|
|||
|
|
log "Next: Install NPMplus (Docker + NPM) in container; then cloudflared. See docs/04-configuration/DEV_CODESPACES_NEXT_STEPS_CHECKLIST.md"
|
|||
|
|
else
|
|||
|
|
error "Container creation may have failed. Check: ssh root@$HOST 'pct list'"
|
|||
|
|
exit 1
|
|||
|
|
fi
|