#!/usr/bin/env bash# Copyright The Helm Authors.## Licensed under the Apache License, Version 2.0 (the "License");# you may not use this file except in compliance with the License.# You may obtain a copy of the License at## http://www.apache.org/licenses/LICENSE-2.0## Unless required by applicable law or agreed to in writing, software# distributed under the License is distributed on an "AS IS" BASIS,# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.# See the License for the specific language governing permissions and# limitations under the License.# The install script is based off of the MIT-licensed script from glide,# the package manager for Go: https://github.com/Masterminds/glide.sh/blob/master/get:${BINARY_NAME:="helm"}:${USE_SUDO:="true"}:${DEBUG:="false"}:${VERIFY_CHECKSUM:="true"}:${VERIFY_SIGNATURES:="false"}:${HELM_INSTALL_DIR:="/usr/local/bin"}:${GPG_PUBRING:="pubring.kbx"}HAS_CURL="$(type"curl"&> /dev/null &&echotrue||echofalse)"HAS_WGET="$(type"wget"&> /dev/null &&echotrue||echofalse)"HAS_OPENSSL="$(type"openssl"&> /dev/null &&echotrue||echofalse)"HAS_GPG="$(type"gpg"&> /dev/null &&echotrue||echofalse)"HAS_GIT="$(type"git"&> /dev/null &&echotrue||echofalse)"# initArch discovers the architecture for this system.initArch(){ARCH=$(uname-m)case$ARCHin
armv5*)ARCH="armv5";;
armv6*)ARCH="armv6";;
armv7*)ARCH="arm";;
aarch64)ARCH="arm64";;
x86)ARCH="386";;
x86_64)ARCH="amd64";;
i686)ARCH="386";;
i386)ARCH="386";;esac}# initOS discovers the operating system for this system.initOS(){OS=$(echo `uname`|tr'[:upper:]''[:lower:]')case"$OS"in# Minimalist GNU for Windows
mingw*|cygwin*)OS='windows';;esac}# runs the given command as root (detects if we are root already)runAsRoot(){if[$EUID-ne0-a"$USE_SUDO"="true"];thensudo"${@}"else"${@}"fi}# verifySupported checks that the os/arch combination is supported for# binary builds, as well whether or not necessary tools are present.verifySupported(){localsupported="darwin-amd64\ndarwin-arm64\nlinux-386\nlinux-amd64\nlinux-arm\nlinux-arm64\nlinux-ppc64le\nlinux-s390x\nlinux-riscv64\nwindows-amd64"if!echo"${supported}"|grep-q"${OS}-${ARCH}";thenecho"No prebuilt binary for ${OS}-${ARCH}."echo"To build from source, go to https://github.com/helm/helm"exit1fiif["${HAS_CURL}"!="true"]&&["${HAS_WGET}"!="true"];thenecho"Either curl or wget is required"exit1fiif["${VERIFY_CHECKSUM}"=="true"]&&["${HAS_OPENSSL}"!="true"];thenecho"In order to verify checksum, openssl must first be installed."echo"Please install openssl or set VERIFY_CHECKSUM=false in your environment."exit1fiif["${VERIFY_SIGNATURES}"=="true"];thenif["${HAS_GPG}"!="true"];thenecho"In order to verify signatures, gpg must first be installed."echo"Please install gpg or set VERIFY_SIGNATURES=false in your environment."exit1fiif["${OS}"!="linux"];thenecho"Signature verification is currently only supported on Linux."echo"Please set VERIFY_SIGNATURES=false or verify the signatures manually."exit1fifiif["${HAS_GIT}"!="true"];thenecho"[WARNING] Could not find git. It is required for plugin installation."fi}# checkDesiredVersion checks if the desired version is available.checkDesiredVersion(){if["x$DESIRED_VERSION"=="x"];then# Get tag from release URLlocallatest_release_url="https://get.helm.sh/helm-latest-version"locallatest_release_response=""if["${HAS_CURL}"=="true"];thenlatest_release_response=$(curl-L--silent --show-error --fail"$latest_release_url"2>&1||true)elif["${HAS_WGET}"=="true"];thenlatest_release_response=$(wget"$latest_release_url"-q-O - 2>&1||true)fiTAG=$(echo"$latest_release_response"|grep'^v[0-9]')if["x$TAG"=="x"];thenprintf"Could not retrieve the latest release tag information from %s: %s\n""${latest_release_url}""${latest_release_response}"exit1fielseTAG=$DESIRED_VERSIONfi}# checkHelmInstalledVersion checks which version of helm is installed and# if it needs to be changed.checkHelmInstalledVersion(){if[[-f"${HELM_INSTALL_DIR}/${BINARY_NAME}"]];thenlocalversion=$("${HELM_INSTALL_DIR}/${BINARY_NAME}" version --template="{{ .Version }}")if[["$version"=="$TAG"]];thenecho"Helm ${version} is already ${DESIRED_VERSION:-latest}"return0elseecho"Helm ${TAG} is available. Changing from version ${version}."return1fielsereturn1fi}# downloadFile downloads the latest binary package and also the checksum# for that binary.downloadFile(){HELM_DIST="helm-$TAG-$OS-$ARCH.tar.gz"DOWNLOAD_URL="https://get.helm.sh/$HELM_DIST"CHECKSUM_URL="$DOWNLOAD_URL.sha256"HELM_TMP_ROOT="$(mktemp -dt helm-installer-XXXXXX)"HELM_TMP_FILE="$HELM_TMP_ROOT/$HELM_DIST"HELM_SUM_FILE="$HELM_TMP_ROOT/$HELM_DIST.sha256"echo"Downloading $DOWNLOAD_URL"if["${HAS_CURL}"=="true"];thencurl-SsL"$CHECKSUM_URL"-o"$HELM_SUM_FILE"curl-SsL"$DOWNLOAD_URL"-o"$HELM_TMP_FILE"elif["${HAS_WGET}"=="true"];thenwget-q-O"$HELM_SUM_FILE""$CHECKSUM_URL"wget-q-O"$HELM_TMP_FILE""$DOWNLOAD_URL"fi}# verifyFile verifies the SHA256 checksum of the binary package# and the GPG signatures for both the package and checksum file# (depending on settings in environment).verifyFile(){if["${VERIFY_CHECKSUM}"=="true"];then
verifyChecksum
fiif["${VERIFY_SIGNATURES}"=="true"];then
verifySignatures
fi}# installFile installs the Helm binary.installFile(){HELM_TMP="$HELM_TMP_ROOT/$BINARY_NAME"mkdir-p"$HELM_TMP"tar xf "$HELM_TMP_FILE"-C"$HELM_TMP"HELM_TMP_BIN="$HELM_TMP/$OS-$ARCH/helm"echo"Preparing to install $BINARY_NAME into ${HELM_INSTALL_DIR}"
runAsRoot cp"$HELM_TMP_BIN""$HELM_INSTALL_DIR/$BINARY_NAME"echo"$BINARY_NAME installed into $HELM_INSTALL_DIR/$BINARY_NAME"}# verifyChecksum verifies the SHA256 checksum of the binary package.verifyChecksum(){printf"Verifying checksum... "localsum=$(openssl sha1 -sha256 ${HELM_TMP_FILE}|awk'{print $2}')localexpected_sum=$(cat ${HELM_SUM_FILE})if["$sum"!="$expected_sum"];thenecho"SHA sum of ${HELM_TMP_FILE} does not match. Aborting."exit1fiecho"Done."}# verifySignatures obtains the latest KEYS file from GitHub main branch# as well as the signature .asc files from the specific GitHub release,# then verifies that the release artifacts were signed by a maintainer's key.verifySignatures(){printf"Verifying signatures... "localkeys_filename="KEYS"localgithub_keys_url="https://raw.githubusercontent.com/helm/helm/main/${keys_filename}"if["${HAS_CURL}"=="true"];thencurl-SsL"${github_keys_url}"-o"${HELM_TMP_ROOT}/${keys_filename}"elif["${HAS_WGET}"=="true"];thenwget-q-O"${HELM_TMP_ROOT}/${keys_filename}""${github_keys_url}"filocalgpg_keyring="${HELM_TMP_ROOT}/keyring.gpg"localgpg_homedir="${HELM_TMP_ROOT}/gnupg"mkdir-p-m 0700 "${gpg_homedir}"localgpg_stderr_device="/dev/null"if["${DEBUG}"=="true"];thengpg_stderr_device="/dev/stderr"fi
gpg --batch--quiet--homedir="${gpg_homedir}"--import"${HELM_TMP_ROOT}/${keys_filename}"2>"${gpg_stderr_device}"
gpg --batch --no-default-keyring --keyring"${gpg_homedir}/${GPG_PUBRING}"--export>"${gpg_keyring}"localgithub_release_url="https://github.com/helm/helm/releases/download/${TAG}"if["${HAS_CURL}"=="true"];thencurl-SsL"${github_release_url}/helm-${TAG}-${OS}-${ARCH}.tar.gz.sha256.asc"-o"${HELM_TMP_ROOT}/helm-${TAG}-${OS}-${ARCH}.tar.gz.sha256.asc"curl-SsL"${github_release_url}/helm-${TAG}-${OS}-${ARCH}.tar.gz.asc"-o"${HELM_TMP_ROOT}/helm-${TAG}-${OS}-${ARCH}.tar.gz.asc"elif["${HAS_WGET}"=="true"];thenwget-q-O"${HELM_TMP_ROOT}/helm-${TAG}-${OS}-${ARCH}.tar.gz.sha256.asc""${github_release_url}/helm-${TAG}-${OS}-${ARCH}.tar.gz.sha256.asc"wget-q-O"${HELM_TMP_ROOT}/helm-${TAG}-${OS}-${ARCH}.tar.gz.asc""${github_release_url}/helm-${TAG}-${OS}-${ARCH}.tar.gz.asc"filocalerror_text="If you think this might be a potential security issue,"error_text="${error_text}\nplease see here: https://github.com/helm/community/blob/master/SECURITY.md"localnum_goodlines_sha=$(gpg --verify--keyring="${gpg_keyring}" --status-fd=1"${HELM_TMP_ROOT}/helm-${TAG}-${OS}-${ARCH}.tar.gz.sha256.asc"2>"${gpg_stderr_device}"|grep-c-E'^\[GNUPG:\] (GOODSIG|VALIDSIG)')if[[${num_goodlines_sha}-lt2]];thenecho"Unable to verify the signature of helm-${TAG}-${OS}-${ARCH}.tar.gz.sha256!"echo-e"${error_text}"exit1filocalnum_goodlines_tar=$(gpg --verify--keyring="${gpg_keyring}" --status-fd=1"${HELM_TMP_ROOT}/helm-${TAG}-${OS}-${ARCH}.tar.gz.asc"2>"${gpg_stderr_device}"|grep-c-E'^\[GNUPG:\] (GOODSIG|VALIDSIG)')if[[${num_goodlines_tar}-lt2]];thenecho"Unable to verify the signature of helm-${TAG}-${OS}-${ARCH}.tar.gz!"echo-e"${error_text}"exit1fiecho"Done."}# fail_trap is executed if an error occurs.fail_trap(){result=$?if["$result"!="0"];thenif[[-n"$INPUT_ARGUMENTS"]];thenecho"Failed to install $BINARY_NAME with the arguments provided: $INPUT_ARGUMENTS"helpelseecho"Failed to install $BINARY_NAME"fiecho-e"\tFor support, go to https://github.com/helm/helm."fi
cleanup
exit$result}# testVersion tests the installed client to make sure it is working.testVersion(){set +e
HELM="$(command-v $BINARY_NAME)"if["$?"="1"];thenecho"$BINARY_NAME not found. Is $HELM_INSTALL_DIR on your "'$PATH?'exit1fiset-e}# help provides possible cli installation argumentshelp(){echo"Accepted cli arguments are:"echo-e"\t[--help|-h ] ->> prints this help"echo-e"\t[--version|-v <desired_version>] . When not defined it fetches the latest release from GitHub"echo-e"\te.g. --version v3.0.0 or -v canary"echo-e"\t[--no-sudo] ->> install without sudo"}# cleanup temporary files to avoid https://github.com/helm/helm/issues/2977cleanup(){if[[-d"${HELM_TMP_ROOT:-}"]];thenrm-rf"$HELM_TMP_ROOT"fi}# Execution#Stop execution on any errortrap"fail_trap" EXIT
set-e# Set debug if desiredif["${DEBUG}"=="true"];thenset-xfi# Parsing input arguments (if any)exportINPUT_ARGUMENTS="${@}"set-uwhile[[$#-gt0]];docase$1in'--version'|-v)shiftif[[$#-ne0]];thenexportDESIRED_VERSION="${1}"if[["$1"!="v"* ]];thenecho"Expected version arg ('${DESIRED_VERSION}') to begin with 'v', fixing..."exportDESIRED_VERSION="v${1}"fielseecho-e"Please provide the desired version. e.g. --version v3.0.0 or -v canary"exit0fi;;'--no-sudo')USE_SUDO="false";;'--help'|-h)helpexit0;;
*)exit1;;esacshiftdoneset +u
initArch
initOS
verifySupported
checkDesiredVersion
if! checkHelmInstalledVersion;then
downloadFile
verifyFile
installFile
fi
testVersion
cleanup
创建 helm
将上方脚本,复制到服务器上,脚本名称为 get_helm.sh
变成可执行脚本
[root@k8s-master 10-pod]# vim get_helm.sh
[root@k8s-master 10-pod]# chmod 755 get_helm.sh
[root@k8s-master 10-pod]# ./get_helm.sh
Downloading https://get.helm.sh/helm-v3.16.2-linux-amd64.tar.gz
Verifying checksum... Done.
Preparing to install helm into /usr/local/bin
helm installed into /usr/local/bin/helm
[root@k8s-master 10-pod]# helm version
version.BuildInfo{Version:"v3.16.2", GitCommit:"13654a52f7c70a143b1dd51416d633e1071faffb", GitTreeState:"clean", GoVersion:"go1.22.7"}
[root@k8s-master 10-pod]# helm repo ls
Error: no repositories to show (为空,因为要初始化charts,仓库 ---- > 相当于是 yum文件中的/etc/yum.repos.d/*.repo文件一样 )
# 初始化
# 当您已经安装好了Helm之后,您可以添加一个chart 仓库。从 Artifact Hub 中查找有效的Helm chart仓库
# 官方指定的 bitnami 是镜像名称 后面是镜像地址
helm repo add bitnami https://charts.bitnami.com/bitnami
# 当添加完成,您将可以看到可以被您安装的 charts 列表:
helm repo ls
helm search repo bitnami