Skip to content
Snippets Groups Projects
install.sh 8.36 KiB
Newer Older
Tomáš Plesník's avatar
Tomáš Plesník committed
#!/bin/bash
#
# install.sh
#
Tomáš Plesník's avatar
Tomáš Plesník committed
# Copyright (C) 2011-2012 Cesnet z.s.p.o
Tomáš Plesník's avatar
Tomáš Plesník committed
#
# Use of this source is governed by a BSD-style license, see LICENSE file.  
Tomáš Plesník's avatar
Tomáš Plesník committed

Tomáš Plesník's avatar
Tomáš Plesník committed

#-------------------------------------------------------------------------------
#				FUNCTIONS
#-------------------------------------------------------------------------------
usage()
{
	echo "Usage: `basename $0` [-d <directory>] [-u <user>] [-k <ssl_key_file>] [-c <ssl_cert_file>] [-a <ssl_ca_file>] [-hV]"
	echo "-d <directory>            installation directory (default: /opt)"
	echo "-u <user>                 owner of warden client package (user for running detection scripts)"
	echo "-k <ssl_key_file>         path to SSL certificate key file"
	echo "-c <ssl_cert_file>        path to SSL certificate file"
	echo "-a <ssl_ca_file>          path to CA certificate file"
	echo "-h                        print this help"
	echo "-V                        print script version number and exit"
	echo
Tomáš Plesník's avatar
Tomáš Plesník committed
	echo "Example: # ./`basename $0` -d /opt -u detector -k /etc/ssl/private/client.key -c /etc/ssl/certs/client.pem -a /etc/ssl/certs/tcs-ca-bundle.pem"
	echo
	echo "Note: You must be root for running this script."
	echo "      For more information about installation process, see README file (section Installation)."
	echo
	exit 0
Tomáš Plesník's avatar
Tomáš Plesník committed
}


version()
{
	echo "`basename ${0}` - current version is $VERSION"
	exit 0
	echo "FAILED!"
	cat $err
	rm -rf $err
	echo
	echo "Installation of $package_version package FAILED!!!"
	exit 1
Tomáš Plesník's avatar
Tomáš Plesník committed
}


err_clean()
{
	echo "FAILED!"
	echo " -> Uninstalling client package ... OK"
	rm -rf $client_path > /dev/null 2>&1
	cat $err
	rm -rf $err
	echo
	echo "Installation of $package_version package FAILED!!!"
	exit 1
	if [ $UID -ne 0 ]; then
		echo "You must be root for running this script!"
		exit 1
	fi
		echo "Warning: parameter -d <directory> is not set - default installation directory is ${prefix}!"
	fi
	if [ -z $user ]; then
		echo "Parameter -u <user> is not set!"
		exit 1
	fi
	if [ -z $key ]; then
		echo "Parameter -k <ssl_key_file> is not set!"
		exit 1
	fi
	if [ -z $cert ]; then
		echo "Parameter -c <ssl_cert_file> is not set!"
		exit 1
	fi
	if [ -z $ca_file ]; then
		echo "Parameter -a <ssl_ca_file> is not set!"
		exit 1
	fi
}


old_client_chck()
{
	old_package_version_file={$etc}/package_version
	if [ -f $old_package_version_file ]; then
		old_package_version=`cat $old_package_version_file`
		echo "Sorry, but $old_package_version package is installed!"
		echo "For update of warden client package please use update.sh script."
		exit 1
	fi
	echo -n "Checking Perl interpreter ... "
	if which perl 1> /dev/null; then
		echo "OK"
	else
		echo "FAILED!"
		echo "Error: Perl interpreter is not installed!"
		exit 1
	fi
	for module in ${modules[@]};
	do
		echo -n "Checking $module module ... "
		if perl -e "use $module" 2> $err; then
	echo -n "Creating warden client directory ... "
	
        if cp -R ${dirname}/warden-client $prefix 2> $err; then
        echo -n "Copying files ... "

	files=(CHANGELOG INSTALL LICENSE README README.cesnet)
	for file in ${files[@]};
	do
		cp ${dirname}/warden-client/doc/$file ${client_path}/doc
        test -d ${client_path}/ || mkdir -p ${client_path}/
	cp ${dirname}/uninstall.sh ${client_path}/

        echo "OK"
	echo -n "Checking certificate key file ... "
        if su ${user} -c "test -r ${key}" 2> $err; then	
		echo "Warning: certificate key file is not readable by user ${user}!"
	echo -n "Checking certificate file ... "
        if su ${user} -c "test -r ${key}" 2> $err; then
		echo "Warning: certificate file is not readable by user ${user}!"
	echo -n "Creating configuration file ... "
	echo "#
# warden-client.conf - configuration file for the warden sender/receiver client
#

Tomáš Plesník's avatar
Tomáš Plesník committed
#-------------------------------------------------------------------------------
Tomáš Plesník's avatar
Tomáš Plesník committed
#-------------------------------------------------------------------------------
\$URI = \"https://warden.cesnet.cz:443/Warden\";
Tomáš Plesník's avatar
Tomáš Plesník committed

#-------------------------------------------------------------------------------
# SSL_KEY_FILE - path to client SSL certificate key file
#-------------------------------------------------------------------------------
Tomáš Plesník's avatar
Tomáš Plesník committed

#-------------------------------------------------------------------------------
# SSL_CERT_FILE - path to client SSL certificate file
#-------------------------------------------------------------------------------
Tomáš Plesník's avatar
Tomáš Plesník committed

#-------------------------------------------------------------------------------
# SSL_CA_FILE - path to CA certificate file
#-------------------------------------------------------------------------------
\$SSL_CA_FILE = \"${ca_file}\";

#-------------------------------------------------------------------------------
# MAX_RCV_EVENTS_LIMIT - maximum number of events the client is allowd to get
#                        from the Warden server in one batch
#-------------------------------------------------------------------------------
\$MAX_RCV_EVENTS_LIMIT = 6000; #consumes app. 250 MB of memory

#-------------------------------------------------------------------------------
# CONNECTION_TIMEOUT - interval in seconds to timeout connection with Warden
#                      server. If your client timeouts, consider using higher
#                      timeout number. Also, in case of receiving clients, you
#                      can optimize the MAX_RCV_EVENTS_LIMIT value.
#-------------------------------------------------------------------------------
$CONNECTION_TIMEOUT = 60;

#-------------------------------------------------------------------------------
# Log options
#
# LOG_STDERR, LOG_SYSLOG - hide (0) or allow (1) error reporting on STDERR
#                          and/or to Syslog
# LOG_SYSLOG_FACILITY - specify a Syslog facility to log in
# LOG_VERBOSE - print only error message without a stack (0) or print debug info
#               including err. message and stack (1)
#-------------------------------------------------------------------------------
\$LOG_STDERR = 1;

\$LOG_SYSLOG = 0;
\$LOG_SYSLOG_FACILITY = \"local7\";

\$LOG_VERBOSE = 0;



1;

" > $conf_file 2> $err; ret_val=`echo $?`
	echo -n "Changing permissions to installed package ... "
	chown -R $user: $client_path 2> $err || err_clean
	chmod 644 ${etc}/package_version || err_clean
	if chmod 600 $conf_file; then
}



#-------------------------------------------------------------------------------
#				MAIN
#-------------------------------------------------------------------------------

# list of used Perl modules
modules=(SOAP::Lite IO::Socket::SSL SOAP::Transport::HTTP FindBin DateTime Carp)
Tomáš Plesník's avatar
Tomáš Plesník committed
# read input
while getopts "d:u:k:c:a:Vh" options; do
	case $options in
		d ) prefix=$OPTARG;;
		u ) user=$OPTARG;;
		k ) key=$OPTARG;;
		c ) cert=$OPTARG;;
		a ) ca_file=$OPTARG;;
		h ) usage;;
		V ) version;;
		* ) usage;;
	esac
Tomáš Plesník's avatar
Tomáš Plesník committed
done

Tomáš Plesník's avatar
Tomáš Plesník committed

Tomáš Plesník's avatar
Tomáš Plesník committed

# create variables
package_version=`cat ${dirname}/warden-client/etc/package_version`
Tomáš Plesník's avatar
Tomáš Plesník committed
key_file=`basename $key`
cert_file=`basename $cert`
[[ $prefix == */ ]] && prefix="${prefix%?}" # remove last char (slash) from prefix
client_path="${prefix}/warden-client"
etc="${client_path}/etc"
conf_file="${etc}/warden-client.conf"
Tomáš Plesník's avatar
Tomáš Plesník committed
err="/tmp/warden-err"

# check if warden-client is installed
old_client_chck

echo
echo "------------------------- Dependencies check-in -------------------------"
Tomáš Plesník's avatar
Tomáš Plesník committed

Tomáš Plesník's avatar
Tomáš Plesník committed

echo "------------------------- Installation process --------------------------"
Tomáš Plesník's avatar
Tomáš Plesník committed

# make warden client directory
Tomáš Plesník's avatar
Tomáš Plesník committed

# copy cert key file 
Tomáš Plesník's avatar
Tomáš Plesník committed

# copy cert file
Tomáš Plesník's avatar
Tomáš Plesník committed

# create conf file
Tomáš Plesník's avatar
Tomáš Plesník committed

# change permissions
Tomáš Plesník's avatar
Tomáš Plesník committed

echo
echo "Please check configuration file in ${conf_file}!"
echo
echo "Warden client directory: $client_path"
Tomáš Plesník's avatar
Tomáš Plesník committed
echo
echo "Installation of $package_version package was SUCCESSFUL!!!"
Tomáš Plesník's avatar
Tomáš Plesník committed

# cleanup section
rm -rf $err

exit 0