diff --git a/install.sh b/install.sh index b1aa063461..a2cd3c6fc1 100755 --- a/install.sh +++ b/install.sh @@ -67,6 +67,7 @@ set -e # if not specified. GITHUB_URL=https://github.com/rancher/k3s/releases +DOWNLOADER= # --- helper functions for logs --- info() @@ -260,11 +261,14 @@ setup_verify_arch() { esac } -# --- fatal if no curl --- -verify_curl() { - if [ -z $(which curl || true) ]; then - fatal "Can not find curl for downloading files" - fi +# --- verify existence of network downloader executable --- +verify_downloader() { + # Return failure if it doesn't exist or is no executable + [ -x "$(which $1)" ] || return 1 + + # Set verified executable as our downloader program and return success + DOWNLOADER=$1 + return 0 } # --- create tempory directory and cleanup when done --- @@ -288,16 +292,46 @@ get_release_version() { VERSION_K3S="${INSTALL_K3S_VERSION}" else info "Finding latest release" - VERSION_K3S=$(curl -w "%{url_effective}" -I -L -s -S ${GITHUB_URL}/latest -o /dev/null | sed -e 's|.*/||') + case $DOWNLOADER in + curl) + VERSION_K3S=$(curl -w '%{url_effective}' -I -L -s -S ${GITHUB_URL}/latest -o /dev/null | sed -e 's|.*/||') + ;; + wget) + VERSION_K3S=$(wget -SqO /dev/null ${GITHUB_URL}/latest 2>&1 | grep Location | sed -e 's|.*/||') + ;; + *) + fatal "Incorrect downloader executable '$DOWNLOADER'" + ;; + esac fi info "Using ${VERSION_K3S} as release" } +# --- download from github url --- +download() { + [ $# -eq 2 ] || fatal 'download needs exactly 2 arguments' + + case $DOWNLOADER in + curl) + curl -o $1 -sfL $2 + ;; + wget) + wget -qO $1 $2 + ;; + *) + fatal "Incorrect executable '$DOWNLOADER'" + ;; + esac + + # Abort if download command failed + [ $? -eq 0 ] || fatal 'Download failed' +} + # --- download hash from github url --- download_hash() { HASH_URL=${GITHUB_URL}/download/${VERSION_K3S}/sha256sum-${ARCH}.txt info "Downloading hash ${HASH_URL}" - curl -o ${TMP_HASH} -sfL ${HASH_URL} || fatal "Hash download failed" + download ${TMP_HASH} ${HASH_URL} HASH_EXPECTED=$(grep " k3s${SUFFIX}$" ${TMP_HASH} | awk '{print $1}') } @@ -316,7 +350,7 @@ installed_hash_matches() { download_binary() { BIN_URL=${GITHUB_URL}/download/${VERSION_K3S}/k3s${SUFFIX} info "Downloading binary ${BIN_URL}" - curl -o ${TMP_BIN} -sfL ${BIN_URL} || fatal "Binary download failed" + download ${TMP_BIN} ${BIN_URL} } # --- verify downloaded binary hash --- @@ -359,7 +393,7 @@ download_and_verify() { fi setup_verify_arch - verify_curl + verify_downloader curl || verify_downloader wget || fatal 'Can not find curl or wget for downloading files' setup_tmp get_release_version download_hash