Add --download-only to the VM launchers
The option downloads the media a launcher would fetch automatically and exits without checking for QEMU, creating a VM disk or starting the VM: the base image for Debian, AlmaLinux and Fedora, and the VirtIO tools ISO for Windows 11. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YKxXLyiL7XJ3a9e8HmR2my
This commit is contained in:
1 parent
7912a1549e
commit
204051f930
5 files changed
+80
-21
No files matched your search
+12
-4
@@ -111,12 +111,13 @@ else:
|
||||
"/usr/local/share/qemu/edk2-i386-vars.fd",
|
||||
)
|
||||
daemonize = False
|
||||
download_only = False
|
||||
extra_args = []
|
||||
|
||||
|
||||
def usage(stream=sys.stdout):
|
||||
stream.write(f"""\
|
||||
Usage: {Path(sys.argv[0]).name} [--daemon] [--state-dir DIR] [-- QEMU_ARGUMENT ...]
|
||||
Usage: {Path(sys.argv[0]).name} [--daemon] [--download-only] [--state-dir DIR] [-- QEMU_ARGUMENT ...]
|
||||
|
||||
Start the Debian 13 virtual machine. A writable overlay is created in the state
|
||||
directory (default: .vm/debian13/), so the downloaded base image is never
|
||||
@@ -127,6 +128,7 @@ QEMU arguments override them, e.g. `-- -m 4G -smp 4`.
|
||||
|
||||
Options:
|
||||
--daemon Run in the background while keeping the graphical window
|
||||
--download-only Download the base image if it is missing, then exit
|
||||
--state-dir DIR Directory for the VM disk, seed ISO and runtime files
|
||||
(default: .vm/debian13; overrides VM_STATE_DIR)
|
||||
-h, --help Show this help
|
||||
@@ -151,6 +153,8 @@ while args:
|
||||
arg = args.pop(0)
|
||||
if arg == "--daemon":
|
||||
daemonize = True
|
||||
elif arg == "--download-only":
|
||||
download_only = True
|
||||
elif arg == "--state-dir":
|
||||
if not args:
|
||||
die(f"{arg} requires a directory argument.", 2)
|
||||
@@ -175,9 +179,10 @@ pid_file = state_dir / "qemu.pid"
|
||||
log_file = state_dir / "console.log"
|
||||
qemu_config = state_dir / "qemu.ini"
|
||||
|
||||
for command_name in (qemu_binary, "qemu-img"):
|
||||
if shutil.which(command_name) is None:
|
||||
die(f"{command_name} is not installed.")
|
||||
if not download_only:
|
||||
for command_name in (qemu_binary, "qemu-img"):
|
||||
if shutil.which(command_name) is None:
|
||||
die(f"{command_name} is not installed.")
|
||||
|
||||
if not base_image.is_file():
|
||||
if uses_shared_base_image:
|
||||
@@ -186,6 +191,9 @@ if not base_image.is_file():
|
||||
die(f"Debian base image was not found: {base_image}")
|
||||
if not base_image.is_file():
|
||||
die(f"downloader did not create: {base_image}")
|
||||
if download_only:
|
||||
print(f"Base image is ready: {base_image}")
|
||||
sys.exit(0)
|
||||
for firmware_file in (uefi_code, uefi_vars_template):
|
||||
if not firmware_file.is_file():
|
||||
die(f"required UEFI firmware was not found: {firmware_file}")
|
||||
|
||||
Reference in new issue
Block a user