#!/bin/bash # Install Services Using Alternative Methods # Uses binary downloads and manual installation to bypass apt-get limitations set -uo pipefail NODE_IP="${PROXMOX_HOST_R630_01}" log_info() { echo -e "\033[0;32m[INFO]\033[0m $1"; } log_error() { echo -e "\033[0;31m[ERROR]\033[0m $1"; } log_success() { echo -e "\033[0;32m[✓]\033[0m $1"; } # Install Node.js via binary download install_nodejs_binary() { local vmid="$1" log_info "Installing Node.js (binary) on CT $vmid..." ssh -o ConnectTimeout=10 -o StrictHostKeyChecking=no root@${NODE_IP} "pct enter $vmid <<'INSTALL_EOF' cd /tmp NODE_VERSION=\"v18.19.0\" ARCH=\"x64\" # Download Node.js binary wget -q https://nodejs.org/dist/\${NODE_VERSION}/node-\${NODE_VERSION}-linux-\${ARCH}.tar.xz || exit 1 # Extract tar -xf node-\${NODE_VERSION}-linux-\${ARCH}.tar.xz || exit 1 # Install to /usr/local cp -r node-\${NODE_VERSION}-linux-\${ARCH}/* /usr/local/ || exit 1 # Install PM2 /usr/local/bin/npm install -g pm2 || exit 1 # Verify /usr/local/bin/node --version && /usr/local/bin/npm --version && echo 'Node.js installed' || exit 1 # Cleanup rm -rf node-\${NODE_VERSION}-linux-\${ARCH}* || true INSTALL_EOF " && log_success "Node.js installed on CT $vmid" || log_error "Failed to install Node.js on CT $vmid" } # Install Redis via binary download install_redis_binary() { local vmid="$1" log_info "Installing Redis (binary) on CT $vmid..." ssh -o ConnectTimeout=10 -o StrictHostKeyChecking=no root@${NODE_IP} "pct enter $vmid <<'INSTALL_EOF' cd /tmp REDIS_VERSION=\"7.2.3\" # Download Redis wget -q https://download.redis.io/releases/redis-\${REDIS_VERSION}.tar.gz || exit 1 tar -xf redis-\${REDIS_VERSION}.tar.gz || exit 1 cd redis-\${REDIS_VERSION} || exit 1 # Build Redis (requires build tools - may need to install via alternative method) # For now, try to use pre-built or skip if build tools unavailable if command -v make >/dev/null 2>&1; then make && make install || exit 1 echo 'Redis installed' else echo 'Build tools not available, skipping Redis binary build' exit 1 fi cd /tmp rm -rf redis-\${REDIS_VERSION}* || true INSTALL_EOF " && log_success "Redis installed on CT $vmid" || log_error "Failed to install Redis on CT $vmid" } # Try to enable privileged mode for containers (if possible) enable_privileged_mode() { local vmid="$1" log_info "Attempting to enable privileged mode for CT $vmid..." ssh -o ConnectTimeout=10 -o StrictHostKeyChecking=no root@${NODE_IP} " # Stop container pct stop $vmid 2>/dev/null || true # Try to set unprivileged=0 (may require container recreation) pct set $vmid --unprivileged 0 2>&1 || echo 'Cannot change unprivileged mode without recreation' # Start container pct start $vmid 2>/dev/null || true " } # Use pct mount to fix permissions fix_permissions_via_mount() { local vmid="$1" log_info "Fixing permissions via mount for CT $vmid..." ssh -o ConnectTimeout=10 -o StrictHostKeyChecking=no root@${NODE_IP} " # Stop container pct stop $vmid 2>/dev/null || true # Mount container MOUNT_POINT=\$(pct mount $vmid 2>&1 | grep -o '/tmp/.*' | head -1) if [ -n \"\$MOUNT_POINT\" ] && [ -d \"\$MOUNT_POINT\" ]; then # Fix permissions chown -R root:root \$MOUNT_POINT/var/lib/apt 2>/dev/null || true chown -R root:root \$MOUNT_POINT/var/cache/apt 2>/dev/null || true chown -R root:root \$MOUNT_POINT/var/lib/dpkg 2>/dev/null || true # Remove locks rm -f \$MOUNT_POINT/var/lib/apt/lists/lock rm -f \$MOUNT_POINT/var/lib/dpkg/lock* rm -f \$MOUNT_POINT/var/cache/apt/archives/lock # Unmount pct unmount $vmid 2>/dev/null || true echo 'Permissions fixed via mount' else echo 'Mount failed' fi # Start container pct start $vmid 2>/dev/null || true " } echo "═══════════════════════════════════════════════════════════" echo "Install Services Using Alternative Methods" echo "═══════════════════════════════════════════════════════════" echo "" # Try fixing permissions via mount for key containers log_info "Fixing permissions via mount method..." for vmid in 10000 10020 10030; do fix_permissions_via_mount "$vmid" sleep 2 done # Install Node.js via binary for application containers log_info "Installing Node.js via binary download..." for vmid in 10030 10040 10050 10060 10070 10080 10090 10091 10092 10130 10150 10151; do install_nodejs_binary "$vmid" sleep 2 done echo "" log_info "Alternative installation methods attempted!"