BOOTC-INSTALL-MOUNT(8)

πŸ“¦
version 1.17.1 Β· 3 versions
, in fedora 43, fedora 44

πŸ’… 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 way ostree-prepare-root(1) does β€” unless prepare-root.conf sets composefs.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: plain chroot(1) into TARGET is not enough to run programs from the deployment β€” it sets up no /proc, /sys, /dev or /run. Use a tool that provides those, like bwrap, podman run --rootfs, or systemd-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 /etc and /var read-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 πŸŽ€

bootc(8), bootc-install(8)


⭐ 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