Skip to content

0.3.5.1 → 0.4.0 update: Raspberry Pi path (deferred from #3399) #3443

Description

@helix-nine

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

  • Extract the 0.3.5.1 Pi base rootfs from the published .img.gz (not an ISO) — inspect the img's partition layout for the rootfs/squashfs.
  • Build the firmware-direct config.txt/cmdline.txt for the 0.4.0 Pi kernel (this is net-new; the 0.4.0 Pi build is grub-based).
  • Wire assemble-migration-payload.sh (.img.gz case) + the start-os-migration-squashfs make target + CI to include raspberrypi.
  • Validate on real Pi hardware — a wrong config.txt bricks the boot.

Also gated on 0.4.0 Pi being release-ready.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Fields

No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions