Skip to content

Commit daca60a

Browse files
committed
docs: add Arch Linux to README and DESIGN
- Available Images table: add three arch-latest entries (grub, uki, uki-sb) with a note that rolling release and GRUB+SB is unsupported - Quick Start / Building a Custom Image: add Arch pacman snippet - Repository Layout: add Containerfile.arch, update example Containerfile description from stub to template - DESIGN.md installer section: note Arch uses grub-mkstandalone (same as Ubuntu), document GRUB+SB unavailability on Arch, confirm UKI+SB works
1 parent 925c29d commit daca60a

2 files changed

Lines changed: 30 additions & 18 deletions

File tree

DESIGN.md

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -124,21 +124,24 @@ the container itself — no separate image reference needed at install time.
124124
Three EFI boot paths are supported:
125125

126126
- **Default (GRUB):** on Fedora, runs `grub2-install --target=x86_64-efi`; on
127-
Ubuntu/Debian (which do not have `grub2-install`), builds a self-contained EFI
128-
binary with `grub-mkstandalone` and generates a traditional `menuentry`-based
129-
`grub.cfg` (Ubuntu does not ship `blscfg.mod`). Works on any EFI system;
130-
rejected by firmware with Secure Boot enabled.
127+
Ubuntu/Debian and Arch (which have `grub` rather than `grub2`), builds a
128+
self-contained EFI binary with `grub-mkstandalone` and generates a traditional
129+
`menuentry`-based `grub.cfg`. Works on any EFI system; rejected by firmware
130+
with Secure Boot enabled.
131131
- **`--secure-boot` (GRUB + SB):** copies the distro-signed shim + GRUB from
132132
`/usr/share/efi/EFI/<distro>/` (preserved in the base image at build time) to
133133
the ESP. The auto-detected distro subdirectory ensures the signed GRUB's
134134
compiled-in search prefix matches. No custom key enrollment required — the
135135
Microsoft-signed shim trusts the distro-signed GRUB out of the box.
136+
**Not available on Arch Linux** — Arch does not ship a signed shim or signed
137+
GRUB EFI binary in official repositories (`shim-signed` is AUR-only).
136138
- **`--uki --secure-boot` (UKI + SB):** generates a self-signed key pair (or
137139
accepts `--sb-key`/`--sb-cert`), signs systemd-boot and the UKI `.efi` with
138140
`sbsign`, and installs signed systemd-boot directly as `BOOTx64.EFI` — no
139141
shim. The firmware verifies binaries directly against its Signature Database
140142
(db). The signing cert must be enrolled in the db once; the key is persisted
141-
in `/var/lib/cbootc/` so `cbootc upgrade` can re-sign future UKIs.
143+
in `/var/lib/cbootc/` so `cbootc upgrade` can re-sign future UKIs. Supported
144+
on all three distros including Arch.
142145

143146
## Command Surface
144147

README.md

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,11 @@ See [DESIGN.md](DESIGN.md) for rationale and architecture.
2727
| `ghcr.io/henrywang/composefs-os:ubuntu-26.04` | GRUB (BLS Type 1) | Working |
2828
| `ghcr.io/henrywang/composefs-os:ubuntu-26.04-uki` | systemd-boot + UKI (BLS Type 2) | Working |
2929
| `ghcr.io/henrywang/composefs-os:ubuntu-26.04-uki-sb` | systemd-boot + UKI + Secure Boot | Working |
30-
| Arch Linux || Planned |
30+
| `ghcr.io/henrywang/composefs-os:arch-latest` | GRUB (BLS Type 1) | Working |
31+
| `ghcr.io/henrywang/composefs-os:arch-latest-uki` | systemd-boot + UKI (BLS Type 2) | Working |
32+
| `ghcr.io/henrywang/composefs-os:arch-latest-uki-sb` | systemd-boot + UKI + Secure Boot | Working |
33+
34+
> **Note:** Arch images use a rolling release tag (`arch-latest`). GRUB + Secure Boot is not available for Arch — Arch does not ship a signed shim or signed GRUB EFI binary in official repositories (`shim-signed` is AUR-only). Use the `-uki-sb` variant instead.
3135
3236

3337
## Quick Start
@@ -159,14 +163,18 @@ RUN dnf install -y vim htop && dnf clean all
159163
FROM ghcr.io/henrywang/composefs-os:ubuntu-26.04
160164
RUN apt-get install -y vim htop && apt-get clean
161165

166+
# Arch Linux (rolling)
167+
FROM ghcr.io/henrywang/composefs-os:arch-latest
168+
RUN pacman -S --noconfirm --needed vim htop && pacman -Scc --noconfirm
169+
162170
# Use COPY (not RUN echo) for /etc/hostname: buildah bind-mounts a synthetic
163171
# /etc/hostname into every RUN container, so writes via RUN are silently lost.
164172
COPY <<EOF /etc/hostname
165173
myhost
166174
EOF
167175
```
168176

169-
Use `examples/fedora/Containerfile` or `examples/ubuntu/Containerfile` as full templates.
177+
Use `examples/fedora/Containerfile`, `examples/ubuntu/Containerfile`, or `examples/arch/Containerfile` as full templates.
170178

171179
## In-System Management
172180

@@ -199,24 +207,25 @@ survives upgrades. `cbootc-update.timer` (enabled in the base image) runs
199207
```
200208
composefs-os/
201209
Containerfile.fedora Builds Fedora 44 base images (--target grub | uki | uki-secureboot)
202-
Containerfile.ubuntu Builds Ubuntu 26.04 base images (--target grub | uki | uki-secureboot)
203-
src/ cbootc source (Rust)
210+
Containerfile.ubuntu Builds Ubuntu 26.04 base images (--target grub | uki | uki-secureboot)
211+
Containerfile.arch Builds Arch Linux base images (--target grub | uki | uki-secureboot)
212+
src/ cbootc source (Rust)
204213
units/
205-
cbootc-update.service Systemd service for automatic upgrades
206-
cbootc-update.timer Systemd timer (daily, randomised delay)
214+
cbootc-update.service Systemd service for automatic upgrades
215+
cbootc-update.timer Systemd timer (daily, randomised delay)
207216
examples/
208217
fedora/
209-
Containerfile Template for derived Fedora images
218+
Containerfile Template for derived Fedora images
210219
ubuntu/
211-
Containerfile Template for derived Ubuntu 26.04 images
220+
Containerfile Template for derived Ubuntu 26.04 images
212221
arch/
213-
Containerfile Arch Linux (stub — not yet functional)
222+
Containerfile Template for derived Arch Linux images
214223
tests/
215-
e2e.py QEMU-based end-to-end test suite
224+
e2e.py QEMU-based end-to-end test suite
216225
.github/workflows/
217-
ci.yml Rust build, test, lint
218-
container.yml Build and push base image to ghcr.io
219-
e2e.yml End-to-end tests (boots in QEMU)
226+
ci.yml Rust build, test, lint
227+
container.yml Build and push base images to ghcr.io
228+
e2e.yml End-to-end tests (boots in QEMU)
220229
```
221230

222231
## Known Limitations

0 commit comments

Comments
 (0)