mirror of https://github.com/helm/helm
				
				
				
			
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							146 lines
						
					
					
						
							4.2 KiB
						
					
					
				
			
		
		
	
	
							146 lines
						
					
					
						
							4.2 KiB
						
					
					
				| #!/bin/bash
 | |
| 
 | |
| # Copyright 2016 The Kubernetes Authors All rights reserved.
 | |
| #
 | |
| # 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
 | |
| 
 | |
| PROJECT_NAME="helm"
 | |
| 
 | |
| : ${HELM_INSTALL_DIR:="/usr/local/bin"}
 | |
| 
 | |
| # initArch discovers the architecture for this system.
 | |
| initArch() {
 | |
|   ARCH=$(uname -m)
 | |
|   case $ARCH in
 | |
|     armv5*) ARCH="armv5";;
 | |
|     armv6*) ARCH="armv6";;
 | |
|     armv7*) ARCH="armv7";;
 | |
|     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*) OS='windows';;
 | |
|   esac
 | |
| }
 | |
| 
 | |
| # verifySupported checks that the os/arch combination is supported for
 | |
| # binary builds.
 | |
| verifySupported() {
 | |
|   local supported="linux-amd64\ndarwin-amd64\nlinux-386"
 | |
|   if ! echo "${supported}" | grep -q "${OS}-${ARCH}"; then
 | |
|     echo "No prebuild binary for ${OS}-${ARCH}."
 | |
|     echo "To build from source, go to https://github.com/kubernetes/helm"
 | |
|     exit 1
 | |
|   fi
 | |
| 
 | |
|   if ! type "curl" > /dev/null && ! type "wget" > /dev/null; then
 | |
|     echo "Either curl or wget is required"
 | |
|     exit 1
 | |
|   fi
 | |
| }
 | |
| 
 | |
| # downloadFile downloads the latest binary package and also the checksum
 | |
| # for that binary.
 | |
| downloadFile() {
 | |
|   # Use the GitHub API to find the latest version for this project.
 | |
|   local latest_url="https://api.github.com/repos/kubernetes/helm/releases/latest"
 | |
|   if type "curl" > /dev/null; then
 | |
|     TAG=$(curl -s $latest_url | awk '/\"tag_name\":/{gsub( /[,\"]/,"", $2); print $2}')
 | |
|   elif type "wget" > /dev/null; then
 | |
|     TAG=$(wget -q -O - $latest_url | awk '/\"tag_name\":/{gsub( /[,\"]/,"", $2); print $2}')
 | |
|   fi
 | |
| 
 | |
|   HELM_DIST="helm-$TAG-$OS-$ARCH.tar.gz"
 | |
|   DOWNLOAD_URL="https://kubernetes-helm.storage.googleapis.com/$HELM_DIST"
 | |
|   CHECKSUM_URL="$DOWNLOAD_URL.sha256"
 | |
|   HELM_TMP_FILE="/tmp/$HELM_DIST"
 | |
|   HELM_SUM_FILE="/tmp/$HELM_DIST.sha256"
 | |
|   echo "Downloading $DOWNLOAD_URL"
 | |
|   if type "curl" > /dev/null; then
 | |
|     curl -Ls "$CHECKSUM_URL" -o "$HELM_SUM_FILE"
 | |
|   elif type "wget" > /dev/null; then
 | |
|     wget -q -O "$HELM_SUM_FILE" "$CHECKSUM_URL"
 | |
|   fi
 | |
|   if type "curl" > /dev/null; then
 | |
|     curl -L "$DOWNLOAD_URL" -o "$HELM_TMP_FILE"
 | |
|   elif type "wget" > /dev/null; then
 | |
|     wget -q -O "$HELM_TMP_FILE" "$DOWNLOAD_URL"
 | |
|   fi
 | |
| }
 | |
| 
 | |
| # installFile verifies the SHA256 for the file, then unpacks and
 | |
| # installs it.
 | |
| installFile() {
 | |
|   HELM_TMP="/tmp/$PROJECT_NAME"
 | |
|   local sum=$(openssl sha -sha256 ${HELM_TMP_FILE} | awk '{print $2}')
 | |
|   local expected_sum=$(cat ${HELM_SUM_FILE})
 | |
|   if [ "$sum" != "$expected_sum" ]; then
 | |
|     echo "SHA sum of $HELM_TMP does not match. Aborting."
 | |
|     exit 1
 | |
|   fi
 | |
| 
 | |
|   mkdir -p "$HELM_TMP"
 | |
|   tar xf "$HELM_TMP_FILE" -C "$HELM_TMP"
 | |
|   HELM_TMP_BIN="$HELM_TMP/$OS-$ARCH/$PROJECT_NAME"
 | |
|   echo "Preparing to install into ${HELM_INSTALL_DIR} (sudo)"
 | |
|   sudo cp "$HELM_TMP_BIN" "$HELM_INSTALL_DIR"
 | |
| }
 | |
| 
 | |
| # fail_trap is executed if an error occurs.
 | |
| fail_trap() {
 | |
|   result=$?
 | |
|   if [ "$result" != "0" ]; then
 | |
|     echo "Failed to install $PROJECT_NAME"
 | |
|     echo "\tFor support, go to https://github.com/kubernetes/helm."
 | |
|   fi
 | |
|   exit $result
 | |
| }
 | |
| 
 | |
| # testVersion tests the installed client to make sure it is working.
 | |
| testVersion() {
 | |
|   set +e
 | |
|   echo "$PROJECT_NAME installed into $HELM_INSTALL_DIR/$PROJECT_NAME"
 | |
|   HELM="$(which $PROJECT_NAME)"
 | |
|   if [ "$?" = "1" ]; then
 | |
|     echo "$PROJECT_NAME not found. Is $HELM_INSTALL_DIR on your "'$PATH?'
 | |
|     exit 1
 | |
|   fi
 | |
|   set -e
 | |
|   echo "Run '$PROJECT_NAME init' to configure $PROJECT_NAME."
 | |
| }
 | |
| 
 | |
| # Execution
 | |
| 
 | |
| #Stop execution on any error
 | |
| trap "fail_trap" EXIT
 | |
| set -e
 | |
| initArch
 | |
| initOS
 | |
| verifySupported
 | |
| downloadFile
 | |
| installFile
 | |
| testVersion
 |