qemu_kvm: ConfigFeature
qemu_vsock: ConfigFeature
qemu_swtpm: ConfigFeature
+ qemu_cdrom: bool
qemu_args: Sequence[str]
preset: Optional[str]
parse=config_parse_feature,
help="Configure whether to use qemu with swtpm or not",
),
+ MkosiConfigSetting(
+ dest="qemu_cdrom",
+ metavar="BOOLEAN",
+ nargs="?",
+ section="Host",
+ parse=config_parse_boolean,
+ help="Attach the image as a CD-ROM to the virtual machine",
+ ),
MkosiConfigSetting(
dest="qemu_args",
metavar="ARGS",
if not any(s.startswith("SYSTEMD_SULOGIN_FORCE=") for s in args.kernel_command_line_extra):
cmdline += ["SYSTEMD_SULOGIN_FORCE=1"]
+ if args.qemu_cdrom:
+ # CD-ROMs are read-only so tell systemd to boot in volatile mode.
+ cmdline += ["systemd.volatile=yes"]
+
for s in args.kernel_command_line_extra:
key, sep, value = s.partition("=")
if " " in value:
QEMU Use KVM: {config.qemu_kvm}
QEMU Use VSock: {config.qemu_vsock}
QEMU Use Swtpm: {config.qemu_swtpm}
+ QEMU Use CD-ROM: {yes_no(config.qemu_cdrom)}
QEMU Extra Arguments: {line_join_list(config.qemu_args)}
"""
"-drive", f"file={ovmf_vars.name},if=pflash,format=raw",
]
- if config.ephemeral:
+ if config.qemu_cdrom and config.output_format == OutputFormat.disk:
+ # CD-ROM devices have sector size 2048 so we transform the disk image into one with sector size 2048.
+ src = (config.output_dir / config.output).resolve()
+ fname = src.parent / f"{src.name}-{uuid.uuid4().hex}"
+ run(["systemd-repart",
+ "--definitions", "",
+ "--no-pager",
+ "--pretty=no",
+ "--offline=yes",
+ "--empty=create",
+ "--size=auto",
+ "--sector-size=2048",
+ "--copy-from", src,
+ fname])
+ elif config.ephemeral:
fname = stack.enter_context(copy_ephemeral(config, config.output_dir / config.output))
else:
fname = config.output_dir / config.output
- if config.output_format == OutputFormat.disk:
- run([
- "systemd-repart",
- "--definitions", "",
- "--no-pager",
- "--size", "8G",
- "--pretty", "no",
- "--offline", "yes",
- fname,
- ])
+ if config.output_format == OutputFormat.disk and not config.qemu_cdrom:
+ run(["systemd-repart",
+ "--definitions", "",
+ "--no-pager",
+ "--size=8G",
+ "--pretty=no",
+ "--offline=yes",
+ fname])
# Debian images fail to boot with virtio-scsi, see: https://github.com/systemd/mkosi/issues/725
if config.output_format == OutputFormat.cpio:
"-initrd", fname,
"-append", " ".join(config.kernel_command_line + config.kernel_command_line_extra)]
- cmdline += ["-drive", f"if=none,id=hd,file={fname},format=raw",
+ cmdline += ["-drive", f"if=none,id=mkosi,file={fname},format=raw",
"-device", "virtio-scsi-pci,id=scsi",
- "-device", "scsi-hd,drive=hd,bootindex=1"]
+ "-device", f"scsi-{'cd' if config.qemu_cdrom else 'hd'},drive=mkosi,bootindex=1"]
if config.qemu_swtpm != ConfigFeature.disabled and shutil.which("swtpm") is not None:
sock = stack.enter_context(start_swtpm())