Follow-up to #3399 (0.3.5.1 → 0.4.0 in-place update). The Raspberry Pi arch was deferred because it's a different boot problem, not just another target:
- 0.3.5.1 Pi boots firmware-direct (
config.txt / cmdline.txt, root=PARTUUID=cb15ae4d-02 boot=embassy) — no grub.
- 0.4.0 Pi boots via
arm64-efi grub (grub-install --target=arm64-efi in the image build).
do_update skips the chroot on raspberrypi (if PLATFORM != raspberrypi in sync_boot), so — unlike x86 — we can't run anything (no grub-install, no update-grub2) at apply time. The only lever is the payload's boot/ contents, which sync_boot rsyncs onto the Pi boot partition.
Proposed approach
Ship a firmware-direct config.txt + cmdline.txt in the payload's boot/ that loads the 0.4.0 kernel + initramfs directly (bypassing grub), with cmdline.txt = root=PARTUUID=cb15ae4d-02 boot=startos <pi params>. The cb15ae4d disk id is fixed across 0.3.5.1 and 0.4.0 Pi images, so the root PARTUUID is deterministic. sync_boot overwrites the box's config.txt/cmdline.txt with ours → the Pi firmware boots the 0.4.0 kernel → boot=startos runs the 0.4.0 initramfs migration.
Remaining work
Also gated on 0.4.0 Pi being release-ready.
Follow-up to #3399 (0.3.5.1 → 0.4.0 in-place update). The Raspberry Pi arch was deferred because it's a different boot problem, not just another target:
config.txt/cmdline.txt,root=PARTUUID=cb15ae4d-02 boot=embassy) — no grub.arm64-efigrub (grub-install --target=arm64-efiin the image build).do_updateskips the chroot onraspberrypi(if PLATFORM != raspberrypiinsync_boot), so — unlike x86 — we can't run anything (nogrub-install, noupdate-grub2) at apply time. The only lever is the payload'sboot/contents, whichsync_bootrsyncs onto the Pi boot partition.Proposed approach
Ship a firmware-direct
config.txt+cmdline.txtin the payload'sboot/that loads the 0.4.0 kernel + initramfs directly (bypassing grub), withcmdline.txt = root=PARTUUID=cb15ae4d-02 boot=startos <pi params>. Thecb15ae4ddisk id is fixed across 0.3.5.1 and 0.4.0 Pi images, so the root PARTUUID is deterministic.sync_bootoverwrites the box'sconfig.txt/cmdline.txtwith ours → the Pi firmware boots the 0.4.0 kernel →boot=startosruns the 0.4.0 initramfs migration.Remaining work
.img.gz(not an ISO) — inspect the img's partition layout for the rootfs/squashfs.config.txt/cmdline.txtfor the 0.4.0 Pi kernel (this is net-new; the 0.4.0 Pi build is grub-based).assemble-migration-payload.sh(.img.gzcase) + thestart-os-migration-squashfsmake target + CI to includeraspberrypi.config.txtbricks the boot.Also gated on 0.4.0 Pi being release-ready.