diff --git a/.github/workflows/image.yaml b/.github/workflows/image.yaml
index 00ffc03e4..eff6143a6 100644
--- a/.github/workflows/image.yaml
+++ b/.github/workflows/image.yaml
@@ -210,13 +210,36 @@ jobs:
uses: actions/download-artifact@v3
with:
name: kairos-${{ matrix.flavor }}.iso.zip
- - run: |
+ - env:
+ KVM: true
+ run: |
ls -liah
export ISO=$PWD/$(ls *.iso)
mkdir build
mv $ISO build/kairos.iso
- ./earthly.sh +prepare-bundles-tests
- ./earthly.sh +run-qemu-bundles-tests --FLAVOR=${{ matrix.flavor }}
+
+ # Get earthly with luet
+ curl -L https://github.com/mudler/luet/releases/download/0.33.0/luet-0.33.0-linux-amd64 -o luet
+ chmod +x luet
+ sudo mv luet /usr/bin/luet
+ sudo mkdir -p /etc/luet/repos.conf.d/
+ sudo luet repo add -y kairos --url quay.io/kairos/packages --type docker
+ LUET_NOLOCK=true sudo -E luet install -y utils/earthly
+
+ # Configure earthly to use the docker mirror in CI
+ # https://docs.earthly.dev/ci-integration/pull-through-cache#configuring-earthly-to-use-the-cache
+ mkdir -p ~/.earthly/
+ cat << EOF > ~/.earthly/config.yml
+ global:
+ buildkit_additional_config: |
+ [registry."docker.io"]
+ mirrors = ["registry.docker-mirror.svc.cluster.local:5000"]
+ [registry."registry.docker-mirror.svc.cluster.local:5000"]
+ insecure = true
+ EOF
+
+ earthly -P +prepare-bundles-tests
+ earthly -P +run-qemu-bundles-tests --FLAVOR=${{ matrix.flavor }}
qemu-reset-tests:
needs:
@@ -237,14 +260,37 @@ jobs:
uses: actions/download-artifact@v3
with:
name: kairos-${{ matrix.flavor }}.iso.zip
- - run: |
+ - env:
+ KVM: true
+ run: |
ls -liah
sed -i '/build.*/d' .earthlyignore
export ISO=$PWD/$(ls *.iso)
mkdir build
mv $ISO build/kairos.iso
- ./earthly.sh +datasource-iso --CLOUD_CONFIG=tests/assets/autoinstall.yaml
- ./earthly.sh +run-qemu-datasource-tests --TEST_SUITE=reset-test --FLAVOR=${{ matrix.flavor }}
+
+ # Get earthly with luet
+ curl -L https://github.com/mudler/luet/releases/download/0.33.0/luet-0.33.0-linux-amd64 -o luet
+ chmod +x luet
+ sudo mv luet /usr/bin/luet
+ sudo mkdir -p /etc/luet/repos.conf.d/
+ sudo luet repo add -y kairos --url quay.io/kairos/packages --type docker
+ LUET_NOLOCK=true sudo -E luet install -y utils/earthly
+
+ # Configure earthly to use the docker mirror in CI
+ # https://docs.earthly.dev/ci-integration/pull-through-cache#configuring-earthly-to-use-the-cache
+ mkdir -p ~/.earthly/
+ cat << EOF > ~/.earthly/config.yml
+ global:
+ buildkit_additional_config: |
+ [registry."docker.io"]
+ mirrors = ["registry.docker-mirror.svc.cluster.local:5000"]
+ [registry."registry.docker-mirror.svc.cluster.local:5000"]
+ insecure = true
+ EOF
+
+ earthly -P +datasource-iso --CLOUD_CONFIG=tests/assets/autoinstall.yaml
+ earthly -P +run-qemu-datasource-tests --TEST_SUITE=reset-test --FLAVOR=${{ matrix.flavor }}
qemu-netboot-tests:
needs:
diff --git a/Earthfile b/Earthfile
index b1f6492de..9303b402c 100644
--- a/Earthfile
+++ b/Earthfile
@@ -219,6 +219,8 @@ framework:
RUN go run -ldflags "${LDFLAGS}" ./cmd/profile-build/main.go ${FLAVOR} $REPOSITORIES_FILE /framework
+ # Copy kairos binaries
+ COPY +build-kairos-agent/kairos-agent /framework/usr/bin/kairos-agent
COPY +luet/luet /framework/usr/bin/luet
RUN luet cleanup --system-target /framework
@@ -283,8 +285,6 @@ docker:
COPY overlay/files-ubuntu/ /
END
- # Copy kairos binaries
- COPY +build-kairos-agent/kairos-agent /usr/bin/kairos-agent
# Enable services
IF [ -f /sbin/openrc ]
RUN mkdir -p /etc/runlevels/default && \
diff --git a/docs/content/en/docs/Architecture/meta.md b/docs/content/en/docs/Architecture/meta.md
index e124e9354..f294b8a7f 100644
--- a/docs/content/en/docs/Architecture/meta.md
+++ b/docs/content/en/docs/Architecture/meta.md
@@ -12,7 +12,7 @@ We like to define Kairos as a meta-Linux Distribution, as its goal is to convert
The Kairos stack is composed of the following:
-- A core OS image release for each flavor in ISO, qcow2, and other similar formats (currently can pick from openSUSE and Alpine based) provided for user convenience
+- A core OS image release for each flavor in ISO, qcow2, and other similar formats (see [the list of supported distributions](/docs/reference/image_matrix)) provided for user convenience
- A release with K3s embedded.
- A set of Kubernetes Native API components (CRDs) to install into the control-plane node, to manage deployment, artifacts creation, and lifecycle (WIP).
- A set of Kubernetes Native API components (CRDs) to install into the target nodes to manage and control the node after deployment (WIP).
diff --git a/docs/content/en/docs/Architecture/network.md b/docs/content/en/docs/Architecture/network.md
index 791c534b0..a58bb2849 100644
--- a/docs/content/en/docs/Architecture/network.md
+++ b/docs/content/en/docs/Architecture/network.md
@@ -15,6 +15,10 @@ To address these challenges, Kairos provides an easy and robust solution for dep
In this document, we will examine the advantages of using Kairos to deploy Kubernetes clusters at the edge, and how p2p technology facilitates self-coordination for a zero-touch configuration experience. We will also explore how Kairos' highly adaptable and container-based approach, combined with an immutable OS and meta-distribution, makes it an excellent choice for edge deployments.
+{{% alert title="Note" %}}
+You can also watch our [Kairos and libp2p video]({{< ref "docs/media/#how-kairos-uses-libp2p" >}} "Media") in the [Media Section]({{< ref "docs/media" >}} "Media")
+{{% /alert %}}
+
## Overview: P2P for self-coordination
diff --git a/docs/content/en/docs/Examples/p2p_e2e.md b/docs/content/en/docs/Examples/p2p_e2e.md
index 692d6423e..dd70e20c1 100644
--- a/docs/content/en/docs/Examples/p2p_e2e.md
+++ b/docs/content/en/docs/Examples/p2p_e2e.md
@@ -18,6 +18,10 @@ Deploying Kubernetes at the Edge can be a complex and time-consuming process, es
To leverage p2p self-coordination capabilities of Kairos, you will need to configure the `network_token` under the `p2p` configuration block in your cloud-config file. Once you have set this, Kairos will handle the configuration of each node.
+{{% alert title="Note" %}}
+You can see this example live in the [Kairos and libp2p video]({{< ref "docs/media/#how-kairos-uses-libp2p" >}} "Media") in the [Media Section]({{< ref "docs/media" >}} "Media")
+{{% /alert %}}
+
## Description
In the following example we are going to bootstrap a new multi-node, single cluster with Kairos. We will use at least 2 nodes, one as a master and one as a worker. Note how we don't specify any role, or either pin any IP in the following configurations.
diff --git a/docs/content/en/docs/Installation/automated.md b/docs/content/en/docs/Installation/automated.md
index 9bbcb4765..d51a06560 100644
--- a/docs/content/en/docs/Installation/automated.md
+++ b/docs/content/en/docs/Installation/automated.md
@@ -96,6 +96,7 @@ $ docker pull $IMAGE
# Build the ISO
$ docker run -v $PWD/cloud_init.yaml:/cloud_init.yaml \
-v $PWD/build:/tmp/auroraboot \
+ -v /var/run/docker.sock:/var/run/docker.sock \
--rm -ti quay.io/kairos/auroraboot \
--set container_image=docker://$IMAGE \
--set "disable_http_server=true" \
diff --git a/docs/content/en/docs/Media/_index.md b/docs/content/en/docs/Media/_index.md
index b714f08b3..73f11a253 100644
--- a/docs/content/en/docs/Media/_index.md
+++ b/docs/content/en/docs/Media/_index.md
@@ -27,3 +27,7 @@ description: >
### How we build and maintain Kairos
{{< youtube id="XD5nfMf59v4" title="How we build and maintain Kairos" >}}
+
+### How Kairos uses libp2p
+
+{{< youtube id="7Vym18wz9Uw" title="Kairos and libp2p" >}}
diff --git a/docs/content/en/docs/Reference/build.md b/docs/content/en/docs/Reference/build.md
index 93ecd5a22..7f7f3c634 100644
--- a/docs/content/en/docs/Reference/build.md
+++ b/docs/content/en/docs/Reference/build.md
@@ -171,11 +171,42 @@ RUN luet install -y distro-kernels/opensuse-leap distro-initrd/opensuse-leap
# RUN cp cloud.yaml /system/oem/configuration.yaml
```
-After building the container image, use the `osbuilder-tools` image to create an ISO:
+After building the container image, we can create an ISO:
+{{< tabpane text=true >}}
+{{% tab header="AuroraBoot" %}}
+
+We can use [AuroraBoot](/docs/reference/auroraboot) to handle the the ISO build process and optionally attach it a default cloud config, for example:
+
+```bash
+$ IMAGE=