Skip to content

Conversation

@rpardini
Copy link
Member

@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
@jacobweinstock jacobweinstock added the ready-to-merge Signal to Mergify to merge the PR. label Mar 31, 2025
@mergify mergify bot merged commit 5737a48 into tinkerbell:main Mar 31, 2025
28 of 29 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ready-to-merge Signal to Mergify to merge the PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants