The v3→v4 migration was only renaming upsList to upsDevices without transforming the device structure. V3 had a flat structure with SNMP fields directly on the device object, while v4 expects a nested 'snmp' object. This commit fixes the migration to: - Move host, port, community, version, etc. into nested snmp object - Convert version from string to number - Add default timeout (5000ms) - Create thresholds object with defaults - Preserve all SNMPv1, v2c, and v3 authentication fields Also includes install.sh fix for better non-interactive handling.
169 lines
4.5 KiB
Bash
Executable File
169 lines
4.5 KiB
Bash
Executable File
#!/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 ""
|