Skip to content
Snippets Groups Projects
Forked from 713 / Warden / Warden - archive
978 commits behind the upstream repository.
uninstall.sh 6.04 KiB
#!/bin/bash
#
# uninstall.sh
#
# Copyright (C) 2011-2012 Cesnet z.s.p.o
# Author(s): 	Tomas PLESNIK 	<plesnik@ics.muni.cz>
#		Jan SOUKAL	<soukal@ics.muni.cz>
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in
#    the documentation and/or other materials provided with the
#    distribution.
# 3. Neither the name of the Cesnet z.s.p.o nor the names of its
#    contributors may be used to endorse or promote products derived from
#     this software without specific prior written permission.
#
# This software is provided ``as is'', and any express or implied
# warranties, including, but not limited to, the implied warranties of
# merchantability and fitness for a particular purpose are disclaimed.
# In no event shall the Cesnet z.s.p.o or contributors be liable for
# any direct, indirect, incidental, special, exemplary, or consequential
# damages (including, but not limited to, procurement of substitute
# goods or services; loss of use, data, or profits; or business
# interruption) however caused and on any theory of liability, whether
# in contract, strict liability, or tort (including negligence or
# otherwise) arising in any way out of the use of this software, even
# if advised of the possibility of such damage.

VERSION="0.1"

#-------------------------------------------------------------------------------
#				FUNCTIONS
#-------------------------------------------------------------------------------
usage()
{
	echo "Usage: `basename $0` [-d <directory>] [-hV]"
	echo "-d <directory>            uninstallation directory (default: /opt)"
	echo "-h                        print this help"
	echo "-V                        print script version number and exit"
	echo
	echo "Example: # ./`basename $0` -d /opt"
	echo
	echo "Note: You must be root for running this script."
	echo "      For more information about uninstallation process, see README file (section Uninstallation)."
	echo
	exit 0
}


version()
{
	echo "`basename ${0}` - current version is $VERSION"
	exit 0
}


err()
{
	echo "FAILED!"
	cat $err
	rm -rf $err $backup_dir
	echo
	echo "Uninstallation of $package_version package FAILED!!!"
	exit 1
}


err_clean()
{
	echo "FAILED!"
	echo " -> Reverting changes of warden server package ... OK"
	rm -rf $server_path/* > /dev/null 2>&1		# delete new version 
	cp -R $backup_dir/* $server_path		# copy old backuped server
	chmod 600 $db_file				# change permission to DB file
	for file in `ls -1 $bin | grep -v warden-alive | grep -v create_tables.sh | grep -v wardend`
	do  
		ln -s ${bin}/$file ${local_bin}/$file	# create symlinks to /usr/local/bin
	done
	ln -s ${bin}/wardend $init			# create symlink to /etc/init.d/
	$init start					# start server
	cat $err
	rm -rf $err $backup_dir
	echo
	echo "Uninstallation of $package_version package FAILED!!!"
	exit 1
}


os_chck()
{
	OS=`uname`
	if [ "$OS" != "Linux" ]; then
		echo "Sorry, unsupported operating system detected - \"$OS\"!"
		exit 1
	fi
}


shell_chck()
{
	SHELL=`echo $SHELL`
	if [ "$SHELL" != "/bin/bash" ]; then
		echo "Sorry, this script is usable in Bourne Again Shell (bash) only!"
		exit 1
	fi
}


root_chck()
{
	if [ $UID -ne 0 ]; then
		echo "You must be root for running this script!"
		exit 1
	fi
}


params_chck()
{
	if [ -z $prefix ]; then
		prefix=/opt
		echo "Warning: parameter -d <directory> is not set - default uninstallation directory is $prefix!"
	fi
}


obtain_package_version()
{
	if [ -f $old_package_version_file ]; then 
		package_version=`cat $old_package_version_file`
	else
		package_version="unknown"
	fi
}


warden_dir_chck()
{
	echo -n "Checking warden server directory ... "
	if [ ! -d $server_path ]; then
		echo "FAILED!"
		ls $server_path
		exit 1
	else
		echo "OK"
	fi
}


stop_warden_server()
{
	echo "Stopping warden server ... "
	$init force-stop 1>/dev/null 2>&1
}


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
}


delete_symlinks()
{
	echo -n "Deleting symlinks from /usr/local/bin ..."
	for file in `ls -1 $bin | grep -v warden-alive | grep -v wardend | grep -v create_tables.sh`
	do
		rm -rf /usr/local/bin/$file 2> /dev/null
	done
	echo "OK"
	echo -n "Deleting symlink from $init ..."
	rm -rf $init 2> /dev/null
	echo "OK"
}


uninstall_warden_server()
{
	echo -n "Uninstalling $package_version package ... "
	if rm -rf $server_path 2> $err; then
		echo "OK"
	else
		err_clean
	fi
}



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

# OS test
os_chck

# Shell test
shell_chck

# read input
while getopts "d:Vh" options; do
	case $options in
		d ) prefix=$OPTARG;;
		h ) usage;;
		V ) version;;
		* ) usage;;
	esac
done

# root test
root_chck

# params test
params_chck

# create variables
[[ $prefix == */ ]] && prefix="${prefix%?}" # remove last char (slash) from prefix
server_path="${prefix}/warden-server"
bin="${server_path}/bin"
local_bin="/usr/local/bin"
etc="${server_path}/etc"
var="${server_path}/etc"
db_file="${var}/warden.db"
old_package_version_file="${etc}/package_version"
err="/tmp/warden-err"
backup_dir="/tmp/warden-backup"
init="/etc/init.d/wardend"

# obtain version of installed warden-server package
obtain_package_version

echo
echo "------------------------- Uninstallation process --------------------------------"

# check if $prefix/warden-server directory exist
warden_dir_chck

# stop running warden server
stop_warden_server

# make backup of currently installed warden-server package
backup

# delete symbolic links
delete_symlinks

# do uninstallation
uninstall_warden_server

echo
echo "Uninstallation of $package_version package was SUCCESSFUL!!!"

# cleanup section
rm -rf $err $backup_dir

exit 0