mirror of
https://github.com/basecamp/omarchy.git
synced 2026-02-17 15:25:37 +00:00
Improve RDP readiness check before launching VM
This commit is contained in:
@@ -254,6 +254,53 @@ remove_windows() {
|
||||
echo "Windows VM removal completed!"
|
||||
}
|
||||
|
||||
wait_for_rdp_ready() {
|
||||
local WIN_USER="$1"
|
||||
local WIN_PASS="$2"
|
||||
|
||||
echo "Waiting for Windows VM to be ready..."
|
||||
|
||||
local WAIT_COUNT=0
|
||||
while ! nc -z 127.0.0.1 3389 2>/dev/null; do
|
||||
sleep 2
|
||||
WAIT_COUNT=$((WAIT_COUNT + 1))
|
||||
if [ $WAIT_COUNT -gt 60 ]; then # 2 minutes timeout for port availability
|
||||
echo "❌ Timeout waiting for RDP port!"
|
||||
echo " The VM might still be installing Windows."
|
||||
echo " Check progress at: http://127.0.0.1:8006"
|
||||
return 1
|
||||
fi
|
||||
done
|
||||
|
||||
echo "RDP port detected. Verifying login availability..."
|
||||
|
||||
local VERIFY_START=$(date +%s)
|
||||
local VERIFY_LOG
|
||||
if ! VERIFY_LOG=$(mktemp); then
|
||||
echo "❌ Failed to create temporary file for RDP verification."
|
||||
return 1
|
||||
fi
|
||||
|
||||
while true; do
|
||||
if timeout 5s xfreerdp3 /auth-only /cert:ignore /u:"$WIN_USER" /p:"$WIN_PASS" /v:127.0.0.1:3389 >"$VERIFY_LOG" 2>&1; then
|
||||
rm -f "$VERIFY_LOG"
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [ $(( $(date +%s) - VERIFY_START )) -ge 25 ]; then
|
||||
echo "❌ Timeout verifying RDP login readiness!"
|
||||
if [ -s "$VERIFY_LOG" ]; then
|
||||
echo " Last attempt output:"
|
||||
tail -n 10 "$VERIFY_LOG"
|
||||
fi
|
||||
rm -f "$VERIFY_LOG"
|
||||
return 1
|
||||
fi
|
||||
|
||||
sleep 1
|
||||
done
|
||||
}
|
||||
|
||||
launch_windows() {
|
||||
KEEP_ALIVE=false
|
||||
if [ "$1" = "--keep-alive" ] || [ "$1" = "-k" ]; then
|
||||
@@ -266,6 +313,14 @@ launch_windows() {
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Extract credentials from compose file
|
||||
WIN_USER=$(grep "USERNAME:" "$COMPOSE_FILE" | sed 's/.*USERNAME: "\(.*\)"/\1/')
|
||||
WIN_PASS=$(grep "PASSWORD:" "$COMPOSE_FILE" | sed 's/.*PASSWORD: "\(.*\)"/\1/')
|
||||
|
||||
# Use defaults if not found
|
||||
[ -z "$WIN_USER" ] && WIN_USER="docker"
|
||||
[ -z "$WIN_PASS" ] && WIN_PASS="admin"
|
||||
|
||||
# Check if container is already running
|
||||
CONTAINER_STATUS=$(docker inspect --format='{{.State.Status}}' omarchy-windows 2>/dev/null)
|
||||
|
||||
@@ -282,32 +337,12 @@ launch_windows() {
|
||||
notify-send -u critical "Windows VM" "Failed to start Windows VM"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Wait for RDP to be ready
|
||||
echo "Waiting for Windows VM to be ready..."
|
||||
WAIT_COUNT=0
|
||||
while ! nc -z 127.0.0.1 3389 2>/dev/null; do
|
||||
sleep 2
|
||||
WAIT_COUNT=$((WAIT_COUNT + 1))
|
||||
if [ $WAIT_COUNT -gt 60 ]; then # 2 minutes timeout
|
||||
echo "❌ Timeout waiting for RDP!"
|
||||
echo " The VM might still be installing Windows."
|
||||
echo " Check progress at: http://127.0.0.1:8006"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
# Give it a moment more to fully initialize
|
||||
sleep 3
|
||||
fi
|
||||
|
||||
# Extract credentials from compose file
|
||||
WIN_USER=$(grep "USERNAME:" "$COMPOSE_FILE" | sed 's/.*USERNAME: "\(.*\)"/\1/')
|
||||
WIN_PASS=$(grep "PASSWORD:" "$COMPOSE_FILE" | sed 's/.*PASSWORD: "\(.*\)"/\1/')
|
||||
|
||||
# Use defaults if not found
|
||||
[ -z "$WIN_USER" ] && WIN_USER="docker"
|
||||
[ -z "$WIN_PASS" ] && WIN_PASS="admin"
|
||||
if ! wait_for_rdp_ready "$WIN_USER" "$WIN_PASS"; then
|
||||
notify-send -u critical "Windows VM" "RDP not ready yet. Please try again shortly."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Build the connection info
|
||||
if [ "$KEEP_ALIVE" = true ]; then
|
||||
|
||||
Reference in New Issue
Block a user