diff --git a/build-tar-create.sh b/build-tar-create.sh new file mode 100755 index 0000000000000000000000000000000000000000..baa38f0dddf17f599ebcab6b53cc57e877018c39 --- /dev/null +++ b/build-tar-create.sh @@ -0,0 +1,123 @@ +#!/bin/bash + +set -e +if [ ! -f ./v1.24.2+rc1+k3s2.tar.gz ];then + echo "this script should be executed in source directory" + exit +fi + +tar -xvf v1.24.2+rc1+k3s2.tar.gz + +TRAEFIK_CHART_VERSION="10.19.3" +TRAEFIK_PACKAGE_VERSION="00" +TRAEFIK_FILE=traefik-${TRAEFIK_CHART_VERSION}${TRAEFIK_PACKAGE_VERSION}.tgz +TRAEFIK_CRD_FILE=traefik-crd-${TRAEFIK_CHART_VERSION}${TRAEFIK_PACKAGE_VERSION}.tgz +TRAEFIK_URL=https://helm.traefik.io/traefik/traefik-${TRAEFIK_CHART_VERSION}.tgz +CHARTS_DIR=build/static/charts +RUNC_DIR=build/src/github.com/opencontainers/runc +CONTAINERD_DIR=build/src/github.com/containerd/containerd +DATA_DIR=build/data +TMP_DIR=. +export TZ=UTC + +umask 022 +rm -rf ${CHARTS_DIR} +rm -rf ${RUNC_DIR} +rm -rf ${CONTAINERD_DIR} +mkdir -p ${CHARTS_DIR} +mkdir -p ${DATA_DIR} + + +download_and_package_traefik () { + echo "Downloading Traefik Helm chart from ${TRAEFIK_URL}" + curl -k -sfL ${TRAEFIK_URL} -o ${TMP_DIR}/${TRAEFIK_FILE} + code=$? + + if [ $code -ne 0 ]; then + echo "Error: Failed to download Traefik Helm chart!" + exit $code + fi + + echo "Uncompress ${TMP_DIR}/${TRAEFIK_FILE}" + tar xf ${TMP_DIR}/${TRAEFIK_FILE} -C ${TMP_DIR} + + echo "Prepare traefik CRD" + TRAEFIK_TMP_CHART=${TMP_DIR}/traefik + TRAEFIK_TMP_CRD=${TRAEFIK_TMP_CHART}-crd + + # Collect information on chart + name="traefik" + api_version="v2" + chart_version=${TRAEFIK_CHART_VERSION} + package_version=${TRAEFIK_PACKAGE_VERSION} + + # Collect information on CRDs + crd_apis=() + + crd_apis+=("traefik.containo.us/v1alpha1/IngressRouteTCP") + crd_apis+=("traefik.containo.us/v1alpha1/IngressRouteUDP") + crd_apis+=("traefik.containo.us/v1alpha1/IngressRoute") + crd_apis+=("traefik.containo.us/v1alpha1/MiddlewareTCP") + crd_apis+=("traefik.containo.us/v1alpha1/Middleware") + crd_apis+=("traefik.containo.us/v1alpha1/ServersTransport") + crd_apis+=("traefik.containo.us/v1alpha1/TLSOption") + crd_apis+=("traefik.containo.us/v1alpha1/TLSStore") + crd_apis+=("traefik.containo.us/v1alpha1/TraefikService") + + set_found_crd=$( + for crd in ${crd_apis[@]}; do + echo "# {{- set \$found \"${crd}\" false -}}" + done + ) + + # Copy base template and apply variables to the template + mkdir -p ${TRAEFIK_TMP_CRD} + echo $(pwd) + cp -R ./k3s-1.24.2-rc1-k3s2/scripts/chart-templates/crd-base/* ${TRAEFIK_TMP_CRD} + for template_file in $(find ${TRAEFIK_TMP_CRD} -type f | sort); do + # Applies any environment variables currently set onto your template file + echo "Templating ${template_file}" + eval "echo \"$(sed 's/"/\\"/g' ${template_file})\"" > ${template_file} + done + + # Move anything from ${f}/charts-crd/overlay-upstream to the main chart + cp -R ${TRAEFIK_TMP_CRD}/overlay-upstream/* ${TRAEFIK_TMP_CHART} + rm -rf ${TRAEFIK_TMP_CRD}/overlay-upstream + + # Modify charts to support system-default-registry + echo -e 'global:\n systemDefaultRegistry: ""' >> ${TRAEFIK_TMP_CHART}/values.yaml + find ${TRAEFIK_TMP_CHART} -type f | xargs sed -i 's/{{ .Values.image.name }}/{{ template "system_default_registry" .}}&/g' + + # Modify chart version to append package version + # If we alter our repackaging of the helm chart without also bumping the version of the + # chart, the package version portion (final two digits) of the version string in the + # traefik HelmChart manifest should be bumped accordingly. + sed -i "s/version: .*/&${TRAEFIK_PACKAGE_VERSION}/" ${TRAEFIK_TMP_CHART}/Chart.yaml + + # Add dashboard annotations to main chart + cat <>${TRAEFIK_TMP_CHART}/Chart.yaml +annotations: + fleet.cattle.io/bundle-id: k3s +EOF + + # Move CRDs from main chart to CRD chart + mkdir -p ${TRAEFIK_TMP_CRD}/templates + mv ${TRAEFIK_TMP_CHART}/crds/* ${TRAEFIK_TMP_CRD}/templates + rm -rf ${TRAEFIK_TMP_CHART}/crds + + # Package charts + OPTS="--format=gnu --sort=name --owner=0 --group=0 --mode=gou-s --numeric-owner --no-acls --no-selinux --no-xattrs" + tar ${OPTS} --mtime='2021-01-01 00:00:00Z' -cf - -C ${TMP_DIR} $(basename ${TRAEFIK_TMP_CHART}) | gzip -n > ${CHARTS_DIR}/${TRAEFIK_FILE} + tar ${OPTS} --mtime='2021-01-01 00:00:00Z' -cf - -C ${TMP_DIR} $(basename ${TRAEFIK_TMP_CRD}) | gzip -n > ${CHARTS_DIR}/${TRAEFIK_CRD_FILE} + for TAR in ${CHARTS_DIR}/${TRAEFIK_FILE} ${CHARTS_DIR}/${TRAEFIK_CRD_FILE}; do + sha256sum ${TAR} + stat ${TAR} + tar -vtf ${TAR} + done +} + +download_and_package_traefik +tar -cvf build.tar.gz ./build +rm -rf ./build +rm -rf traefik* +rm -rf ./k3s-1.24.2-rc1-k3s2 diff --git a/build.tar.gz b/build.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..a46998316f9da979852213420d1fab8fe3c07ac8 Binary files /dev/null and b/build.tar.gz differ diff --git a/k3s.spec b/k3s.spec new file mode 100644 index 0000000000000000000000000000000000000000..89717037f8dc3987118c8c9dfa760ccf62e8bc23 --- /dev/null +++ b/k3s.spec @@ -0,0 +1,97 @@ +%define debug_package %{nil} +%define baseversion 1.24 + +Name: k3s +Version: 1.24.2+rc1+k3s2 +Release: 1 +Summary: Installer for k3s optimised for openSUSE MicroOS +License: Apache-2.0 +Group: System/Management +URL: https://k3s.io +Source0: https://github.com/k3s-io/k3s/archive/v%{version}.tar.gz#/v%{version}.tar.gz +Source1: build.tar.gz +Source2: build-tar-create.sh + +BuildRequires: golang +BuildRequires: libseccomp-devel +BuildRequires: btrfs-progs-devel +BuildRequires: k3s-plugins +BuildRequires: k3s-containerd +BuildRequires: docker-runc +BuildRequires: systemd systemd-devel +Requires: container-selinux +Requires: k3s-selinux +Requires: iptables +Conflicts: cri-tools +Conflicts: kubectl +Conflicts: kubernetes-client +Conflicts: kubernetes-client-provider + +Requires(post): systemd +Requires(preun): systemd +Requires(postun): systemd + + +%description +Based on the official upstream k3s install.sh, this k3s-install +package provides a curated, MicroOS-optimised, securely delivered +alternative to running a script directly from the internet. + +k3s is a container orchestration system for automating application +deployment, scaling, and management. It is a Kubernetes-compliant +distribution that differs from the original Kubernetes (colloquially +"k8s") in that: + + * Legacy, alpha, or non-default features are removed. + * Most in-tree plugins (cloud providers and storage plugins) were + removed, since they can be replaced with out-of-tree addons. + * sqlite3 is the default storage mechanism. + etcd3 is still available, but not the default. + * There is a new launcher that handles a lot of the complexity of + TLS and options. + +%prep +%autosetup -p1 -n k3s-%(echo %{version} | tr '+' '-') +cp %{SOURCE1} . +sed -i '/echo Building runc/,+5d' scripts/build +cp /usr/share/k3s/cni bin/ + +%build +export GOPATH=%{_builddir}/go +export PATH=$PATH:${GOPATH}/bin +export GO111MODULE=on +export GOPROXY=https://repo.huaweicloud.com/repository/goproxy/ +export GONOSUMDB=* + +tar -zxvf build.tar.gz +pushd build +mkdir -p ./src/github.com/containerd/containerd +cp -rf /usr/libexec/containerd/containerd-1.6.6/. src/github.com/containerd/containerd/ +popd + +mkdir etc +./scripts/build + +cp /usr/bin/runc bin/ + +SKIP_AIRGAP=true SKIP_IMAGE=true ./scripts/package + +%install +install -D -m 755 dist/artifacts/k3s* %{buildroot}/usr/local/bin/k3s +mkdir -p %{buildroot}%{_localstatedir}/lib/rancher/k3s +mkdir -p %{buildroot}%{_localstatedir}/lib/rancher/k3s/server/manifests +cp -rf manifests/* %{buildroot}%{_localstatedir}/lib/rancher/k3s/server/manifests +mkdir -p %{buildroot}%{_sbindir} +cp install.sh %{buildroot}%{_sbindir}/k3s-install.sh + + +%files +%license LICENSE +%doc README.md +/usr/local/bin/k3s +%{_localstatedir}/lib/rancher +%{_sbindir}/k3s-install.sh + +%changelog +* Tue Nov 01 2022 Ge Wang - 1.24.2+rc1+k3s2-1 +- Init package diff --git a/v1.24.2+rc1+k3s2.tar.gz b/v1.24.2+rc1+k3s2.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..3f862fb0980dcd0e489c03d9bedbae70e16126ea Binary files /dev/null and b/v1.24.2+rc1+k3s2.tar.gz differ