Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Hook bootable media for amd64/arm64 UEFI + RPi 3/4/5 + Rockchip/Amlogic u-boot #261

Open
wants to merge 33 commits into
base: main
Choose a base branch
from

Conversation

rpardini
Copy link
Contributor

@rpardini rpardini commented Mar 5, 2025

"build and write bootable media image to SDCard/eMMC/USBkey/etc, configure kernel params, then use Tinkerbell to provision a separate NVMe/SATA/USB disk, all PXE and Smee-free"

  • "L3" provisioning for small (and big) machines
  • WiP; RFC.
  • Still missing:
    • 0README.txt generation for each variant
    • Taking TINK_SERVER/TINK_GRPC_PORT/TINK_WORKER_IMAGE/MAC vars/params and presetting in grub.cfg/cmdline.txt/extlinux.conf for self-builder's convenience
    • docs (ofc; at least the self-builder part, user-facing should go into 0README.txt)
    • CI (GHA) -- I've this ready, but I'm witholding it to prove the everything else still works without changes
    • Some refactor of the temporary-Dockerfile for fat32/mtools that is being abused for the u-boot specific mkimage

How to test this?

  • Build the media
    • For UEFI-capable amd64 (default 5.10 Hook kernel): ./build.sh bootable-media grub-amd64
    • For RaspberryPi 3/4/5 (Armbian kernel): ./build.sh bootable-media rpi
  • Write the produced .img.xz to media (use eg the "RaspberryPi Imager" software)
  • Edit cmdline.txt / grub.cfg / extlinux.conf on the media with a text editor, configure your kernel cmdline
  • Configure your device to boot from your NVMe/SATA disk "first", and the Hook bootable-media device later
  • Boot the bootable media on your device
  • To reprovision, cripple your NVMe/SATA disk's boot partition or change next-boot order

Comments are welcome; pending stuff is coming in the next few weeks.

rpardini added 30 commits March 5, 2025 08:51
…build-deps

- it was really never used, we only need `dpkg` which is preinstalled

Signed-off-by: Ricardo Pardini <ricardo@pardini.net>
- was silently not-including any DTBs due to slight bug
- eg, arm64; affects both default and armbian kernels

Signed-off-by: Ricardo Pardini <ricardo@pardini.net>
- so one can't commit unchecked or unformatted code after linting once

Signed-off-by: Ricardo Pardini <ricardo@pardini.net>
Signed-off-by: Ricardo Pardini <ricardo@pardini.net>
Signed-off-by: Ricardo Pardini <ricardo@pardini.net>
Signed-off-by: Ricardo Pardini <ricardo@pardini.net>
…ventory

- in preparation for bootable media

Signed-off-by: Ricardo Pardini <ricardo@pardini.net>
…_defined_id` to `define_id()`

- so we can easily add bootable definitions

Signed-off-by: Ricardo Pardini <ricardo@pardini.net>
- similar to the kernel/flavour structure

Signed-off-by: Ricardo Pardini <ricardo@pardini.net>
- main interfaces are:
  - list_bootable: list possible boards for a given bootable, with their parameters
  - build_bootable: build a bootable media instance with certain parameters
- implementations to come in later commits

Signed-off-by: Ricardo Pardini <ricardo@pardini.net>
- outputs a separate JSON matrix for bootables

Signed-off-by: Ricardo Pardini <ricardo@pardini.net>
- takes a directory with files
- outputs an image in a directory with a (raw) disk image with a single FAT32 partition
- can be ESP or regular
- can be GPT or MBR
- uses a throwaway Dockerfile to run mtools

Signed-off-by: Ricardo Pardini <ricardo@pardini.net>
…tation

- this uses the RPi Foundation bootloader binary files
- and the rpi-standard `config.txt` and `cmdline.txt`

Signed-off-by: Ricardo Pardini <ricardo@pardini.net>
- obtains u-boot (and some board definitions) from Armbian via ORAS (oci)
- 3 slightly different scenarios, all on the same base:
  - Rockchip mainline u-boot (GPT, extlinux)
  - Amlogic mainline u-boot (MBR, extlinux)
  - Rockchip vendor u-boot (GPT, boot.scr)
- boards added are the ones I had access to, more can be added/removed later

Signed-off-by: Ricardo Pardini <ricardo@pardini.net>
Signed-off-by: Ricardo Pardini <ricardo@pardini.net>
Signed-off-by: Ricardo Pardini <ricardo@pardini.net>
Signed-off-by: Ricardo Pardini <ricardo@pardini.net>
- for bootable media's future benefit

Signed-off-by: Ricardo Pardini <ricardo@pardini.net>
Signed-off-by: Ricardo Pardini <ricardo@pardini.net>
- incl DTB handling
- incl ESP-marked FAT32 partition

Signed-off-by: Ricardo Pardini <ricardo@pardini.net>
Signed-off-by: Ricardo Pardini <ricardo@pardini.net>
Signed-off-by: Ricardo Pardini <ricardo@pardini.net>
Signed-off-by: Ricardo Pardini <ricardo@pardini.net>
Signed-off-by: Ricardo Pardini <ricardo@pardini.net>
Signed-off-by: Ricardo Pardini <ricardo@pardini.net>
Signed-off-by: Ricardo Pardini <ricardo@pardini.net>
Signed-off-by: Ricardo Pardini <ricardo@pardini.net>
Signed-off-by: Ricardo Pardini <ricardo@pardini.net>
Signed-off-by: Ricardo Pardini <ricardo@pardini.net>
- otherwise they're all "generic"

Signed-off-by: Ricardo Pardini <ricardo@pardini.net>
rpardini added 3 commits March 5, 2025 08:52
…otable

Signed-off-by: Ricardo Pardini <ricardo@pardini.net>
- lets assume Hook default kernels will boot on ACPI-capable+complete machines

Signed-off-by: Ricardo Pardini <ricardo@pardini.net>
… bootable media

Signed-off-by: Ricardo Pardini <ricardo@pardini.net>
@rpardini rpardini changed the title Hook bootable media for amd64/arm64 UEFI + Raspberry 3/4/5 + Rockchip/Amlogic u-boot Hook bootable media for amd64/arm64 UEFI + RPi 3/4/5 + Rockchip/Amlogic u-boot Mar 5, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant