|
| 1 | +# composefs backend |
| 2 | + |
| 3 | +Experimental features are subject to change or removal. Please |
| 4 | +do provide feedback on them. |
| 5 | + |
| 6 | +Tracking issue: <https://github.com/bootc-dev/bootc/issues/1190> |
| 7 | + |
| 8 | +## Overview |
| 9 | + |
| 10 | +The composefs backend is an experimental alternative storage backend that uses [composefs-rs](https://github.com/containers/composefs-rs) instead of ostree for storing and managing bootc system deployments. |
| 11 | + |
| 12 | +**Status**: Experimental. The composefs backend is under active development and not yet suitable for production use. The feature is currently gated behind the `composefs-backend` compile-time feature flag, which in current git main is enabled by default. |
| 13 | + |
| 14 | +## Key Benefits |
| 15 | + |
| 16 | +- **Native container integration**: Direct use of container image formats without the ostree layer |
| 17 | +- **UKI support**: First-class support for Unified Kernel Images (UKIs) and systemd-boot |
| 18 | +- **Sealed images**: Enables building cryptographically sealed, securely-bootable images |
| 19 | +- **Simpler architecture**: Reduces dependency on ostree as an implementation detail |
| 20 | + |
| 21 | +## Building Sealed Images |
| 22 | + |
| 23 | +### Using `just build-sealed` |
| 24 | + |
| 25 | +This is an entrypoint focused on *bootc development* itself - it builds bootc |
| 26 | +from source. |
| 27 | + |
| 28 | +```bash |
| 29 | +just build-sealed |
| 30 | +``` |
| 31 | + |
| 32 | +We are working on documenting individual steps to build a sealed image outside of |
| 33 | +this tooling. |
| 34 | + |
| 35 | +## How Sealed Images Work |
| 36 | + |
| 37 | +A sealed image includes: |
| 38 | +- A Unified Kernel Image (UKI) that combines kernel, initramfs, and boot parameters |
| 39 | +- The composefs fsverity digest embedded in the kernel command line |
| 40 | +- Secure Boot signatures on both the UKI and systemd-boot loader |
| 41 | + |
| 42 | +The UKI is placed in `/boot/EFI/Linux/` and includes the composefs digest in its command line: |
| 43 | +``` |
| 44 | +composefs=${COMPOSEFS_FSVERITY} root=UUID=... |
| 45 | +``` |
| 46 | + |
| 47 | +This enables the boot chain to verify the integrity of the root filesystem. |
| 48 | + |
| 49 | +## Installation |
| 50 | + |
| 51 | +When installing a composefs-backend system, use: |
| 52 | + |
| 53 | +```bash |
| 54 | +bootc install to-disk /dev/sdX |
| 55 | +``` |
| 56 | + |
| 57 | +**Note**: Sealed images will require fsverity support on the target filesystem by default. |
| 58 | + |
| 59 | +## Testing Composefs |
| 60 | + |
| 61 | +To run the composefs integration tests: |
| 62 | + |
| 63 | +```bash |
| 64 | +just test-composefs |
| 65 | +``` |
| 66 | + |
| 67 | +This builds a sealed image and runs the composefs test suite using `bcvk` (bootc VM tooling). |
| 68 | + |
| 69 | +## Current Limitations |
| 70 | + |
| 71 | +- **Experimental**: In particular, the on-disk formats are subject to change |
| 72 | +- **UX refinement**: The user experience for building and managing sealed images is still being improved |
| 73 | + |
| 74 | +## Related Issues |
| 75 | + |
| 76 | +- [#1190](https://github.com/bootc-dev/bootc/issues/1190) - composefs-native backend (main tracker) |
| 77 | +- [#1498](https://github.com/bootc-dev/bootc/issues/1498) - Sealed image build UX + implementation |
| 78 | +- [#1703](https://github.com/bootc-dev/bootc/issues/1703) - OCI config mismatch issues |
| 79 | +- [#20](https://github.com/bootc-dev/bootc/issues/20) - Unified storage (long-term goal) |
| 80 | +- [#806](https://github.com/bootc-dev/bootc/issues/806) - UKI/systemd-boot tracker |
| 81 | + |
| 82 | +## Additional Resources |
| 83 | + |
| 84 | +- See [filesystem.md](filesystem.md) for information about composefs in the standard ostree backend |
| 85 | +- See [bootloaders.md](bootloaders.md) for bootloader configuration details |
0 commit comments