├── QEMU-QuickBoot.sh └── README.md /QEMU-QuickBoot.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Set the GTK theme to dark 4 | export GTK_THEME=Orchis-Dark:dark 5 | 6 | # Calculate 30% wider size for the first Zenity window 7 | original_width=360 8 | original_height=360 9 | smaller_width=$(awk "BEGIN {printf \"%.0f\n\", $original_width * 0.5}") 10 | smaller_height=$(awk "BEGIN {printf \"%.0f\n\", $original_height * 0.7}") 11 | bigger_width=$(awk "BEGIN {printf \"%.0f\n\", $original_width * 1.3}") 12 | geometry="${smaller_width}x${smaller_height}" 13 | 14 | extra_disks="" 15 | 16 | # Check if NAS is mounted locally (replace with your actual mount point) 17 | nas_mounted=$(mount | grep -q "/mnt/nas"; echo $?) 18 | 19 | while true; do 20 | # Option to choose boot source using Zenity (add NAS option if mounted) 21 | if [ $nas_mounted -eq 0 ]; then 22 | boot_source_choice=$(zenity --list --title="Select VM Boot Source" --column="Option" --width="$original_width" --height="$smaller_height" \ 23 | "Boot from connected device" "Boot from file (.vhd, .img, .iso)" "ISO & Drive (Virtual disk or Physical Device)" "Boot from Network Attached Storage (NAS)") 24 | else 25 | boot_source_choice=$(zenity --list --title="Select VM Boot Source" --column="Option" --width="$original_width" --height="$smaller_height" \ 26 | "Boot from connected device" "Boot from file (.vhd, .img, .iso)" "ISO & Drive (Virtual disk or Physical Device)") 27 | fi 28 | 29 | if [ $? -ne 0 ]; then 30 | exit 1 31 | fi 32 | 33 | case $boot_source_choice in 34 | "Boot from connected device") 35 | drives=$(lsblk -o NAME,SIZE -lnp -d -e 7,11) 36 | selected_drive=$(zenity --list --title="Select Disk" --column="Drive" --column="Size" --text "Select a disk:" --width="$bigger_width" --height="$smaller_height" $drives) 37 | 38 | if [ $? -ne 0 ]; then 39 | exit 1 40 | fi 41 | 42 | # Prompt for extra disks (including NAS option if available) 43 | add_extra_disk=$(zenity --list --title="Add Extra Disk" --column="Option" --text="Do you want to add an extra disk?" --width="$smaller_width" --height="$smaller_height" \ 44 | "Yes" "No") 45 | 46 | if [ $? -ne 0 ]; then 47 | exit 1 48 | fi 49 | 50 | if [ "$add_extra_disk" == "Yes" ]; then 51 | extra_disk_id=1 52 | 53 | while true; do 54 | if [ $nas_mounted -eq 0 ]; then 55 | extra_disk_choice=$(zenity --list --title="Select Extra Disk Type" --column="Option" --width="$bigger_width" --height="$smaller_height" \ 56 | "Select Virtual Disk" "Select Physical Device" "Select from NAS" "Done") 57 | else 58 | extra_disk_choice=$(zenity --list --title="Select Extra Disk Type" --column="Option" --width="$bigger_width" --height="$smaller_height" \ 59 | "Select Virtual Disk" "Select Physical Device" "Done") 60 | fi 61 | 62 | if [ $? -ne 0 ]; then 63 | exit 1 64 | fi 65 | 66 | if [ "$extra_disk_choice" == "Select Virtual Disk" ]; then 67 | extra_disk=$(zenity --file-selection --title="Select Extra Virtual Disk (.img, .vhd, .vhdx)" --width="$smaller_width" --height="$smaller_height") 68 | 69 | if [ $? -ne 0 ] || [ ! -f "$extra_disk" ]; then 70 | continue 71 | fi 72 | 73 | extra_disks="$extra_disks -drive file=\"$extra_disk\",format=raw,id=extra_drive$extra_disk_id" 74 | 75 | extra_disk_id=$((extra_disk_id + 1)) 76 | 77 | elif [ "$extra_disk_choice" == "Select Physical Device" ]; then 78 | drives=$(lsblk -o NAME,SIZE -lnp -d -e 7,11) 79 | extra_disk=$(zenity --list --title="Select Extra Physical Device" --column="Drive" --column="Size" --text "Select an extra physical device:" --width="$bigger_width" --height="$smaller_height" $drives) 80 | 81 | if [ $? -ne 0 ]; then 82 | exit 1 83 | fi 84 | 85 | extra_disks="$extra_disks -drive file=\"$extra_disk\",format=raw,id=extra_drive$extra_disk_id" 86 | 87 | extra_disk_id=$((extra_disk_id + 1)) 88 | 89 | elif [ "$extra_disk_choice" == "Select from NAS" ]; then 90 | nas_path=$(zenity --file-selection --filename="/mnt/nas/" --title="Select NAS Disk Image (.img, .vhd, .iso)" --width="$smaller_width" --height="$smaller_height") 91 | 92 | if [ $? -ne 0 ] || [ ! -f "$nas_path" ]; then 93 | continue 94 | fi 95 | 96 | extra_disks="$extra_disks -drive file=\"$nas_path\",format=raw,id=extra_drive$extra_disk_id" 97 | 98 | extra_disk_id=$((extra_disk_id + 1)) 99 | 100 | elif [ "$extra_disk_choice" == "Done" ]; then 101 | break 102 | else 103 | continue 104 | fi 105 | done 106 | fi 107 | 108 | boot_mode=$(zenity --list --title="Select Boot Mode" --column="Boot Mode" "BIOS" "UEFI" --width="$smaller_width" --height="$smaller_height") 109 | 110 | if [ $? -ne 0 ]; then 111 | exit 1 112 | fi 113 | ;; 114 | 115 | "Boot from file (.vhd, .img, .iso)") 116 | selected_drive=$(zenity --file-selection --title="Select Virtual Disk (.vhd, .img, .iso)" --width="$smaller_width" --height="$smaller_height") 117 | 118 | if [ $? -ne 0 ] || [ ! -f "$selected_drive" ]; then 119 | continue 120 | fi 121 | 122 | # Prompt for extra disks (including NAS option) 123 | add_extra_disk=$(zenity --list --title="Add Extra Disk" --column="Option" --text="Do you want to add an extra disk?" --width="$smaller_width" --height="$smaller_height" \ 124 | "Yes" "No") 125 | 126 | if [ $? -ne 0 ]; then 127 | exit 1 128 | fi 129 | 130 | if [ "$add_extra_disk" == "Yes" ]; then 131 | extra_disk_id=1 132 | 133 | while true; do 134 | if [ $nas_mounted -eq 0 ]; then 135 | extra_disk_choice=$(zenity --list --title="Select Extra Disk Type" --column="Option" --width="$bigger_width" --height="$smaller_height" \ 136 | "Select Virtual Disk" "Select Physical Device" "Select from NAS" "Done") 137 | else 138 | extra_disk_choice=$(zenity --list --title="Select Extra Disk Type" --column="Option" --width="$bigger_width" --height="$smaller_height" \ 139 | "Select Virtual Disk" "Select Physical Device" "Done") 140 | fi 141 | 142 | if [ $? -ne 0 ]; then 143 | exit 1 144 | fi 145 | 146 | if [ "$extra_disk_choice" == "Select Virtual Disk" ]; then 147 | extra_disk=$(zenity --file-selection --title="Select Extra Virtual Disk (.img, .vhd, .vhdx)" --width="$smaller_width" --height="$smaller_height") 148 | 149 | if [ $? -ne 0 ] || [ ! -f "$extra_disk" ]; then 150 | continue 151 | fi 152 | 153 | extra_disks="$extra_disks -drive file=\"$extra_disk\",format=raw,id=extra_drive$extra_disk_id" 154 | 155 | extra_disk_id=$((extra_disk_id + 1)) 156 | 157 | elif [ "$extra_disk_choice" == "Select Physical Device" ]; then 158 | drives=$(lsblk -o NAME,SIZE -lnp -d -e 7,11) 159 | extra_disk=$(zenity --list --title="Select Extra Physical Device" --column="Drive" --column="Size" --text "Select an extra physical device:" --width="$bigger_width" --height="$smaller_height" $drives) 160 | 161 | if [ $? -ne 0 ]; then 162 | exit 1 163 | fi 164 | 165 | extra_disks="$extra_disks -drive file=\"$extra_disk\",format=raw,id=extra_drive$extra_disk_id" 166 | 167 | extra_disk_id=$((extra_disk_id + 1)) 168 | 169 | elif [ "$extra_disk_choice" == "Select from NAS" ]; then 170 | nas_path=$(zenity --file-selection --filename="/mnt/nas/" --title="Select NAS Disk Image (.img, .vhd, .iso)" --width="$smaller_width" --height="$smaller_height") 171 | 172 | if [ $? -ne 0 ] || [ ! -f "$nas_path" ]; then 173 | continue 174 | fi 175 | 176 | extra_disks="$extra_disks -drive file=\"$nas_path\",format=raw,id=extra_drive$extra_disk_id" 177 | 178 | extra_disk_id=$((extra_disk_id + 1)) 179 | 180 | elif [ "$extra_disk_choice" == "Done" ]; then 181 | break 182 | else 183 | continue 184 | fi 185 | done 186 | fi 187 | 188 | boot_mode=$(zenity --list --title="Select Boot Mode" --column="Boot Mode" "BIOS" "UEFI" --width="$smaller_width" --height="$smaller_height") 189 | 190 | if [ $? -ne 0 ]; then 191 | exit 1 192 | fi 193 | ;; 194 | 195 | "ISO & Drive (Virtual disk or Physical Device)") 196 | iso_path=$(zenity --file-selection --title="Select .ISO file" --width="$smaller_width" --height="$smaller_height") 197 | 198 | if [ $? -ne 0 ] || [ ! -f "$iso_path" ]; then 199 | continue 200 | fi 201 | 202 | selected_drive=$(zenity --list --title="Select Virtual Disk or Physical Device" --column="Option" --width="$bigger_width" --height="$smaller_height" \ 203 | "Select Virtual Disk" "Select Physical Device") 204 | 205 | if [ $? -ne 0 ]; then 206 | exit 1 207 | fi 208 | 209 | if [ "$selected_drive" == "Select Virtual Disk" ]; then 210 | selected_drive=$(zenity --file-selection --title="Select Virtual Disk (.img, .vhd, .vhdx)" --width="$smaller_width" --height="$smaller_height") 211 | 212 | if [ $? -ne 0 ] || [ ! -f "$selected_drive" ]; then 213 | continue 214 | fi 215 | elif [ "$selected_drive" == "Select Physical Device" ]; then 216 | drives=$(lsblk -o NAME,SIZE -lnp -d -e 7,11) 217 | selected_drive=$(zenity --list --title="Select Physical Device" --column="Drive" --column="Size" --text "Select a physical device:" --width="$bigger_width" --height="$smaller_height" $drives) 218 | 219 | if [ $? -ne 0 ]; then 220 | exit 1 221 | fi 222 | else 223 | continue 224 | fi 225 | 226 | # Prompt for extra disks (including NAS option) 227 | add_extra_disk=$(zenity --list --title="Add Extra Disk" --column="Option" --text="Do you want to add an extra disk?" --width="$smaller_width" --height="$smaller_height" \ 228 | "Yes" "No") 229 | 230 | if [ $? -ne 0 ]; then 231 | exit 1 232 | fi 233 | 234 | if [ "$add_extra_disk" == "Yes" ]; then 235 | extra_disk_id=1 236 | 237 | while true; do 238 | if [ $nas_mounted -eq 0 ]; then 239 | extra_disk_choice=$(zenity --list --title="Select Extra Disk Type" --column="Option" --width="$bigger_width" --height="$smaller_height" \ 240 | "Select Virtual Disk" "Select Physical Device" "Select from NAS" "Done") 241 | else 242 | extra_disk_choice=$(zenity --list --title="Select Extra Disk Type" --column="Option" --width="$bigger_width" --height="$smaller_height" \ 243 | "Select Virtual Disk" "Select Physical Device" "Done") 244 | fi 245 | 246 | if [ $? -ne 0 ]; then 247 | exit 1 248 | fi 249 | 250 | if [ "$extra_disk_choice" == "Select Virtual Disk" ]; then 251 | extra_disk=$(zenity --file-selection --title="Select Extra Virtual Disk (.img, .vhd, .vhdx)" --width="$smaller_width" --height="$smaller_height") 252 | 253 | if [ $? -ne 0 ] || [ ! -f "$extra_disk" ]; then 254 | continue 255 | fi 256 | 257 | extra_disks="$extra_disks -drive file=\"$extra_disk\",format=raw,id=extra_drive$extra_disk_id" 258 | 259 | extra_disk_id=$((extra_disk_id + 1)) 260 | 261 | elif [ "$extra_disk_choice" == "Select Physical Device" ]; then 262 | drives=$(lsblk -o NAME,SIZE -lnp -d -e 7,11) 263 | extra_disk=$(zenity --list --title="Select Extra Physical Device" --column="Drive" --column="Size" --text "Select an extra physical device:" --width="$bigger_width" --height="$smaller_height" $drives) 264 | 265 | if [ $? -ne 0 ]; then 266 | exit 1 267 | fi 268 | 269 | extra_disks="$extra_disks -drive file=\"$extra_disk\",format=raw,id=extra_drive$extra_disk_id" 270 | 271 | extra_disk_id=$((extra_disk_id + 1)) 272 | 273 | elif [ "$extra_disk_choice" == "Select from NAS" ]; then 274 | nas_path=$(zenity --file-selection --filename="/mnt/nas/" --title="Select NAS Disk Image (.img, .vhd, .iso)" --width="$smaller_width" --height="$smaller_height") 275 | 276 | if [ $? -ne 0 ] || [ ! -f "$nas_path" ]; then 277 | continue 278 | fi 279 | 280 | extra_disks="$extra_disks -drive file=\"$nas_path\",format=raw,id=extra_drive$extra_disk_id" 281 | 282 | extra_disk_id=$((extra_disk_id + 1)) 283 | 284 | elif [ "$extra_disk_choice" == "Done" ]; then 285 | break 286 | else 287 | continue 288 | fi 289 | done 290 | fi 291 | 292 | boot_mode=$(zenity --list --title="Select Boot Mode" --column="Boot Mode" "BIOS" "UEFI" --width="$smaller_width" --height="$smaller_height") 293 | 294 | if [ $? -ne 0 ]; then 295 | exit 1 296 | fi 297 | ;; 298 | 299 | "Boot from Network Attached Storage (NAS)") 300 | # Check if NAS is mounted 301 | if [ $nas_mounted -ne 0 ]; then 302 | zenity --error --text="NAS is not mounted. Please mount it first." --width="$smaller_width" --height="$smaller_height" 303 | continue 304 | fi 305 | 306 | # Let user select NAS image 307 | selected_drive=$(zenity --file-selection --filename="/mnt/nas/" --title="Select NAS Disk Image (.img, .vhd, .iso)" --width="$smaller_width" --height="$smaller_height") 308 | 309 | if [ $? -ne 0 ] || [ ! -f "$selected_drive" ]; then 310 | continue 311 | fi 312 | 313 | # Prompt for extra disks (physical or virtual) 314 | add_extra_disk=$(zenity --list --title="Add Extra Disk" --column="Option" --text="Do you want to add an extra disk?" --width="$smaller_width" --height="$smaller_height" \ 315 | "Yes" "No") 316 | 317 | if [ $? -ne 0 ]; then 318 | exit 1 319 | fi 320 | 321 | if [ "$add_extra_disk" == "Yes" ]; then 322 | extra_disk_id=1 323 | 324 | while true; do 325 | extra_disk_choice=$(zenity --list --title="Select Extra Disk Type" --column="Option" --width="$bigger_width" --height="$smaller_height" \ 326 | "Select Virtual Disk" "Select Physical Device" "Done") 327 | 328 | if [ $? -ne 0 ]; then 329 | exit 1 330 | fi 331 | 332 | if [ "$extra_disk_choice" == "Select Virtual Disk" ]; then 333 | extra_disk=$(zenity --file-selection --title="Select Extra Virtual Disk (.img, .vhd, .vhdx)" --width="$smaller_width" --height="$smaller_height") 334 | 335 | if [ $? -ne 0 ] || [ ! -f "$extra_disk" ]; then 336 | continue 337 | fi 338 | 339 | extra_disks="$extra_disks -drive file=\"$extra_disk\",format=raw,id=extra_drive$extra_disk_id" 340 | 341 | extra_disk_id=$((extra_disk_id + 1)) 342 | 343 | elif [ "$extra_disk_choice" == "Select Physical Device" ]; then 344 | drives=$(lsblk -o NAME,SIZE -lnp -d -e 7,11) 345 | extra_disk=$(zenity --list --title="Select Extra Physical Device" --column="Drive" --column="Size" --text "Select an extra physical device:" --width="$bigger_width" --height="$smaller_height" $drives) 346 | 347 | if [ $? -ne 0 ]; then 348 | exit 1 349 | fi 350 | 351 | extra_disks="$extra_disks -drive file=\"$extra_disk\",format=raw,id=extra_drive$extra_disk_id" 352 | 353 | extra_disk_id=$((extra_disk_id + 1)) 354 | 355 | elif [ "$extra_disk_choice" == "Done" ]; then 356 | break 357 | else 358 | continue 359 | fi 360 | done 361 | fi 362 | 363 | boot_mode=$(zenity --list --title="Select Boot Mode" --column="Boot Mode" "BIOS" "UEFI" --width="$smaller_width" --height="$smaller_height") 364 | 365 | if [ $? -ne 0 ]; then 366 | exit 1 367 | fi 368 | ;; 369 | 370 | *) 371 | continue 372 | ;; 373 | esac 374 | 375 | ram_size=$(zenity --entry --title="Enter RAM Size" --text "Enter the amount of RAM for the VM (in MB):" --width="$smaller_width" --height="$smaller_height") 376 | 377 | if [ $? -ne 0 ] || ! [[ "$ram_size" =~ ^[1-9][0-9]*$ ]]; then 378 | continue 379 | fi 380 | 381 | # Print the selected drive, extra disks, boot mode, and RAM size for debugging 382 | echo -e "\nSelected Drive: $selected_drive" 383 | echo "Extra Disks: $extra_disks" 384 | echo "Boot Mode: $boot_mode" 385 | echo "RAM Size: $ram_size MB" 386 | 387 | # Start QEMU VM with the specified parameters 388 | qemu_command="qemu-system-x86_64 -enable-kvm -cpu host -smp 4 -m ${ram_size}M -drive file=\"$selected_drive\",format=raw -boot order=dc -netdev user,id=net0,hostfwd=tcp::2222-:22 -device e1000,netdev=net0 $extra_disks" 389 | 390 | if [ "$boot_mode" == "UEFI" ]; then 391 | qemu_command="qemu-system-x86_64 -enable-kvm -cpu host -smp 4 -m ${ram_size}M -drive file=\"$selected_drive\",format=raw -bios /usr/share/qemu/OVMF.fd -boot order=dc -netdev user,id=net0,hostfwd=tcp::2222-:22 -device e1000,netdev=net0 $extra_disks" 392 | fi 393 | 394 | # If ISO was selected (for ISO & Drive option) 395 | if [ -n "$iso_path" ]; then 396 | qemu_command=$(echo "$qemu_command" | sed "s/-boot order=dc/-cdrom \"$iso_path\" -boot order=dc/") 397 | fi 398 | 399 | # Run QEMU command 400 | eval $qemu_command 401 | 402 | # Combine notifications and prompt in a single Zenity window 403 | zenity --question --title="QEMU - QuickBoot" --text="QuickBoot another VM?" --width="$smaller_width" --height="$smaller_height" 404 | 405 | if [ $? -ne 0 ]; then 406 | break 407 | fi 408 | done 409 | 410 | # End of script 411 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # QEMU-QuickBoot 2 | 3 | QEMU-QuickBoot is a Zenity GUI interface for quick and easy deployment of QEMU Virtual Machines. 4 | 5 | ![349671419-4228f66a-cefe-4c85-bd99-26ad465dd354](https://github.com/user-attachments/assets/83ee258e-395a-4278-b866-875ee1505089) 6 | 7 | ## Overview 8 | 9 | QEMU-QuickBoot is a Bash script designed to simplify the deployment of Virtual Machines (VMs) using QEMU, with a user-friendly GUI interface provided by Zenity. It allows users to quickly create and boot VMs directly from their desktop, using connected physical devices or bootable image files as the source media. 10 | 11 | > **Note:** Currently, QEMU-QuickBoot is supported only on Debian and Ubuntu-based distributions. Support for Arch and Fedora-based distributions is planned to be added in future updates. 12 | 13 | ### Key Features 14 | 15 | - **User-Friendly Interface**: Utilizes Zenity to present a straightforward interface for selecting VM boot sources and configurations. 16 | - **Multiple Boot Options**: Supports booting VMs from connected devices, various file formats (.vhd, .img, .iso), and ISO images with virtual drives or physical devices. 17 | - **Dynamic RAM Configuration**: Allows users to specify the amount of RAM (in MB) allocated to the VM. 18 | - **BIOS and UEFI Support**: Provides options for booting in BIOS or UEFI mode. 19 | - **Error Handling**: Includes error handling to ensure smooth operation and user feedback throughout the VM setup process. 20 | 21 | ![QEMU-QuickBoot Interface](https://github.com/user-attachments/assets/1ac6dfcf-eeba-4276-8a6c-62dc26c513af) 22 | 23 | ## Installation & Execution 24 | 25 | ### Debian/Ubuntu 26 | ```bash 27 | sudo apt update 28 | sudo apt install qemu-system wget qemu-utils qemu-system-gui xdotool ovmf qemu-system zenity git orchis-gtk-theme 29 | git clone https://github.com/GlitchLinux/QEMU-QuickBoot.git 30 | cd QEMU-QuickBoot 31 | sudo bash QEMU-QuickBoot.sh 32 | ``` 33 | 34 | ### Arch Linux (Unstable, only BIOS boot works) 35 | ```bash 36 | sudo pacman -Syu 37 | sudo pacman -S qemu-full qemu-img libvirt virt-install virt-manager virt-viewer edk2 swtpm guestfs-tools libosinfo 38 | sudo systemctl enable virt${drv}d.service; 39 | sudo systemctl enable virt${drv}d{,-ro,-admin}.socket; 40 | sudo systemctl enable libvirtd.service 41 | git clone https://github.com/GlitchLinux/QEMU-QuickBoot.git 42 | cd QEMU-QuickBoot 43 | sudo bash QEMU-QuickBoot.sh 44 | ``` 45 | 46 | ### Dependencies 47 | - `qemu-system` 48 | - `wget` 49 | - `qemu-utils` 50 | - `qemu-system-gui` 51 | - `xdotool` 52 | - `ovmf` 53 | - `zenity` 54 | - `orchis-gtk-theme` 55 | 56 | ### Running the Script 57 | 58 | To run the script: 59 | 60 | sudo bash QEMU-QuickBoot.sh 61 | 62 | ### SSH Access to VM: 63 | Once the VM is running, you can SSH to it from the host machine. Use the following command to connect: 64 | 65 | ```bash 66 | ssh -p 2222 (user)@localhost 67 | ``` 68 | Replace (user) with your actual username. 69 | 70 | 71 | ## Boot Modes 72 | 73 | ### 1. Boot from Any Connected Device 74 | 75 | - **Description**: Boot the virtual machine directly from a connected device (USB drive, SD card, or internal/external SSD/HDD). 76 | - **Potential Use Cases**: Testing bootable storage media without a physical machine or system reboot, rapid deployment of virtual environments. 77 | 78 | ### 2. Boot from File (.vhd, .img, .iso) 79 | 80 | - **Description**: Boot a VM directly from any file, supporting formats like .vhd, .img, or an ISO file. 81 | - **Supported File Types**: `.qcow2`, `.iso`, `.qcow`, `.raw`, `.vmdk`, `.vdi`, `.vhdx`, `.vhd`, `.cloop`, `.qed`, `.parallels`, `.bochs`, `.dmg`, `.blkdebug` 82 | - **Potential Use Cases**: Quick setup for testing various file formats, booting any Linux live distro, WinPE ISO, etc. 83 | 84 | ### 3. ISO & Drive 85 | 86 | - **Description**: Combines booting from an ISO or IMG file as a virtual DVD with a virtual disk file or physical device as a virtual drive. 87 | - **Be Aware**: All physical devices are mounted as virtual internal drives in the VM. 88 | - **Potential Use Cases**: Installing an OS using a virtual DVD and configuring a separate virtual disk, creating portable systems on USB devices or SD cards, deploying rescue tools on crashed drives without rebooting. 89 | 90 | ## Prompt Order 91 | 92 | 1. **Boot Source Selection**: Choose between booting from a connected device, a file, or an ISO & Drive setup. 93 | 2. **Connected Device Boot**: List connected devices, choose a device for VM boot, select BIOS or UEFI boot mode. 94 | 3. **File Boot**: Choose a file for VM boot, select BIOS or UEFI boot mode, specify RAM amount. 95 | 4. **ISO & Drive Boot**: Choose an ISO/IMG file for virtual DVD, choose a virtual disk file or physical device for VM boot, select BIOS or UEFI boot mode. 96 | 5. **RAM Size Selection**: Enter the amount of RAM for the VM in megabytes (MB). 97 | 6. **VM Execution**: Display selected choices and start the QEMU VM. 98 | 7. **Repeat or Exit**: Prompt to QuickBoot another VM or terminate the script. 99 | 100 | ## Potential Use Cases 101 | 102 | - **Installing OS with Virtual DVD and Separate Virtual Disk**: For testing, development, and experimentation with various operating systems. 103 | - **Mimicking Real Hardware Setup**: Deploy an installer DVD alongside a dedicated virtual disk. 104 | - **Efficient OS Installation**: Install an OS to a virtual disk or second internal disk directly from your host desktop. 105 | - **Creating Portable Systems**: Install an OS on USB devices or SD cards for on-the-go environments. 106 | - **Deploying Rescue Tools**: Deploy rescue tools onto crashed drives without rebooting. 107 | 108 | These use cases showcase the versatility and convenience of QEMU-QuickBoot, making it an invaluable tool for various scenarios ranging from OS installations to system recovery and development tasks. 109 | 110 | ## License 111 | 112 | This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details. 113 | 114 | ## Contributing 115 | 116 | Feel free to submit issues or pull requests if you find any bugs or have suggestions for improvements. 117 | 118 | ## Author 119 | 120 | GLITCH LINUX 121 | 122 | www.glitchlinux.wtf 123 | info@glitchlinux.com 124 | 125 | Happy QuickBoot! 126 | --------------------------------------------------------------------------------