169 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
		
		
			
		
	
	
			169 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
|  | #!/bin/bash
 | ||
|  | # | ||
|  | # Test fresh v4 installation from scratch | ||
|  | # Tests the most common user scenario: clean install using curl | bash | ||
|  | # | ||
|  | 
 | ||
|  | set -e | ||
|  | 
 | ||
|  | CONTAINER_NAME="nupst-test-fresh-v4" | ||
|  | 
 | ||
|  | echo "================================================" | ||
|  | echo "  NUPST Fresh v4 Installation Test" | ||
|  | echo "================================================" | ||
|  | echo "" | ||
|  | 
 | ||
|  | # Check if container already exists | ||
|  | if docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then | ||
|  |   echo "⚠️  Container ${CONTAINER_NAME} already exists" | ||
|  |   read -p "Remove and recreate? (y/N): " -n 1 -r | ||
|  |   echo | ||
|  |   if [[ $REPLY =~ ^[Yy]$ ]]; then | ||
|  |     echo "→ Stopping and removing existing container..." | ||
|  |     docker stop ${CONTAINER_NAME} 2>/dev/null || true | ||
|  |     docker rm ${CONTAINER_NAME} 2>/dev/null || true | ||
|  |   else | ||
|  |     echo "Exiting. Remove manually with: docker rm -f ${CONTAINER_NAME}" | ||
|  |     exit 1 | ||
|  |   fi | ||
|  | fi | ||
|  | 
 | ||
|  | echo "→ Creating Docker container with systemd..." | ||
|  | docker run -d \
 | ||
|  |   --name ${CONTAINER_NAME} \
 | ||
|  |   --privileged \
 | ||
|  |   --cgroupns=host \
 | ||
|  |   -v /sys/fs/cgroup:/sys/fs/cgroup:rw \
 | ||
|  |   ubuntu:22.04 \
 | ||
|  |   /bin/bash -c "apt-get update && apt-get install -y systemd systemd-sysv && exec /sbin/init" | ||
|  | 
 | ||
|  | echo "→ Waiting for systemd to initialize..." | ||
|  | sleep 10 | ||
|  | 
 | ||
|  | echo "→ Waiting for dpkg lock to be released..." | ||
|  | docker exec ${CONTAINER_NAME} bash -c "
 | ||
|  |   while fuser /var/lib/dpkg/lock-frontend >/dev/null 2>&1; do | ||
|  |     echo '  Waiting for dpkg lock...' | ||
|  |     sleep 2 | ||
|  |   done | ||
|  |   echo '  dpkg lock released' | ||
|  | "
 | ||
|  | 
 | ||
|  | echo "→ Installing prerequisites (curl)..." | ||
|  | docker exec ${CONTAINER_NAME} bash -c "
 | ||
|  |   apt-get update -qq | ||
|  |   apt-get install -y -qq curl | ||
|  | "
 | ||
|  | 
 | ||
|  | echo "" | ||
|  | echo "→ Installing NUPST v4 using curl | bash..." | ||
|  | echo "   Command: curl -sSL https://code.foss.global/serve.zone/nupst/raw/branch/main/install.sh | bash -s -- -y" | ||
|  | echo "" | ||
|  | 
 | ||
|  | docker exec ${CONTAINER_NAME} bash -c "
 | ||
|  |   curl -sSL https://code.foss.global/serve.zone/nupst/raw/branch/main/install.sh | bash -s -- -y | ||
|  | "
 | ||
|  | 
 | ||
|  | echo "" | ||
|  | echo "================================================" | ||
|  | echo "  Verifying Installation" | ||
|  | echo "================================================" | ||
|  | echo "" | ||
|  | 
 | ||
|  | echo "→ Checking binary location..." | ||
|  | docker exec ${CONTAINER_NAME} bash -c "
 | ||
|  |   if [ -f /opt/nupst/nupst ]; then | ||
|  |     echo '  ✓ Binary exists at /opt/nupst/nupst' | ||
|  |     ls -lh /opt/nupst/nupst | ||
|  |   else | ||
|  |     echo '  ✗ Binary not found at /opt/nupst/nupst' | ||
|  |     exit 1 | ||
|  |   fi | ||
|  | "
 | ||
|  | 
 | ||
|  | echo "" | ||
|  | echo "→ Checking symlink..." | ||
|  | docker exec ${CONTAINER_NAME} bash -c "
 | ||
|  |   if [ -L /usr/local/bin/nupst ]; then | ||
|  |     echo '  ✓ Symlink exists at /usr/local/bin/nupst' | ||
|  |     ls -lh /usr/local/bin/nupst | ||
|  |   elif [ -L /usr/bin/nupst ]; then | ||
|  |     echo '  ✓ Symlink exists at /usr/bin/nupst' | ||
|  |     ls -lh /usr/bin/nupst | ||
|  |   else | ||
|  |     echo '  ✗ Symlink not found in /usr/local/bin or /usr/bin' | ||
|  |     exit 1 | ||
|  |   fi | ||
|  | "
 | ||
|  | 
 | ||
|  | echo "" | ||
|  | echo "→ Checking PATH integration..." | ||
|  | docker exec ${CONTAINER_NAME} bash -c "
 | ||
|  |   NUPST_PATH=\$(which nupst 2>/dev/null) | ||
|  |   if [ -n \"\$NUPST_PATH\" ]; then | ||
|  |     echo '  ✓ nupst found in PATH at: '\$NUPST_PATH | ||
|  |   else | ||
|  |     echo '  ✗ nupst not found in PATH' | ||
|  |     echo '  PATH contents:' | ||
|  |     echo \$PATH | ||
|  |     exit 1 | ||
|  |   fi | ||
|  | "
 | ||
|  | 
 | ||
|  | echo "" | ||
|  | echo "→ Testing nupst command execution..." | ||
|  | docker exec ${CONTAINER_NAME} nupst --version | ||
|  | 
 | ||
|  | echo "" | ||
|  | echo "→ Creating minimal config for service test..." | ||
|  | docker exec ${CONTAINER_NAME} bash -c "
 | ||
|  |   mkdir -p /etc/nupst | ||
|  |   cat > /etc/nupst/config.json << 'EOF' | ||
|  | { | ||
|  |   \"version\": \"4.0\", | ||
|  |   \"upsDevices\": [], | ||
|  |   \"groups\": [], | ||
|  |   \"checkInterval\": 30000 | ||
|  | } | ||
|  | EOF | ||
|  |   echo '  ✓ Minimal config created' | ||
|  | "
 | ||
|  | 
 | ||
|  | echo "" | ||
|  | echo "→ Testing service creation..." | ||
|  | docker exec ${CONTAINER_NAME} bash -c "
 | ||
|  |   echo '  Running: nupst service enable' | ||
|  |   nupst service enable | ||
|  | 
 | ||
|  |   if [ -f /etc/systemd/system/nupst.service ]; then | ||
|  |     echo '  ✓ Service file created successfully' | ||
|  |   else | ||
|  |     echo '  ✗ Service file creation failed' | ||
|  |     exit 1 | ||
|  |   fi | ||
|  | "
 | ||
|  | 
 | ||
|  | echo "" | ||
|  | echo "→ Checking if service is enabled..." | ||
|  | docker exec ${CONTAINER_NAME} systemctl is-enabled nupst | ||
|  | 
 | ||
|  | echo "" | ||
|  | echo "================================================" | ||
|  | echo "  ✓ Fresh v4 Installation Test Complete" | ||
|  | echo "================================================" | ||
|  | echo "" | ||
|  | echo "Installation verified successfully:" | ||
|  | echo "  • Binary installed to /opt/nupst/nupst" | ||
|  | echo "  • Symlink created for global access" | ||
|  | echo "  • nupst command available in PATH" | ||
|  | echo "  • Command executes correctly" | ||
|  | echo "  • Systemd service file created" | ||
|  | echo "" | ||
|  | echo "Useful commands:" | ||
|  | echo "  docker exec -it ${CONTAINER_NAME} bash" | ||
|  | echo "  docker exec ${CONTAINER_NAME} nupst --help" | ||
|  | echo "  docker exec ${CONTAINER_NAME} nupst service status" | ||
|  | echo "  docker stop ${CONTAINER_NAME}" | ||
|  | echo "  docker rm -f ${CONTAINER_NAME}" | ||
|  | echo "" |