1999 - Update repositories and adapt /etc/os-release to versioneer (#2081)

* Use kairos-agent instead of naming.sh everywhere

For this commit, kairos-agent has to be built from at least 4409a4e

Also:

- Remove some relics from when we had docs in this repo and when we
used to pass a VERSION to the bundle for systemd-sysext (now we use
"_ANY")
- Simplify earthly targets. They don't need all that input just to construct
  the artifact name because it's running on the "base-image".
  The artifact name is already written in the /etc/os-release file.
- Remove +version target and convert GIT_VERSION to a normal target because when you call
  `DO +foo` in a target and "foo" has "FROM myimage" in it, after the call, your
  target now runs on "myimage".

- Remove "VERSION" instances from most places, except in reusable-build-flavor
  which is using it to replace it with "latest" thus the current value
  (just the kairos version) should work. That workflow is disabled currently
  but I tried not to break it in case someone re-enables it.

Signed-off-by: Dimitris Karakasilis <dimitris@karakasilis.me>

* Fix rebase mistake

Signed-off-by: Dimitris Karakasilis <dimitris@karakasilis.me>

* Fix issues building arm

Signed-off-by: Mauro Morales <mauro.morales@spectrocloud.com>

* Oops

Signed-off-by: Mauro Morales <mauro.morales@spectrocloud.com>

---------

Signed-off-by: Dimitris Karakasilis <dimitris@karakasilis.me>
Signed-off-by: Mauro Morales <mauro.morales@spectrocloud.com>
Co-authored-by: Mauro Morales <mauro.morales@spectrocloud.com>
This commit is contained in:
Dimitris Karakasilis 2023-12-21 23:12:44 +02:00 committed by GitHub
parent fa901cb6d1
commit ec6a6f26be
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
16 changed files with 326 additions and 582 deletions

View File

@ -83,6 +83,12 @@ jobs:
files_yaml: |
nvidia:
- 'images/Dockerfile.nvidia'
- name: Install kairos-agent (for versioneer)
uses: Luet-lab/luet-install-action@v1.1
with:
repository: quay.io/kairos/packages
packages: system/kairos-agent
- name: Release space from worker
if: steps.changed-files.outputs.nvidia_any_changed == 'true'
run: |
@ -131,7 +137,7 @@ jobs:
- name: Build 🔧 & Push 🚀
if: steps.changed-files.outputs.nvidia_any_changed == 'true'
run: |
export IMAGE=$(FAMILY=ubuntu FLAVOR=ubuntu FLAVOR_RELEASE="20.04" MODEL=nvidia-jetson-agx-orin VARIANT=core TARGETARCH=arm64 REGISTRY_AND_ORG="quay.io/kairos" ./images/naming.sh container_artifact_base_name)
export IMAGE=$(FLAVOR=ubuntu FLAVOR_RELEASE="20.04" MODEL=nvidia-jetson-agx-orin VARIANT=core TARGETARCH=arm64 REGISTRY_AND_ORG="quay.io/kairos" ID=master kairos-agent versioneer base-container-artifact-name)
docker build --platform=linux/arm64 -t $IMAGE -f ./images/Dockerfile.nvidia ./images
docker push $IMAGE
@ -143,7 +149,7 @@ jobs:
flavor: ubuntu
flavor_release: "20.04"
family: ubuntu
# is there a way to run the naming.sh script here?
# is there a way to run versioneer here?
base_image: quay.io/kairos/ubuntu:20.04-core-arm64-nvidia-jetson-agx-orin-master
model: nvidia-jetson-agx-orin
worker: fast

View File

@ -68,6 +68,11 @@ jobs:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install kairos-agent (for versioneer)
uses: Luet-lab/luet-install-action@v1.1
with:
repository: quay.io/kairos/packages
packages: system/kairos-agent
- name: Release space from worker
if: steps.changed-files.outputs.nvidia_any_changed == 'true'
run: |
@ -112,7 +117,7 @@ jobs:
run: echo ${{ secrets.QUAY_PASSWORD }} | docker login -u ${{ secrets.QUAY_USERNAME }} --password-stdin quay.io
- name: Build 🔧 & Push 🚀
run: |
export IMAGE=$(FAMILY=ubuntu FLAVOR=ubuntu FLAVOR_RELEASE="20.04" MODEL=nvidia-jetson-agx-orin VARIANT=core TARGETARCH=arm64 REGISTRY_AND_ORG="quay.io/kairos" BRANCH=release ./images/naming.sh container_artifact_base_name)
export IMAGE=$(FLAVOR=ubuntu FLAVOR_RELEASE="20.04" MODEL=nvidia-jetson-agx-orin VARIANT=core TARGETARCH=arm64 REGISTRY_AND_ORG="quay.io/kairos" ID=release kairos-agent versioneer base-container-artifact-name)
docker build --platform=linux/arm64 -t $IMAGE -f ./images/Dockerfile.nvidia ./images
docker push $IMAGE
@ -123,7 +128,7 @@ jobs:
flavor: ubuntu
flavor_release: "20.04"
family: ubuntu
# is there a way to run the naming.sh script here?
# is there a way to run versioneer here?
base_image: quay.io/kairos/ubuntu:20.04-core-arm64-nvidia-jetson-agx-orin-release
model: nvidia-jetson-agx-orin
worker: fast
@ -208,7 +213,6 @@ jobs:
-BASE_IMAGE=${{ matrix.baseImage }}
- name: Convert all json files into a reports.tar.gz file
run: |
export VERSION=$(cat build/VERSION)
cd build
filename=$(ls *-grype.json | head -n 1) && filename=${filename%%-grype.json}
sudo tar cvf "${filename}-scan-reports.tar.gz" *.json
@ -233,7 +237,7 @@ jobs:
sudo luet util pack $IMAGE build.tar image.tar
sudo -E docker load -i image.tar
sudo -E docker push "$IMAGE"
sudo rm -rf build/IMAGE build/VERSION
sudo rm -rf build/IMAGE
- name: Release
uses: softprops/action-gh-release@v1
if: startsWith(github.ref, 'refs/tags/')
@ -332,7 +336,6 @@ jobs:
-BASE_IMAGE=${{ matrix.baseImage }}
- name: Convert all json files into a reports.tar.gz file
run: |
export VERSION=$(cat build/VERSION)
cd build
filename=$(ls *-grype.json | head -n 1) && filename=${filename%%-grype.json}
sudo tar cvf "${filename}-scan-reports.tar.gz" *.json
@ -357,7 +360,7 @@ jobs:
sudo luet util pack $IMAGE build.tar image.tar
sudo -E docker load -i image.tar
sudo -E docker push "$IMAGE"
sudo rm -rf build/IMAGE build/VERSION
sudo rm -rf build/IMAGE
- name: Release
uses: softprops/action-gh-release@v1
if: startsWith(github.ref, 'refs/tags/')

View File

@ -153,7 +153,6 @@ jobs:
--output-signature="${filename}.sig" "${filename}"
- name: Prepare files for release
run: |
export VERSION=$(cat release/VERSION)
mkdir sarif
mv release/*.sarif sarif/
mkdir reports
@ -163,7 +162,7 @@ jobs:
sudo tar cvf "${filename}-scan-reports.tar.gz" *.json
mv *.tar.gz ../release/
cd ..
rm release/VERSION release/IMAGE release/versions.yaml
rm release/IMAGE release/versions.yaml
- name: Release
uses: softprops/action-gh-release@v1
if: startsWith(github.ref, 'refs/tags/')
@ -256,7 +255,6 @@ jobs:
cosign sign $(docker image inspect --format='{{index .RepoDigests 0}}' "$IMAGE")
- name: Prepare files for release
run: |
export VERSION=$(cat release/VERSION)
mkdir sarif
mv release/*.sarif sarif/
mkdir reports
@ -266,7 +264,7 @@ jobs:
sudo tar cvf "${filename}-scan-reports.tar.gz" *.json
mv *.tar.gz ../release/
cd ..
sudo rm -rf release/IMAGE release/VERSION release/versions.yaml
sudo rm -rf release/IMAGE release/versions.yaml
- name: Release
uses: softprops/action-gh-release@v1
if: startsWith(github.ref, 'refs/tags/')

View File

@ -90,9 +90,15 @@ jobs:
- name: Login to Quay Registry
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' && steps.changed-files.outputs.nvidia_any_changed == 'true' }}
run: echo ${{ secrets.QUAY_PASSWORD }} | docker login -u ${{ secrets.QUAY_USERNAME }} --password-stdin quay.io
- name: Install kairos-agent (for versioneer)
uses: Luet-lab/luet-install-action@v1.1
with:
repository: quay.io/kairos/packages
packages: system/kairos-agent
- name: Build 🔧 & Push 🚀
if: steps.changed-files.outputs.nvidia_any_changed == 'true'
run: |
export IMAGE=$(FAMILY=${{ inputs.family }} FLAVOR=${{ inputs.flavor }} FLAVOR_RELEASE="${{ inputs.flavor_release}}" MODEL=${{ inputs.model}} TARGETARCH=${{ inputs.arch }} REGISTRY_AND_ORG="quay.io/kairos" ./images/naming.sh container_artifact_base_name)
export IMAGE=$(FLAVOR=${{ inputs.flavor }} FLAVOR_RELEASE="${{ inputs.flavor_release}}" MODEL=${{ inputs.model}} TARGETARCH=${{ inputs.arch }} REGISTRY_AND_ORG="quay.io/kairos" ID=master kairos-agent versioneer base-container-artifact-name)
docker build --platform=linux/${{ inputs.arch }} --build-arg="FAMILY=${{ inputs.family }}" --build-arg="FLAVOR=${{ inputs.flavor }}" --build-arg="FLAVOR_RELEASE=${{ inputs.flavor_release }}" --build-arg="MODEL=${{ inputs.model }}" --build-arg="BASE_IMAGE=${{ inputs.base_image }}" -t $IMAGE -f ./images/Dockerfile.${{ inputs.family }} ./images
docker push $IMAGE

View File

@ -95,9 +95,6 @@ jobs:
sudo iptables -I INPUT -s 169.254.169.254 -j DROP
sudo iptables -I OUTPUT -d 169.254.169.254 -j DROP
- name: Build PR 🔧
if: ${{ github.event_name == 'pull_request' }}
env:
VERSION: latest
run: |
earthly --platform=linux/${{ inputs.arch }} +ci \
--SECURITY_SCANS=false \
@ -109,10 +106,15 @@ jobs:
--FAMILY=${{ inputs.family }}
sudo mv build/* .
sudo rm -rf build
- name: Install kairos-agent (for versioneer)
uses: Luet-lab/luet-install-action@v1.1
with:
repository: quay.io/kairos/packages
packages: system/kairos-agent
- name: Build master 🔧
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}
run: |
export BASE_IMAGE=$(FAMILY=${{ inputs.family }} FLAVOR=${{ inputs.flavor }} FLAVOR_RELEASE="${{ inputs.flavor_release}}" MODEL=${{ inputs.model}} TARGETARCH=${{ inputs.arch }} REGISTRY_AND_ORG="quay.io/kairos" ./images/naming.sh container_artifact_base_name)
export BASE_IMAGE=$(FLAVOR=${{ inputs.flavor }} FLAVOR_RELEASE="${{ inputs.flavor_release}}" MODEL=${{ inputs.model}} TARGETARCH=${{ inputs.arch }} REGISTRY_AND_ORG="quay.io/kairos" ID=master kairos-agent versioneer base-container-artifact-name)
earthly --platform=linux/${{ inputs.arch }} +ci \
--SECURITY_SCANS=true \
--VARIANT=${{ inputs.variant }} \

View File

@ -95,10 +95,15 @@ jobs:
sudo mv build/* .
sudo rm -rf build
- name: Install kairos-agent (for versioneer)
uses: Luet-lab/luet-install-action@v1.1
with:
repository: quay.io/kairos/packages
packages: system/kairos-agent
- name: Build master 🔧
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/master' }}
run: |
export BASE_IMAGE=$(FAMILY=${{ inputs.family }} FLAVOR=${{ inputs.flavor }} FLAVOR_RELEASE="${{ inputs.flavor_release}}" MODEL=${{ inputs.model}} TARGETARCH=${{ inputs.arch }} REGISTRY_AND_ORG="quay.io/kairos" ./images/naming.sh container_artifact_base_name)
export BASE_IMAGE=$(FLAVOR=${{ inputs.flavor }} FLAVOR_RELEASE="${{ inputs.flavor_release}}" MODEL=${{ inputs.model}} TARGETARCH=${{ inputs.arch }} REGISTRY_AND_ORG="quay.io/kairos" ID=master kairos-agent versioneer base-container-artifact-name)
earthly --platform=linux/${{ inputs.arch }} +extract-framework-profile
K3S_VERSION=$(sudo luet --config framework-profile.yaml search -o json k8s/k3s | jq '.packages | map(.version) | unique | last' | tr -d '"')
earthly --platform=linux/${{ inputs.arch }} +ci \

View File

@ -121,7 +121,6 @@ jobs:
- name: Convert all json files into a reports.tar.gz file
if: startsWith(github.ref, 'refs/tags/v')
run: |
export VERSION=$(cat build/VERSION)
cd build
filename=$(ls *-grype.json | head -n 1) && filename=${filename%%-grype.json}
sudo tar cvf "${filename}-scan-reports.tar.gz" *.json
@ -146,7 +145,7 @@ jobs:
sudo luet util pack $IMAGE build.tar image.tar
sudo -E docker load -i image.tar
sudo -E docker push "$IMAGE"
sudo rm -rf build/IMAGE build/VERSION
sudo rm -rf build/IMAGE
- name: Release
if: startsWith(github.ref, 'refs/tags/v')
uses: softprops/action-gh-release@v1

386
Earthfile
View File

@ -106,6 +106,12 @@ arm-container-image:
BUILD --platform=linux/arm64 +base-image
all-arm-generic:
ARG --required FLAVOR
ARG --required FLAVOR_RELEASE
ARG --required BASE_IMAGE
ARG --required MODEL
ARG --required VARIANT
ARG --required FAMILY
BUILD --platform=linux/arm64 +iso --MODEL=generic
build-and-push-golang-testing:
@ -136,31 +142,13 @@ uuidgen:
SAVE ARTIFACT UUIDGEN UUIDGEN
GIT_VERSION:
COMMAND
git-version:
FROM alpine
RUN apk add git
COPY . ./
RUN git describe --always --tags --dirty > GIT_VERSION
SAVE ARTIFACT GIT_VERSION GIT_VERSION
version:
ARG K3S_VERSION
DO +GIT_VERSION
ARG _GIT_VERSION=$(cat ./GIT_VERSION)
# Remove luet rebuild numbers like we do here:
# https://github.com/kairos-io/packages/blob/2fbc098d0499a0c34c587057ff8a9f00c2b7f575/packages/k8s/k3s/build.yaml#L11-L12
IF [ "$K3S_VERSION" != "" ]
ARG _FIXED_VERSION=$(echo $K3S_VERSION | sed 's/+[[:digit:]]*//')
ARG _K3S_VERSION="-k3sv${_FIXED_VERSION}+k3s1"
END
RUN --no-cache echo ${_GIT_VERSION}${_K3S_VERSION} > VERSION
ARG VERSION=$(cat VERSION)
SAVE ARTIFACT VERSION VERSION
hadolint:
ARG HADOLINT_VERSION
FROM hadolint/hadolint:$HADOLINT_VERSION
@ -200,24 +188,9 @@ syft:
SAVE ARTIFACT /syft syft
image-sbom:
ARG TARGETARCH
ARG --required FAMILY # The dockerfile to use
ARG --required FLAVOR # The distribution E.g. "ubuntu"
ARG --required FLAVOR_RELEASE # The distribution release/version E.g. "20.04"
ARG --required VARIANT
ARG --required MODEL
ARG --required BASE_IMAGE # BASE_IMAGE is the image to apply the strategy (aka FLAVOR) on. E.g. ubuntu:20.04
# Use base-image so it can read original os-release file
FROM +base-image
WORKDIR /build
ARG FLAVOR
ARG VARIANT
COPY +version/VERSION ./
ARG KAIROS_VERSION=$(cat VERSION)
COPY ./images/naming.sh .
ARG ISO_NAME=$(./naming.sh bootable_artifact_name)
ARG ISO_NAME=$(source /etc/os-release; echo '$KAIROS_ARTIFACT')
COPY +syft/syft /usr/bin/syft
RUN syft / -o json=sbom.syft.json -o spdx-json=sbom.spdx.json
@ -253,6 +226,10 @@ extract-framework-profile:
FROM quay.io/kairos/framework:${_FRAMEWORK_VERSION}
SAVE ARTIFACT /etc/luet/luet.yaml framework-profile.yaml AS LOCAL ./framework-profile.yaml
extract-kairos-agent-from-framework:
FROM quay.io/kairos/framework:${KAIROS_FRAMEWORK_VERSION}
SAVE ARTIFACT /usr/bin/kairos-agent kairos-agent
base-image:
ARG TARGETARCH # Earthly built-in (not passed)
ARG --required FAMILY # The dockerfile to use
@ -261,13 +238,26 @@ base-image:
ARG --required VARIANT
ARG --required MODEL
ARG --required BASE_IMAGE # BASE_IMAGE is the image to apply the strategy (aka FLAVOR) on. E.g. ubuntu:20.04
ARG K3S_VERSION
ARG FRAMEWORK_VERSION
# TODO for the framework image. Do we call the last stable version available or master?
ARG K3S_VERSION
DO +GIT_VERSION
ARG KAIROS_VERSION=$(cat ./GIT_VERSION)
ARG K3S_VERSION # As it comes from luet package
ARG SOFTWARE_VERSION_PREFIX="k3s"
ARG _SOFTWARE_LUET_VERSION=$K3S_VERSION
# Takes 1.28.2+1 and converts that to v1.18.2+k3s1
# Hack because we use a different version in the luet package and in the
# artifact names.
# TODO: Remove this when we change the package version to not have the
# hardcoded k3s1. Then we will use the version exactly as it comes from
# luet, in the artifact names. E.g. v1.28.2+k3s2+3 (including our build number)
IF [ "$K3S_VERSION" != "" ]
ARG _FIXED_VERSION=$(echo $K3S_VERSION | sed 's/+[[:digit:]]*//')
ARG SOFTWARE_VERSION="v${_FIXED_VERSION}+k3s1"
END
COPY +git-version/GIT_VERSION GIT_VERSION
ARG RELEASE=$(cat ./GIT_VERSION)
IF [ "$FRAMEWORK_VERSION" != "" ]
ARG _FRAMEWORK_VERSION=$FRAMEWORK_VERSION
@ -281,40 +271,30 @@ base-image:
--build-arg FLAVOR=$FLAVOR \
--build-arg FLAVOR_RELEASE=$FLAVOR_RELEASE \
--build-arg VARIANT=$VARIANT \
--build-arg VERSION=$KAIROS_VERSION \
--build-arg K3S_VERSION=$K3S_VERSION \
--build-arg FAMILY=$FAMILY \
--build-arg RELEASE=$RELEASE \
--build-arg SOFTWARE_VERSION=$SOFTWARE_VERSION \
--build-arg SOFTWARE_LUET_VERSION=$_SOFTWARE_LUET_VERSION \
--build-arg SOFTWARE_VERSION_PREFIX=$SOFTWARE_VERSION_PREFIX \
--build-arg FRAMEWORK_VERSION=$_FRAMEWORK_VERSION \
-f +kairos-dockerfile/Dockerfile \
./images
COPY +version/VERSION ./
COPY ./images/naming.sh .
ARG OS_NAME=kairos-${VARIANT}-${FLAVOR}-${FLAVOR_RELEASE}
RUN KAIROS_VERSION=$(cat ./VERSION) \
OS_VERSION=$(cat ./VERSION) \
OS_LABEL=$(cat ./VERSION) \
OS_LABEL=$(naming.sh container_artifact_label) \
OS_REPO=$(naming.sh container_artifact_repo) \
ARTIFACT=$(naming.sh bootable_artifact_name) \
envsubst >>/etc/os-release </usr/lib/os-release.tmpl
RUN KAIROS_VERSION=$(cat ./VERSION) naming.sh container_artifact_name > /IMAGE
RUN kairos-agent versioneer container-artifact-name # To see the error if one occurs.
RUN kairos-agent versioneer container-artifact-name > /IMAGE
ARG _CIMG=$(cat ./IMAGE)
COPY +git-version/GIT_VERSION VERSION
SAVE IMAGE $_CIMG
SAVE ARTIFACT /etc/os-release osrelease
SAVE ARTIFACT /IMAGE AS LOCAL build/IMAGE
SAVE ARTIFACT VERSION AS LOCAL build/VERSION
SAVE ARTIFACT /etc/kairos/versions.yaml versions.yaml AS LOCAL build/versions.yaml
image-rootfs:
ARG --required FAMILY
ARG --required FLAVOR
ARG --required FLAVOR_RELEASE
ARG --required BASE_IMAGE
ARG --required MODEL
ARG --required VARIANT
BUILD +base-image # Make sure the image is also saved locally
FROM +base-image
@ -356,13 +336,6 @@ uki-tools-image:
# os-release
# uname
uki-base:
ARG --required FAMILY # The dockerfile to use
ARG --required FLAVOR # The distribution E.g. "ubuntu"
ARG --required FLAVOR_RELEASE # The distribution release/version E.g. "20.04"
ARG --required VARIANT
ARG --required MODEL
ARG --required BASE_IMAGE
ARG TARGETARCH
WORKDIR build
# Build kernel,uname, etc artifacts
FROM +base-image --BUILD_INITRD=false
@ -393,8 +366,10 @@ uki-build:
COPY +uki-base/Cmdline .
COPY +uki-base/Uname .
COPY +uki-base/Osrelease .
COPY +version/VERSION .
ARG KAIROS_VERSION=$(cat VERSION)
COPY +git-version/GIT_VERSION ./
ARG KAIROS_VERSION=$(cat GIT_VERSION)
ARG UNAME=$(cat Uname)
RUN /usr/lib/systemd/ukify Kernel initrd \
--cmdline=@Cmdline \
@ -422,8 +397,9 @@ uki-build:
# Then we generate the image from scratch to not ring anything else
uki-image-artifacts:
FROM +uki-tools-image
COPY +version/VERSION ./
ARG KAIROS_VERSION=$(cat VERSION)
COPY +git-version/GIT_VERSION ./
ARG KAIROS_VERSION=$(cat GIT_VERSION)
COPY +uki-build/systemd-bootx64.signed.efi /output/efi/EFI/BOOT/BOOTX64.EFI
COPY +uki-build/uki.signed.efi /output/efi/EFI/kairos/${KAIROS_VERSION}.efi
COPY +uki-build/${KAIROS_VERSION}.conf /output/efi/loader/entries/${KAIROS_VERSION}.conf
@ -442,18 +418,15 @@ uki-image:
SAVE IMAGE --push $_CIMG.uki
uki-iso:
FROM ubuntu
COPY +version/VERSION ./
ARG KAIROS_VERSION=$(cat VERSION)
ARG TARGETARCH
ARG --required FAMILY # The dockerfile to use
ARG --required FLAVOR # The distribution E.g. "ubuntu"
ARG --required FLAVOR_RELEASE # The distribution release/version E.g. "20.04"
ARG --required VARIANT
ARG --required MODEL
ARG --required BASE_IMAGE
COPY ./images/naming.sh .
ARG ISO_NAME=$(./naming.sh bootable_artifact_name)
# +base-image will be called again by +uki but will be cached.
# We just use it here to take a shortcut to the artifact name
FROM +base-image
WORKDIR /build
ARG ISO_NAME=$(source /etc/os-release; echo '$KAIROS_ARTIFACT')
COPY +git-version/GIT_VERSION ./
ARG KAIROS_VERSION=$(cat GIT_VERSION)
ARG OSBUILDER_IMAGE
FROM $OSBUILDER_IMAGE
WORKDIR /build
@ -498,23 +471,6 @@ uki-iso:
###
iso:
FROM ubuntu
COPY +version/VERSION ./
ARG KAIROS_VERSION=$(cat VERSION)
ARG TARGETARCH
# args for base-image target
ARG --required FAMILY
ARG --required FLAVOR
ARG --required FLAVOR_RELEASE
ARG --required BASE_IMAGE
ARG --required MODEL
ARG --required VARIANT
COPY ./images/naming.sh .
ARG ISO_NAME=$(./naming.sh bootable_artifact_name)
ARG OSBUILDER_IMAGE
FROM $OSBUILDER_IMAGE
WORKDIR /build
@ -524,6 +480,8 @@ iso:
COPY --keep-own +image-rootfs/rootfs /build/image
COPY --keep-own +image-rootfs/IMAGE IMAGE
ARG ISO_NAME=$(source /build/image/etc/os-release; echo '$KAIROS_ARTIFACT')
RUN /entrypoint.sh --name $ISO_NAME --debug build-iso --squash-no-compression --date=false dir:/build/image --output /build/
SAVE ARTIFACT IMAGE AS LOCAL build/IMAGE
SAVE ARTIFACT /build/$ISO_NAME.iso kairos.iso AS LOCAL build/$ISO_NAME.iso
@ -535,57 +493,31 @@ iso:
# you can override either the full thing by setting --REMOTE_IMG=docker:REPO/IMAGE:TAG
# or by --REMOTE_IMG=REPO/IMAGE:TAG
iso-remote:
FROM ubuntu
ARG --required REMOTE_IMG
FROM $REMOTE_IMG
ARG ISO_NAME=$(source /etc/os-release; echo '$KAIROS_ARTIFACT')
ARG TARGETARCH
ARG REMOTE_IMG
COPY +version/VERSION ./
ARG KAIROS_VERSION=$(cat VERSION)
ARG --required FAMILY # The dockerfile to use
ARG --required FLAVOR # The distribution E.g. "ubuntu"
ARG --required FLAVOR_RELEASE # The distribution release/version E.g. "20.04"
ARG --required VARIANT
ARG --required MODEL
ARG --required BASE_IMAGE
COPY ./images/naming.sh .
ARG ISO_NAME=$(./naming.sh bootable_artifact_name)
ARG OSBUILDER_IMAGE
FROM $OSBUILDER_IMAGE
WORKDIR /build
COPY . ./
RUN /entrypoint.sh --name $ISO_NAME --debug build-iso --squash-no-compression --date=false docker:$REMOTE_IMG --output /build/
SAVE ARTIFACT /build/$ISO_NAME.iso kairos.iso AS LOCAL build/$ISO_NAME.iso
SAVE ARTIFACT /build/$ISO_NAME.iso.sha256 kairos.iso.sha256 AS LOCAL build/$ISO_NAME.iso.sha256
netboot:
FROM ubuntu
FROM +base-image
COPY +version/VERSION ./
RUN echo "version ${VERSION}"
# For ipxe.tmpl to be able to substitute. It's called version but it references the release tag, this is why we need
# to remove the -k3s version
ARG VERSION=$(cat VERSION | sed 's/-k3s.*//')
# For naming.sh we need the complete version including the K3S version in order to build the artifact names
ARG KAIROS_VERSION=$(cat VERSION)
ARG ISO_NAME=$(source /etc/os-release; echo '$KAIROS_ARTIFACT')
ARG TARGETARCH # Earthly built-in (not passed)
ARG --required FAMILY # The dockerfile to use
ARG --required FLAVOR # The distribution E.g. "ubuntu"
ARG --required FLAVOR_RELEASE # The distribution release/version E.g. "20.04"
ARG --required VARIANT
ARG --required MODEL
ARG --required BASE_IMAGE # BASE_IMAGE is the image to apply the strategy (aka FLAVOR) on. E.g. ubuntu:20.04
COPY ./images/naming.sh .
ARG ISO_NAME=$(./naming.sh bootable_artifact_name)
ARG OSBUILDER_IMAGE
# Used here: https://github.com/kairos-io/osbuilder/blob/66e9e7a9403a413e310f462136b70d715605ab09/tools-image/ipxe.tmpl#L5
# Variables used here:
# https://github.com/kairos-io/osbuilder/blob/66e9e7a9403a413e310f462136b70d715605ab09/tools-image/ipxe.tmpl#L5
COPY +git-version/GIT_VERSION GIT_VERSION
ARG VERSION=$(cat ./GIT_VERSION)
ARG RELEASE_URL=https://github.com/kairos-io/kairos/releases/download
ARG OSBUILDER_IMAGE
FROM $OSBUILDER_IMAGE
WORKDIR /build
@ -601,44 +533,18 @@ netboot:
SAVE ARTIFACT /build/$ISO_NAME-initrd initrd AS LOCAL build/$ISO_NAME-initrd
SAVE ARTIFACT /build/$ISO_NAME.ipxe ipxe AS LOCAL build/$ISO_NAME.ipxe
artifact-name:
ARG TARGETARCH
ARG --required FAMILY
ARG --required FLAVOR
ARG --required FLAVOR_RELEASE
ARG --required VARIANT
ARG --required MODEL
ARG --required BASE_IMAGE
ARG --required NAMING_FUNC
ARG --required NAMING_EXT
ARG --required KAIROS_VERSION
FROM ubuntu
COPY ./images/naming.sh /usr/bin/local/naming.sh
RUN echo $(/usr/bin/local/naming.sh ${NAMING_FUNC})${NAMING_EXT} > /ARTIFACT_NAME
SAVE ARTIFACT /ARTIFACT_NAME ARTIFACT_NAME
arm-image:
ARG OSBUILDER_IMAGE
ARG COMPRESS_IMG=true
ARG IMG_COMPRESSION=xz
COPY --platform=linux/arm64 +base-image/osrelease osrelease
ARG IMAGE_NAME=$(source osrelease && echo $KAIROS_ARTIFACT).img
RUN rm osrelease
FROM $OSBUILDER_IMAGE
COPY +version/VERSION ./
ARG KAIROS_VERSION=$(cat VERSION)
RUN echo "version ${KAIROS_VERSION}"
ARG TARGETARCH
ARG --required FAMILY
ARG --required FLAVOR
ARG --required FLAVOR_RELEASE
ARG --required VARIANT
ARG --required MODEL
ARG --required BASE_IMAGE
COPY --platform=linux/arm64 (+artifact-name/ARTIFACT_NAME --KAIROS_VERSION=${KAIROS_VERSION} --NAMING_FUNC=bootable_artifact_name --NAMING_EXT=".img") /ARTIFACT_NAME
ARG IMAGE_NAME=$(cat /ARTIFACT_NAME)
RUN rm /ARTIFACT_NAME
WORKDIR /build
# These sizes are in MB
ENV SIZE="15200"
@ -677,25 +583,11 @@ arm-image:
prepare-arm-image:
ARG OSBUILDER_IMAGE
ARG COMPRESS_IMG=true
FROM $OSBUILDER_IMAGE
COPY +version/VERSION ./
RUN echo "version ${VERSION}"
ARG KAIROS_VERSION=$(cat VERSION)
ARG TARGETARCH
ARG --required FAMILY
ARG --required FLAVOR
ARG --required FLAVOR_RELEASE
ARG --required VARIANT
ARG --required BASE_IMAGE
ARG --required MODEL
COPY --platform=linux/arm64 (+artifact-name/ARTIFACT_NAME --KAIROS_VERSION=${KAIROS_VERSION} --NAMING_FUNC=bootable_artifact_name --NAMING_EXT=".img") /ARTIFACT_NAME
ARG IMAGE_NAME=$(cat /ARTIFACT_NAME)
WORKDIR /build
# These sizes are in MB
# These sizes are in MB
ENV SIZE="15200"
IF [[ "$MODEL" = "nvidia-jetson-agx-orin" ]]
@ -728,6 +620,19 @@ prepare-arm-image:
ipxe-iso:
ARG TARGETARCH
COPY +base-image/osrelease osrelease
ARG IMAGE_NAME=$(source osrelease && echo $KAIROS_ARTIFACT).img
RUN rm osrelease
ARG ISO_NAME=$(source /etc/os-release; echo '$KAIROS_ARTIFACT')
# Variables used here:
# https://github.com/kairos-io/osbuilder/blob/66e9e7a9403a413e310f462136b70d715605ab09/tools-image/ipxe.tmpl#L5
COPY +git-version/GIT_VERSION GIT_VERSION
ARG VERSION=$(cat ./GIT_VERSION)
ARG RELEASE_URL=https://github.com/kairos-io/kairos/releases/download
FROM ubuntu
ARG ipxe_script
RUN apt update
@ -736,27 +641,9 @@ ipxe-iso:
# jq docker
WORKDIR /build
COPY +version/VERSION ./
ARG KAIROS_VERSION=$(cat VERSION)
ARG TARGETARCH
# args for base-image target
ARG --required FAMILY
ARG --required FLAVOR
ARG --required FLAVOR_RELEASE
ARG --required BASE_IMAGE
ARG --required MODEL
ARG --required VARIANT
COPY ./images/naming.sh .
ARG ISO_NAME=$(./naming.sh bootable_artifact_name)
# Used here: https://github.com/kairos-io/osbuilder/blob/66e9e7a9403a413e310f462136b70d715605ab09/tools-image/ipxe.tmpl#L5
ARG RELEASE_URL
RUN git clone https://github.com/ipxe/ipxe
IF [ "$ipxe_script" = "" ]
COPY (+netboot/ipxe --VERSION=$KAIROS_VERSION --RELEASE_URL=$RELEASE_URL) /build/ipxe/script.ipxe
COPY (+netboot/ipxe --VERSION=$VERSION --RELEASE_URL=$RELEASE_URL) /build/ipxe/script.ipxe
ELSE
COPY $ipxe_script /build/ipxe/script.ipxe
END
@ -771,13 +658,12 @@ ipxe-iso:
# is to boot from them and do a reset to get the latest system installed
# This allows us to build a raw disk image locally to test the cloud workflow easily
raw-image:
FROM ubuntu
ARG TARGETARCH
COPY +version/VERSION ./
RUN echo "version ${VERSION}"
ARG VERSION=$(cat VERSION)
COPY ./images/naming.sh .
ARG IMG_NAME=$(./naming.sh bootable_artifact_name).raw
# +base-image will be called again by +uki-artifacts but will be cached
# We just use it here to take a shortcut to the artifact name
FROM +base-image
WORKDIR /build
ARG IMG_NAME=$(source /etc/os-release; echo '$KAIROS_ARTIFACT').raw
ARG OSBUILDER_IMAGE
FROM $OSBUILDER_IMAGE
WORKDIR /build
@ -814,19 +700,11 @@ trivy-scan:
# Use base-image so it can read original os-release file
FROM +base-image
ARG ISO_NAME=$(source /etc/os-release; echo '$KAIROS_ARTIFACT')
COPY +trivy/trivy /trivy
COPY +trivy/contrib /contrib
COPY +version/VERSION ./
ARG KAIROS_VERSION=$(cat VERSION)
ARG TARGETARCH
ARG --required FAMILY # The dockerfile to use
ARG --required FLAVOR # The distribution E.g. "ubuntu"
ARG --required FLAVOR_RELEASE # The distribution release/version E.g. "20.04"
ARG --required VARIANT
ARG --required MODEL
ARG --required BASE_IMAGE # BASE_IMAGE is the image to apply the strategy (aka FLAVOR) on. E.g. ubuntu:20.04
COPY ./images/naming.sh .
ARG ISO_NAME=$(./naming.sh bootable_artifact_name)
WORKDIR /build
RUN /trivy filesystem --skip-dirs /tmp --timeout 30m --format sarif -o report.sarif --no-progress /
@ -846,17 +724,8 @@ grype-scan:
# Use base-image so it can read original os-release file
FROM +base-image
COPY +grype/grype /grype
COPY +version/VERSION ./
ARG KAIROS_VERSION=$(cat VERSION)
ARG TARGETARCH
ARG --required FAMILY # The dockerfile to use
ARG --required FLAVOR # The distribution E.g. "ubuntu"
ARG --required FLAVOR_RELEASE # The distribution release/version E.g. "20.04"
ARG --required VARIANT
ARG --required MODEL
ARG --required BASE_IMAGE # BASE_IMAGE is the image to apply the strategy (aka FLAVOR) on. E.g. ubuntu:20.04
COPY ./images/naming.sh .
ARG ISO_NAME=$(./naming.sh bootable_artifact_name)
ARG ISO_NAME=$(source /etc/os-release; echo '$KAIROS_ARTIFACT')
WORKDIR /build
RUN /grype dir:/ --output sarif --add-cpes-if-none --file report.sarif
@ -905,32 +774,24 @@ run-qemu-datasource-tests:
run-qemu-netboot-test:
FROM +base-image
ARG ISO_NAME=$(source /etc/os-release; echo '$KAIROS_ARTIFACT')
COPY +git-version/GIT_VERSION GIT_VERSION
ARG VERSION=$(cat ./GIT_VERSION)
FROM +go-deps-test
COPY . /test
WORKDIR /test
COPY +version/VERSION ./
ARG KAIROS_VERSION=$(cat VERSION)
ARG TARGETARCH # Earthly built-in (not passed)
ARG --required FAMILY # The dockerfile to use
ARG --required FLAVOR # The distribution E.g. "ubuntu"
ARG --required FLAVOR_RELEASE # The distribution release/version E.g. "20.04"
ARG --required VARIANT
ARG --required MODEL
ARG --required BASE_IMAGE # BASE_IMAGE is the image to apply the strategy (aka FLAVOR) on. E.g. ubuntu:20.04
COPY ./images/naming.sh .
ARG ISO_NAME=$(./naming.sh bootable_artifact_name)
# This is the IP at which qemu vm can see the host
ARG IP="10.0.2.2"
COPY (+netboot/squashfs --VERSION=$KAIROS_VERSION --RELEASE_URL=http://$IP) ./build/$KAIROS_VERSION/$ISO_NAME.squashfs
COPY (+netboot/kernel --VERSION=$KAIROS_VERSION --RELEASE_URL=http://$IP) ./build/$KAIROS_VERSION/$ISO_NAME-kernel
COPY (+netboot/initrd --VERSION=$KAIROS_VERSION --RELEASE_URL=http://$IP) ./build/$KAIROS_VERSION/$ISO_NAME-initrd
COPY (+netboot/ipxe --VERSION=$KAIROS_VERSION --RELEASE_URL=http://$IP) ./build/$KAIROS_VERSION/$ISO_NAME.ipxe
COPY (+ipxe-iso/iso --VERSION=$KAIROS_VERSION --RELEASE_URL=http://$IP) ./build/${ISO_NAME}-ipxe.iso
COPY (+netboot/squashfs --VERSION=$VERSION --RELEASE_URL=http://$IP) ./build/$VERSION/$ISO_NAME.squashfs
COPY (+netboot/kernel --VERSION=$VERSION --RELEASE_URL=http://$IP) ./build/$VERSION/$ISO_NAME-kernel
COPY (+netboot/initrd --VERSION=$VERSION --RELEASE_URL=http://$IP) ./build/$VERSION/$ISO_NAME-initrd
COPY (+netboot/ipxe --VERSION=$VERSION --RELEASE_URL=http://$IP) ./build/$VERSION/$ISO_NAME.ipxe
COPY (+ipxe-iso/iso --VERSION=$VERSION --RELEASE_URL=http://$IP) ./build/${ISO_NAME}-ipxe.iso
ENV ISO=/test/build/$ISO_NAME-ipxe.iso
@ -993,7 +854,6 @@ pull-build-artifacts:
FROM $OSBUILDER_IMAGE
RUN zypper in -y jq docker
COPY +uuidgen/UUIDGEN ./
COPY +version/VERSION ./
ARG UUIDGEN=$(cat UUIDGEN)
ARG BUNDLE_IMAGE=ttl.sh/$UUIDGEN:24h
@ -1007,7 +867,6 @@ push-build-artifacts:
FROM $OSBUILDER_IMAGE
RUN zypper in -y jq docker
COPY +uuidgen/UUIDGEN ./
COPY +version/VERSION ./
ARG UUIDGEN=$(cat UUIDGEN)
ARG BUNDLE_IMAGE=ttl.sh/$UUIDGEN:24h
@ -1028,13 +887,9 @@ prepare-bundles-tests:
FROM $OSBUILDER_IMAGE
RUN zypper in -y jq docker
COPY +uuidgen/UUIDGEN ./
COPY +version/VERSION ./
ARG UUIDGEN=$(cat UUIDGEN)
ARG BUNDLE_IMAGE=ttl.sh/$UUIDGEN:24h
# BUILD +examples-bundle --BUNDLE_IMAGE=$BUNDLE_IMAGE
ARG VERSION=$(cat VERSION)
RUN echo "version ${VERSION}"
WITH DOCKER --load $IMG=(+examples-bundle --BUNDLE_IMAGE=$BUNDLE_IMAGE --VERSION=$VERSION)
WITH DOCKER --load $IMG=(+examples-bundle --BUNDLE_IMAGE=$BUNDLE_IMAGE)
RUN docker push $BUNDLE_IMAGE
END
BUILD +examples-bundle-config --BUNDLE_IMAGE=$BUNDLE_IMAGE
@ -1050,8 +905,7 @@ run-qemu-bundles-tests:
### ./earthly.sh +examples-bundle --BUNDLE_IMAGE=ttl.sh/testfoobar:8h
examples-bundle:
ARG BUNDLE_IMAGE
ARG VERSION
FROM DOCKERFILE --build-arg VERSION=$VERSION -f examples/bundle/Dockerfile .
FROM DOCKERFILE -f examples/bundle/Dockerfile .
SAVE IMAGE $BUNDLE_IMAGE
## ./earthly.sh +examples-bundle-config --BUNDLE_IMAGE=ttl.sh/testfoobar:8h
@ -1120,20 +974,6 @@ temp-image:
FROM +base-image
SAVE IMAGE --push $TTL_IMAGE
generate-schema:
FROM alpine
COPY . ./
COPY +version/VERSION ./
COPY +luet/luet /usr/bin/luet
RUN mkdir -p /etc/luet/repos.conf.d/
RUN luet repo add kairos --yes --url quay.io/kairos/packages --type docker
RUN luet install -y system/kairos-agent
ARG RELEASE_VERSION=$(cat VERSION)
RUN mkdir "docs/static/$RELEASE_VERSION"
ARG SCHEMA_FILE="docs/static/$RELEASE_VERSION/cloud-config.json"
RUN kairos-agent print-schema > $SCHEMA_FILE
SAVE ARTIFACT ./docs/static/* AS LOCAL docs/static/
last-commit-packages:
FROM quay.io/skopeo/stable
RUN dnf install -y jq

View File

@ -1,8 +1,6 @@
FROM alpine as build
# Install a binary
ARG VERSION
ENV VERSION=$VERSION
# Install a binary
RUN wget https://github.com/ipfs/kubo/releases/download/v0.15.0/kubo_v0.15.0_linux-amd64.tar.gz -O kubo.tar.gz
RUN tar xvf kubo.tar.gz
RUN mv kubo/ipfs /usr/bin/ipfs
@ -13,4 +11,4 @@ RUN echo ID=_any > /usr/lib/extension-release.d/extension-release.kubo
FROM scratch
COPY --from=build /usr/bin/ipfs /usr/bin/ipfs
COPY --from=build /usr/lib/extension-release.d /usr/lib/extension-release.d
COPY --from=build /usr/lib/extension-release.d /usr/lib/extension-release.d

View File

@ -12,46 +12,51 @@ COPY --from=framework / /
RUN rm -rf /etc/ssh/ssh_host_*
COPY naming.sh /usr/local/bin/naming.sh
COPY which-init.sh /usr/local/bin/which-init.sh
RUN sed -i -n '/KAIROS_/!p' /etc/os-release
# need to be defined after FROM for them to be replaced in the RUN bellow
ARG FLAVOR
ARG FLAVOR_RELEASE
ARG VARIANT
ARG OS_ID=kairos
ARG HOME_URL="https://github.com/kairos-io/kairos"
ARG BUG_REPORT_URL="https://github.com/kairos-io/kairos/issues"
ARG GITHUB_REPO="kairos-io/kairos"
# TODO: merge these
ARG VERSION
ARG ID=kairos
ARG REGISTRY_AND_ORG="quay.io/kairos"
ARG RELEASE
ARG FLAVOR
ARG FLAVOR_RELEASE
ARG VARIANT
ARG FAMILY
ARG MODEL
ARG REGISTRY_AND_ORG="quay.io/kairos"
ARG K3S_VERSION
ARG TARGETARCH
ARG SOFTWARE_VERSION
ARG SOFTWARE_VERSION_PREFIX
ARG SOFTWARE_LUET_VERSION=""
RUN rm -rf /etc/machine-id
FROM base-kairos AS kairos-core
FROM base-kairos AS kairos-standard
ARG K3S_VERSION
LABEL io.kairos.k3s_version="${K3S_VERSION}"
ARG SOFTWARE_VERSION
LABEL io.kairos.k3s_version="${SOFTWARE_VERSION}"
RUN luet install -y system/provider-kairos
RUN luet install -y "k8s/k3s-$(which-init.sh)@${K3S_VERSION}" utils/edgevpn utils/k9s utils/nerdctl container/kubectl utils/kube-vip
RUN luet install -y "k8s/k3s-$(which-init.sh)@${SOFTWARE_LUET_VERSION:-$SOFTWARE_VERSION}" utils/edgevpn utils/k9s utils/nerdctl container/kubectl utils/kube-vip
FROM kairos-${VARIANT} AS kairos-final
ARG BASE_IMAGE
ARG VARIANT
ARG FAMILY
ARG FRAMEWORK_VERSION
ARG RELEASE
ARG FLAVOR
ARG FLAVOR_RELEASE
ARG VARIANT
ARG FAMILY
ARG MODEL
ARG VERSION
ARG FRAMEWORK_VERSION
ARG TARGETARCH
ARG SOFTWARE_VERSION
ARG SOFTWARE_VERSION_PREFIX
LABEL org.opencontainers.image.authors="Kairos Maintainers <team@kairos.io>"
LABEL org.opencontainers.image.licenses="Apache-2.0"
LABEL org.opencontainers.image.url="https://github.com/kairos-io/kairos"
@ -62,8 +67,14 @@ LABEL io.kairos.family="${FAMILY}"
LABEL io.kairos.flavor="${FLAVOR}"
LABEL io.kairos.flavor_release="${FLAVOR_RELEASE}"
LABEL io.kairos.model="${MODEL}"
LABEL io.kairos.version="${VERSION}"
LABEL io.kairos.release="${RELEASE}"
LABEL io.kairos.framework-version="${FRAMEWORK_VERSION}"
LABEL io.kairos.software-version="${SOFTWARE_VERSION}"
LABEL io.kairos.software-version-prefix="${SOFTWARE_VERSION_PREFIX}"
LABEL io.kairos.targetarch="${TARGETARCH}"
RUN kairos-agent versioneer os-release-variables
RUN kairos-agent versioneer os-release-variables >> /etc/os-release
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
RUN luet database get-all-installed --output /etc/kairos/versions.yaml
@ -100,4 +111,4 @@ RUN if [ "$(which-init.sh)" = "systemd" ]; then \
RUN rm -rf /tmp/*
RUN luet cleanup
RUN rm -rf /var/luet
RUN rm -rf /var/luet

View File

@ -163,46 +163,51 @@ COPY --from=framework / /
RUN rm -rf /etc/ssh/ssh_host_*
COPY naming.sh /usr/local/bin/naming.sh
COPY which-init.sh /usr/local/bin/which-init.sh
RUN sed -i -n '/KAIROS_/!p' /etc/os-release
# need to be defined after FROM for them to be replaced in the RUN bellow
ARG FLAVOR
ARG FLAVOR_RELEASE
ARG VARIANT
ARG OS_ID=kairos
ARG HOME_URL="https://github.com/kairos-io/kairos"
ARG BUG_REPORT_URL="https://github.com/kairos-io/kairos/issues"
ARG GITHUB_REPO="kairos-io/kairos"
# TODO: merge these
ARG VERSION
ARG ID=kairos
ARG REGISTRY_AND_ORG="quay.io/kairos"
ARG RELEASE
ARG FLAVOR
ARG FLAVOR_RELEASE
ARG VARIANT
ARG FAMILY
ARG MODEL
ARG REGISTRY_AND_ORG="quay.io/kairos"
ARG K3S_VERSION
ARG TARGETARCH
ARG SOFTWARE_VERSION
ARG SOFTWARE_VERSION_PREFIX
ARG SOFTWARE_LUET_VERSION=""
RUN rm -rf /etc/machine-id
FROM base-kairos AS kairos-core
FROM base-kairos AS kairos-standard
ARG K3S_VERSION
LABEL io.kairos.k3s_version="${K3S_VERSION}"
ARG SOFTWARE_VERSION
LABEL io.kairos.k3s_version="${SOFTWARE_VERSION}"
RUN luet install -y system/provider-kairos
RUN luet install -y "k8s/k3s-$(which-init.sh)@${K3S_VERSION}" utils/edgevpn utils/k9s utils/nerdctl container/kubectl utils/kube-vip
RUN luet install -y "k8s/k3s-$(which-init.sh)@${SOFTWARE_LUET_VERSION:-$SOFTWARE_VERSION}" utils/edgevpn utils/k9s utils/nerdctl container/kubectl utils/kube-vip
FROM kairos-${VARIANT} AS kairos-final
ARG BASE_IMAGE
ARG VARIANT
ARG FAMILY
ARG FRAMEWORK_VERSION
ARG RELEASE
ARG FLAVOR
ARG FLAVOR_RELEASE
ARG VARIANT
ARG FAMILY
ARG MODEL
ARG VERSION
ARG FRAMEWORK_VERSION
ARG TARGETARCH
ARG SOFTWARE_VERSION
ARG SOFTWARE_VERSION_PREFIX
LABEL org.opencontainers.image.authors="Kairos Maintainers <team@kairos.io>"
LABEL org.opencontainers.image.licenses="Apache-2.0"
LABEL org.opencontainers.image.url="https://github.com/kairos-io/kairos"
@ -213,8 +218,14 @@ LABEL io.kairos.family="${FAMILY}"
LABEL io.kairos.flavor="${FLAVOR}"
LABEL io.kairos.flavor_release="${FLAVOR_RELEASE}"
LABEL io.kairos.model="${MODEL}"
LABEL io.kairos.version="${VERSION}"
LABEL io.kairos.release="${RELEASE}"
LABEL io.kairos.framework-version="${FRAMEWORK_VERSION}"
LABEL io.kairos.software-version="${SOFTWARE_VERSION}"
LABEL io.kairos.software-version-prefix="${SOFTWARE_VERSION_PREFIX}"
LABEL io.kairos.targetarch="${TARGETARCH}"
RUN kairos-agent versioneer os-release-variables
RUN kairos-agent versioneer os-release-variables >> /etc/os-release
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
RUN luet database get-all-installed --output /etc/kairos/versions.yaml

View File

@ -164,46 +164,51 @@ COPY --from=framework / /
RUN rm -rf /etc/ssh/ssh_host_*
COPY naming.sh /usr/local/bin/naming.sh
COPY which-init.sh /usr/local/bin/which-init.sh
RUN sed -i -n '/KAIROS_/!p' /etc/os-release
# need to be defined after FROM for them to be replaced in the RUN bellow
ARG FLAVOR
ARG FLAVOR_RELEASE
ARG VARIANT
ARG OS_ID=kairos
ARG HOME_URL="https://github.com/kairos-io/kairos"
ARG BUG_REPORT_URL="https://github.com/kairos-io/kairos/issues"
ARG GITHUB_REPO="kairos-io/kairos"
# TODO: merge these
ARG VERSION
ARG ID=kairos
ARG REGISTRY_AND_ORG="quay.io/kairos"
ARG RELEASE
ARG FLAVOR
ARG FLAVOR_RELEASE
ARG VARIANT
ARG FAMILY
ARG MODEL
ARG REGISTRY_AND_ORG="quay.io/kairos"
ARG K3S_VERSION
ARG TARGETARCH
ARG SOFTWARE_VERSION
ARG SOFTWARE_VERSION_PREFIX
ARG SOFTWARE_LUET_VERSION=""
RUN rm -rf /etc/machine-id
FROM base-kairos AS kairos-core
FROM base-kairos AS kairos-standard
ARG K3S_VERSION
LABEL io.kairos.k3s_version="${K3S_VERSION}"
ARG SOFTWARE_VERSION
LABEL io.kairos.k3s_version="${SOFTWARE_VERSION}"
RUN luet install -y system/provider-kairos
RUN luet install -y "k8s/k3s-$(which-init.sh)@${K3S_VERSION}" utils/edgevpn utils/k9s utils/nerdctl container/kubectl utils/kube-vip
RUN luet install -y "k8s/k3s-$(which-init.sh)@${SOFTWARE_LUET_VERSION:-$SOFTWARE_VERSION}" utils/edgevpn utils/k9s utils/nerdctl container/kubectl utils/kube-vip
FROM kairos-${VARIANT} AS kairos-final
ARG BASE_IMAGE
ARG VARIANT
ARG FAMILY
ARG FRAMEWORK_VERSION
ARG RELEASE
ARG FLAVOR
ARG FLAVOR_RELEASE
ARG VARIANT
ARG FAMILY
ARG MODEL
ARG VERSION
ARG FRAMEWORK_VERSION
ARG TARGETARCH
ARG SOFTWARE_VERSION
ARG SOFTWARE_VERSION_PREFIX
LABEL org.opencontainers.image.authors="Kairos Maintainers <team@kairos.io>"
LABEL org.opencontainers.image.licenses="Apache-2.0"
LABEL org.opencontainers.image.url="https://github.com/kairos-io/kairos"
@ -214,8 +219,14 @@ LABEL io.kairos.family="${FAMILY}"
LABEL io.kairos.flavor="${FLAVOR}"
LABEL io.kairos.flavor_release="${FLAVOR_RELEASE}"
LABEL io.kairos.model="${MODEL}"
LABEL io.kairos.version="${VERSION}"
LABEL io.kairos.release="${RELEASE}"
LABEL io.kairos.framework-version="${FRAMEWORK_VERSION}"
LABEL io.kairos.software-version="${SOFTWARE_VERSION}"
LABEL io.kairos.software-version-prefix="${SOFTWARE_VERSION_PREFIX}"
LABEL io.kairos.targetarch="${TARGETARCH}"
RUN kairos-agent versioneer os-release-variables
RUN kairos-agent versioneer os-release-variables >> /etc/os-release
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
RUN luet database get-all-installed --output /etc/kairos/versions.yaml

View File

@ -81,6 +81,7 @@ RUN zypper in --force-resolution -y \
tmux \
vim \
which \
tpm2* \
&& zypper cc
FROM common as amd64
@ -170,46 +171,51 @@ COPY --from=framework / /
RUN rm -rf /etc/ssh/ssh_host_*
COPY naming.sh /usr/local/bin/naming.sh
COPY which-init.sh /usr/local/bin/which-init.sh
RUN sed -i -n '/KAIROS_/!p' /etc/os-release
# need to be defined after FROM for them to be replaced in the RUN bellow
ARG FLAVOR
ARG FLAVOR_RELEASE
ARG VARIANT
ARG OS_ID=kairos
ARG HOME_URL="https://github.com/kairos-io/kairos"
ARG BUG_REPORT_URL="https://github.com/kairos-io/kairos/issues"
ARG GITHUB_REPO="kairos-io/kairos"
# TODO: merge these
ARG VERSION
ARG ID=kairos
ARG REGISTRY_AND_ORG="quay.io/kairos"
ARG RELEASE
ARG FLAVOR
ARG FLAVOR_RELEASE
ARG VARIANT
ARG FAMILY
ARG MODEL
ARG REGISTRY_AND_ORG="quay.io/kairos"
ARG K3S_VERSION
ARG TARGETARCH
ARG SOFTWARE_VERSION
ARG SOFTWARE_VERSION_PREFIX
ARG SOFTWARE_LUET_VERSION=""
RUN rm -rf /etc/machine-id
FROM base-kairos AS kairos-core
FROM base-kairos AS kairos-standard
ARG K3S_VERSION
LABEL io.kairos.k3s_version="${K3S_VERSION}"
ARG SOFTWARE_VERSION
LABEL io.kairos.k3s_version="${SOFTWARE_VERSION}"
RUN luet install -y system/provider-kairos
RUN luet install -y "k8s/k3s-$(which-init.sh)@${K3S_VERSION}" utils/edgevpn utils/k9s utils/nerdctl container/kubectl utils/kube-vip
RUN luet install -y "k8s/k3s-$(which-init.sh)@${SOFTWARE_LUET_VERSION:-$SOFTWARE_VERSION}" utils/edgevpn utils/k9s utils/nerdctl container/kubectl utils/kube-vip
FROM kairos-${VARIANT} AS kairos-final
ARG BASE_IMAGE
ARG VARIANT
ARG FAMILY
ARG FRAMEWORK_VERSION
ARG RELEASE
ARG FLAVOR
ARG FLAVOR_RELEASE
ARG VARIANT
ARG FAMILY
ARG MODEL
ARG VERSION
ARG FRAMEWORK_VERSION
ARG TARGETARCH
ARG SOFTWARE_VERSION
ARG SOFTWARE_VERSION_PREFIX
LABEL org.opencontainers.image.authors="Kairos Maintainers <team@kairos.io>"
LABEL org.opencontainers.image.licenses="Apache-2.0"
LABEL org.opencontainers.image.url="https://github.com/kairos-io/kairos"
@ -220,8 +226,14 @@ LABEL io.kairos.family="${FAMILY}"
LABEL io.kairos.flavor="${FLAVOR}"
LABEL io.kairos.flavor_release="${FLAVOR_RELEASE}"
LABEL io.kairos.model="${MODEL}"
LABEL io.kairos.version="${VERSION}"
LABEL io.kairos.release="${RELEASE}"
LABEL io.kairos.framework-version="${FRAMEWORK_VERSION}"
LABEL io.kairos.software-version="${SOFTWARE_VERSION}"
LABEL io.kairos.software-version-prefix="${SOFTWARE_VERSION_PREFIX}"
LABEL io.kairos.targetarch="${TARGETARCH}"
RUN kairos-agent versioneer os-release-variables
RUN kairos-agent versioneer os-release-variables >> /etc/os-release
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
RUN luet database get-all-installed --output /etc/kairos/versions.yaml

View File

@ -26,7 +26,7 @@ FROM epel AS almalinux
FROM epel AS rockylinux
FROM base AS fedora
RUN dnf install -y "https://zfsonlinux.org/fedora/zfs-release-2-3$(rpm --eval "%{dist}").noarch.rpm" && dnf clean all
RUN dnf install -y "https://zfsonlinux.org/fedora/zfs-release-2-4$(rpm --eval "%{dist}").noarch.rpm" && dnf clean all
# install common packages
FROM ${FLAVOR} AS common
@ -98,46 +98,51 @@ COPY --from=framework / /
RUN rm -rf /etc/ssh/ssh_host_*
COPY naming.sh /usr/local/bin/naming.sh
COPY which-init.sh /usr/local/bin/which-init.sh
RUN sed -i -n '/KAIROS_/!p' /etc/os-release
# need to be defined after FROM for them to be replaced in the RUN bellow
ARG FLAVOR
ARG FLAVOR_RELEASE
ARG VARIANT
ARG OS_ID=kairos
ARG HOME_URL="https://github.com/kairos-io/kairos"
ARG BUG_REPORT_URL="https://github.com/kairos-io/kairos/issues"
ARG GITHUB_REPO="kairos-io/kairos"
# TODO: merge these
ARG VERSION
ARG ID=kairos
ARG REGISTRY_AND_ORG="quay.io/kairos"
ARG RELEASE
ARG FLAVOR
ARG FLAVOR_RELEASE
ARG VARIANT
ARG FAMILY
ARG MODEL
ARG REGISTRY_AND_ORG="quay.io/kairos"
ARG K3S_VERSION
ARG TARGETARCH
ARG SOFTWARE_VERSION
ARG SOFTWARE_VERSION_PREFIX
ARG SOFTWARE_LUET_VERSION=""
RUN rm -rf /etc/machine-id
FROM base-kairos AS kairos-core
FROM base-kairos AS kairos-standard
ARG K3S_VERSION
LABEL io.kairos.k3s_version="${K3S_VERSION}"
ARG SOFTWARE_VERSION
LABEL io.kairos.k3s_version="${SOFTWARE_VERSION}"
RUN luet install -y system/provider-kairos
RUN luet install -y "k8s/k3s-$(which-init.sh)@${K3S_VERSION}" utils/edgevpn utils/k9s utils/nerdctl container/kubectl utils/kube-vip
RUN luet install -y "k8s/k3s-$(which-init.sh)@${SOFTWARE_LUET_VERSION:-$SOFTWARE_VERSION}" utils/edgevpn utils/k9s utils/nerdctl container/kubectl utils/kube-vip
FROM kairos-${VARIANT} AS kairos-final
ARG BASE_IMAGE
ARG VARIANT
ARG FAMILY
ARG FRAMEWORK_VERSION
ARG RELEASE
ARG FLAVOR
ARG FLAVOR_RELEASE
ARG VARIANT
ARG FAMILY
ARG MODEL
ARG VERSION
ARG FRAMEWORK_VERSION
ARG TARGETARCH
ARG SOFTWARE_VERSION
ARG SOFTWARE_VERSION_PREFIX
LABEL org.opencontainers.image.authors="Kairos Maintainers <team@kairos.io>"
LABEL org.opencontainers.image.licenses="Apache-2.0"
LABEL org.opencontainers.image.url="https://github.com/kairos-io/kairos"
@ -148,8 +153,14 @@ LABEL io.kairos.family="${FAMILY}"
LABEL io.kairos.flavor="${FLAVOR}"
LABEL io.kairos.flavor_release="${FLAVOR_RELEASE}"
LABEL io.kairos.model="${MODEL}"
LABEL io.kairos.version="${VERSION}"
LABEL io.kairos.release="${RELEASE}"
LABEL io.kairos.framework-version="${FRAMEWORK_VERSION}"
LABEL io.kairos.software-version="${SOFTWARE_VERSION}"
LABEL io.kairos.software-version-prefix="${SOFTWARE_VERSION_PREFIX}"
LABEL io.kairos.targetarch="${TARGETARCH}"
RUN kairos-agent versioneer os-release-variables
RUN kairos-agent versioneer os-release-variables >> /etc/os-release
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
RUN luet database get-all-installed --output /etc/kairos/versions.yaml

View File

@ -89,6 +89,7 @@ RUN apt-get update \
ubuntu-advantage-tools \
xz-utils \
zstd \
tpm2-* \
&& apt-get remove -y unattended-upgrades && apt-get clean && rm -rf /var/lib/apt/lists/*
###############################################################
@ -267,46 +268,51 @@ COPY --from=framework / /
RUN rm -rf /etc/ssh/ssh_host_*
COPY naming.sh /usr/local/bin/naming.sh
COPY which-init.sh /usr/local/bin/which-init.sh
RUN sed -i -n '/KAIROS_/!p' /etc/os-release
# need to be defined after FROM for them to be replaced in the RUN bellow
ARG FLAVOR
ARG FLAVOR_RELEASE
ARG VARIANT
ARG OS_ID=kairos
ARG HOME_URL="https://github.com/kairos-io/kairos"
ARG BUG_REPORT_URL="https://github.com/kairos-io/kairos/issues"
ARG GITHUB_REPO="kairos-io/kairos"
# TODO: merge these
ARG VERSION
ARG ID=kairos
ARG REGISTRY_AND_ORG="quay.io/kairos"
ARG RELEASE
ARG FLAVOR
ARG FLAVOR_RELEASE
ARG VARIANT
ARG FAMILY
ARG MODEL
ARG REGISTRY_AND_ORG="quay.io/kairos"
ARG K3S_VERSION
ARG TARGETARCH
ARG SOFTWARE_VERSION
ARG SOFTWARE_VERSION_PREFIX
ARG SOFTWARE_LUET_VERSION=""
RUN rm -rf /etc/machine-id
FROM base-kairos AS kairos-core
FROM base-kairos AS kairos-standard
ARG K3S_VERSION
LABEL io.kairos.k3s_version="${K3S_VERSION}"
ARG SOFTWARE_VERSION
LABEL io.kairos.k3s_version="${SOFTWARE_VERSION}"
RUN luet install -y system/provider-kairos
RUN luet install -y "k8s/k3s-$(which-init.sh)@${K3S_VERSION}" utils/edgevpn utils/k9s utils/nerdctl container/kubectl utils/kube-vip
RUN luet install -y "k8s/k3s-$(which-init.sh)@${SOFTWARE_LUET_VERSION:-$SOFTWARE_VERSION}" utils/edgevpn utils/k9s utils/nerdctl container/kubectl utils/kube-vip
FROM kairos-${VARIANT} AS kairos-final
ARG BASE_IMAGE
ARG VARIANT
ARG FAMILY
ARG FRAMEWORK_VERSION
ARG RELEASE
ARG FLAVOR
ARG FLAVOR_RELEASE
ARG VARIANT
ARG FAMILY
ARG MODEL
ARG VERSION
ARG FRAMEWORK_VERSION
ARG TARGETARCH
ARG SOFTWARE_VERSION
ARG SOFTWARE_VERSION_PREFIX
LABEL org.opencontainers.image.authors="Kairos Maintainers <team@kairos.io>"
LABEL org.opencontainers.image.licenses="Apache-2.0"
LABEL org.opencontainers.image.url="https://github.com/kairos-io/kairos"
@ -317,8 +323,14 @@ LABEL io.kairos.family="${FAMILY}"
LABEL io.kairos.flavor="${FLAVOR}"
LABEL io.kairos.flavor_release="${FLAVOR_RELEASE}"
LABEL io.kairos.model="${MODEL}"
LABEL io.kairos.version="${VERSION}"
LABEL io.kairos.release="${RELEASE}"
LABEL io.kairos.framework-version="${FRAMEWORK_VERSION}"
LABEL io.kairos.software-version="${SOFTWARE_VERSION}"
LABEL io.kairos.software-version-prefix="${SOFTWARE_VERSION_PREFIX}"
LABEL io.kairos.targetarch="${TARGETARCH}"
RUN kairos-agent versioneer os-release-variables
RUN kairos-agent versioneer os-release-variables >> /etc/os-release
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
RUN luet database get-all-installed --output /etc/kairos/versions.yaml

View File

@ -1,181 +0,0 @@
#!/bin/bash
# This script accepts values as defined in .github/flavors.json
# and returns a proper artifact name for that set of values.
# It's meant to be the single point of truth for artifacts names.
setEnvVarsFromJSON() {
export FLAVOR
export FLAVOR_RELEASE
export VARIANT
export TARGETARCH
export MODEL
FLAVOR=$(echo "$ARTIFACT_JSON" | jq -r '.flavor | select (.!=null)')
FLAVOR_RELEASE=$(echo "$ARTIFACT_JSON" | jq -r '.flavorRelease | select (.!=null)')
VARIANT=$(echo "$ARTIFACT_JSON" | jq -r '.variant | select (.!=null)')
TARGETARCH=$(echo "$ARTIFACT_JSON" | jq -r '.arch | select (.!=null)')
MODEL=$(echo "$ARTIFACT_JSON" | jq -r '.model | select (.!=null)')
}
common_artifact_name() {
if [ -z "$KAIROS_VERSION" ]; then
echo 'KAIROS_VERSION must be defined'
exit 1
fi
if [ -z "$FLAVOR_RELEASE" ]; then
echo 'FLAVOR_RELEASE must be defined'
exit 1
fi
if [ -z "$VARIANT" ]; then
echo 'VARIANT must be defined'
exit 1
fi
if [ -z "$TARGETARCH" ]; then
echo 'TARGETARCH must be defined'
exit 1
fi
if [ -z "$MODEL" ]; then
echo 'MODEL must be defined'
exit 1
fi
echo "$FLAVOR_RELEASE-$VARIANT-$TARGETARCH-$MODEL-$KAIROS_VERSION"
}
common_artifact_base_name() {
if [ -z "$FLAVOR_RELEASE" ]; then
echo 'FLAVOR_RELEASE must be defined'
exit 1
fi
if [ -z "$TARGETARCH" ]; then
echo 'TARGETARCH must be defined'
exit 1
fi
if [ -z "$MODEL" ]; then
echo 'MODEL must be defined'
exit 1
fi
echo "$FLAVOR_RELEASE-$TARGETARCH-$MODEL"
}
bootable_artifact_name() {
if [ -z "$FLAVOR" ]; then
echo 'FLAVOR must be defined'
exit 1
fi
local common
common=$(common_artifact_name)
echo "kairos-$FLAVOR-$common"
}
container_artifact_name() {
if [ -z "$KAIROS_VERSION" ]; then
echo 'KAIROS_VERSION must be defined'
exit 1
fi
if [ -z "$FLAVOR" ]; then
echo 'FLAVOR must be defined'
exit 1
fi
if [ -z "$REGISTRY_AND_ORG" ]; then
echo 'REGISTRY_AND_ORG must be defined'
exit 1
fi
# quay.io doesn't accept "+" in the repo name
export KAIROS_VERSION="${KAIROS_VERSION/+/-}"
local tag
tag=$(common_artifact_name)
echo "$REGISTRY_AND_ORG/$FLAVOR:$tag"
}
container_artifact_base_name() {
if [ -z "$BRANCH" ]; then
export BRANCH=master
fi
if [ -z "$FLAVOR" ]; then
echo 'FLAVOR must be defined'
exit 1
fi
if [ -z "$REGISTRY_AND_ORG" ]; then
echo 'REGISTRY_AND_ORG must be defined'
exit 1
fi
# quay.io doesn't accept "+" in the repo name
export KAIROS_VERSION="${KAIROS_VERSION/+/-}"
local tag
tag=$(common_artifact_base_name)
echo "$REGISTRY_AND_ORG/$FLAVOR:$tag-$BRANCH"
}
container_artifact_label() {
if [ -z "$KAIROS_VERSION" ]; then
echo 'KAIROS_VERSION must be defined'
exit 1
fi
export KAIROS_VERSION="${KAIROS_VERSION/+/-}"
common_artifact_name
}
# returns the repo name for the container artifact
# for example quay.io/kairos/opensuse or quake.io/kairos/alpine
container_artifact_repo() {
if [ -z "$FLAVOR" ]; then
echo 'FLAVOR must be defined'
exit 1
fi
if [ -z "$REGISTRY_AND_ORG" ]; then
echo 'REGISTRY_AND_ORG must be defined'
exit 1
fi
echo "$REGISTRY_AND_ORG/$FLAVOR"
}
if [ -n "$ARTIFACT_JSON" ]; then
setEnvVarsFromJSON
fi
case "$1" in
"container_artifact_name")
container_artifact_name
;;
"container_artifact_label")
container_artifact_label
;;
"bootable_artifact_name")
bootable_artifact_name
;;
"common_artifact_name")
common_artifact_name
;;
"container_artifact_repo")
container_artifact_repo
;;
"container_artifact_base_name")
container_artifact_base_name
;;
*)
echo "Function not found: $1"
exit 1
;;
esac
# ARTIFACT_JSON='{"flavor":"opensuse-leap","flavorRelease":"15.5","variant":"standard","model":"generic","arch":"amd64"}'
# KAIROS_VERSION=v2.4.1
# REGISTRY_AND_ORG=quay.io/kairos
# container_artifact_name
# bootable_artifact_name