| #!/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.3.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}" -f -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 |
| popd >/dev/null |
| 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 |