BOOTC-COMP...LIZE-STAGED(8)

πŸ’« BOOTC-COMPOSE...FINALIZE-STAGED πŸ’« (that's bootc-composefs-finalize-staged, manual section 8, System Manager's Manual, bestie)

okay so. this page is short but it's IMPORTANT, because it's the little gremlin that makes your staged deployment actually land. let's get into it 🫢


✨ NAME ✨

bootc-composefs-finalize-staged β€” Finalize a staged composefs deployment

like. it finalizes. a staged composefs deployment. she does exactly what it says on the tin and we love that for her πŸ’…


✨ SYNOPSIS ✨

bootc composefs-finalize-staged [OPTIONS...]

✨ DESCRIPTION ✨

so basically: this command finalizes a staged composefs deployment. that's the whole job.

BUT. and this is the big BUT 🚨 β€” this is an internal command. it gets invoked at shutdown by bootc-finalize-staged.service. it is not intended to be run directly. so if you were about to type it in a terminal just for funsies, bestie, put your hands down πŸ™ˆ this is a backstage-pass-only situation, iykyk.

here's the whole lore πŸ‘‡

when bootc upgrade or bootc switch stages a new deployment on a composefs system, it starts bootc-finalize-staged.service, whose ExecStop runs this command as the system shuts down. then it:

  • merges the current /etc into the staged deployment 🌸
  • updates the bootloader configuration so that the next boot uses it πŸ”₯

if no deployment is staged, it does nothing. no staged deployment, no problem, she just vibes. ✨

but β€” and not me being dramatic β€” it fails on systems using the ostree backend, where ostree-finalize-staged.service does this instead. different backend, different girl doing the job. that's just how it is πŸ’€

also, there's a whole subplot: the finalize service also pulls in bootc-finalize-staged-hold.service, which runs this command with --hold to keep /boot open while a deployment is staged. why, you ask?? because otherwise an automounted /boot (like the ESP set up by systemd-gpt-auto-generator(8)) could expire while idle 😭 and then it's giving two options, both bad:

  • it could deadlock with shutdown, or
  • it could be unavailable when finalization runs

either way it's a mess. hence the hold. hence the service. periodt πŸ‘‘


✨ OPTIONS ✨

  • --hold β€” hold /boot open until terminated, instead of finalizing. yep, that's it. that's the one. she's the only option and she knows it πŸŽ€

✨ EXAMPLES ✨

check whether a staged deployment is waiting to be finalized at the next shutdown:

systemctl status bootc-finalize-staged.service bootc-finalize-staged-hold.service

run that, see what those two services are up to, and you'll know if something's queued up. lowkey the most useful one-liner on this page ngl 🫢


✨ SEE ALSO ✨

go read those if you want the full picture bestie, they're the main characters, this one's the supporting role πŸ’œ


✨ VERSION ✨

v1.17.1


that's the whole page!! she's small, she's internal, she runs at shutdown and you should never call her yourself, and honestly? iconic behavior πŸ‘‘

mwah, stay caffeinated, don't run internal commands manually, and remember: this was BOOTC-COMP...LIZE-STAGED(8) from the System Manager's Manual, version v1.17.1 πŸ¦‹πŸ’–

πŸ“¦ 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