All Projects → coreos → bootupd

coreos / bootupd

Licence: other
Bootloader updater

Programming Languages

rust
11053 projects
shell
77523 projects
Makefile
30231 projects
Dockerfile
14818 projects

Projects that are alternatives of or similar to bootupd

BTT SKR 13 14 14T SD-DFU-Bootloader
This is a repository of BIGTREETECH bootloaders. The originals are stored under the bootloader_bin/backed_up_original_bootloaders/ directory. This repository also has a bootloader for the SKR E3 TURBO to fix the high pitch sound coming out of the CR10_STOCKDISPLAY it is located on the bootloder_bin/compiled_bootloader_bin/ directory.
Stars: ✭ 65 (+80.56%)
Mutual labels:  bootloaders
awesome-immutable
A list of resources for people who want to investigate image-based Linux desktops
Stars: ✭ 184 (+411.11%)
Mutual labels:  ostree
sodalite
🪨 A Pantheon experience for rpm-ostree
Stars: ✭ 93 (+158.33%)
Mutual labels:  ostree
fullmetalupdate
FullMetalUpdate Python client application.
Stars: ✭ 19 (-47.22%)
Mutual labels:  ostree
ostree-rs-ext
Rust library with higher level APIs on top of the core ostree API
Stars: ✭ 38 (+5.56%)
Mutual labels:  ostree
rustBoot
rustBoot is a standalone bootloader written entirely in `Rust`, designed to run on anything from a microcontroller to a system on chip. It can be used to boot into bare-metal firmware or Linux.
Stars: ✭ 99 (+175%)
Mutual labels:  bootloaders
build-atomic-host
Ansible Playbook to automate building own Atomic Host with Customized Packages
Stars: ✭ 15 (-58.33%)
Mutual labels:  ostree
appcenter
🚀 App Center for Liri OS
Stars: ✭ 26 (-27.78%)
Mutual labels:  ostree

bootupd: Distribution-independent updates for bootloaders

Today many Linux systems handle updates for bootloader data in an inconsistent and ad-hoc way. For example, on Fedora and Debian, a package manager update will update UEFI binaries in /boot/efi, but not the BIOS MBR data.

Transactional/"image" update systems like OSTree and dual-partition systems like the Container Linux update system are more consistent: they normally cover kernel/userspace but not anything related to bootloaders.

The reason for this is straightforward: performing bootloader updates in an "A/B" fashion requires completely separate nontrivial logic from managing the kernel and root filesystem. Today OSTree e.g. makes the choice that it does not update /boot/efi (and also doesn't update the BIOS MBR).

The goal of this project is to be a cross-distribution, OS update system agnostic tool to manage updates for things like:

  • /boot/efi
  • x86 BIOS MBR
  • Other architecture bootloaders

This project originated in this Fedora CoreOS github issue.

The scope is otherwise limited; for example, bootupd will not manage anything related to the kernel such as kernel arguments; that's for tools like grubby and ostree.

Status

Currently a work in progress and is not ready to ship for production updates, but early feedback on the design is appreciated!

Relationship to other projects

dbxtool

dbxtool manages updates to the Secure Boot database - bootupd will likely need to perform any updates to the shimx64.efi binary before dbxtool.service starts. But otherwise they are independent.

fwupd

bootupd could be compared to fwupd which is a project that exists today to update hardware device firmware - things not managed by e.g. apt/zypper/yum/rpm-ostree update today.

fwupd comes as a UEFI binary today, so bootupd could take care of updating fwupd but today fwupd handles that itself. So it's likely that bootupd would only take care of GRUB and shim. See discussion in this issue.

systemd bootctl

systemd bootctl can update itself; this project would probably just proxy that if we detect systemd-boot is in use.

Other goals

One idea is that bootupd could help support redundant bootable disks. For various reasons it doesn't really work to try to use RAID1 for an entire disk; the ESP must be handled specially. bootupd could learn how to synchronize multiple EFI system partitions from a primary.

More details on rationale and integration

A notable problem today for rpm-ostree based systems is that rpm -q shim-x64 is misleading because it's not actually updated in place.

Particularly this commit makes things clear - the data from the RPM goes into /usr (part of the OSTree), so it doesn't touch /boot/efi. But that commit didn't change how the RPM database works (and more generally it would be technically complex for rpm-ostree to change how the RPM database works today).

What we ultimately want is that rpm -q shim-x64 returns "not installed" - because it's not managed by RPM or by ostree. Instead one would purely use bootupctl to manage it. However, it might still be built as an RPM, just not installed that way. The RPM version numbers would be used for the bootupd version associated with the payload, and ultimately we'd teach rpm-ostree compose tree how to separately download bootloaders and pass them to bootupctl backend.

Questions and answers

  • Why is bootupd not part of ostree?

A key advertised feature of ostree is that updates are truly transactional. There's even a a test case that validates forcibly pulling the power during OS updates. A simple way to look at this is that on an ostree-based system there is no need to have a "please don't power off your computer" screen. This in turn helps administrators to confidently enable automatic updates.

Doing that for the bootloader (i.e. bootupd's domain) is an entirely separate problem. There have been some ideas around how we could make the bootloaders use an A/B type scheme (or at least be more resilient), and perhaps in the future bootupd will use some of those.

These updates hence carry different levels of risk. In many cases actually it's OK if the bootloader lags behind; we don't need to update every time.

But out of conservatism currently today for e.g. Fedora CoreOS, bootupd is disabled by default. On the other hand, if your OS update mechanism isn't transactional, then you may want to enable bootupd by default.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].