Replies: 3 comments 5 replies
-
|
I had a look and unless I missed it, there doesn't seem to be a way to add data to the raw image through auroraboot flags. But I guess you can extract the source image (e.g. using Regarding the error you see ( |
Beta Was this translation helpful? Give feedback.
-
|
Hello, Thank you for your answer. I have tried extracting the source image using luet, as I have seen in the prepare_nvidia_orin_images script. However, it seems luet does not handle multi-arch manifests and isn't using Qemu (my host is linux/amd64 while I'm using an linux/arm64 container image). Here are the logs. mkdir test
luet util unpack quay.io/kairos/ubuntu:22.04-standard-arm64-rpi4-v3.5.0-k3s-v1.33.2-k3s1 test
INFO Downloading quay.io/kairos/ubuntu:22.04-standard-arm64-rpi4-v3.5.0-k3s-v1.33.2-k3s1 to /home/<my-build-dir>/test
ERROR no child with platform linux/amd64 in index quay.io/kairos/ubuntu:22.04-standard-arm64-rpi4-v3.5.0-k3s-v1.33.2-k3s1As I have seen in this discussion, I tried using crane instead of luet to provide a crane export --platform linux/arm64 quay.io/kairos/ubuntu:22.04-standard-arm64-rpi4-v3.5.0-k3s-v1.33.2-k3s1 container-image.tar
tar -xf container-image.tar -C base-imageNow I indeed have the rootfs in the base-image directory. I have supplied my bundle element into the However, I cannot find any mention of source type dir in the documentation, and generally speaking how to call Auroraboot with this type of source. In the Nvidia AGX documentation, it is explained how to build from a directory :
However this example overrides the entrypoint for the AGX use case. Here are my logs if I try something similar. Note that I'm not overriding Auroraboot's entrypoint : docker run --rm --privileged -v /var/run/docker.sock:/var/run/docker.sock --platform linux/arm64 -v $PWD/cloud-confi
g.yaml:/cloud-config.yaml -v $PWD/output:/output -v $PWD/base-image:/rootfs -e directory=/rootfs quay.io/kairos/auroraboot:latest --debug --set "disable_http_server=true" --set "disable_netboot=true" --set "state_dir=/output" --set "disk.raw=true" --cloud-config /cloud-config.yaml
2025-11-20T15:12:52Z DBG Cloud config cc="#cloud-config\n\nhostname: \"kubevip-{{ trunc 4 .MachineID }}\"\n\ninstall:\n auto: true\n device: \"auto\"\n reboot: true\n\nbundles:\n- targets:\n - run:///system/oem/bundles/k3s/k3s-airgap-images-arm64.tar.gz\n local_file: true\n\nusers:\n- name: \"kairos\"\n passwd: \"kairos\"\n groups:\n - admin\n ssh_authorized_keys:\n - ssh-rsa <my-ssh-key> <my-mail>\n\nkubevip:\n enable: true\n eip: \"192.168.100.110\"\n\np2p:\n # enforce the discovery of nodes on local network\n disable_dht: true\n network_token: \"<my-network-token>\"\n\nk3s:\n enabled: true\n version: \"v1.33.2+k3s1\"\n airgap: true\n\nvpn:\n create: false\n use: false\n\nauto:\n # implicit if network_token is set. Enable role assignment\n enable: true\n ha:\n enable: true\n master_nodes: 1\n\nstages:\n initramfs:\n - name: network-configure-static-ip\n files:\n - path: /etc/systemd/network/10-eth0.network\n permissions: 0644\n content: |\n [Match]\n Name=eth0\n [Network]\n Address=192.168.100.120/24\n Gateway=192.168.100.1\n boot:\n - name: configure-keyboard\n commands:\n - loadkeys fr\n after-install:\n - name: \"copy-k3s-addons-images\"\n commands:\n - mkdir -p /usr/local/.state/var-lib-rancher.bind/k3s/agent/images/\n - cp /system/oem/bundles/k3s/k3s-airgap-images-arm64.tar.gz /usr/local/.state/var-lib-rancher.bind/k3s/agent/images/\n\n"
2025-11-20T15:12:52Z DBG 1.
2025-11-20T15:12:52Z DBG <prepare-dirs> (background: false)
2025-11-20T15:12:52Z DBG
2025-11-20T15:12:52Z DBG 2.
2025-11-20T15:12:52Z DBG <copy-cloud-config> (background: false)
2025-11-20T15:12:52Z DBG
2025-11-20T15:12:52Z DBG 3.
2025-11-20T15:12:52Z DBG <gen-raw-efi-disk> (background: false)
2025-11-20T15:12:52Z DBG
2025-11-20T15:12:52Z DBG 4.
2025-11-20T15:12:52Z DBG
2025-11-20T15:12:52Z DBG 5.
2025-11-20T15:12:52Z DBG
2025-11-20T15:12:52Z DBG Preparing destination temporal directory destination=/output
2025-11-20T15:12:52Z DBG Preparing temp rootfs directory destination=/output/temp-rootfs
2025-11-20T15:12:52Z DBG Preparing temp netboot directory destination=/output/netboot
2025-11-20T15:12:52Z INF Copying cloud config cloudConfig="#cloud-config\n\nhostname: \"kubevip-{{ trunc 4 .MachineID }}\"\n\ninstall:\n auto: true\n device: \"auto\"\n reboot: true\n\nbundles:\n- targets:\n - run:///system/oem/bundles/k3s/k3s-airgap-images-arm64.tar.gz\n local_file: true\n\nusers:\n- name: \"kairos\"\n passwd: \"kairos\"\n groups:\n - admin\n ssh_authorized_keys:\n - ssh-rsa <my-ssh-key> <my-mail>\n\nkubevip:\n enable: true\n eip: \"192.168.100.110\"\n\np2p:\n # enforce the discovery of nodes on local network\n disable_dht: true\n network_token: \"<my-network-token>\"\n\nk3s:\n enabled: true\n version: \"v1.33.2+k3s1\"\n airgap: true\n\nvpn:\n create: false\n use: false\n\nauto:\n # implicit if network_token is set. Enable role assignment\n enable: true\n ha:\n enable: true\n master_nodes: 1\n\nstages:\n initramfs:\n - name: network-configure-static-ip\n files:\n - path: /etc/systemd/network/10-eth0.network\n permissions: 0644\n content: |\n [Match]\n Name=eth0\n [Network]\n Address=192.168.100.120/24\n Gateway=192.168.100.1\n boot:\n - name: configure-keyboard\n commands:\n - loadkeys fr\n after-install:\n - name: \"copy-k3s-addons-images\"\n commands:\n - mkdir -p /usr/local/.state/var-lib-rancher.bind/k3s/agent/images/\n - cp /system/oem/bundles/k3s/k3s-airgap-images-arm64.tar.gz /usr/local/.state/var-lib-rancher.bind/k3s/agent/images/\n\n"
2025-11-20T15:12:52Z INF Generating raw disk '/output' from '/output/temp-rootfs' with final size 0Mb
2025-11-20T15:12:52Z ERR failed to get image label error="open /output/temp-rootfs/etc/os-release: no such file or directory"
2025-11-20T15:12:52Z ERR failed to get image label error="open /output/temp-rootfs/etc/os-release: no such file or directory"
2025-11-20T15:12:52Z DBG Got output name name=kairos--.raw
...I truncated the logs. But here, we see that once the cloud config is copied, it follows up with the raw disk generation. While, back when I used a container_image, the steps were :
I can't figure out why Auroraboot is skipping the rootfs copy step. This is the reason why etc/os-release file is missing. Could you please provide me more info ? Thanks. |
Beta Was this translation helpful? Give feedback.
-
|
Hello again, I've successfully managed to add my bundle. I'll provide the detailed instructions here in case anybody has the same issue.
crane export --platform linux/arm64 quay.io/kairos/ubuntu:22.04-standard-arm64-rpi4-v3.5.0-k3s-v1.33.2-k3s1 container-image.tar
mkdir base-image
sudo tar -xf container-image.tar -C base-image
docker run --rm --privileged -v /var/run/docker.sock:/var/run/docker.sock --platform linux/arm64 \
-v $PWD/cloud-config.yaml:/cloud-config.yaml \
-v $PWD/output:/output -v $PWD/base-image:/rootfs \
quay.io/kairos/auroraboot:latest --debug \
--set "disable_http_server=true" \
--set "disable_netboot=true" \
--set "state_dir=/output" \
--set "disk.raw=true" \
--set "container_image=dir:///rootfs" \
--cloud-config /cloud-config.yamlI've a few issues that I should fix now :
bundles:
- targets:
- run:///system/oem/bundles/k3s/k3s-airgap-images-arm64.tar.gz
local_file: true
stages:
after-install:
- name: "copy-k3s-addons-images"
commands:
- mkdir -p /usr/local/.state/var-lib-rancher.bind/k3s/agent/images/
- cp /system/oem/bundles/k3s/k3s-airgap-images-arm64.tar.gz /usr/local/.state/var-lib-rancher.bind/k3s/agent/images/I've also tried the |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
Hello,
I'm trying to install Kairos 3.5.0 with K3S on a Raspberry PI 4. I'm flashing the OS on an SSD +SATA adapter pluggued through USB to my PI. I have been following this documentation: https://kairos.io/docs/installation/raspberry/
I'm using the following container image:
quay.io/kairos/ubuntu:22.04-standard-arm64-rpi4-v3.5.0-k3s-v1.33.2-k3s1.Once the raw file is flashed to my Raspberry' SSD (I used BalenaEtcher), Kairos installs just fine, and the system reboot on its primary partition. The system is accessible through SSH on the local IP I have set in my cloud-init file. I have noticed that K3S is not running : I suppose that K3S images are not on the system, which prevents the service starting.
My goal is to install Kairos on this Raspberry in an airgapped environment. I have seen the following example: https://kairos.io/docs/examples/airgap/ however I have been struggling to fit this documentation to the Raspberry. I am using Auroraboot through Docker, which run in WSL2 (Ubuntu 24.04 distro) on my Windows host. I used QEMU to run Auroraboot on linux/arm64 platform.
The Kairos installation on Raspberry is using the parameter
--set "disk.raw=true"to generate the raw file that will be provided to Etcher to flash the Pi. However, the Kairos airgap documentation is using the parameter--set "iso.data=<path-to-mountpoint>", which suggest that this only work for generating ISOs. This may be dumb but I have tried to combine--set "disk.raw=truewith--set iso.data=..., without success. Here are the logs, just in case:I'm also not sure about where to place the bundle in the cloud-init config file. Here is my cloud-init file:
My main question is: is there a way to provide bundles into the a raw file, and if so, how to proceed with the cloud-init config file?
Thank you.
Beta Was this translation helpful? Give feedback.
All reactions