vm-bench/frontend/install.sh
Claus Lohmar 9110eb41bd feat: use aria2c for parallel downloads (8 connections, resumable)
Replaces wget with aria2c -x8 -s8 for significantly faster
downloads, especially on high-latency connections. Falls back to
single-connection if the server doesn't support range requests.
2026-07-23 11:19:13 +00:00

134 lines
6.2 KiB
Bash
Executable file

#!/bin/bash
set -e
# ───────────────────────────────────────────────────────────────────
# VM Bench Frontend — Installer for vm-bench LXC
#
# Run: bash /mnt/converter/frontend/install.sh
#
# Installs system tools, Python dependencies, and the systemd
# service that serves the web UI on port 5000.
# ───────────────────────────────────────────────────────────────────
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m'
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
SERVICE_NAME="vm-bench"
SERVICE_FILE="${SCRIPT_DIR}/${SERVICE_NAME}.service"
SYSTEMD_DIR="/etc/systemd/system"
echo ""
echo "╔════════════════════════════════════════════╗"
echo "║ VM Bench Frontend Installer (LXC) ║"
echo "╚════════════════════════════════════════════╝"
echo ""
# ───────────────────────────────────────────────────────────────────
# Step 1: System packages
# ───────────────────────────────────────────────────────────────────
echo "[1/5] Checking system packages..."
PACKAGES=()
REQUIRED=(
python3 "python3"
python3-pip "pip3"
wget "wget"
curl "curl"
aria2 "aria2c"
openssh-client "scp"
sshpass "sshpass"
)
for ((i=0; i<${#REQUIRED[@]}; i+=2)); do
pkg="${REQUIRED[$i]}"
bin="${REQUIRED[$i+1]}"
if command -v "$bin" &>/dev/null; then
echo " ${GREEN}${NC} $bin"
else
echo " ${YELLOW}${NC} $bin (will install ${pkg})"
PACKAGES+=("$pkg")
fi
done
if [ ${#PACKAGES[@]} -gt 0 ]; then
echo ""
echo " Installing missing packages: ${PACKAGES[*]}"
apt-get update -qq
apt-get install -y -qq "${PACKAGES[@]}"
echo " ${GREEN}${NC} System packages installed."
else
echo " ${GREEN}${NC} All system packages present."
fi
# ───────────────────────────────────────────────────────────────────
# Step 2: Python dependencies
# ───────────────────────────────────────────────────────────────────
echo ""
echo "[2/5] Installing Python dependencies..."
cd "$SCRIPT_DIR"
python3 -m pip install --break-system-packages -r requirements.txt -q
echo " ${GREEN}${NC} Python dependencies installed."
# ───────────────────────────────────────────────────────────────────
# Step 3: Verify backend connectivity
# ───────────────────────────────────────────────────────────────────
echo ""
echo "[3/5] Checking backend connectivity..."
BACKEND_URL="${BACKEND_URL:-http://10.2.0.2:9000}"
if curl -sf --max-time 5 "${BACKEND_URL}/api/v1/health" > /dev/null 2>&1; then
echo " ${GREEN}${NC} Backend reachable at $BACKEND_URL"
else
echo " ${YELLOW}!${NC} Backend not reachable at $BACKEND_URL"
echo " The frontend will start, but conversion jobs will fail until the"
echo " backend is running on srv2. You can change BACKEND_URL in"
echo " ${SYSTEMD_DIR}/${SERVICE_NAME}.service"
fi
# ───────────────────────────────────────────────────────────────────
# Step 4: Systemd service
# ───────────────────────────────────────────────────────────────────
echo ""
echo "[4/5] Installing systemd service..."
if [ ! -f "$SERVICE_FILE" ]; then
echo " ${RED}${NC} Service file not found: $SERVICE_FILE"
exit 1
fi
cp "$SERVICE_FILE" "$SYSTEMD_DIR/${SERVICE_NAME}.service"
systemctl daemon-reload
systemctl enable "$SERVICE_NAME"
echo " ${GREEN}${NC} Service installed and enabled."
# ───────────────────────────────────────────────────────────────────
# Step 5: Start & verify
# ───────────────────────────────────────────────────────────────────
echo ""
echo "[5/5] Starting service..."
systemctl restart "$SERVICE_NAME"
sleep 2
if systemctl is-active --quiet "$SERVICE_NAME"; then
echo " ${GREEN}${NC} Frontend is RUNNING on port 5000"
echo ""
echo " Open: http://$(hostname -I 2>/dev/null | awk '{print $1}'):5000"
echo " Verify: curl http://127.0.0.1:5000"
echo " Logs: journalctl -u ${SERVICE_NAME} -f"
echo " Status: systemctl status ${SERVICE_NAME}"
else
echo " ${RED}${NC} Service failed to start. Check logs:"
echo " journalctl -u ${SERVICE_NAME} -n 30"
exit 1
fi
echo ""
echo "╔════════════════════════════════════════════╗"
echo "${GREEN}Frontend installation complete.${NC}"
echo "╚════════════════════════════════════════════╝"
echo ""