| #!/bin/bash |
| |
| ## ######################################################################## |
| ## MADLIb install script for HAWQ as a replacement for "gppkg -i" |
| ## Possible improvements: |
| ## 1. confirm ${GPHOME} with user |
| ## 2. use rpm --test to check before installing |
| ## ######################################################################## |
| |
| COMMAND=`basename $0` |
| USAGE="COMMAND NAME: ${COMMAND} |
| |
| MADlib install script for HAWQ as a replacement for \"gppkg -i\". |
| |
| |
| ***************************************************** |
| SYNOPSIS |
| ***************************************************** |
| |
| ${COMMAND} -r <RPM_FILEPATH> -f <HOSTFILE> |
| [-s] [-d <GPHOME>] [--prefix <MADLIB_INSTALL_PATH>] |
| |
| ${COMMAND} -h |
| |
| |
| ***************************************************** |
| PREREQUISITES |
| ***************************************************** |
| |
| The following tasks should be performed prior to executing this script: |
| |
| * Make sure you have the necessary binaries available in your PATH: |
| rpm, gpssh, gpscp. |
| * Make sure the provided HOSTFILE contains all segment nodes. |
| * Run with -s option is you do not want to install/reinstall on localhost. |
| * Set GPHOME to the correct HAWQ installation directory, either by |
| environment variable or option -d |
| |
| |
| ***************************************************** |
| OPTIONS |
| ***************************************************** |
| |
| -r | --rpm-path <RPM_FILEPATH> |
| Required. Path to the MADlib RPM file. |
| |
| -f | --host-file <HOSTFILE> |
| Required. Hostfile contains host names of all segment nodes. |
| |
| -d | --set-gphome <GPHOME> |
| Optional. Installation path of HAWQ. If not set, the script will try to |
| use the environment variable. |
| |
| --prefix <MADLIB_INSTALL_PATH> |
| Optional. Expected MADlib installation path. If not set, the default value |
| \${GPHOME}/madlib is used. |
| |
| -s | --skip-localhost |
| Optional. If not set, the RPM file will be installed to localhost as well |
| as hosts in HOSTFILE. |
| |
| -h | -? | --help |
| Displays the online help. |
| |
| |
| ***************************************************** |
| EXAMPLE |
| ***************************************************** |
| |
| /home/gpadmin/madlib/${COMMAND} \\ |
| -r /home/gpadmin/madlib/madlib-1.5-Linux.rpm \\ |
| -f /usr/local/greenplum-db/hostfile |
| " |
| HELP="Try option -h for detailed usage." |
| |
| ## ######################################################################## |
| ## parsing command-line args |
| if [ $# -lt 1 ]; then |
| echo "$0: Missing required arguments. ${HELP}" |
| exit 1 |
| fi |
| SKIP_LOCALHOST=0 |
| until [ -z $1 ] |
| do |
| case "$1" in |
| --prefix) MADLIB_INSTALL_PATH=$2; shift;; |
| -r|--rpm-path) RPM_FILEPATH=$2; shift;; |
| -f|--host-file) HOSTFILE=$2; shift;; |
| -d|--set-gphome) GPHOME=$2; shift;; |
| -s|--skip-localhost) SKIP_LOCALHOST=1; shift;; |
| -h|-?|--help) |
| echo "${USAGE}"; |
| exit 1;; |
| *) |
| echo "$0: No such option $1. ${HELP}"; |
| exit 1;; |
| esac |
| shift |
| done |
| # checking and verbosing options |
| if [ ${GPHOME} ]; then |
| echo "Using HAWQ installation: ${GPHOME}" |
| else |
| echo "$0: GPHOME is not set or empty. ${HELP}" |
| exit 1 |
| fi |
| if [ ${RPM_FILEPATH} ]; then |
| echo "Using RPM file: ${RPM_FILEPATH}" |
| else |
| echo "$0: RPM_FILEPATH is not set or empty. ${HELP}" |
| exit 1 |
| fi |
| if [ ${HOSTFILE} ]; then |
| echo "Using MADlib installation path: ${HOSTFILE}" |
| else |
| echo "$0: HOSTFILE is not set or empty. ${HELP}" |
| exit 1 |
| fi |
| if [ ${MADLIB_INSTALL_PATH} ]; then |
| echo "Using MADlib installation path: ${MADLIB_INSTALL_PATH}" |
| else |
| MADLIB_INSTALL_PATH="${GPHOME}" |
| fi |
| |
| ## ######################################################################## |
| ## checking necessary binaries |
| which rpm > /dev/null |
| if [ 0 -ne $? ]; then |
| echo "$0: rpm not found in PATH. ${HELP}" |
| exit 1 |
| fi |
| which gpssh > /dev/null |
| if [ 0 -ne $? ]; then |
| echo "$0: gpssh not found in PATH. ${HELP}" |
| exit 1 |
| fi |
| which gpscp > /dev/null |
| if [ 0 -ne $? ]; then |
| echo "$0: gpscp not found in PATH. ${HELP}" |
| exit 1 |
| fi |
| |
| ## ######################################################################## |
| ## checking and erasing any installed matching-version RPMs |
| RPM=`basename ${RPM_FILEPATH}` |
| RPM_PACKAGE=`echo ${RPM} | sed -e s/-Linux// | sed -e s/\.rpm//` |
| echo "RPM_PACKAGE: ${RPM_PACKAGE}" |
| RPM_DATABASE="${GPHOME}/share/packages/database" |
| # on localhost |
| if [ 0 -eq $SKIP_LOCALHOST ]; then |
| echo "Querying the MADlib RPM package installed on localhost..." |
| rpm -q ${RPM_PACKAGE} --dbpath ${RPM_DATABASE} |
| if [ $? = 0 ]; then |
| echo "Attempting to remove RPM package (${RPM_PACKAGE}) before we can reinstall..." |
| rpm -ve --allmatches ${RPM_PACKAGE} --dbpath ${RPM_DATABASE} |
| fi |
| fi |
| # on all hosts |
| hosts=`cat ${HOSTFILE}` |
| for host in ${hosts}; do |
| echo "Querying the MADlib RPM package on ${host}..." |
| ssh ${host} rpm -q ${RPM_PACKAGE} --dbpath ${RPM_DATABASE} |
| if [ $? = 0 ]; then |
| echo "Attempting to remove RPM package (${RPM_PACKAGE}) on ${host} before we can reinstall..." |
| ssh ${host} rpm -ve --allmatches ${RPM_PACKAGE} --dbpath ${RPM_DATABASE} |
| fi |
| done |
| |
| ## ######################################################################## |
| ## installing the provided RPM |
| # local |
| if [ 0 -eq $SKIP_LOCALHOST ]; then |
| rpm -v --nodeps --install ${RPM_FILEPATH} --dbpath ${RPM_DATABASE} \ |
| --prefix ${MADLIB_INSTALL_PATH} |
| if [ 0 -ne $? ]; then |
| echo "$0: Cannot successfully install ${RPM_FILEPATH} on localhost!" |
| exit 1 |
| fi |
| fi |
| # remote |
| gpscp -v -f ${HOSTFILE} ${RPM_FILEPATH} =:${GPHOME} |
| gpssh -f ${HOSTFILE} rpm -v --nodeps --install ${GPHOME}/${RPM} \ |
| --dbpath ${RPM_DATABASE} --prefix ${MADLIB_INSTALL_PATH} |
| if [ 0 -ne $? ]; then |
| echo "$0: Cannot successfully install ${RPM_FILEPATH} on one or more segment nodes!" |
| exit 1 |
| fi |
| |
| echo "MADlib successfully installed." |
| echo "Please run the following command to deploy MADlib" |
| echo "usage: madpack install -p hawq -c user@host:port/database" |
| echo "Example:" |
| echo " \$ \${GPHOME}/madlib/bin/madpack install -p hawq -c gpadmin@mdw:5432/testdb" |
| echo " This will install MADlib objects into a Greenplum database named \"testdb\"" |
| echo " running on server \"mdw\" on port 5432. Installer will try to login as \"gpadmin\"" |
| echo " and will prompt for password. The target schema will be \"madlib\"." |
| echo "For additional options run: madpack --help" |
| echo "Release notes and additional documentation can be found at http://madlib.apache.org/" |
| |