#!/usr/bin/env bash # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You 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. set -o pipefail ## @description Print a message to stderr ## @audience public ## @stability stable ## @replaceable no ## @param string function yetus_error { echo "$*" 1>&2 } ## @description Given a filename or dir, return the absolute version of it ## @audience public ## @stability stable ## @param directory ## @replaceable no ## @return 0 success ## @return 1 failure ## @return stdout abspath function yetus_abs { declare obj=$1 declare dir declare fn if [[ ! -e ${obj} ]]; then return 1 elif [[ -d ${obj} ]]; then dir=${obj} else dir=$(dirname -- "${obj}") fn=$(basename -- "${obj}") fn="/${fn}" fi dir=$(cd -P -- "${dir}" >/dev/null 2>/dev/null && pwd -P) if [[ $? = 0 ]]; then echo "${dir}${fn}" return 0 fi return 1 } WANTED="$1" shift ARGV=("$@") HADOOP_YETUS_VERSION=${HADOOP_YETUS_VERSION:-0.2.0} BIN=$(yetus_abs "${BASH_SOURCE-$0}") BINDIR=$(dirname "${BIN}") ### ### if YETUS_HOME is set, then try to use it ### if [[ -n "${YETUS_HOME}" && -x "${YETUS_HOME}/bin/${WANTED}" ]]; then exec "${YETUS_HOME}/bin/${WANTED}" "${ARGV[@]}" fi # # this directory is ignored by git and maven # HADOOP_PATCHPROCESS=${HADOOP_PATCHPROCESS:-"${BINDIR}/../../patchprocess"} if [[ ! -d "${HADOOP_PATCHPROCESS}" ]]; then mkdir -p "${HADOOP_PATCHPROCESS}" fi mytmpdir=$(yetus_abs "${HADOOP_PATCHPROCESS}") if [[ $? != 0 ]]; then yetus_error "yetus-dl: Unable to cwd to ${HADOOP_PATCHPROCESS}" exit 1 fi HADOOP_PATCHPROCESS=${mytmpdir} ## ## if we've already DL'd it, then short cut ## if [[ -x "${HADOOP_PATCHPROCESS}/yetus-${HADOOP_YETUS_VERSION}/bin/${WANTED}" ]]; then exec "${HADOOP_PATCHPROCESS}/yetus-${HADOOP_YETUS_VERSION}/bin/${WANTED}" "${ARGV[@]}" fi ## ## need to DL, etc ## BASEURL="https://archive.apache.org/dist/yetus/${HADOOP_YETUS_VERSION}/" TARBALL="yetus-${HADOOP_YETUS_VERSION}-bin.tar" GPGBIN=$(command -v gpg) CURLBIN=$(command -v curl) pushd "${HADOOP_PATCHPROCESS}" >/dev/null if [[ $? != 0 ]]; then yetus_error "ERROR: yetus-dl: Cannot pushd to ${HADOOP_PATCHPROCESS}" exit 1 fi if [[ -n "${CURLBIN}" ]]; then "${CURLBIN}" -s -L -O "${BASEURL}/${TARBALL}.gz" if [[ $? != 0 ]]; then yetus_error "ERROR: yetus-dl: unable to download ${BASEURL}/${TARBALL}.gz" exit 1 fi else yetus_error "ERROR: yetus-dl requires curl." exit 1 fi if [[ -n "${GPGBIN}" ]]; then mkdir -p .gpg if [[ $? != 0 ]]; then yetus_error "ERROR: yetus-dl: Unable to create ${HADOOP_PATCHPROCESS}/.gpg" exit 1 fi chmod -R 700 .gpg if [[ $? != 0 ]]; then yetus_error "ERROR: yetus-dl: Unable to chmod ${HADOOP_PATCHPROCESS}/.gpg" exit 1 fi "${CURLBIN}" -s -L -o KEYS_YETUS https://dist.apache.org/repos/dist/release/yetus/KEYS if [[ $? != 0 ]]; then yetus_error "ERROR: yetus-dl: unable to fetch https://dist.apache.org/repos/dist/release/yetus/KEYS" exit 1 fi "${CURLBIN}" -s -L -O "${BASEURL}/${TARBALL}.gz.asc" if [[ $? != 0 ]]; then yetus_error "ERROR: yetus-dl: unable to fetch ${BASEURL}/${TARBALL}.gz.asc" exit 1 fi "${GPGBIN}" --homedir "${HADOOP_PATCHPROCESS}/.gpg" --import "${HADOOP_PATCHPROCESS}/KEYS_YETUS" >/dev/null 2>&1 if [[ $? != 0 ]]; then yetus_error "ERROR: yetus-dl: gpg unable to import ${HADOOP_PATCHPROCESS}/KEYS_YETUS" exit 1 fi "${GPGBIN}" --homedir "${HADOOP_PATCHPROCESS}/.gpg" --verify "${TARBALL}.gz.asc" >/dev/null 2>&1 if [[ $? != 0 ]]; then yetus_error "ERROR: yetus-dl: gpg verify of tarball in ${HADOOP_PATCHPROCESS} failed" exit 1 fi fi gunzip -c "${TARBALL}.gz" | tar xpf - if [[ $? != 0 ]]; then yetus_error "ERROR: ${TARBALL}.gz is corrupt. Investigate and then remove ${HADOOP_PATCHPROCESS} to try again." exit 1 fi if [[ -x "${HADOOP_PATCHPROCESS}/yetus-${HADOOP_YETUS_VERSION}/bin/${WANTED}" ]]; then exec "${HADOOP_PATCHPROCESS}/yetus-${HADOOP_YETUS_VERSION}/bin/${WANTED}" "${ARGV[@]}" fi ## ## give up ## yetus_error "ERROR: ${WANTED} is not part of Apache Yetus ${HADOOP_YETUS_VERSION}" exit 1