k3s/scripts/download

130 lines
4.2 KiB
Bash
Executable File

#!/bin/bash
cd $(dirname $0)/..
. ./scripts/version.sh
RUNC_VERSION=v1.0.1
ROOT_VERSION=v0.9.1
TRAEFIK_VERSION=$(awk -F/ '/traefik-([[:digit:]]+\.)/ {sub(/traefik-/, "", $6) ; sub(/\.tgz/, "", $6); print $6}' manifests/traefik.yaml)
CHARTS_DIR=build/static/charts
RUNC_DIR=build/src/github.com/opencontainers/runc
DATA_DIR=build/data
export TZ=UTC
umask 022
rm -rf ${CHARTS_DIR}
rm -rf ${RUNC_DIR}
mkdir -p ${CHARTS_DIR}
mkdir -p ${DATA_DIR}
curl --compressed -sfL https://github.com/k3s-io/k3s-root/releases/download/${ROOT_VERSION}/k3s-root-${ARCH}.tar | tar xf -
git clone --depth=1 https://github.com/opencontainers/runc ${RUNC_DIR} || true
pushd ${RUNC_DIR}
git fetch --all --tags
git checkout ${RUNC_VERSION} -b k3s
popd
setup_tmp() {
TMP_DIR=$(mktemp -d --tmpdir=${CHARTS_DIR})
cleanup() {
code=$?
set +e
trap - EXIT
rm -rf ${TMP_DIR}
exit $code
}
trap cleanup INT EXIT
}
download_and_package_traefik () {
echo "Downloading Traefik Helm chart from ${TRAEFIK_URL}"
curl -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=$(yq e '.name' ${TRAEFIK_TMP_CHART}/Chart.yaml)
api_version=$(yq e '.apiVersion' ${TRAEFIK_TMP_CHART}/Chart.yaml)
chart_version=$(yq e '.version' ${TRAEFIK_TMP_CHART}/Chart.yaml)
# Collect information on CRDs
crd_apis=()
for crd_yaml in $(find ${TRAEFIK_TMP_CHART}/crds -type f | sort); do
echo "Processing CRD at ${crd_yaml}"
crd_group=$(yq e '.spec.group' ${crd_yaml})
crd_kind=$(yq e '.spec.names.kind' ${crd_yaml})
crd_version=$(yq e '.spec.version' ${crd_yaml})
if [[ -z "$crd_version" ]] || [[ "$crd_version" == "null" ]]; then
crd_version=$(yq e '.spec.versions[0].name' ${crd_yaml})
fi
echo "Found CRD with GVK ${crd_group}/${crd_version}/${crd_kind}"
crd_apis+=("${crd_group}/${crd_version}/${crd_kind}")
done
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}
cp -R ./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'
# Add dashboard annotations to main chart
cat <<EOF >>${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
}
TRAEFIK_FILE=traefik-${TRAEFIK_VERSION}.tgz
TRAEFIK_CRD_FILE=traefik-crd-${TRAEFIK_VERSION}.tgz
TRAEFIK_URL=https://helm.traefik.io/traefik/${TRAEFIK_FILE}
setup_tmp
download_and_package_traefik
cp scripts/wg-add.sh bin/aux/