BOOTC-INSTALL-CONFIG(5)

πŸ’– BOOTC-INSTALL-CONFIG(5) πŸ’–

okay bestie, so this is the manual page for bootc-install-config.toml β€” it lives in section 5 of the File Formats Manual, and it's literally the cheat sheet for how you customize your bootc install. grab a strawberry πŸ“ and let's get into it.


✨ NAME ✨

bootc-install-config.toml β€” no cap, that's the whole vibe of the name.


🌸 DESCRIPTION 🌸

So like. The bootc install process supports customization through TOML drop-in files, and they hang out in these directories:

  • /usr/lib/bootc/install
  • /usr/local/lib/bootc/install
  • /etc/bootc/install
  • /run/bootc/install

If the same filename shows up in multiple of these directories, the file in the later directory in that list wins β€” it takes precedence, periodt. Then the selected files get processed in alphanumerical filename order.

Fragments whose match_architectures includes the current architecture β€” or which just don't have that field at all β€” are merged. And values like the root filesystem type get overridden when a later fragment specifies them. But kargs and karg-deletes lists? Those get appended, not replaced. πŸ’…

The individual files all merge into one single final installation config. That's the whole point: it's supported for, like, a container base image to provide a default root filesystem type, and then that can be overridden in a derived container image. iconic behavior honestly.

install

This is the only defined toplevel table. πŸ‘‘

The install section supports these subfields:

  • block β€” An array of supported to-disk backends enabled by this base container image. If you don't specify it, this will just be direct. The only other supported value is tpm2-luks. The first value specified will be the default. To enable both, use block = ["direct", "tpm2-luks"].
  • filesystem β€” See below. πŸ‘€
  • kargs β€” An array of strings; this will be appended to the set of kernel arguments.
  • match_architectures β€” An array of strings; this filters the install config.
  • ostree β€” See below. πŸ‘€
  • stateroot β€” The stateroot name to use. Defaults to default.
  • root-mount-spec β€” A string specifying the root filesystem mount specification. For example, UUID=2e9f4241-229b-4202-8429-62d2302382e1 or LABEL=rootfs. If not provided, the UUID of the target filesystem will be used. An empty string signals to omit boot mount kargs entirely.
  • boot-mount-spec β€” A string specifying the /boot filesystem mount specification. If not provided and /boot is a separate mount, its UUID will be used. An empty string signals to omit boot mount kargs entirely.
  • discoverable-partitions β€” Boolean. When true, root discovery uses the Discoverable Partitions Specification via systemd-gpt-auto-generator and the root= kernel argument is omitted. This requires the bootloader to implement the Boot Loader Interface (BLI); systemd-boot always does, GRUB needs the bli module (available in newer builds). Defaults to true when using systemd-boot, false otherwise.
  • enforce-container-sigpolicy β€” A boolean that controls whether to enforce that containers-policy.json (see man containers-policy.json for the full search path) includes a default policy which requires signatures. When true, image pulls will be rejected if the policy file specifies insecureAcceptAnything as the default. Defaults to false. This is equivalent to the --enforce-container-sigpolicy CLI flag.

filesystem

There is one valid field:

  • root β€” An instance of "filesystem-root"; see below.

filesystem-root

There is one valid field:

  • type β€” This can be any basic Linux filesystem with a mkfs.$fstype. For example, ext4, xfs, etc.

ostree

Configuration options for the ostree repository. There is one valid field:

  • bls-append-except-default β€” A string of kernel arguments that will be appended to Boot Loader Spec entries, except for the default entry. This is useful for configuring arguments that should only apply to non-default deployments.

bootupd

Configuration options for bootupd, responsible of setting up the bootloader. There is only one valid field:

  • skip-boot-uuid β€” A boolean that controls whether to skip writing partition UUIDs to the bootloader configuration. When true, bootupd is invoked with --with-static-configs instead of --write-uuid. Defaults to false (UUIDs are written by default).

πŸ¦‹ Examples πŸ¦‹

[install.filesystem.root]
type = "xfs"

[install]
kargs = ["nosmt", "console=tty0"]
stateroot = "myos"
root-mount-spec = "LABEL=rootfs"
boot-mount-spec = "UUID=abcd-1234"
enforce-container-sigpolicy = true

[install.ostree]
bls-append-except-default = 'grub_users=""'

Enable DPS auto-discovery for root (requires a BLI-capable bootloader):

[install]
discoverable-partitions = true

πŸ‘€ SEE ALSO πŸ‘€

  • bootc(1)

🌈 VERSION 🌈

v1.17.1


and that's the whole page bestie 🫢 this was File Formats Manual energy, version v1.17.1, brought to you by the BOOTC-INSTALL-CONFIG(5) girlies. go forth and merge your fragments in alphanumerical order, you absolute icon. πŸ’…βœ¨πŸŽ€

πŸ“¦ where this page comes from
  • fedora 43: bootc 1.17.1-1.fc43 Β· Apache-2.0 AND BSD-3-Clause AND MIT AND (Apache-2.0 OR BSL-1.0) AND (Apache-2.0 OR MIT) AND (Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT) AND (Unlicense OR MIT)
  • fedora 44: bootc 1.17.1-1.fc44 Β· Apache-2.0 AND BSD-3-Clause AND MIT AND (Apache-2.0 OR BSL-1.0) AND (Apache-2.0 OR MIT) AND (Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT) AND (Unlicense OR MIT)
  • πŸ’– girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms