From cb65805cd278bf2605913fbdc93ed3995233d21b Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Fri, 14 Nov 2025 12:01:58 +0100 Subject: [PATCH] Improve VM setup and installation feedback Enhanced error handling and user feedback during base package installation, Podman configuration, and UniFi OS VM startup. Added clearer status messages, improved retry logic, and more informative progress updates for VM boot and UniFi OS installation steps. --- vm/unifi-os-vm.sh | 77 ++++++++++++++++++++++++++++------------------- 1 file changed, 46 insertions(+), 31 deletions(-) diff --git a/vm/unifi-os-vm.sh b/vm/unifi-os-vm.sh index ed510ae0f..2e441ddbc 100644 --- a/vm/unifi-os-vm.sh +++ b/vm/unifi-os-vm.sh @@ -692,7 +692,7 @@ done # Install base packages with proper error handling echo \"[\$(date)] Installing base packages (this may take several minutes)\" -DEBIAN_FRONTEND=noninteractive apt-get install -y -qq \ +DEBIAN_FRONTEND=noninteractive apt-get install -y \ qemu-guest-agent \ curl \ wget \ @@ -707,28 +707,41 @@ DEBIAN_FRONTEND=noninteractive apt-get install -y -qq \ fuse-overlayfs \ iptables \ iproute2 \ - systemd-container 2>&1 || { - echo \"[\$(date)] First install attempt failed, trying again...\" - sleep 5 - DEBIAN_FRONTEND=noninteractive apt-get install -y \ - qemu-guest-agent curl wget ca-certificates podman uidmap slirp4netns iptables 2>&1 || true - } + dbus-user-session \ + systemd-container 2>&1 -echo \"[\$(date)] Packages installed successfully\" +if [ \$? -eq 0 ]; then + echo \"[\$(date)] ✓ Packages installed successfully\" +else + echo \"[\$(date)] ⚠ Some packages failed, retrying essential packages...\" + sleep 5 + DEBIAN_FRONTEND=noninteractive apt-get install -y \ + qemu-guest-agent curl wget ca-certificates podman uidmap slirp4netns iptables 2>&1 +fi # Start and enable QEMU Guest Agent echo \"[\$(date)] Starting QEMU Guest Agent\" systemctl enable qemu-guest-agent 2>/dev/null || true systemctl start qemu-guest-agent 2>/dev/null || true +systemctl status qemu-guest-agent --no-pager | head -3 -# Configure Podman for rootless operation +# Configure Podman properly echo \"[\$(date)] Configuring Podman\" +# Enable lingering for root user (allows rootless podman) +loginctl enable-linger root 2>/dev/null || true + +# Start podman socket systemctl enable podman.socket 2>/dev/null || true systemctl start podman.socket 2>/dev/null || true # Verify Podman is working echo \"[\$(date)] Verifying Podman installation\" -podman --version || echo \"WARNING: Podman not responding\" +if podman --version; then + echo \"[\$(date)] ✓ Podman is working\" + podman info 2>&1 | grep -E '(host|store|runRoot)' || true +else + echo \"[\$(date)] ✗ WARNING: Podman not responding\" +fi # Download UniFi OS installer echo \"[\$(date)] Downloading UniFi OS Server ${UOS_VERSION}\" @@ -905,60 +918,62 @@ if [ "$START_VM" == "yes" ]; then qm start $VMID msg_ok "Started UniFi OS VM" - msg_info "Waiting for VM to boot and complete first-boot setup (this may take 3-5 minutes)" - - # Simple approach: Wait for VM to boot and get network (30 seconds) + msg_info "Waiting for VM to boot (30 seconds)" sleep 30 + msg_ok "VM should be booting now" - # Get VM IP address using simple method + msg_info "Detecting VM IP address (may take up to 60 seconds)" VM_IP="" for i in {1..30}; do - # Try to get IP via qm guest cmd (may fail ifd agent not ready, that's ok) VM_IP=$(qm guest cmd $VMID network-get-interfaces 2>/dev/null | jq -r '.[1]["ip-addresses"][]? | select(.["ip-address-type"] == "ipv4") | .["ip-address"]' 2>/dev/null | grep -v "127.0.0.1" | head -1 || echo "") if [ -n "$VM_IP" ]; then + msg_ok "VM IP Address detected: ${VM_IP}" break fi sleep 2 done if [ -n "$VM_IP" ]; then - msg_ok "VM IP Address: ${CL}${BL}${VM_IP}${CL}" - - # Wait for UniFi OS Server to become available by checking port 11443 - msg_info "Waiting for UniFi OS Server to complete installation..." + msg_info "Waiting for UniFi OS installation to complete (this takes 3-5 minutes)" WAIT_COUNT=0 - MAX_WAIT=240 # 4 minutes max wait + MAX_WAIT=300 # 5 minutes max PORT_OPEN=0 + LAST_MSG_TIME=0 while [ $WAIT_COUNT -lt $MAX_WAIT ]; do - # Check if port 11443 is open if timeout 2 bash -c ">/dev/tcp/${VM_IP}/11443" 2>/dev/null; then PORT_OPEN=1 - msg_ok "UniFi OS Server installation completed" + msg_ok "UniFi OS Server installation completed successfully" break fi sleep 5 WAIT_COUNT=$((WAIT_COUNT + 5)) - # Show progress every 20 seconds - if [ $((WAIT_COUNT % 20)) -eq 0 ]; then - echo -ne "${BFR}${TAB}${YW}${HOLD}Still installing UniFi OS Server... (${WAIT_COUNT}s elapsed)${HOLD}" + # Update message every 20 seconds + if [ $((WAIT_COUNT - LAST_MSG_TIME)) -ge 20 ]; then + echo -e "${BFR}${TAB}${YW}${HOLD}Installation in progress... ${WAIT_COUNT}s elapsed (check: tail -f /var/log/install-unifi.log in VM)${CL}" + LAST_MSG_TIME=$WAIT_COUNT fi done if [ $PORT_OPEN -eq 1 ]; then - msg_ok "UniFi OS Server is online!" - echo -e "\n${TAB}${GATEWAY}${BOLD}${GN}Access UniFi OS Server at: ${BGN}https://${VM_IP}:11443${CL}\n" + echo -e "\n${TAB}${GATEWAY}${BOLD}${GN}✓ UniFi OS Server is ready!${CL}" + echo -e "${TAB}${GATEWAY}${BOLD}${GN}✓ Access at: ${BGN}https://${VM_IP}:11443${CL}\n" else - echo -e "${BFR}${TAB}${YW}Installation is taking longer than expected.${CL}" - echo -e "${TAB}${INFO}${YW}Check installation log in VM: ${CL}${BL}tail -f /var/log/install-unifi.log${CL}" - echo -e "${TAB}${INFO}${YW}Or try accessing: ${BGN}https://${VM_IP}:11443${CL}" + msg_ok "VM is running, but installation is still in progress" + echo -e "${TAB}${INFO}${YW}Installation takes 3-5 minutes after first boot${CL}" + echo -e "${TAB}${INFO}${YW}Check progress: ${BL}qm guest exec ${VMID} -- tail -f /var/log/install-unifi.log${CL}" + echo -e "${TAB}${INFO}${YW}Or SSH to: ${BL}${VM_IP}${CL} and run: ${BL}tail -f /var/log/install-unifi.log${CL}" + echo -e "${TAB}${INFO}${YW}Access will be at: ${BGN}https://${VM_IP}:11443${CL}" fi else - msg_info "Could not detect VM IP. Access via Proxmox console or check VM network settings." + msg_ok "VM is running (ID: ${VMID})" + echo -e "${TAB}${INFO}${YW}Could not auto-detect IP address${CL}" + echo -e "${TAB}${INFO}${YW}Access VM console in Proxmox to check status${CL}" + echo -e "${TAB}${INFO}${YW}Or check installation log: ${BL}tail -f /var/log/install-unifi.log${CL}" fi fi