|
| 1 | +#!/bin/bash |
| 2 | + |
| 3 | +set -e |
| 4 | + |
| 5 | +for i in "$@"; do |
| 6 | + case $i in |
| 7 | + -c=* | --cri=*) |
| 8 | + cri="${i#*=}" |
| 9 | + if [ "$cri" != "docker" ] && [ "$cri" != "containerd" ]; then |
| 10 | + echo "Unsupported container runtime: ${cri}" |
| 11 | + exit 1 |
| 12 | + fi |
| 13 | + shift # past argument=value |
| 14 | + ;; |
| 15 | + -n=* | --buildName=*) |
| 16 | + buildName="${i#*=}" |
| 17 | + shift # past argument=value |
| 18 | + ;; |
| 19 | + --platform=*) |
| 20 | + platform="${i#*=}" |
| 21 | + shift # past argument=value |
| 22 | + ;; |
| 23 | + --push) |
| 24 | + push="true" |
| 25 | + shift # past argument=value |
| 26 | + ;; |
| 27 | + -p=* | --password=*) |
| 28 | + password="${i#*=}" |
| 29 | + shift # past argument=value |
| 30 | + ;; |
| 31 | + -u=* | --username=*) |
| 32 | + username="${i#*=}" |
| 33 | + shift # past argument=value |
| 34 | + ;; |
| 35 | + --k8s-version=*) |
| 36 | + k8s_version="${i#*=}" |
| 37 | + shift # past argument=value |
| 38 | + ;; |
| 39 | + -h | --help) |
| 40 | + echo " |
| 41 | +### Options |
| 42 | + --k8s-version set the kubernetes k8s_version of the Clusterimage, k8s_version must be greater than 1.13 |
| 43 | + -c, --cri cri can be set to docker or containerd between kubernetes 1.20-1.24 versions |
| 44 | + -n, --buildName set build image name, default is 'registry.cn-qingdao.aliyuncs.com/sealer-io/kubernetes:${k8s_version}' |
| 45 | + --platform set the build mirror platform, the default is linux/amd64,linux/arm64 |
| 46 | + --push push clusterimage after building the clusterimage. The image name must contain the full name of the repository, and use -u and -p to specify the username and password. |
| 47 | + -u, --username specify the user's username for pushing the Clusterimage |
| 48 | + -p, --password specify the user's password for pushing the Clusterimage |
| 49 | + -d, --debug show all script logs |
| 50 | + -h, --help help for auto build shell scripts" |
| 51 | + exit 0 |
| 52 | + ;; |
| 53 | + -d | --debug) |
| 54 | + set -x |
| 55 | + shift |
| 56 | + ;; |
| 57 | + -*) |
| 58 | + echo "Unknown option $i" |
| 59 | + exit 1 |
| 60 | + ;; |
| 61 | + *) ;; |
| 62 | + |
| 63 | + esac |
| 64 | +done |
| 65 | + |
| 66 | +version_compare() { printf '%s\n%s\n' "$2" "$1" | sort -V -C; } ## version_compare $a $b: a>=b |
| 67 | + |
| 68 | +ARCH=$(case "$(uname -m)" in x86_64) echo -n amd64 ;; aarch64) echo -n arm64 ;; *) echo "unsupported architecture" "$(uname -m)" && exit 1 ;; esac) |
| 69 | + |
| 70 | +if [ "$k8s_version" = "" ]; then echo "pls use --k8s-version to set Clusterimage kubernetes version" && exit 1; else echo "$k8s_version" | grep "v" || k8s_version="v${k8s_version}"; fi |
| 71 | +#cri=$([[ -n "$cri" ]] && echo "$cri" || echo docker) |
| 72 | +cri=$( (version_compare "$k8s_version" "v1.24.0" && echo "containerd") || ([[ -n "$cri" ]] && echo "$cri" || echo "docker")) |
| 73 | +if [[ -z "$buildName" ]]; then |
| 74 | + buildName="docker.io/sealerio/kubernetes:${k8s_version}" |
| 75 | + if [[ "$cri" == "containerd" ]] && ! version_compare "$k8s_version" "v1.24.0"; then buildName=${buildName}-containerd; fi |
| 76 | +fi |
| 77 | +platform=$(if [[ -z "$platform" ]]; then echo "linux/arm64,linux/amd64"; else echo "$platform"; fi) |
| 78 | +echo "cri: ${cri}, kubernetes version: ${k8s_version}, build image name: ${buildName}" |
| 79 | + |
| 80 | +kubeadmApiVersion=$( (version_compare "$k8s_version" "v1.23.0" && echo 'kubeadm.k8s.io\/v1beta3') || (version_compare "$k8s_version" "v1.15.0" && echo 'kubeadm.k8s.io\/v1beta2') || |
| 81 | + (version_compare "$k8s_version" "v1.13.0" && echo 'kubeadm.k8s.io\/v1beta1') || (echo "Version must be greater than 1.13: ${k8s_version}" && exit 1)) |
| 82 | + |
| 83 | +workdir="$(mktemp -d auto-build-XXXXX)" && sudo cp -r context "${workdir}" && cd "${workdir}/context" && sudo cp -rf "${cri}"/* . |
| 84 | + |
| 85 | +# shellcheck disable=SC1091 |
| 86 | +sudo chmod +x version.sh download.sh && export kube_install_version="$k8s_version" && source version.sh |
| 87 | +./download.sh "${cri}" |
| 88 | + |
| 89 | +sudo chmod +x amd64/bin/kube* && sudo chmod +x arm64/bin/kube* |
| 90 | +#Download the latest version of sealer |
| 91 | +sudo git clone https://github.com/sealerio/sealer && cd sealer && git checkout main && make build-in-docker && cp _output/bin/sealer/linux_amd64/sealer /usr/bin/ && cd .. |
| 92 | +sudo sed -i "s/v1.19.8/$k8s_version/g" rootfs/etc/kubeadm.yml ##change k8s_version |
| 93 | +if [[ "$cri" == "containerd" ]]; then sudo sed -i "s/\/var\/run\/dockershim.sock/\/run\/containerd\/containerd.sock/g" rootfs/etc/kubeadm.yml; fi |
| 94 | +sudo sed -i "s/kubeadm.k8s.io\/v1beta2/$kubeadmApiVersion/g" rootfs/etc/kubeadm.yml |
| 95 | +sudo ./"${ARCH}"/bin/kubeadm config images list --config "rootfs/etc/kubeadm.yml" |
| 96 | +sudo mkdir manifests |
| 97 | +sudo ./"${ARCH}"/bin/kubeadm config images list --config "rootfs/etc/kubeadm.yml" 2>/dev/null | sed "/WARNING/d" >>imageList |
| 98 | +if [ "$(sudo ./"${ARCH}"/bin/kubeadm config images list --config rootfs/etc/kubeadm.yml 2>/dev/null | grep -c "coredns/coredns")" -gt 0 ]; then sudo sed -i "s/#imageRepository/imageRepository/g" rootfs/etc/kubeadm.yml; fi |
| 99 | +sudo sed -i "s/k8s.gcr.io/sea.hub:5000/g" rootfs/etc/kubeadm.yml |
| 100 | +pauseImage=$(./"${ARCH}"/bin/kubeadm config images list --config "rootfs/etc/kubeadm.yml" 2>/dev/null | sed "/WARNING/d" | grep pause) |
| 101 | +if [ -f "rootfs/etc/dump-config.toml" ]; then sudo sed -i "s/sea.hub:5000\/pause:3.6/$(echo "$pauseImage" | sed 's/\//\\\//g')/g" rootfs/etc/dump-config.toml; fi |
| 102 | +#sudo sed -i "s/v1.19.8/${k8s_version}/g" {arm64,amd64}/etc/Metadata |
| 103 | +##linux/arm64,linux/amd64 |
| 104 | +sudo sealer build -t "docker.io/sealerio/kubernetes:${k8s_version}" -f Kubefile |
| 105 | +if [[ "$push" == "true" ]]; then |
| 106 | + if [[ -n "$username" ]] && [[ -n "$password" ]]; then |
| 107 | + sudo sealer login "$(echo "docker.io" | cut -d "/" -f1)" -u "${username}" -p "${password}" |
| 108 | + fi |
| 109 | + sudo sealer push "docker.io/sealerio/kubernetes:${k8s_version}" |
| 110 | +fi |
0 commit comments