blob: eb50a318f6b9375c3a6e332c60614dca3c8c1566 [file] [log] [blame]
#!/usr/bin/env bash
#
#/**
# * Copyright 2014 The Apache Software Foundation
# *
# * 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.
# */
#
DRILL_CHECKUM_ALOGRITHMS="sha1 md5"
DRILL_SIGNATURE_EXTENSION=asc
DRILL_ARTIFACT_EXTENSION=tar.gz
DRILL_ARTIFACTS=*.${DRILL_ARTIFACT_EXTENSION}
DRILL_ARTIFACT_DIR=.
ERROR='\e[0;31m'
SUCCESS='\e[0;32m'
DEBUG='\e[1;30m'
INFO='\e[0;33m'
RESET='\e[0m'
#
# Helper methods
#
error_exit() { echo -e $ERROR$@$RESET; popd &> /dev/null; exit 1; }
info_msg () { echo -e $INFO$@$RESET; }
debug_msg () { echo -e $DEBUG$@$RESET; }
#
# Check the command line argument
#
case $# in
0) ;;
1)
if ! [ -d $1 ] ; then
pushd . &> /dev/null
error_exit "'$1' is not a directory."
fi
DRILL_ARTIFACT_DIR=$1
;;
*)
echo "Usage: $0 <path_to_drill_artifacts>"
exit 1
esac
#
# Begin validation
#
ARTIFACT_COUNT=0
pushd $DRILL_ARTIFACT_DIR &> /dev/null
shopt -s nullglob
for ARTIFACT in ${DRILL_ARTIFACTS} ; do
MSG="Verifying artifact \"$ARTIFACT\"."
info_msg ${MSG}
info_msg $(eval printf "=%.0s" {1..${#MSG}})
debug_msg Verifying signature...
SIGNATURE_FILE=${ARTIFACT}.${DRILL_SIGNATURE_EXTENSION}
if ! [ -f ${SIGNATURE_FILE} ] ; then error_exit "Signature file '${SIGNATURE_FILE}' was not found"; fi
if gpg --verify ${SIGNATURE_FILE} ; then
debug_msg "Signature verified (${SIGNATURE_FILE})."
else
error_exit "Signature verification failed for '${ARTIFACT}'!"
fi
echo
debug_msg Verifying checksums...
for ALGO in $DRILL_CHECKUM_ALOGRITHMS ; do
CHECKSUM_FILE=${ARTIFACT}.${ALGO}
if ! [ -f ${CHECKSUM_FILE} ] ; then error_exit "Checksum file '${CHECKSUM_FILE}' was not found"; fi
COMPUTED_SUM=`${ALGO}sum ${ARTIFACT} | awk '{print $1}'`
FILE_SUM=`cat ${CHECKSUM_FILE}`
if [ "${FILE_SUM}" == "${COMPUTED_SUM}" ] ; then
debug_msg "Verified ${ALGO} checksum (${CHECKSUM_FILE})."
else
error_exit "Computed ${ALGO} checksum did not match the one in '${CHECKSUM_FILE}'"
fi
done
debug_msg "Checksums verified.\n"
ARTIFACT_COUNT=$(($ARTIFACT_COUNT+1))
done
# All GOOD
if [ "$ARTIFACT_COUNT" == "0" ] ; then
error_exit "No artifact found in '$DRILL_ARTIFACT_DIR'"
else
echo -e $SUCCESS"All verifications passed on ${ARTIFACT_COUNT} artifacts."$RESET
fi
popd &> /dev/null