from mkosi.architecture import Architecture
from mkosi.archive import extract_tar, make_cpio, make_tar
+from mkosi.burn import run_burn
from mkosi.config import (
BiosBootloader,
Bootloader,
if args.verb == Verb.coredumpctl:
run_coredumpctl(args, last)
+
+ if args.verb == Verb.burn:
+ run_burn(args, last)
--- /dev/null
+# SPDX-License-Identifier: LGPL-2.1+
+
+import os
+import sys
+
+from mkosi.config import MkosiArgs, MkosiConfig, OutputFormat
+from mkosi.log import complete_step, die
+from mkosi.run import run
+
+
+def run_burn(args: MkosiArgs, config: MkosiConfig) -> None:
+ if config.output_format not in (OutputFormat.disk, OutputFormat.esp):
+ die(f"{config.output_format} images cannot be burned to disk")
+
+ fname = config.output_dir_or_cwd() / config.output
+
+ if len(args.cmdline) != 1:
+ die("Expected device argument.");
+
+ device = args.cmdline[0]
+
+ cmd = [
+ "systemd-repart",
+ "--no-pager",
+ "--pretty=no",
+ "--offline=yes",
+ "--empty=force",
+ "--dry-run=no",
+ f"--copy-from={fname}",
+ device,
+ ]
+
+ with complete_step("Burning 🔥🔥🔥 to medium…", "Burnt. 🔥🔥🔥"):
+ run(
+ cmd,
+ stdin=sys.stdin,
+ stdout=sys.stdout,
+ env=os.environ,
+ log=False,
+ )
documentation = enum.auto()
journalctl = enum.auto()
coredumpctl = enum.auto()
+ burn = enum.auto()
def supports_cmdline(self) -> bool:
- return self in (Verb.build, Verb.shell, Verb.boot, Verb.qemu, Verb.ssh, Verb.journalctl, Verb.coredumpctl)
+ return self in (Verb.build, Verb.shell, Verb.boot, Verb.qemu, Verb.ssh, Verb.journalctl, Verb.coredumpctl, Verb.burn)
def needs_build(self) -> bool:
- return self in (Verb.build, Verb.shell, Verb.boot, Verb.qemu, Verb.serve, Verb.journalctl, Verb.coredumpctl)
+ return self in (Verb.build, Verb.shell, Verb.boot, Verb.qemu, Verb.serve, Verb.journalctl, Verb.coredumpctl, Verb.burn)
def needs_root(self) -> bool:
- return self in (Verb.shell, Verb.boot)
+ return self in (Verb.shell, Verb.boot, Verb.burn)
class ConfigFeature(StrEnum):
`mkosi [options…] serve`
+`mkosi [options…] burn <device>`
+
`mkosi [options…] bump`
`mkosi [options…] genkey`
OS images, for example via `machinectl pull-raw …` and `machinectl
pull-tar …`.
+`burn <device>`
+
+: This builds the image if it is not built yet, and then writes it to the
+ specified block device. The partition contents are written as-is, but the GPT
+ partition table is corrected to match sector and disk size of the specified
+ medium.
+
`bump`
: Bumps the image version from `mkosi.version` and writes the resulting