BOOTC-INSTALL-MOUNT(8)
π BOOTC-INSTALL-MOUNT π
okay bestie, welcome to bootc-install-mount, a page from the System Manager's Manual (yes it's section 8, yes it's giving sysadmin royalty π). The whole vibe here? Mounting an installed deployment into a directory that you own, no cap.
β¨ NAME β¨
bootc-install-mount β mount an installed deployment into a caller-owned directory π«Ά
πΈ SYNOPSIS πΈ
bootc install mount --sysroot=SYSROOT --latest [--read-only] TARGET
π¦ DESCRIPTION π¦
So here's the tea π: this command mounts the deployment from an offline physical sysroot β like the one you literally just made with bootc install to-filesystem β over at TARGET. Both the OSTree and composefs backends are supported, love that for us. TARGET is an absolute path to a directory, and just like with mount(8), whatever's already sitting there gets hidden π (bootc will warn you if it's not empty, because it's polite like that).
A deployment selector is required, and rn the only one we have is --latest. Also, for now the sysroot has to contain exactly one deployment, exactly like it does right after installation β otherwise bootc refuses to guess which one you mean, and honestly? fair. Requiring the selector leaves room to pick among multiple deployments in the future without changing what your existing invocations mean. forward compatible queen π
The mount stays in the caller's mount namespace after this command exits. bootc does not create a container, a chroot, or a private mount namespace. it's just... there. yours. π
The root follows what the initramfs does at boot:
- For composefs, it's the deployment's image.
- For OSTree, it's the deployment's composefs image (
.ostree.cfs), mounted the wayostree-prepare-root(1)does β unlessprepare-root.confsetscomposefs.enabled = no, or the deployment has no image, in which case it's the deployment directory itself.
And the differences from ostree-prepare-root, bestie, listen up π: bootc also uses the image when composefs.enabled is unset, it does not consult kernel arguments, and for signed it only requires fs-verity without checking the commit signature. periodt.
The deployment root and /usr are always read-only. The persistent /etc and /var are writable β unless you pass --read-only. The caller (that's you π) owns the resulting mount tree and should clean it up recursively with umount -R.
/etc and /var get set up the way the deployment's root setup will mount them at boot: for composefs as configured by bootc-setup-root-conf(5), and for OSTree following etc.transient in prepare-root.conf. A transient /etc is a fresh overlay of the image's /etc, so changes to it get discarded on unmount β exactly like they would on reboot. A transient root (root.transient) is not applied; the root stays read-only. sorry not sorry π§
/var is always the deployment's state directory on SYSROOT. bootc does not go looking in the image or its configuration (like /etc/fstab or systemd mount units) for a separate /var filesystem, and it does not consider kernel arguments such as systemd.volatile. If your installation put /var on its own partition, you gotta mount that on top of TARGET/var yourself. you got this π«‘
β οΈ real talk: plainchroot(1)intoTARGETis not enough to run programs from the deployment β it sets up no/proc,/sys,/devor/run. Use a tool that provides those, likebwrap,podman run --rootfs, orsystemd-nspawn(1). don't skip this part bestie π
π OPTIONS π
TARGETβ the directory that receives the deployment mount. This argument is required π―--sysroot=SYSROOTβ offline target sysroot β¨--latestβ mount the latest deployment. currently the sysroot must contain exactly one π--read-onlyβ mount/etcand/varread-only too. the deployment root is always read-only π
π EXAMPLES π
Mount an installation and modify its persistent configuration and state β a whole glow-up for your config files:
mkdir /mnt/installed
bootc install mount --sysroot /mnt/sysroot --latest /mnt/installed
install -D -m 0644 hostname /mnt/installed/etc/hostname
umount -R /mnt/installed
π SEE ALSO π
β VERSION β
v1.17.1
and that's the whole page, bestie π huge shoutout to the System Manager's Manual for hosting this banger, and to version v1.17.1 for being the moment. go mount something iconic. slay π¦β¨
π¦ 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