Skip to content
Snippets Groups Projects
Select Git revision
  • 53830333b4bb58c7c7c0c2ba3d1d18847c4e4673
  • master default protected
  • devel
  • hruska-feature-clients-api
  • malostik-#5066-deduplicate-idea-ids
  • warden-postgresql-port
  • hruska-feature-#6799-filter-keys
  • hruska-feature-5066-duplicateIdeaID
  • warden-client-3.0-beta3
  • warden-server-3.0-beta3
  • warden-client-2.2-final
  • warden-server-2.2-final
  • warden-client-3.0-beta2
  • warden-server-3.0-beta2
  • warden-client-2.2
  • warden-server-2.2-patch3
  • warden-client-3.0-beta1
  • warden-server-3.0-beta1
  • warden-server-2.2-patch1
  • warden-client-3.0-beta0
  • warden-server-3.0-beta0
  • warden-server-2.2
  • warden-server-2.1-patch1
  • warden-client-2.1
  • warden-server-2.1
  • warden-server-2.1-beta6
  • warden-server-2.1-beta5
  • warden-server-2.1-beta4
28 results

update.sh

Blame
  • Forked from 713 / Warden / Warden - archive
    Source project has a limited visibility.
    update.sh 8.58 KiB
    #!/bin/bash
    #
    # update.sh
    #
    # Copyright (C) 2011-2014 Cesnet z.s.p.o
    #
    # Use of this source is governed by a BSD-style license, see LICENSE file.
    
    
    VERSION="2.2"
    
    #-------------------------------------------------------------------------------
    #				Script functions
    #-------------------------------------------------------------------------------
    usage()
    {
    	echo "Usage: ${0##*/} -d <directory> [-hV]"
    	echo "-d <directory>            destination directory of Warden server"
    	echo "-s <directory>            directory for symlinks to Warden server control scripts (optional)"
    	echo "-h                        print this help"
    	echo "-V                        print script version number and exit"
    	echo
    	echo "Example: $ ./${0##*/} -d /opt/warden-server"
    	echo
    	echo "For more information about update process, see README file (section Update)."
    	echo
    	exit 0
    }
    
    
    version()
    {
    	echo "${0##*/} - current version is $VERSION"
    	exit 0
    }
    
    
    err()
    {
    	echo "FAILED!"
    	cat "$err"
    	rm -f "$backup"
    	rm -f "$err"
    	echo
    	echo "Update from $old_package_version to $package_version package FAILED!!!"
    	exit 1
    }
    
    
    errClean()
    {
    	echo "FAILED!"
    	echo " -> Reverting changes of Warden server package ... OK"
    	rm -r ${server_path}/* > /dev/null 2>&1
    	cp -R ${backup_dir}/* $server_path
    	cat $err
    	rm -r $err $backup
    	echo
    	echo "Update from $old_package_version to $package_version package FAILED!!!"
    	exit 1
    }
    
    
    paramsChck()
    {
    	if [ -z "$basedir" ]; then
    		echo "Parameter -d <directory> is not set!"
    		exit 1
    	fi
    }
    
    
    #-------------------------------------------------------------------------------
    #                               Installation functions
    #-------------------------------------------------------------------------------
    wardenDirChck()
    {
            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  
    }
    
    
    oldPackageChck()
    {
    	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
    		elif [ "$old_package_version" == "warden-server-2.0" ]; then
    			echo "Sorry, first of all you must upgrade to package warden-server-2.1!"
    			exit 1
    		fi
    	else
    		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"
    }
    
    
    perlChck()
    {
    	echo -n "Checking Perl interpreter ... "
    	if which perl 1> /dev/null; then
    		echo "OK"
    	else
    		echo "FAILED!"
    		echo
    		echo "Error: Perl interpreter is not installed!" 
    		exit 1
    	fi
    }
    
    
    modulesChck()
    {
    	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 ... "
    		perl -e "use $module" 2> "$err" && echo "OK" || err
    	done
    }
    
    
    backup()
    {
    	echo -n "Making Warden server backup ... "
    	mkdir "$backup"
    	if cp -R "${basedir}/"* "$backup" 2> "$err"; then
    		echo "OK"
    	else
    		err
    	fi
    }
    
    
    updateWardenDir()
    { 
    	echo -n "Updating Warden server ... "
            for file in $(<"$manifest")
            do
    		dir="$basedir/${file%/*}"
    		[[ ! -d "$dir" ]] && mkdir -p "$dir"
    		cp "$file" "${basedir}/$file" 2> "$err" || errClean
            done
    	echo "OK"
    }
    
    
    getConfValue() {
    	perl -e "require \"$1\"; print \"\$$2\";"
    }
    
    
    doTemplate()
    {
            vars=""
            while (($#)); do
                    vars="'$1'=>'$2', $vars"
                    shift 2
            done
            perl -e "my %repl=($vars); foreach my \$l (<>) {\$l =~ s/\$_/\$repl{\$_}/g for keys %repl; print \$l}"
    }
    
    
    createManifest()
    {
            echo -n "Creating MANIFEST file ... "
            cd "$basedir" && find . -mindepth 2 -type f | sed 's/.\///' | sort > "${doc}/MANIFEST" && cd $OLDPWD 2> "$err" || errClean
            echo "OK"
    }
    
    
    createSymlinks()
    {
            echo "Creating symbolic links to $symbin ..."
            for file in "${bin}/"*
            do
                    echo "- making symlink: ${symbin}/${file##*/} -> $file"
                    ln -s "$file" "${symbin}/${file##*/}"
            done
    }
    
    
    #-------------------------------------------------------------------------------
    #				MAIN
    #-------------------------------------------------------------------------------
    
    # read input
    while getopts "d:s:Vh" options; do
    	case "$options" in
    		d ) basedir="$OPTARG";;
                    s ) symbin="$OPTARG";;
    		h ) usage;;
    		V ) version;;
    		* ) usage;;
    	esac
    done
    
    # remove last char (slash) from name of directories
    [[ "$basedir" == */ ]] && basedir="${basedir%?}"
    [[ "$symbin" == */ ]] && symbin="${symbin%?}"
    
    # params test
    paramsChck
    
    # set variables
    err="/tmp/warden-err"
    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.update"
    apache_conf_tmpl="${dirname}/etc/warden-apache.conf.tmpl.update"
    watchdog_conf_tmpl="${dirname}/etc/warden-watchdog.conf.tmpl.update"
    package_version=$(<"${dirname}/etc/package_version")
    manifest="${dirname}/doc/MANIFEST"
    
    
    echo
    echo "------------------------- Dependencies check-in -------------------------"
    
    # check warden server directory
    wardenDirChck
    
    # check previous Warden server instalation
    oldPackageChck
    
    # Perl interpreter test
    perlChck
    
    # Perl modules test
    modulesChck
    
    echo
    echo "------------------------- Update process --------------------------------"
    
    # backup old warden server installation
    backup
    
    # make warden server directory
    updateWardenDir
    
    # update server configuration file
    echo -n "Updating Warden server configuration file ... "
    syslog=$(getConfValue "$server_conf" SYSLOG)
    syslog_verbose=$(getConfValue "$server_conf" SYSLOG_VERBOSE)
    syslog_facility=$(getConfValue "$server_conf" SYSLOG_FACILITY)
    db_name=$(getConfValue "$server_conf" DB_NAME)
    db_user=$(getConfValue "$server_conf" DB_USER)
    db_pass=$(getConfValue "$server_conf" DB_PASS)
    db_host=$(getConfValue "$server_conf" DB_HOST)
    max_events_limit=$(getConfValue "$server_conf" MAX_EVENTS_LIMIT)
    doTemplate \
            _BASEDIR_		"$basedir" \
            _SYSLOG_		"$syslog" \
            _SYSLOG_VERBOSE_	"$syslog_verbose" \
            _SYSLOG_FACILITY_	"$syslog_facility" \
            _DB_NAME_		"$db_name" \
            _DB_USER_		"$db_user" \
            _DB_PASS_		"$db_pass" \
            _DB_HOST_		"$db_host" \
            _MAX_EVENTS_LIMIT_	"$max_events_limit" \
            < $server_conf_tmpl \
            > $server_conf && echo "OK" || errClean
    
    # update Apache configuration file
    echo -n "Updating Apache configuration file ... "
    <<<<<<< HEAD
    cert_file_tmp=`fgrep SSLCertificateFile $apache_conf`
    key_file_tmp=`fgrep SSLCertificateKeyFile $apache_conf`
    ca_file_tmp=`fgrep SSLCACertificateFile $apache_conf`
    lib_tmp=`fgrep PerlSwitches $apache_conf`
    cert_file=${cert_file_tmp##*" "}
    key_file=${key_file_tmp##*" "}
    ca_file=${ca_file_tmp##*" "}
    lib=${lib_tmp##*" "}
    >>>>>>> ced3b6d0c942211d77a5763d722ec616009be87f
    doTemplate \
            _CERT_FILE_     "$cert_file" \
            _KEY_FILE_      "$key_file" \
            _CA_FILE_       "$ca_file" \
            _LIB_           "$lib" \
            < $apache_conf_tmpl \
            > $apache_conf && echo "OK" || errClean
    
    # update wardenWatchdog configuration file
    echo -n "Updating Warden Watchdog configuration file ... "
    hostname=$(getConfValue "$watchdog_conf" hostname)
    contact=$(getConfValue "$watchdog_conf" contact)
    email_subject=$(getConfValue "$warden_conf" email_subject)
    email_server_conf=$(getConfValue "$warden_conf" email_server_conf)
    doTemplate \
            _HOSTNAME_		"$hostname" \
            _CONTACT_		"$contact" \
            _EMAIL_SUBJECT_		"$email_subject" \
            _EMAIL_SERVER_CONF_	"$email_server_conf" \
            < $watchdog_conf_tmpl \
            > $watchdog_conf && echo "OK" || errClean
    
    # create MANIFEST file
    createManifest
    
    # crate symlinks from warden server bin to user path (if -s option is set)
    [[ ! -z "$symbin" ]] && [[ -d "$symbin" ]] && [[ -w "$symbin" ]] && createSymlinks
    
    echo
    echo "Please check updated configuration files:"
    echo " - $server_conf"
    echo " - $server_conf"
    echo " - $watchdog_conf"
    echo
    echo "Warden server directory: $basedir"
    echo
    echo "Update from $old_package_version to $package_version package was SUCCESSFUL!!!"
    echo
    echo "Please follow post-update steps in ${doc}/UPDATE!"
    echo
    
    # cleanup section
    rm -f "$err" "$backup"
    
    exit 0