diff --git a/src/warden-server/sh/update.sh b/src/warden-server/sh/update.sh index 220e7e04e5f5f309f1caaa5f69cd784e7484a420..822088f135369a97dffc59bcffb95e0e34ffcfbe 100755 --- a/src/warden-server/sh/update.sh +++ b/src/warden-server/sh/update.sh @@ -2,7 +2,7 @@ # # update.sh # -# Copyright (C) 2011-2013 Cesnet z.s.p.o +# Copyright (C) 2011-2014 Cesnet z.s.p.o # # Use of this source is governed by a BSD-style license, see LICENSE file. @@ -10,19 +10,18 @@ VERSION="2.2" #------------------------------------------------------------------------------- -# FUNCTIONS +# Script functions #------------------------------------------------------------------------------- usage() { - echo "Usage: `basename $0` [-d <directory>] [-hV]" - echo "-d <directory> destination directory (default: /opt)" + echo "Usage: ${0##*/} -d <directory> [-hV]" + echo "-d <directory> destination directory of Warden server" echo "-h print this help" echo "-V print script version number and exit" echo - echo "Example: # ./`basename $0` -d /opt" + echo "Example: $ ./${0##*/} -d /opt/warden-server" echo - echo "Note: You must be root for running this script." - echo " For more information about update process, see README file (section Update)." + echo "For more information about update process, see README file (section Update)." echo exit 0 } @@ -30,7 +29,7 @@ usage() version() { - echo "`basename ${0}` - current version is $VERSION" + echo "${0##*/} - current version is $VERSION" exit 0 } @@ -38,9 +37,9 @@ version() err() { echo "FAILED!" - cat $err - rm -rf $err - rm -rf $backup_dir + cat "$err" + rm -f "$backup" + rm -f "$err" echo echo "Update from $old_package_version to $package_version package FAILED!!!" exit 1 @@ -54,44 +53,42 @@ errClean() rm -rf ${server_path}/* > /dev/null 2>&1 cp -R ${backup_dir}/* $server_path cat $err - rm -rf $err $backup_dir + rm -rf $err $backup echo echo "Update from $old_package_version to $package_version package FAILED!!!" exit 1 } -rootChck() -{ - if [ $UID -ne 0 ]; then - echo "You must be root for running this script!" - exit 1 - fi -} - - paramsChck() { - if [ -z $prefix ]; then + if [ -z "$basedir" ]; then echo "Parameter -d <directory> is not set!" exit 1 fi } -obtainPackageVersion() +#------------------------------------------------------------------------------- +# Installation functions +#------------------------------------------------------------------------------- + +oldPackageChck() { - if [ -f $old_package_version_file ]; then - old_package_version=`cat $old_package_version_file` + echo -n "Checking previous Warden server installation ... " + old_package_version_file=$(find "$basedir" -name package_version) + if [ -f "$old_package_version_file" ]; then + old_package_version=$(<"$old_package_version_file") if [ "$old_package_version" == "$package_version" ]; then echo "Sorry, but $package_version package is already installed!" exit 1 fi else - echo "Sorry, but Warden server package is not installed!" - echo "For installation of Warden server package please use install.sh script." + echo "Sorry, but Warden server package is not yet installed!" + echo "For installation of Warden server package please use install.sh" exit 1 fi + echo "OK" } @@ -102,68 +99,42 @@ perlChck() echo "OK" else echo "FAILED!" + echo echo "Error: Perl interpreter is not installed!" exit 1 fi } -rsyncChck() -{ - echo -n "Checking Rsync ... " - if which rsync 1> /dev/null; then - echo "OK" - else - echo "FAILED!" - echo "Error: Rsync is not installed!" - exit 1 - fi -} - - modulesChck() { - for module in ${modules[@]}; + sed '/^use [A-Z]/!d; /Warden/d' $(find "${dirname}" -type f) 2>/dev/null | cut -f 2 -d " " | sed 's/;//' | sort -u | \ + while read module; do echo -n "Checking $module module ... " - if perl -e "use $module" 2> $err; then - echo "OK" - else - err - fi + perl -e "use $module" 2> "$err" && echo "OK" || err done } wardenDirChck() { - echo -n "Checking Warden server directory ... " - if [ ! -d $server_path ]; then - echo "FAILED!" - ls $server_path - exit 1 - else - echo "OK" - fi + echo -n "Checking Warden server directory ... " + if [[ ! -d "$basedir" ]] && [[ ! -w "$basedir" ]]; then + echo "FAILED!" + echo "No version of Warden server is not installed!" + exit 1 + else + echo "OK" + fi } backup() { - echo -n "Backing-up Warden server directory ... " - mkdir $backup_dir - if cp -R ${server_path}/* $backup_dir 2> $err; then - echo "OK" - else - err - fi -} - - -obtainWardenUser() -{ - echo -n "Obtaining Warden server directory owner ... " - if user=`stat -c %U $server_conf_file` 2> $err; then + echo -n "Making Warden server backup ... " + mkdir $backup + if cp -R "${basedir}/"* "$backup" 2> "$err"; then echo "OK" else err @@ -173,14 +144,8 @@ obtainWardenUser() updateWardenDir() { - echo -n "Updating Warden server directory ... " - if rsync -q --recursive --archive --delete --exclude='etc' --exclude='sh' ${dirname}/warden-server $prefix 2> $err; then - echo "OK" - else - errClean - fi - cp ${dirname}/warden-server/etc/package_version $etc - cp ${dirname}/uninstall.sh $server_path + echo -n "Updating Warden server ... " + } @@ -328,65 +293,61 @@ $valid_strings" > $server_conf_file 2> $err; ret_val=`echo $?` # MAIN #------------------------------------------------------------------------------- -# list of used Perl modules -modules=(SOAP::Lite SOAP::Transport::HTTP DBI DBD::mysql Format::Human::Bytes Sys::Syslog File::Basename Net::CIDR::Lite DateTime Getopt::Std Switch IO::Socket::SSL MIME::Base64 Crypt::X509 Carp FindBin) - # read input while getopts "d:Vh" options; do - case $options in - d ) prefix=$OPTARG;; + case "$options" in + d ) basedir="$OPTARG";; h ) usage;; V ) version;; * ) usage;; esac done -# root test -rootChck +# remove last char (slash) from name of directories +[[ "$basedir" == */ ]] && basedir="${basedir%?}" # params test paramsChck -# create variables -dirname=`dirname $0` -package_version=`cat ${dirname}/warden-server/etc/package_version` -[[ $prefix == */ ]] && prefix="${prefix%?}" # remove last char (slash) from prefix -server_path="${prefix}/warden-server" -etc="${server_path}/etc" -doc="${server_path}/doc" -old_package_version_file="${etc}/package_version" -apache_conf_file="${etc}/warden-apache.conf" -server_conf_file="${etc}/warden-server.conf" +# set variables err="/tmp/warden-err" -backup_dir="/tmp/warden-server-backup" +backup="/tmp/warden-server-backup" +hostname=$(hostname -f || echo "unspecified.server") +dirname=${0%/*} +doc="${basedir}/doc" +etc="${basedir}/etc" +server_conf="${etc}/warden-server.conf" +apache_conf="${etc}/warden-apache.conf" +watchdog_conf="${etc}/warden-watchdog.conf" +server_conf_tmpl="${dirname}/etc/warden-server.conf.tmpl" +apache_conf_tmpl="${dirname}/etc/warden-apache.conf.tmpl" +watchdog_conf_tmpl="${dirname}/etc/warden-watchdog.conf.tmpl" +package_version=$(<"${dirname}/etc/package_version") +manifest="${dirname}/doc/MANIFEST" -# obtain version of old warden server -obtainPackageVersion echo echo "------------------------- Dependencies check-in -------------------------" +# check warden server directory +wardenDirChck + +# +oldPackageChck + # Perl interpreter test perlChck -# Rsync availability test -rsyncCheck - # Perl modules test modulesChck echo echo "------------------------- Update process --------------------------------" -# check warden server directory -wardenDirChck # backup old warden server installation backup -# obtain current warden server user -obtainWardenUser - # make warden server directory updateWardenDir @@ -406,6 +367,6 @@ echo "Please follow post-update steps in ${doc}/UPDATE!" echo # cleanup section -rm -rf $err $backup_dir +rm -rf $err $backup exit 0