-
Notifications
You must be signed in to change notification settings - Fork 52
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
multi-kernel, cross-compiling, bash based Hook & (default+foreign) kernels build (incl GHA matrix) #205
Conversation
Thanks @rpardini. Awesome OP. I've got a busy week so probably won't get to it until next weekend. |
No problem, meanwhile I keep on working -- I just added a 2nd drop. 2nd drop of rpardini's take on multi-hook
|
- `showcase` is a chart that, based on values.yaml dictionaries: - generates Tinkerbell CRs (Hardware/Template/Workflow) for both standard (UEFI) & exotic (supported by Armbian) devices - generates download/process jobs for multiple Hook flavors (see tinkerbell/hook#205) - generates download/process jobs for a few OS images (Ubuntu Cloud Images, Armbian, etc) - should be independent of how one deployed Tinkerbell itself (stack chart, individual components, etc) - A few features: - validates values.yaml for common mistakes; arch must match, etc. - validates & handles rootDisk differences (re-invents "formatPartition()" a bit) - avoids re-downloading Hooks and Images that are already on disk, even if Job re-runs - allows easy way to use - custom Hooks - custom Kernel cmdline parameters at both the Hook & device level - for example `acpi=off` at Hook level and `console=ttyS0` at board level - custom OS images for deployment - reboot or kexec to finish deployment - different partition numbers for OS image's rootfs (some images have ESP, some have a separate `/boot`, etc) - control if growpart and/or ssh/user setup is done during provisioning or not - conversion of OS images (`qemu-to-raw-gzip` and `xz-to-gz`) - has a "merge" mechanism with a common way to set parameters like net gateway, UEFI, etc (also easy to override per-device) - default values have everything `enabled: false` thus showcase should produce nothing by default. - Hooks & Images can be forced `enabled: true` in values.yaml, or - `enabled: true` Devices automatically enable their Hook & Image - Probably missing: - More validations - Currently pointing to my Tinkerbell Actions, which I haven't PR'ed yet - How to use: - Clone it, edit the values.yaml to your liking, and deploy. Signed-off-by: Ricardo Pardini <[email protected]>
- `showcase` is a chart that, based on values.yaml dictionaries: - generates Tinkerbell CRs (Hardware/Template/Workflow) for both standard (UEFI) & exotic (supported by Armbian) devices - generates download/process jobs for multiple Hook flavors (see tinkerbell/hook#205) - generates download/process jobs for a few OS images (Ubuntu Cloud Images, Armbian, etc) - should be independent of how one deployed Tinkerbell itself (stack chart, individual components, etc) - A few features: - validates values.yaml for common mistakes; arch must match, etc. - validates & handles rootDisk differences (re-invents "formatPartition()" a bit) - avoids re-downloading Hooks and Images that are already on disk, even if Job re-runs - allows easy way to use - custom Hooks - custom Kernel cmdline parameters at both the Hook & device level - for example `acpi=off` at Hook level and `console=ttyS0` at board level - custom OS images for deployment - reboot or kexec to finish deployment - different partition numbers for OS image's rootfs (some images have ESP, some have a separate `/boot`, etc) - control if growpart and/or ssh/user setup is done during provisioning or not - conversion of OS images (`qemu-to-raw-gzip` and `xz-to-gz`) - has a "merge" mechanism with a common way to set parameters like net gateway, UEFI, etc (also easy to override per-device) - default values have everything `enabled: false` thus showcase should produce nothing by default. - Hooks & Images can be forced `enabled: true` in values.yaml, or - `enabled: true` Devices automatically enable their Hook & Image - Probably missing: - More validations - Currently pointing to my Tinkerbell Actions, which I haven't PR'ed yet - How to use: - Clone it, edit the values.yaml to your liking, and deploy. Signed-off-by: Ricardo Pardini <[email protected]>
- `showcase` is a chart that, based on values.yaml dictionaries: - generates Tinkerbell CRs (Hardware/Template/Workflow) for both standard (UEFI) & exotic (supported by Armbian) devices - generates download/process jobs for multiple Hook flavors (see tinkerbell/hook#205) - generates download/process jobs for a few OS images (Ubuntu Cloud Images, Armbian, etc) - should be independent of how one deployed Tinkerbell itself (stack chart, individual components, etc) - A few features: - validates values.yaml for common mistakes; arch must match, etc. - validates & handles rootDisk differences (re-invents "formatPartition()" a bit) - avoids re-downloading Hooks and Images that are already on disk, even if Job re-runs - allows easy way to use - custom Hooks - custom Kernel cmdline parameters at both the Hook & device level - for example `acpi=off` at Hook level and `console=ttyS0` at board level - custom OS images for deployment - reboot or kexec to finish deployment - different partition numbers for OS image's rootfs (some images have ESP, some have a separate `/boot`, etc) - control if growpart and/or ssh/user setup is done during provisioning or not - conversion of OS images (`qemu-to-raw-gzip` and `xz-to-gz`) - has a "merge" mechanism with a common way to set parameters like net gateway, UEFI, etc (also easy to override per-device) - default values have everything `enabled: false` thus showcase should produce nothing by default. - Hooks & Images can be forced `enabled: true` in values.yaml, or - `enabled: true` Devices automatically enable their Hook & Image - Probably missing: - More validations - Currently pointing to my Tinkerbell Actions, which I haven't PR'ed yet - How to use: - Clone it, edit the values.yaml to your liking, and deploy. Signed-off-by: Ricardo Pardini <[email protected]>
Pushed: forced initial no-offset-limit NTP sync via busybox (fixes RaspberryPi & others without an RTC), support (WiP) for Also, an initial PR for the |
Hey @rpardini. Thanks for this. I'm playing around with it and the x86_64 build works great. I have some non-technical concerns though. It's not clear how to cross compile HookOS for aarch64. Also, it seems like there are some envs involved for different build.sh commands but it isnt clear what all the env options available are and how to use them properly. As this is a significant change from the status quo and in order for this to land and be maintainable we're going to need to be able to understand this better. Can you provide docs for all functionality? Most users arent going to need to or want to rebuild kernels so docs around all the options for building the final HookOS are the most important to me. Again, thanks for all this work! I think we really needed it and I want to see it land. |
I think i found it. |
Also, i see in the RFC.md that you mention |
FYI, just got Hook 5.15 and 6.6 kernels built and booted into them! I'm liking this! |
Super thanks for the review!
Definitely! Docs are a big challenge. I hope to massage the RFC.md into README.md over time. To customize a kernel:
Perfect. I'd like to keep the ability to cross-build on GH Hosted runners, for people without self-hosted runners. What I propose is adding environment variables like |
9bedc43
to
328f5e8
Compare
- `showcase` is a chart that, based on values.yaml dictionaries: - generates Tinkerbell CRs (Hardware/Template/Workflow) for both standard (UEFI) & exotic (supported by Armbian) devices - generates download/process jobs for multiple Hook flavors (see tinkerbell/hook#205) - generates download/process jobs for a few OS images (Ubuntu Cloud Images, Armbian, etc) - should be independent of how one deployed Tinkerbell itself (stack chart, individual components, etc) - A few features: - validates values.yaml for common mistakes; arch must match, etc. - validates & handles rootDisk differences (re-invents "formatPartition()" a bit) - avoids re-downloading Hooks and Images that are already on disk, even if Job re-runs - allows easy way to use - custom Hooks - custom Kernel cmdline parameters at both the Hook & device level - for example `acpi=off` at Hook level and `console=ttyS0` at board level - custom OS images for deployment - reboot or kexec to finish deployment - different partition numbers for OS image's rootfs (some images have ESP, some have a separate `/boot`, etc) - control if growpart and/or ssh/user setup is done during provisioning or not - conversion of OS images (`qemu-to-raw-gzip` and `xz-to-gz`) - has a "merge" mechanism with a common way to set parameters like net gateway, UEFI, etc (also easy to override per-device) - default values have everything `enabled: false` thus showcase should produce nothing by default. - Hooks & Images can be forced `enabled: true` in values.yaml, or - `enabled: true` Devices automatically enable their Hook & Image - Probably missing: - More validations - Currently pointing to my Tinkerbell Actions, which I haven't PR'ed yet - How to use: - Clone it, edit the values.yaml to your liking, and deploy. Signed-off-by: Ricardo Pardini <[email protected]>
77e3230
to
13b9bfd
Compare
Another large drop. I didn't squash this time, so I might have missed some sign-off's. Ref the GitHub actions runners: see the same workflow running against an org with self hosted arm64 runners, and another fork with just plain gh-hosted amd64 runners. Ended up with finer-grained control than proposed above. |
In the last drop I added |
build.sh
Outdated
declare -g HOOK_KERNEL_OCI_BASE="${HOOK_KERNEL_OCI_BASE:-"quay.io/tinkerbellrpardini/kernel-"}" | ||
declare -g HOOK_LK_CONTAINERS_OCI_BASE="${HOOK_LK_CONTAINERS_OCI_BASE:-"quay.io/tinkerbellrpardini/linuxkit-"}" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
These need to default to quay.io/tinkerbell/
. Also if there are new repos that don't exist in quay.io/tinkerbell
i'll need to create them. Do we maybe want different kernels to be image tags?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, those were mostly examples/leftovers from my two setups.
Ref quay.io
I think you're facing the same dilemma as me: it creates new repos/images with "private" visibility by default?
We could yes twist this so the image is always the same, and only the tag changes across kernel flavors.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I changed the default -- but didn't change the naming scheme.
Hey @rpardini , I believe i have found the issue with Docker not starting with Linuxkit v1.2.0. We need to enable cgroups v2 in the DinD container. - name: hook-docker
image: "${HOOK_CONTAINER_DOCKER_IMAGE}"
capabilities:
- all
net: host
pid: host
mounts:
- type: cgroup2
options: [ "rw", "nosuid", "noexec", "nodev", "relatime" ]
destination: /sys/fs/cgroup |
# Apart from the quay/ghcr coordinates above (used for both pulling & pushing), we might also want to | ||
# log in to DockerHub (with a read-only token) so we aren't hit by rate limits when pulling the linuxkit pkgs. | ||
# To do so, set the secret DOCKER_USERNAME and DOCKER_PASSWORD in the repo secrets, and set the below to yes. | ||
LOGIN_TO_DOCKERHUB: "${{ github.repository_owner == 'rpardini' && 'yes' || 'no' }}" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sorry, the DockerHub login is ok, but the check for rpardini
will need to be removed.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Definitely. I just wanted to exemplify the conditional -- not everyone will have it I guess.
Since I added LK caching (to GHA cache), the need for this is lower as well.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Removed conditional for this PR.
- name: Docker Login to DockerHub # read-only token, required to be able to pull all the linuxkit pkgs without getting rate limited. | ||
if: ${{ env.LOGIN_TO_DOCKERHUB == 'yes' }} | ||
uses: docker/login-action@v3 | ||
with: { registry: "docker.io", username: "${{ secrets.DOCKER_USERNAME }}", password: "${{ secrets.DOCKER_PASSWORD }}" } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
FYI, I've added dockerhub read only access creds for a Tinkerbell org account. DOCKERHUB_USERNAME
and DOCKERHUB_PASSWORD
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Set the default to use them and removed the conditional.
…es unexpectedly Signed-off-by: Ricardo Pardini <[email protected]>
…DOCKER_BUILDX_PROGRESS_TYPE` - We've too much debug logging for a normal user; hide it. - DOCKER_BUILDX_PROGRESS_TYPE defaults to `plain` if DEBUG=yes or under GitHub actions - otherwise defaults to `tty` unless `DOCKER_BUILDX_PROGRESS_TYPE` is set Signed-off-by: Ricardo Pardini <[email protected]>
…ary's keys - I still hate the stringified-dict syntax Signed-off-by: Ricardo Pardini <[email protected]>
- Slightly better syntax IMHO Signed-off-by: Ricardo Pardini <[email protected]>
- turns out I randomly called those "flavors", "flavours" or "kernels"; consolidate on "inventory" Signed-off-by: Ricardo Pardini <[email protected]>
… working afterwards - rmdir -> rm -rf Signed-off-by: Ricardo Pardini <[email protected]>
- otherwise it overwrites the default ones during deployment Signed-off-by: Ricardo Pardini <[email protected]>
- Remove references to Nix from CONTRIBUTING.md too - this needs more work, editing and polishing Signed-off-by: Ricardo Pardini <[email protected]>
…ettings - reword some comments - quay.io/tinkerbell is the official base - remove 'dev' tag from CI default - use fixed - 'yes' for DockerHub login; - 'ARM64' tagged self-hosted runners for arm64 lk containers Signed-off-by: Ricardo Pardini <[email protected]>
Hey @jacobweinstock -- I've fixed the DCOs, cleaned up a few commit messages, changed the default OCI coordinates & CI params to Tinkerbell org, and rebased onto main. I've not touched the existing CI workflows, though; feel free to push to my branch if fixes are needed before merge. Thanks so much for the reviews! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Let's do this!!! Thanks, @rpardini for all the hard work!
- `showcase` is a chart that, based on values.yaml dictionaries: - generates Tinkerbell CRs (Hardware/Template/Workflow) for both standard (UEFI) & exotic (supported by Armbian) devices - generates download/process jobs for multiple Hook flavors (see tinkerbell/hook#205) - generates download/process jobs for a few OS images (Ubuntu Cloud Images, Armbian, etc) - should be independent of how one deployed Tinkerbell itself (stack chart, individual components, etc) - A few features: - validates values.yaml for common mistakes; arch must match, etc. - validates & handles rootDisk differences (re-invents "formatPartition()" a bit) - avoids re-downloading Hooks and Images that are already on disk, even if Job re-runs - allows easy way to use - custom Hooks - custom Kernel cmdline parameters at both the Hook & device level - for example `acpi=off` at Hook level and `console=ttyS0` at board level - custom OS images for deployment - reboot or kexec to finish deployment - different partition numbers for OS image's rootfs (some images have ESP, some have a separate `/boot`, etc) - control if growpart and/or ssh/user setup is done during provisioning or not - conversion of OS images (`qemu-to-raw-gzip` and `xz-to-gz`) - has a "merge" mechanism with a common way to set parameters like net gateway, UEFI, etc (also easy to override per-device) - default values have everything `enabled: false` thus showcase should produce nothing by default. - Hooks & Images can be forced `enabled: true` in values.yaml, or - `enabled: true` Devices automatically enable their Hook & Image - Probably missing: - More validations - Currently pointing to my Tinkerbell Actions, which I haven't PR'ed yet - How to use: - Clone it, edit the values.yaml to your liking, and deploy. Signed-off-by: Ricardo Pardini <[email protected]>
- `showcase` is a chart that, based on values.yaml dictionaries: - generates Tinkerbell CRs (Hardware/Template/Workflow) for both standard (UEFI) & exotic (supported by Armbian) devices - generates download/process jobs for multiple Hook flavors (see tinkerbell/hook#205) - generates download/process jobs for a few OS images (Ubuntu Cloud Images, Armbian, etc) - should be independent of how one deployed Tinkerbell itself (stack chart, individual components, etc) - A few features: - validates values.yaml for common mistakes; arch must match, etc. - validates & handles rootDisk differences (re-invents "formatPartition()" a bit) - avoids re-downloading Hooks and Images that are already on disk, even if Job re-runs - allows easy way to use - custom Hooks - custom Kernel cmdline parameters at both the Hook & device level - for example `acpi=off` at Hook level and `console=ttyS0` at board level - custom OS images for deployment - reboot or kexec to finish deployment - different partition numbers for OS image's rootfs (some images have ESP, some have a separate `/boot`, etc) - control if growpart and/or ssh/user setup is done during provisioning or not - conversion of OS images (`qemu-to-raw-gzip` and `xz-to-gz`) - has a "merge" mechanism with a common way to set parameters like net gateway, UEFI, etc (also easy to override per-device) - default values have everything `enabled: false` thus showcase should produce nothing by default. - Hooks & Images can be forced `enabled: true` in values.yaml, or - `enabled: true` Devices automatically enable their Hook & Image - Probably missing: - More validations - Currently pointing to my Tinkerbell Actions, which I haven't PR'ed yet - How to use: - Clone it, edit the values.yaml to your liking, and deploy. Signed-off-by: Ricardo Pardini <[email protected]>
- `showcase` is a chart that, based on values.yaml dictionaries: - generates Tinkerbell CRs (Hardware/Template/Workflow) for both standard (UEFI) & exotic (supported by Armbian) devices - generates download/process jobs for multiple Hook flavors (see tinkerbell/hook#205) - generates download/process jobs for a few OS images (Ubuntu Cloud Images, Armbian, etc) - should be independent of how one deployed Tinkerbell itself (stack chart, individual components, etc) - A few features: - validates values.yaml for common mistakes; arch must match, etc. - validates & handles rootDisk differences (re-invents "formatPartition()" a bit) - avoids re-downloading Hooks and Images that are already on disk, even if Job re-runs - allows easy way to use - custom Hooks - custom Kernel cmdline parameters at both the Hook & device level - for example `acpi=off` at Hook level and `console=ttyS0` at board level - custom OS images for deployment - reboot or kexec to finish deployment - different partition numbers for OS image's rootfs (some images have ESP, some have a separate `/boot`, etc) - control if growpart and/or ssh/user setup is done during provisioning or not - conversion of OS images (`qemu-to-raw-gzip` and `xz-to-gz`) - has a "merge" mechanism with a common way to set parameters like net gateway, UEFI, etc (also easy to override per-device) - default values have everything `enabled: false` thus showcase should produce nothing by default. - Hooks & Images can be forced `enabled: true` in values.yaml, or - `enabled: true` Devices automatically enable their Hook & Image - Probably missing: - More validations - Currently pointing to my Tinkerbell Actions, which I haven't PR'ed yet - How to use: - Clone it, edit the values.yaml to your liking, and deploy. Signed-off-by: Ricardo Pardini <[email protected]>
- `showcase` is a chart that, based on values.yaml dictionaries: - generates Tinkerbell CRs (Hardware/Template/Workflow) for both standard (UEFI) & exotic (supported by Armbian) devices - generates download/process jobs for multiple Hook flavors (see tinkerbell/hook#205) - generates download/process jobs for a few OS images (Ubuntu Cloud Images, Armbian, etc) - should be independent of how one deployed Tinkerbell itself (stack chart, individual components, etc) - A few features: - validates values.yaml for common mistakes; arch must match, etc. - validates & handles rootDisk differences (re-invents "formatPartition()" a bit) - avoids re-downloading Hooks and Images that are already on disk, even if Job re-runs - allows easy way to use - custom Hooks - custom Kernel cmdline parameters at both the Hook & device level - for example `acpi=off` at Hook level and `console=ttyS0` at board level - custom OS images for deployment - reboot or kexec to finish deployment - different partition numbers for OS image's rootfs (some images have ESP, some have a separate `/boot`, etc) - control if growpart and/or ssh/user setup is done during provisioning or not - conversion of OS images (`qemu-to-raw-gzip` and `xz-to-gz`) - has a "merge" mechanism with a common way to set parameters like net gateway, UEFI, etc (also easy to override per-device) - default values have everything `enabled: false` thus showcase should produce nothing by default. - Hooks & Images can be forced `enabled: true` in values.yaml, or - `enabled: true` Devices automatically enable their Hook & Image - Probably missing: - More validations - Currently pointing to my Tinkerbell Actions, which I haven't PR'ed yet - How to use: - Clone it, edit the values.yaml to your liking, and deploy. Signed-off-by: Ricardo Pardini <[email protected]>
- `showcase` is a chart that, based on values.yaml dictionaries: - generates Tinkerbell CRs (Hardware/Template/Workflow) for both standard (UEFI) & exotic (supported by Armbian) devices - generates download/process jobs for multiple Hook flavors (see tinkerbell/hook#205) - generates download/process jobs for a few OS images (Ubuntu Cloud Images, Armbian, etc) - should be independent of how one deployed Tinkerbell itself (stack chart, individual components, etc) - A few features: - validates values.yaml for common mistakes; arch must match, etc. - validates & handles rootDisk differences (re-invents "formatPartition()" a bit) - avoids re-downloading Hooks and Images that are already on disk, even if Job re-runs - allows easy way to use - custom Hooks - custom Kernel cmdline parameters at both the Hook & device level - for example `acpi=off` at Hook level and `console=ttyS0` at board level - custom OS images for deployment - reboot or kexec to finish deployment - different partition numbers for OS image's rootfs (some images have ESP, some have a separate `/boot`, etc) - control if growpart and/or ssh/user setup is done during provisioning or not - conversion of OS images (`qemu-to-raw-gzip` and `xz-to-gz`) - has a "merge" mechanism with a common way to set parameters like net gateway, UEFI, etc (also easy to override per-device) - default values have everything `enabled: false` thus showcase should produce nothing by default. - Hooks & Images can be forced `enabled: true` in values.yaml, or - `enabled: true` Devices automatically enable their Hook & Image - Probably missing: - More validations - Currently pointing to my Tinkerbell Actions, which I haven't PR'ed yet - How to use: - Clone it, edit the values.yaml to your liking, and deploy. Signed-off-by: Ricardo Pardini <[email protected]>
- `showcase` is a chart that, based on values.yaml dictionaries: - generates Tinkerbell CRs (Hardware/Template/Workflow) for both standard (UEFI) & exotic (supported by Armbian) devices - generates download/process jobs for multiple Hook flavors (see tinkerbell/hook#205) - generates download/process jobs for a few OS images (Ubuntu Cloud Images, Armbian, etc) - should be independent of how one deployed Tinkerbell itself (stack chart, individual components, etc) - A few features: - validates values.yaml for common mistakes; arch must match, etc. - validates & handles rootDisk differences (re-invents "formatPartition()" a bit) - avoids re-downloading Hooks and Images that are already on disk, even if Job re-runs - allows easy way to use - custom Hooks - custom Kernel cmdline parameters at both the Hook & device level - for example `acpi=off` at Hook level and `console=ttyS0` at board level - custom OS images for deployment - reboot or kexec to finish deployment - different partition numbers for OS image's rootfs (some images have ESP, some have a separate `/boot`, etc) - control if growpart and/or ssh/user setup is done during provisioning or not - conversion of OS images (`qemu-to-raw-gzip` and `xz-to-gz`) - has a "merge" mechanism with a common way to set parameters like net gateway, UEFI, etc (also easy to override per-device) - default values have everything `enabled: false` thus showcase should produce nothing by default. - Hooks & Images can be forced `enabled: true` in values.yaml, or - `enabled: true` Devices automatically enable their Hook & Image - Probably missing: - More validations - Currently pointing to my Tinkerbell Actions, which I haven't PR'ed yet - How to use: - Clone it, edit the values.yaml to your liking, and deploy. Signed-off-by: Ricardo Pardini <[email protected]>
- `showcase` is a chart that, based on values.yaml dictionaries: - generates Tinkerbell CRs (Hardware/Template/Workflow) for both standard (UEFI) & exotic (supported by Armbian) devices - generates download/process jobs for multiple Hook flavors (see tinkerbell/hook#205) - generates download/process jobs for a few OS images (Ubuntu Cloud Images, Armbian, etc) - should be independent of how one deployed Tinkerbell itself (stack chart, individual components, etc) - A few features: - validates values.yaml for common mistakes; arch must match, etc. - validates & handles rootDisk differences (re-invents "formatPartition()" a bit) - avoids re-downloading Hooks and Images that are already on disk, even if Job re-runs - allows easy way to use - custom Hooks - custom Kernel cmdline parameters at both the Hook & device level - for example `acpi=off` at Hook level and `console=ttyS0` at board level - custom OS images for deployment - reboot or kexec to finish deployment - different partition numbers for OS image's rootfs (some images have ESP, some have a separate `/boot`, etc) - control if growpart and/or ssh/user setup is done during provisioning or not - conversion of OS images (`qemu-to-raw-gzip` and `xz-to-gz`) - has a "merge" mechanism with a common way to set parameters like net gateway, UEFI, etc (also easy to override per-device) - default values have everything `enabled: false` thus showcase should produce nothing by default. - Hooks & Images can be forced `enabled: true` in values.yaml, or - `enabled: true` Devices automatically enable their Hook & Image - Probably missing: - More validations - Currently pointing to my Tinkerbell Actions, which I haven't PR'ed yet - How to use: - Clone it, edit the values.yaml to your liking, and deploy. Signed-off-by: Ricardo Pardini <[email protected]>
- `showcase` is a chart that, based on values.yaml dictionaries: - generates Tinkerbell CRs (Hardware/Template/Workflow) for both standard (UEFI) & exotic (supported by Armbian) devices - generates download/process jobs for multiple Hook flavors (see tinkerbell/hook#205) - generates download/process jobs for a few OS images (Ubuntu Cloud Images, Armbian, etc) - should be independent of how one deployed Tinkerbell itself (stack chart, individual components, etc) - A few features: - validates values.yaml for common mistakes; arch must match, etc. - validates & handles rootDisk differences (re-invents "formatPartition()" a bit) - avoids re-downloading Hooks and Images that are already on disk, even if Job re-runs - allows easy way to use - custom Hooks - custom Kernel cmdline parameters at both the Hook & device level - for example `acpi=off` at Hook level and `console=ttyS0` at board level - custom OS images for deployment - reboot or kexec to finish deployment - different partition numbers for OS image's rootfs (some images have ESP, some have a separate `/boot`, etc) - control if growpart and/or ssh/user setup is done during provisioning or not - conversion of OS images (`qemu-to-raw-gzip` and `xz-to-gz`) - has a "merge" mechanism with a common way to set parameters like net gateway, UEFI, etc (also easy to override per-device) - default values have everything `enabled: false` thus showcase should produce nothing by default. - Hooks & Images can be forced `enabled: true` in values.yaml, or - `enabled: true` Devices automatically enable their Hook & Image - Probably missing: - More validations - Currently pointing to my Tinkerbell Actions, which I haven't PR'ed yet - How to use: - Clone it, edit the values.yaml to your liking, and deploy. Signed-off-by: Ricardo Pardini <[email protected]>
- `showcase` is a chart that, based on values.yaml dictionaries: - generates Tinkerbell CRs (Hardware/Template/Workflow) for both standard (UEFI) & exotic (supported by Armbian) devices - generates download/process jobs for multiple Hook flavors (see tinkerbell/hook#205) - generates download/process jobs for a few OS images (Ubuntu Cloud Images, Armbian, etc) - should be independent of how one deployed Tinkerbell itself (stack chart, individual components, etc) - A few features: - validates values.yaml for common mistakes; arch must match, etc. - validates & handles rootDisk differences (re-invents "formatPartition()" a bit) - avoids re-downloading Hooks and Images that are already on disk, even if Job re-runs - allows easy way to use - custom Hooks - custom Kernel cmdline parameters at both the Hook & device level - for example `acpi=off` at Hook level and `console=ttyS0` at board level - custom OS images for deployment - reboot or kexec to finish deployment - different partition numbers for OS image's rootfs (some images have ESP, some have a separate `/boot`, etc) - control if growpart and/or ssh/user setup is done during provisioning or not - conversion of OS images (`qemu-to-raw-gzip` and `xz-to-gz`) - has a "merge" mechanism with a common way to set parameters like net gateway, UEFI, etc (also easy to override per-device) - default values have everything `enabled: false` thus showcase should produce nothing by default. - Hooks & Images can be forced `enabled: true` in values.yaml, or - `enabled: true` Devices automatically enable their Hook & Image - Probably missing: - More validations - Currently pointing to my Tinkerbell Actions, which I haven't PR'ed yet - How to use: - Clone it, edit the values.yaml to your liking, and deploy. Signed-off-by: Ricardo Pardini <[email protected]>
- `showcase` is a chart that, based on values.yaml dictionaries: - generates Tinkerbell CRs (Hardware/Template/Workflow) for both standard (UEFI) & exotic (supported by Armbian) devices - generates download/process jobs for multiple Hook flavors (see tinkerbell/hook#205) - generates download/process jobs for a few OS images (Ubuntu Cloud Images, Armbian, etc) - should be independent of how one deployed Tinkerbell itself (stack chart, individual components, etc) - A few features: - validates values.yaml for common mistakes; arch must match, etc. - validates & handles rootDisk differences (re-invents "formatPartition()" a bit) - avoids re-downloading Hooks and Images that are already on disk, even if Job re-runs - allows easy way to use - custom Hooks - custom Kernel cmdline parameters at both the Hook & device level - for example `acpi=off` at Hook level and `console=ttyS0` at board level - custom OS images for deployment - reboot or kexec to finish deployment - different partition numbers for OS image's rootfs (some images have ESP, some have a separate `/boot`, etc) - control if growpart and/or ssh/user setup is done during provisioning or not - conversion of OS images (`qemu-to-raw-gzip` and `xz-to-gz`) - has a "merge" mechanism with a common way to set parameters like net gateway, UEFI, etc (also easy to override per-device) - default values have everything `enabled: false` thus showcase should produce nothing by default. - Hooks & Images can be forced `enabled: true` in values.yaml, or - `enabled: true` Devices automatically enable their Hook & Image - Probably missing: - More validations - Currently pointing to my Tinkerbell Actions, which I haven't PR'ed yet - How to use: - Clone it, edit the values.yaml to your liking, and deploy. Signed-off-by: Ricardo Pardini <[email protected]> Squashed commits: - showcase: not all images are ubuntu - showcase: introduce insecureRegistries/tinkWorkerImage/tinkWorkerImagePrefix - tinkWorkerImage defaults to quay.io/tinkerbellrpardini/tink-worker:v0.11.0-alpha-rpardini3 - showcase: introduce grpcTLS/grpcInsecureTLS - showcase: generateJobs default to true, allow disabling Jobs - showcase: introduce image.doRestoreGRUBNormalcy for GRUB+EFI entry juggling and enable it for fatso images - showcase: introduce image.doAddEFIBootEntry for efibootmgr juggling and enable it for fatso images - showcase: WiP: nanopct6 (ipxe won't load, even with DTB) - showcase: use rpardini's fork of waitdaemon at quay.io - showcase: bump Hook to 20240604-0609 (further mdev by-id fixes) - showcase: bump Hook to 20240603-0515 (mdev by-id fixes); bump fatso images to v1008 - showcase: bump Hooks; bump images; add rpi4b armbian cloud image; add odroidhc4 example - showcase: fix default userdata script - showcase: bump all armsurvivors Armbian images to 24.05.20-armsurvivors-184; add t95z-cloud-edge image; use qcow2-to-img conversion where relevant - showcase: add support for `xz-qcow2-to-img-gz` image conversion - showcase: bump Hook to 20240520-0941 (finally working armbian's again!) - showcase: bump Hook to 20240520-0729 - showcase: bump Hook to 20240519-1935 (new scheme) - showcase: switch to 20240519-1405 Hook, with new (old?) naming convention - showcase: add demo t95z (meson64) - showcase: bump fatso - showcase: bump images - showcase: add ntp stuff - showcase: bump images, reorg - showcase: add image's 'doInjectHegelCloudInit'; set device's `userData` on the Hardware - add configuration hegelURL - some examples - showcase: bump Hook version; add `latest-lts-xxx` Hooks; add more examples - showcase: bump fatso images - showcase: allow to override hook's defaults via `hookOverride: {}` on the device - showcase: bump hook versions; fix example - showcase: bump hook versions; add examples for peg/pegk and skipDownload - showcase: hook: allow skipping hook download via `skipDownload` - showcase: devices: show `imgstat` before `boot` - showcase: bump fatso images version to 1001; add local variant examples - showcase: HACK: change default Hook amd64 bootMode to reboot (this needs override per-device) - showcase: example 'fatso' baremetal images with download-only and local example - showcase: bump orangepi3b image - showcase: introduce 'download-only' and 'local' non-conversions - showcase: reduce WAIT_SECONDS to zero - showcase: introduce doFixResolvConf at image level - showcase: install pkgs with DEBIAN_FRONTEND=noniteractive, no suggests, no recommends; 180s timeout - showcase: default netplan to device `e*` (not `en*`) so it matches `eth0` too - showcase: add `rock-5b-edge-trixie-uefi-dtb` image for Rock-5b - showcase: add armbian cloud-k8s images for uefi arm64 and amd64 - showcase: bump hook to rpardini's 20240404-2216; add `armbian-rk3588-edge` hook definition (but no board example yet) - showcase: VM examples - showcase: add R58X 3588 example & UEFI cloud image - showcase: validate hookRef not unset - showcase: 0.0.2: disable kexec on arm64, it doesn't really work (yet) - showcase: add README
- `showcase` is a chart that, based on values.yaml dictionaries: - generates Tinkerbell CRs (Hardware/Template/Workflow) for both standard (UEFI) & exotic (supported by Armbian) devices - generates download/process jobs for multiple Hook flavors (see tinkerbell/hook#205) - generates download/process jobs for a few OS images (Ubuntu Cloud Images, Armbian, etc) - should be independent of how one deployed Tinkerbell itself (stack chart, individual components, etc) - A few features: - validates values.yaml for common mistakes; arch must match, etc. - validates & handles rootDisk differences (re-invents "formatPartition()" a bit) - avoids re-downloading Hooks and Images that are already on disk, even if Job re-runs - allows easy way to use - custom Hooks - custom Kernel cmdline parameters at both the Hook & device level - for example `acpi=off` at Hook level and `console=ttyS0` at board level - custom OS images for deployment - reboot or kexec to finish deployment - different partition numbers for OS image's rootfs (some images have ESP, some have a separate `/boot`, etc) - control if growpart and/or ssh/user setup is done during provisioning or not - conversion of OS images (`qemu-to-raw-gzip` and `xz-to-gz`) - has a "merge" mechanism with a common way to set parameters like net gateway, UEFI, etc (also easy to override per-device) - default values have everything `enabled: false` thus showcase should produce nothing by default. - Hooks & Images can be forced `enabled: true` in values.yaml, or - `enabled: true` Devices automatically enable their Hook & Image - Probably missing: - More validations - Currently pointing to my Tinkerbell Actions, which I haven't PR'ed yet - How to use: - Clone it, edit the values.yaml to your liking, and deploy. Signed-off-by: Ricardo Pardini <[email protected]> Squashed commits: - showcase: fix insecure-registries empty bug; add odroidm1; bump hooks - showcase: not all images are ubuntu - showcase: introduce insecureRegistries/tinkWorkerImage/tinkWorkerImagePrefix - tinkWorkerImage defaults to quay.io/tinkerbellrpardini/tink-worker:v0.11.0-alpha-rpardini3 - showcase: introduce grpcTLS/grpcInsecureTLS - showcase: generateJobs default to true, allow disabling Jobs - showcase: introduce image.doRestoreGRUBNormalcy for GRUB+EFI entry juggling and enable it for fatso images - showcase: introduce image.doAddEFIBootEntry for efibootmgr juggling and enable it for fatso images - showcase: WiP: nanopct6 (ipxe won't load, even with DTB) - showcase: use rpardini's fork of waitdaemon at quay.io - showcase: bump Hook to 20240604-0609 (further mdev by-id fixes) - showcase: bump Hook to 20240603-0515 (mdev by-id fixes); bump fatso images to v1008 - showcase: bump Hooks; bump images; add rpi4b armbian cloud image; add odroidhc4 example - showcase: fix default userdata script - showcase: bump all armsurvivors Armbian images to 24.05.20-armsurvivors-184; add t95z-cloud-edge image; use qcow2-to-img conversion where relevant - showcase: add support for `xz-qcow2-to-img-gz` image conversion - showcase: bump Hook to 20240520-0941 (finally working armbian's again!) - showcase: bump Hook to 20240520-0729 - showcase: bump Hook to 20240519-1935 (new scheme) - showcase: switch to 20240519-1405 Hook, with new (old?) naming convention - showcase: add demo t95z (meson64) - showcase: bump fatso - showcase: bump images - showcase: add ntp stuff - showcase: bump images, reorg - showcase: add image's 'doInjectHegelCloudInit'; set device's `userData` on the Hardware - add configuration hegelURL - some examples - showcase: bump Hook version; add `latest-lts-xxx` Hooks; add more examples - showcase: bump fatso images - showcase: allow to override hook's defaults via `hookOverride: {}` on the device - showcase: bump hook versions; fix example - showcase: bump hook versions; add examples for peg/pegk and skipDownload - showcase: hook: allow skipping hook download via `skipDownload` - showcase: devices: show `imgstat` before `boot` - showcase: bump fatso images version to 1001; add local variant examples - showcase: HACK: change default Hook amd64 bootMode to reboot (this needs override per-device) - showcase: example 'fatso' baremetal images with download-only and local example - showcase: bump orangepi3b image - showcase: introduce 'download-only' and 'local' non-conversions - showcase: reduce WAIT_SECONDS to zero - showcase: introduce doFixResolvConf at image level - showcase: install pkgs with DEBIAN_FRONTEND=noniteractive, no suggests, no recommends; 180s timeout - showcase: default netplan to device `e*` (not `en*`) so it matches `eth0` too - showcase: add `rock-5b-edge-trixie-uefi-dtb` image for Rock-5b - showcase: add armbian cloud-k8s images for uefi arm64 and amd64 - showcase: bump hook to rpardini's 20240404-2216; add `armbian-rk3588-edge` hook definition (but no board example yet) - showcase: VM examples - showcase: add R58X 3588 example & UEFI cloud image - showcase: validate hookRef not unset - showcase: 0.0.2: disable kexec on arm64, it doesn't really work (yet) - showcase: add README
- `showcase` is a chart that, based on values.yaml dictionaries: - generates Tinkerbell CRs (Hardware/Template/Workflow) for both standard (UEFI) & exotic (supported by Armbian) devices - generates download/process jobs for multiple Hook flavors (see tinkerbell/hook#205) - generates download/process jobs for a few OS images (Ubuntu Cloud Images, Armbian, etc) - should be independent of how one deployed Tinkerbell itself (stack chart, individual components, etc) - A few features: - validates values.yaml for common mistakes; arch must match, etc. - validates & handles rootDisk differences (re-invents "formatPartition()" a bit) - avoids re-downloading Hooks and Images that are already on disk, even if Job re-runs - allows easy way to use - custom Hooks - custom Kernel cmdline parameters at both the Hook & device level - for example `acpi=off` at Hook level and `console=ttyS0` at board level - custom OS images for deployment - reboot or kexec to finish deployment - different partition numbers for OS image's rootfs (some images have ESP, some have a separate `/boot`, etc) - control if growpart and/or ssh/user setup is done during provisioning or not - conversion of OS images (`qemu-to-raw-gzip` and `xz-to-gz`) - has a "merge" mechanism with a common way to set parameters like net gateway, UEFI, etc (also easy to override per-device) - default values have everything `enabled: false` thus showcase should produce nothing by default. - Hooks & Images can be forced `enabled: true` in values.yaml, or - `enabled: true` Devices automatically enable their Hook & Image - Probably missing: - More validations - Currently pointing to my Tinkerbell Actions, which I haven't PR'ed yet - How to use: - Clone it, edit the values.yaml to your liking, and deploy. Signed-off-by: Ricardo Pardini <[email protected]> Squashed commits: - showcase: fix insecure-registries empty bug; add odroidm1; bump hooks - showcase: not all images are ubuntu - showcase: introduce insecureRegistries/tinkWorkerImage/tinkWorkerImagePrefix - tinkWorkerImage defaults to quay.io/tinkerbellrpardini/tink-worker:v0.11.0-alpha-rpardini3 - showcase: introduce grpcTLS/grpcInsecureTLS - showcase: generateJobs default to true, allow disabling Jobs - showcase: introduce image.doRestoreGRUBNormalcy for GRUB+EFI entry juggling and enable it for fatso images - showcase: introduce image.doAddEFIBootEntry for efibootmgr juggling and enable it for fatso images - showcase: WiP: nanopct6 (ipxe won't load, even with DTB) - showcase: use rpardini's fork of waitdaemon at quay.io - showcase: bump Hook to 20240604-0609 (further mdev by-id fixes) - showcase: bump Hook to 20240603-0515 (mdev by-id fixes); bump fatso images to v1008 - showcase: bump Hooks; bump images; add rpi4b armbian cloud image; add odroidhc4 example - showcase: fix default userdata script - showcase: bump all armsurvivors Armbian images to 24.05.20-armsurvivors-184; add t95z-cloud-edge image; use qcow2-to-img conversion where relevant - showcase: add support for `xz-qcow2-to-img-gz` image conversion - showcase: bump Hook to 20240520-0941 (finally working armbian's again!) - showcase: bump Hook to 20240520-0729 - showcase: bump Hook to 20240519-1935 (new scheme) - showcase: switch to 20240519-1405 Hook, with new (old?) naming convention - showcase: add demo t95z (meson64) - showcase: bump fatso - showcase: bump images - showcase: add ntp stuff - showcase: bump images, reorg - showcase: add image's 'doInjectHegelCloudInit'; set device's `userData` on the Hardware - add configuration hegelURL - some examples - showcase: bump Hook version; add `latest-lts-xxx` Hooks; add more examples - showcase: bump fatso images - showcase: allow to override hook's defaults via `hookOverride: {}` on the device - showcase: bump hook versions; fix example - showcase: bump hook versions; add examples for peg/pegk and skipDownload - showcase: hook: allow skipping hook download via `skipDownload` - showcase: devices: show `imgstat` before `boot` - showcase: bump fatso images version to 1001; add local variant examples - showcase: HACK: change default Hook amd64 bootMode to reboot (this needs override per-device) - showcase: example 'fatso' baremetal images with download-only and local example - showcase: bump orangepi3b image - showcase: introduce 'download-only' and 'local' non-conversions - showcase: reduce WAIT_SECONDS to zero - showcase: introduce doFixResolvConf at image level - showcase: install pkgs with DEBIAN_FRONTEND=noniteractive, no suggests, no recommends; 180s timeout - showcase: default netplan to device `e*` (not `en*`) so it matches `eth0` too - showcase: add `rock-5b-edge-trixie-uefi-dtb` image for Rock-5b - showcase: add armbian cloud-k8s images for uefi arm64 and amd64 - showcase: bump hook to rpardini's 20240404-2216; add `armbian-rk3588-edge` hook definition (but no board example yet) - showcase: VM examples - showcase: add R58X 3588 example & UEFI cloud image - showcase: validate hookRef not unset - showcase: 0.0.2: disable kexec on arm64, it doesn't really work (yet) - showcase: add README
- `showcase` is a chart that, based on values.yaml dictionaries: - generates Tinkerbell CRs (Hardware/Template/Workflow) for both standard (UEFI) & exotic (supported by Armbian) devices - generates download/process jobs for multiple Hook flavors (see tinkerbell/hook#205) - generates download/process jobs for a few OS images (Ubuntu Cloud Images, Armbian, etc) - should be independent of how one deployed Tinkerbell itself (stack chart, individual components, etc) - A few features: - validates values.yaml for common mistakes; arch must match, etc. - validates & handles rootDisk differences (re-invents "formatPartition()" a bit) - avoids re-downloading Hooks and Images that are already on disk, even if Job re-runs - allows easy way to use - custom Hooks - custom Kernel cmdline parameters at both the Hook & device level - for example `acpi=off` at Hook level and `console=ttyS0` at board level - custom OS images for deployment - reboot or kexec to finish deployment - different partition numbers for OS image's rootfs (some images have ESP, some have a separate `/boot`, etc) - control if growpart and/or ssh/user setup is done during provisioning or not - conversion of OS images (`qemu-to-raw-gzip` and `xz-to-gz`) - has a "merge" mechanism with a common way to set parameters like net gateway, UEFI, etc (also easy to override per-device) - default values have everything `enabled: false` thus showcase should produce nothing by default. - Hooks & Images can be forced `enabled: true` in values.yaml, or - `enabled: true` Devices automatically enable their Hook & Image - Probably missing: - More validations - Currently pointing to my Tinkerbell Actions, which I haven't PR'ed yet - How to use: - Clone it, edit the values.yaml to your liking, and deploy. Signed-off-by: Ricardo Pardini <[email protected]> Squashed commits: - showcase: fix insecure-registries empty bug; add odroidm1; bump hooks - showcase: not all images are ubuntu - showcase: introduce insecureRegistries/tinkWorkerImage/tinkWorkerImagePrefix - tinkWorkerImage defaults to quay.io/tinkerbellrpardini/tink-worker:v0.11.0-alpha-rpardini3 - showcase: introduce grpcTLS/grpcInsecureTLS - showcase: generateJobs default to true, allow disabling Jobs - showcase: introduce image.doRestoreGRUBNormalcy for GRUB+EFI entry juggling and enable it for fatso images - showcase: introduce image.doAddEFIBootEntry for efibootmgr juggling and enable it for fatso images - showcase: WiP: nanopct6 (ipxe won't load, even with DTB) - showcase: use rpardini's fork of waitdaemon at quay.io - showcase: bump Hook to 20240604-0609 (further mdev by-id fixes) - showcase: bump Hook to 20240603-0515 (mdev by-id fixes); bump fatso images to v1008 - showcase: bump Hooks; bump images; add rpi4b armbian cloud image; add odroidhc4 example - showcase: fix default userdata script - showcase: bump all armsurvivors Armbian images to 24.05.20-armsurvivors-184; add t95z-cloud-edge image; use qcow2-to-img conversion where relevant - showcase: add support for `xz-qcow2-to-img-gz` image conversion - showcase: bump Hook to 20240520-0941 (finally working armbian's again!) - showcase: bump Hook to 20240520-0729 - showcase: bump Hook to 20240519-1935 (new scheme) - showcase: switch to 20240519-1405 Hook, with new (old?) naming convention - showcase: add demo t95z (meson64) - showcase: bump fatso - showcase: bump images - showcase: add ntp stuff - showcase: bump images, reorg - showcase: add image's 'doInjectHegelCloudInit'; set device's `userData` on the Hardware - add configuration hegelURL - some examples - showcase: bump Hook version; add `latest-lts-xxx` Hooks; add more examples - showcase: bump fatso images - showcase: allow to override hook's defaults via `hookOverride: {}` on the device - showcase: bump hook versions; fix example - showcase: bump hook versions; add examples for peg/pegk and skipDownload - showcase: hook: allow skipping hook download via `skipDownload` - showcase: devices: show `imgstat` before `boot` - showcase: bump fatso images version to 1001; add local variant examples - showcase: HACK: change default Hook amd64 bootMode to reboot (this needs override per-device) - showcase: example 'fatso' baremetal images with download-only and local example - showcase: bump orangepi3b image - showcase: introduce 'download-only' and 'local' non-conversions - showcase: reduce WAIT_SECONDS to zero - showcase: introduce doFixResolvConf at image level - showcase: install pkgs with DEBIAN_FRONTEND=noniteractive, no suggests, no recommends; 180s timeout - showcase: default netplan to device `e*` (not `en*`) so it matches `eth0` too - showcase: add `rock-5b-edge-trixie-uefi-dtb` image for Rock-5b - showcase: add armbian cloud-k8s images for uefi arm64 and amd64 - showcase: bump hook to rpardini's 20240404-2216; add `armbian-rk3588-edge` hook definition (but no board example yet) - showcase: VM examples - showcase: add R58X 3588 example & UEFI cloud image - showcase: validate hookRef not unset - showcase: 0.0.2: disable kexec on arm64, it doesn't really work (yet) - showcase: add README
- `showcase` is a chart that, based on values.yaml dictionaries: - generates Tinkerbell CRs (Hardware/Template/Workflow) for both standard (UEFI) & exotic (supported by Armbian) devices - generates download/process jobs for multiple Hook flavors (see tinkerbell/hook#205) - generates download/process jobs for a few OS images (Ubuntu Cloud Images, Armbian, etc) - should be independent of how one deployed Tinkerbell itself (stack chart, individual components, etc) - A few features: - validates values.yaml for common mistakes; arch must match, etc. - validates & handles rootDisk differences (re-invents "formatPartition()" a bit) - avoids re-downloading Hooks and Images that are already on disk, even if Job re-runs - allows easy way to use - custom Hooks - custom Kernel cmdline parameters at both the Hook & device level - for example `acpi=off` at Hook level and `console=ttyS0` at board level - custom OS images for deployment - reboot or kexec to finish deployment - different partition numbers for OS image's rootfs (some images have ESP, some have a separate `/boot`, etc) - control if growpart and/or ssh/user setup is done during provisioning or not - conversion of OS images (`qemu-to-raw-gzip` and `xz-to-gz`) - has a "merge" mechanism with a common way to set parameters like net gateway, UEFI, etc (also easy to override per-device) - default values have everything `enabled: false` thus showcase should produce nothing by default. - Hooks & Images can be forced `enabled: true` in values.yaml, or - `enabled: true` Devices automatically enable their Hook & Image - Probably missing: - More validations - Currently pointing to my Tinkerbell Actions, which I haven't PR'ed yet - How to use: - Clone it, edit the values.yaml to your liking, and deploy. Signed-off-by: Ricardo Pardini <[email protected]> Squashed commits: - showcase: fix insecure-registries empty bug; add odroidm1; bump hooks - showcase: not all images are ubuntu - showcase: introduce insecureRegistries/tinkWorkerImage/tinkWorkerImagePrefix - tinkWorkerImage defaults to quay.io/tinkerbellrpardini/tink-worker:v0.11.0-alpha-rpardini3 - showcase: introduce grpcTLS/grpcInsecureTLS - showcase: generateJobs default to true, allow disabling Jobs - showcase: introduce image.doRestoreGRUBNormalcy for GRUB+EFI entry juggling and enable it for fatso images - showcase: introduce image.doAddEFIBootEntry for efibootmgr juggling and enable it for fatso images - showcase: WiP: nanopct6 (ipxe won't load, even with DTB) - showcase: use rpardini's fork of waitdaemon at quay.io - showcase: bump Hook to 20240604-0609 (further mdev by-id fixes) - showcase: bump Hook to 20240603-0515 (mdev by-id fixes); bump fatso images to v1008 - showcase: bump Hooks; bump images; add rpi4b armbian cloud image; add odroidhc4 example - showcase: fix default userdata script - showcase: bump all armsurvivors Armbian images to 24.05.20-armsurvivors-184; add t95z-cloud-edge image; use qcow2-to-img conversion where relevant - showcase: add support for `xz-qcow2-to-img-gz` image conversion - showcase: bump Hook to 20240520-0941 (finally working armbian's again!) - showcase: bump Hook to 20240520-0729 - showcase: bump Hook to 20240519-1935 (new scheme) - showcase: switch to 20240519-1405 Hook, with new (old?) naming convention - showcase: add demo t95z (meson64) - showcase: bump fatso - showcase: bump images - showcase: add ntp stuff - showcase: bump images, reorg - showcase: add image's 'doInjectHegelCloudInit'; set device's `userData` on the Hardware - add configuration hegelURL - some examples - showcase: bump Hook version; add `latest-lts-xxx` Hooks; add more examples - showcase: bump fatso images - showcase: allow to override hook's defaults via `hookOverride: {}` on the device - showcase: bump hook versions; fix example - showcase: bump hook versions; add examples for peg/pegk and skipDownload - showcase: hook: allow skipping hook download via `skipDownload` - showcase: devices: show `imgstat` before `boot` - showcase: bump fatso images version to 1001; add local variant examples - showcase: HACK: change default Hook amd64 bootMode to reboot (this needs override per-device) - showcase: example 'fatso' baremetal images with download-only and local example - showcase: bump orangepi3b image - showcase: introduce 'download-only' and 'local' non-conversions - showcase: reduce WAIT_SECONDS to zero - showcase: introduce doFixResolvConf at image level - showcase: install pkgs with DEBIAN_FRONTEND=noniteractive, no suggests, no recommends; 180s timeout - showcase: default netplan to device `e*` (not `en*`) so it matches `eth0` too - showcase: add `rock-5b-edge-trixie-uefi-dtb` image for Rock-5b - showcase: add armbian cloud-k8s images for uefi arm64 and amd64 - showcase: bump hook to rpardini's 20240404-2216; add `armbian-rk3588-edge` hook definition (but no board example yet) - showcase: VM examples - showcase: add R58X 3588 example & UEFI cloud image - showcase: validate hookRef not unset - showcase: 0.0.2: disable kexec on arm64, it doesn't really work (yet) - showcase: add README
- `showcase` is a chart that, based on values.yaml dictionaries: - generates Tinkerbell CRs (Hardware/Template/Workflow) for both standard (UEFI) & exotic (supported by Armbian) devices - generates download/process jobs for multiple Hook flavors (see tinkerbell/hook#205) - generates download/process jobs for a few OS images (Ubuntu Cloud Images, Armbian, etc) - should be independent of how one deployed Tinkerbell itself (stack chart, individual components, etc) - A few features: - validates values.yaml for common mistakes; arch must match, etc. - validates & handles rootDisk differences (re-invents "formatPartition()" a bit) - avoids re-downloading Hooks and Images that are already on disk, even if Job re-runs - allows easy way to use - custom Hooks - custom Kernel cmdline parameters at both the Hook & device level - for example `acpi=off` at Hook level and `console=ttyS0` at board level - custom OS images for deployment - reboot or kexec to finish deployment - different partition numbers for OS image's rootfs (some images have ESP, some have a separate `/boot`, etc) - control if growpart and/or ssh/user setup is done during provisioning or not - conversion of OS images (`qemu-to-raw-gzip` and `xz-to-gz`) - has a "merge" mechanism with a common way to set parameters like net gateway, UEFI, etc (also easy to override per-device) - default values have everything `enabled: false` thus showcase should produce nothing by default. - Hooks & Images can be forced `enabled: true` in values.yaml, or - `enabled: true` Devices automatically enable their Hook & Image - Probably missing: - More validations - Currently pointing to my Tinkerbell Actions, which I haven't PR'ed yet - How to use: - Clone it, edit the values.yaml to your liking, and deploy. Signed-off-by: Ricardo Pardini <[email protected]> Squashed commits: - showcase: fix insecure-registries empty bug; add odroidm1; bump hooks - showcase: not all images are ubuntu - showcase: introduce insecureRegistries/tinkWorkerImage/tinkWorkerImagePrefix - tinkWorkerImage defaults to quay.io/tinkerbellrpardini/tink-worker:v0.11.0-alpha-rpardini3 - showcase: introduce grpcTLS/grpcInsecureTLS - showcase: generateJobs default to true, allow disabling Jobs - showcase: introduce image.doRestoreGRUBNormalcy for GRUB+EFI entry juggling and enable it for fatso images - showcase: introduce image.doAddEFIBootEntry for efibootmgr juggling and enable it for fatso images - showcase: WiP: nanopct6 (ipxe won't load, even with DTB) - showcase: use rpardini's fork of waitdaemon at quay.io - showcase: bump Hook to 20240604-0609 (further mdev by-id fixes) - showcase: bump Hook to 20240603-0515 (mdev by-id fixes); bump fatso images to v1008 - showcase: bump Hooks; bump images; add rpi4b armbian cloud image; add odroidhc4 example - showcase: fix default userdata script - showcase: bump all armsurvivors Armbian images to 24.05.20-armsurvivors-184; add t95z-cloud-edge image; use qcow2-to-img conversion where relevant - showcase: add support for `xz-qcow2-to-img-gz` image conversion - showcase: bump Hook to 20240520-0941 (finally working armbian's again!) - showcase: bump Hook to 20240520-0729 - showcase: bump Hook to 20240519-1935 (new scheme) - showcase: switch to 20240519-1405 Hook, with new (old?) naming convention - showcase: add demo t95z (meson64) - showcase: bump fatso - showcase: bump images - showcase: add ntp stuff - showcase: bump images, reorg - showcase: add image's 'doInjectHegelCloudInit'; set device's `userData` on the Hardware - add configuration hegelURL - some examples - showcase: bump Hook version; add `latest-lts-xxx` Hooks; add more examples - showcase: bump fatso images - showcase: allow to override hook's defaults via `hookOverride: {}` on the device - showcase: bump hook versions; fix example - showcase: bump hook versions; add examples for peg/pegk and skipDownload - showcase: hook: allow skipping hook download via `skipDownload` - showcase: devices: show `imgstat` before `boot` - showcase: bump fatso images version to 1001; add local variant examples - showcase: HACK: change default Hook amd64 bootMode to reboot (this needs override per-device) - showcase: example 'fatso' baremetal images with download-only and local example - showcase: bump orangepi3b image - showcase: introduce 'download-only' and 'local' non-conversions - showcase: reduce WAIT_SECONDS to zero - showcase: introduce doFixResolvConf at image level - showcase: install pkgs with DEBIAN_FRONTEND=noniteractive, no suggests, no recommends; 180s timeout - showcase: default netplan to device `e*` (not `en*`) so it matches `eth0` too - showcase: add `rock-5b-edge-trixie-uefi-dtb` image for Rock-5b - showcase: add armbian cloud-k8s images for uefi arm64 and amd64 - showcase: bump hook to rpardini's 20240404-2216; add `armbian-rk3588-edge` hook definition (but no board example yet) - showcase: VM examples - showcase: add R58X 3588 example & UEFI cloud image - showcase: validate hookRef not unset - showcase: 0.0.2: disable kexec on arm64, it doesn't really work (yet) - showcase: add README
multi-kernel, cross-compiling, bash based Hook & (default+external) kernels build (incl GHA matrix)
Original RFC below; please check commits for the (many) updates done after the first drop. Original RFC kept for reference, below the line.
RFC: multi-kernel, cross-compiling, bash based Hook & (default+external) kernels build (incl GHA matrix)
This is a rewrite of the build system.
The produced default artifacts (aarch64/x86_64) should be equivalent, save for an updated 5.10.213+ kernel and arm64 fixes.
It's missing, at least, documentation and linters, possibly more, that I removed and intend to rewrite.
But since it's a large-ish change, I'd like to collect some feedback before continuing.
Main topics
defconfig
versions, via Kbuild'smake savedefconfig
hook-default-amd64
andhook-default-arm64
kernels are equivalent to the two original.armbian-
prefixed kernels are actually Armbian kernels for more exotic arm64 SBCs, or Armbian's generic UEFI kernels for both arches. Those are very fast to "build" since Armbian publishes their .deb packages in OCI images, and here wejust download and massage them into the format required by Linuxkit.
hook.yaml
is replaced withhook.template.yaml
which is templated via a limited-var invocation ofenvsubst
; only the kernel image and the arch is actually different per-flavor.skopeo
. Can opt-out/use a fixed version.dtbs.tar.gz
artifact together with the initrd and vmlinuz.Flavors (/kernels)
Hook's own kernels
hook-default-arm64
hook-default-amd64
Armbian kernels
edge
: release candidates or stable but rarely LTS, more aggressive patchingcurrent
: LTS kernels, stable-ish patchingarmbian-bcm2711-current
armbian-meson64-edge
armbian-rockchip64-edge
armbian-uefi-arm64-edge
armbian-uefi-x86-edge
Proof of working-ness?
In my fork:
Future possibilities:
it would be fairly simple to add Debian/Ubuntu kernels as well as Armbian firmware.
Many, many more Armbian kernels could be added, but save for Allwinner and the Rockchip
-rkr
vendor kernel, I think they might be too niche.Users should have an easy time adding it themselves if they need, though.
Better support for u-boot's "pxelinux" booting requires changes outside of Hook (namely in Smee/ipxedust) which I'll PR eventually.
Certain arm64 SoCs require changes in iPXE (nap.h) -- same, I'll PR those to ipxedust repo.
All these Hook flavors are used in a "showcase" Helm chart based on stack that I will also PR to the charts repo.
TO-DO
bash build.sh config-kernel <flavor>
& follow instructions to configure kernel; only works for default flavorsbash build.sh build-kernel <flavor>
builds the kernelbash build.sh build <flavor>
builds Hook with that kernelactuated
for native arm64 building? -- https://actuated.dev/blog/arm-ci-cncf-ampereThanks for reading this far. I'm looking forward to your feedback!