#!/bin/bash # --- 1. SET UP STORAGE PATHS --- # We work in /tmp or current dir to ensure we have write access cd /app # --- 2. DOWNLOAD ANDROID ISO (443 MB) --- ISO_FILE="android-x86-4.4-r5.iso" ISO_URL="https://sourceforge.net/projects/android-x86/files/Release%204.4/android-x86-4.4-r5.iso/download" if [ ! -f "$ISO_FILE" ]; then echo "Disk space is tight. Downloading Android KitKat..." # -q for quiet (saves log space), --show-progress for visual wget -q --show-progress -O "$ISO_FILE" "$ISO_URL" else echo "Android ISO found. Skipping download." fi # --- 3. DOWNLOAD & SETUP NOVNC (Web Viewer) --- # We download the UI directly from GitHub to save space compared to installing a package if [ ! -d "noVNC-1.4.0" ]; then echo "Downloading noVNC Interface..." wget -q -O novnc.zip https://github.com/novnc/noVNC/archive/refs/tags/v1.4.0.zip unzip -q novnc.zip rm novnc.zip # Delete zip to save space immediately # Download Websockify (The bridge between QEMU and Browser) echo "Downloading Websockify..." wget -q -O websockify.zip https://github.com/novnc/websockify/archive/refs/tags/v0.11.0.zip unzip -q websockify.zip rm websockify.zip # Link websockify into noVNC mv websockify-0.11.0 noVNC-1.4.0/utils/websockify fi # --- 4. START THE SYSTEM --- echo "Starting Web Server on port 7860..." # Start the noVNC web server in the background ./noVNC-1.4.0/utils/novnc_proxy --vnc localhost:5900 --listen 7860 & echo "Booting Android (Touch Mode Enabled)..." # FLAGS EXPLAINED FOR 1GB LIMIT & MOBILE: # -m 1024: Reduced RAM to 1GB (Leaving 1GB for ISO storage on disk) # -device usb-tablet: Absolute touch input for mobile users # -vga std: Standard graphics # -snapshot: Write temporary data to RAM, not Disk (Saves storage!) qemu-system-i386 \ -m 1024 \ -smp 2 \ -cpu qemu64 \ -vga std \ -net nic,model=virtio -net user \ -cdrom "$ISO_FILE" \ -device usb-tablet \ -vnc :0 \ -snapshot