BOOTC-INST...STING-ROOT(8)
π BOOTC-INSTALL-TO-EXISTING-ROOT π
okay bestie, gather round, because this is the bootc subcommand that installs onto the root filesystem you're already standing on. It lives in section 8 of the System Manager's Manual, so yes it's a big-girl system administration page, and yes we're gonna make it cute. π
β¨ NAME β¨
bootc-install-to-existing-root β Install to the host root filesystem. that's it, that's the whole vibe. π¦
πΈ SYNOPSIS πΈ
bootc install to-existing-root [OPTIONS...] [ROOT_PATH]
π DESCRIPTION π
Install to the host root filesystem. periodt.
This is a variant of install to-filesystem that's designed to install "alongside" the running host root filesystem. So like, right now, as of today: the host root filesystem's /boot partition will be wiped π but the content of the existing root will otherwise be retained, and it will need to be cleaned up if you want it gone once you've rebooted into the new root.
no cap, /boot is getting yeeted. plan accordingly. π
π§ Managing configuration: before and after reboot
When you're using to-existing-root, there are two distinct scenarios for managing configuration files, and they are NOT the same scenario, bestie:
- Before rebooting: Injecting new configuration into the newly installed system
- After rebooting: Migrating configuration from the old system to the new system
π Before reboot: Injecting new configuration
If you need to inject new configuration files β think custom /etc/fstab entries, systemd mount units, or other config β into the newly installed system before rebooting, mount it with bootc-install-mount(8) and modify it through the mounted view. For example, to add a systemd mount unit:
mkdir /mnt/installed
bootc install mount --sysroot /target --latest /mnt/installed
vi /mnt/installed/etc/systemd/system/data.mount
umount -R /mnt/installed
β Injecting kernel arguments for local state
A better approach (lowkey the superior one, fr fr) for machine-local configuration like filesystem mounts is to inject kernel arguments during installation. Kernel arguments are ideal for local/machine-specific state in a bootc system.
For filesystem mounts, use systemd.mount-extra instead of /etc/fstab:
# Add a mount via kernel argument (preferred over /etc/fstab)
bootc install to-existing-root \
--karg="systemd.mount-extra=UUID=<uuid>:/data:xfs:defaults"
The systemd.mount-extra syntax is: source:path:type:options
You can also inject other local kernel arguments for machine-specific configuration:
# Add console settings for serial access
bootc install to-existing-root --karg="console=ttyS0,115200"
# Add storage-specific options
bootc install to-existing-root --karg="rootflags=subvol=root"
This approach is cleaner than editing configuration files because kernel arguments are explicitly designed for local/machine-specific state in a bootc system. it's giving intended usage. π
Note: In the future, this functionality will be provided via a dedicated bootc API to make finding and modifying the deployment more straightforward.
π¦ After reboot: Migrating data from the old system
After rebooting into the new bootc system, the previous root filesystem data is accessible at /sysroot β that's the "physical root". This lets you migrate data from the old system to the new one. slay.
Important: Any configuration data from/etcthat you want to use in the new system must be manually copied from/sysroot/etcto/etcafter rebooting. There is currently no automated mechanism for migrating this data. you're on your own, babe. π
For example, to migrate configuration after rebooting:
# After rebooting into the new system
# Copy network configuration from the old system
cp /sysroot/etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/
# Copy application configuration
cp -r /sysroot/etc/myapp /etc/
# Identify the old resolver policy, then migrate its authoritative
# network manager profiles or resolver configuration
stat -c '%F %N' /sysroot/etc/resolv.conf
# For user accounts, use proper tools
vipw # Carefully review and merge users from /sysroot/etc/passwd
This applies to network configurations, user accounts, application settings, and other system configuration stored in /etc. Review files in /sysroot/etc and manually copy or merge what you need into /etc.
Note: A generated/etc/resolv.confshould not normally be copied or edited directly. It may be a dangling symlink after reboot, or it may contain only a local resolver address such as127.0.0.53, rather than the upstream DNS servers. Migrate the authoritative configuration instead β things like NetworkManager connection profiles or resolver drop-ins β into the configuration used by the new system. If both systems intentionally use a hand-managed static file, it may instead be selectively migrated. See DNS and/etc/resolv.conf(seebootc-dns(7)) for details. π
Note: For filesystem mounts from/etc/fstabin the old system, consider using kernel arguments (viasystemd.mount-extra) injected before reboot instead of migrating the fstab entries. See the "Injecting kernel arguments" section above. π
π OPTIONS π
ROOT_PATHβ Path to the mounted root; this is now not necessary to provide. Historically it was necessary to ensure the host rootfs was mounted at here via e.g.-v /:/target. (rip to the old ways π«‘)--replace=REPLACEβ Configure how existing data is treated.
Possible values:
wipealongside
Default: alongside
--source-imgref=SOURCE_IMGREFβ Install the system from an explicitly given source.--target-transport=TARGET_TRANSPORTβ The transport; e.g.oci,oci-archive,containers-storage. Defaults toregistry.
Default: registry
--target-imgref=TARGET_IMGREFβ Specify the image to fetch for subsequent updates.--enforce-container-sigpolicyβ This is the inverse of the previous--target-no-signature-verification(which is now a no-op). Enabling this option enforces thatcontainers-policy.json(seeman containers-policy.jsonfor the full search path) includes a default policy which requires signatures. π--run-fetch-checkβ Verify the image can be fetched from the bootc image. Updates may fail when the installation host is authenticated with the registry but the pull secret is not in the bootc image.--skip-fetch-checkβ Verify the image can be fetched from the bootc image. Updates may fail when the installation host is authenticated with the registry but the pull secret is not in the bootc image.--disable-selinuxβ Disable SELinux in the target (installed) system. π--karg=KARGβ Add a kernel argument. This option can be provided multiple times.--karg-delete=KARG_DELETEβ Remove a kernel argument. This option can be provided multiple times.--root-ssh-authorized-keys=ROOT_SSH_AUTHORIZED_KEYSβ The path to anauthorized_keysthat will be injected into therootaccount. π--generic-imageβ Perform configuration changes suitable for a "generic" disk image. At the moment: (yes bestie, that's the whole description, it just trails off like that π)--bound-images=BOUND_IMAGESβ How should logically bound images be retrieved.
Possible values:
storedskippull
Default: stored
--stateroot=STATEROOTβ The stateroot name to use. Defaults todefault.--bootupd-skip-boot-uuidβ Don't pass--write-uuidto bootupd during bootloader installation.--bootloader=BOOTLOADERβ The bootloader to use.
Possible values:
grubgrub-ccsystemdnone
--acknowledge-destructiveβ Accept that this is a destructive action and skip a warning timer. β οΈ (the warning timer is there for a reason bestie, this flag is you saying "yes queen I know")--cleanupβ Add thebootc-destructive-cleanupsystemd service to delete files from the previous install on first boot. π§Ή--composefs-backendβ Use the composefs backend instead of ostree. This is the default for images with a UKI, and for images with/usr/lib/composefs/setup-root-conf.tomland no ostreeprepare-root.conf.
Default: false
--allow-missing-verityβ Make fs-verity validation optional in case the filesystem doesn't support it (composefs backend only).
Default: false
--uki-addon=UKI_ADDONβ Name of the UKI addons to install without the".efi.addon"suffix. This option can be provided multiple times if multiple addons are to be installed (composefs backend only).
π VERSION π
v1.17.1
and that's the whole page, bestie!! πβ¨ this manual page is part of the System Manager's Manual, and this particular version is v1.17.1 β go off, bootc. now go install responsibly, acknowledge that warning timer, and copy your /etc from /sysroot like the icon you are. mwah. πππ«Ά
π¦ 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