lib/deploy: Add support for overlay initrds
authorJonathan Lebon <jonathan@jlebon.com>
Mon, 17 Aug 2020 13:48:18 +0000 (09:48 -0400)
committerJonathan Lebon <jonathan@jlebon.com>
Wed, 30 Sep 2020 17:29:32 +0000 (13:29 -0400)
commit81b13da8e35e18cfb445f66bf365420aa0e9fa0a
tree108985e5bdc16ca7b48ae0777fd8bb6e8ffd9193
parent40fea4c44390116095841ee11b4d336195e56330
lib/deploy: Add support for overlay initrds

In FCOS and RHCOS, the need to configure software in the initramfs has
come up multiple times. Sometimes, using kernel arguments suffices.
Other times, it really must be a configuration file. Rebuilding the
initramfs on the client-side however is a costly operation. Not only
does it add complexity to the update workflow, it also erodes a lot of
the value obtained from using the baked "blessed" initramfs from the
tree itself.

One elegant way to address this is to allow specifying multiple
initramfses. This is supported by most bootloaders (notably GRUB) and
results in each initrd being overlayed on top of each other.

This patch allows libostree clients to leverage this so that they can
avoid regenerating the initramfs entirely. libostree itself is agnostic
as to what kind and how much data overlay initrds contain. It's up to
the clients to enforce such boundaries.

To implement this, we add a new ostree_sysroot_stage_overlay_initrd
which takes a file descriptor and returns a checksum. Then users can
pass these checksums when calling the deploy APIs via the new array
option `overlay_initrds`. We copy these files into `/boot` and add them
to the BLS as another `initrd` entry.
apidoc/ostree-sections.txt
src/libostree/libostree-devel.sym
src/libostree/ostree-deployment-private.h
src/libostree/ostree-deployment.c
src/libostree/ostree-sysroot-cleanup.c
src/libostree/ostree-sysroot-deploy.c
src/libostree/ostree-sysroot-private.h
src/libostree/ostree-sysroot.c
src/libostree/ostree-sysroot.h
src/ostree/ot-admin-builtin-deploy.c
tests/kolainst/destructive/overlay-initrds.sh [new file with mode: 0755]