272 lines
6.6 KiB
Bash
Executable File
272 lines
6.6 KiB
Bash
Executable File
#!/bin/bash
|
|
#set distro to script's parent directory
|
|
|
|
|
|
distro=$(cd ${0%/*} && echo $PWD/${0##*/})
|
|
distro=$(dirname $distro)
|
|
|
|
echo "distro:$distro"
|
|
|
|
distrolibs=$distro/libs
|
|
distroapps=$distro/apps
|
|
distroscripts=$distro/scripts
|
|
liblist=smartgears.list
|
|
applist=smartgears-app.list
|
|
|
|
function showhelp {
|
|
echo -e "\nusage: install [-d <distro directory>] -s tomcat|<lib directory> -a [app directory] [-g gHN directory] [-x|-h] \n"
|
|
echo " <distro directory> = the directory with the distribution of SmartGears ${project.version}."
|
|
echo " By default, this is the parent directory of this script."
|
|
echo " <lib directory> = the directory with libraries shared by all applications in the target container."
|
|
echo " <app directory> = the directory with all the applications in the target container."
|
|
echo " <gHN directory> = the directory with logs and files related to the gCube Hosting Node."
|
|
echo " By default, this is value of the GHN_HOME env var."
|
|
echo " tomcat = Sets <lib directory> and <app directory> for a target Tomcat container."
|
|
echo " x = dry run."
|
|
echo -e " h = shows this help.\n"
|
|
}
|
|
|
|
while getopts ":d:s:g:a:xh" opt; do
|
|
case $opt in
|
|
d) distro=$OPTARG;;
|
|
s) shared=$OPTARG;;
|
|
g) ghnhome=$OPTARG;;
|
|
a) apps=$OPTARG;;
|
|
x) dryrun="true";;
|
|
h) showhelp
|
|
exit 0 ;;
|
|
:) echo -e "\nERROR:option -$OPTARG requires an argument." >&2 ;
|
|
showhelp;
|
|
echo -e "\naborting.\n"
|
|
exit 1;;
|
|
\?) echo -e "\nERROR:invalid option: -$OPTARG";
|
|
showhelp;
|
|
echo -e "\naborting.\n"
|
|
exit 1 >&2 ;;
|
|
esac
|
|
done
|
|
|
|
if [ -z "$ghnhome" ]; then
|
|
if [ -z "$GHN_HOME" ]; then
|
|
echo -e "\nERROR:please specify the gHN directory (-g) or define the GHN_HOME env var." >&2
|
|
showhelp
|
|
echo -e "\naborting.\n"
|
|
exit 1
|
|
else
|
|
ghnhome=$GHN_HOME
|
|
fi
|
|
fi
|
|
if [ ! -d "$ghnhome" ]; then
|
|
if [ -z "$dryrun" ]; then
|
|
mkdir $ghnhome
|
|
fi
|
|
fi
|
|
|
|
|
|
#tomcat target
|
|
if [ "$shared" = "tomcat" ]; then
|
|
if [ -z "$CATALINA_HOME" ]; then
|
|
if [ -z "$WEB_CONTAINER_HOME" ] ; then
|
|
echo -e "\nERROR: both CATALINA_HOME and WEB_CONTAINER_HOME are undefined." >&2
|
|
showhelp
|
|
echo -e "\naborting.\n"
|
|
exit 1
|
|
else
|
|
CATALINA_HOME=$WEB_CONTAINER_HOME
|
|
fi
|
|
fi
|
|
shared=$CATALINA_HOME/lib
|
|
apps=$CATALINA_HOME/webapps
|
|
fi
|
|
|
|
#shared is set
|
|
if [ -z "$shared" ]; then
|
|
echo -e "\nERROR: shared directory is undefined (-s)." >&2
|
|
showhelp
|
|
echo -e "\naborting.\n"
|
|
exit 1
|
|
fi
|
|
|
|
#shared exists and is a directory
|
|
if [ ! -d "$shared" ]; then
|
|
echo -e "\nERROR: shared folder does not exist or is not a directory, aborting." >&2
|
|
exit 1;
|
|
fi
|
|
|
|
#shared exists and is a directory
|
|
if [ ! -d "$apps" ]; then
|
|
echo -e "\nERROR: apps folder does not exist or is not a directory, aborting." >&2
|
|
exit 1;
|
|
fi
|
|
|
|
#distrolibs exists and is a directory
|
|
if [ ! -d "$distrolibs" ]; then
|
|
echo -e "\nERROR: distro libs does not exist or is not a directory, aborting."
|
|
exit 1;
|
|
fi
|
|
|
|
#distroapps exists and is a directory
|
|
if [ ! -d "$distroapps" ]; then
|
|
echo -e "\nERROR: distro apps does not exist or is not a directory, aborting."
|
|
exit 1;
|
|
fi
|
|
|
|
echo -e "\nInstalling SmartGears ${project.version}\n"
|
|
echo -e " target gHN directory = $(cd $(dirname $ghnhome); pwd)/$(basename $ghnhome)"
|
|
echo -e " target shared directory = $(cd $(dirname $shared); pwd)/$(basename $shared)"
|
|
echo -e " target app directory = $(cd $(dirname $apps); pwd)/$(basename $apps)"
|
|
|
|
shopt -s nullglob
|
|
|
|
#uninstall libraries
|
|
if [ -f $shared/$liblist ]; then
|
|
echo -e "\nuninstalling existing libraries \c"
|
|
while read line; do
|
|
if [ -z "$dryrun" ]; then
|
|
rm $shared/$line
|
|
fi
|
|
echo -n "."
|
|
sleep .01
|
|
|
|
done < $shared/$liblist
|
|
if [ -z "$dryrun" ]; then
|
|
rm $shared/$liblist
|
|
fi
|
|
|
|
fi
|
|
|
|
#uninstall apps
|
|
if [ -f $shared/$applist ]; then
|
|
echo -e "\nuninstalling existing apps \c"
|
|
while read line; do
|
|
if [ -z "$dryrun" ]; then
|
|
rm $apps/$line
|
|
folder=${line:0:-4}
|
|
if [ ! -z "$folder" ]; then
|
|
rm -rf $apps/$folder
|
|
fi
|
|
fi
|
|
echo -n "."
|
|
sleep .01
|
|
|
|
done < $shared/$applist
|
|
if [ -z "$dryrun" ]; then
|
|
rm $shared/$applist
|
|
fi
|
|
|
|
fi
|
|
|
|
#install libraries
|
|
echo -e "\ninstalling components \c"
|
|
for f in $distrolibs/*.*;
|
|
do
|
|
if [ -z "$dryrun" ]; then
|
|
cp $f $shared/
|
|
basename $f | sed -r 's/[0-9]{1,2}.[0-9]{1,2}(.[0-9]{1,2})?(-SNAPSHOT)?(-[0-9]{1,2}.[0-9]{1,2}(.[0-9]{1,2})?-[0-9]{4,8})?/*/' >> $shared/$liblist
|
|
fi
|
|
echo -n "."
|
|
sleep .01
|
|
done
|
|
|
|
|
|
#install apps
|
|
echo -e "\ninstalling applications \c"
|
|
for f in $distroapps/*;
|
|
do
|
|
if [ -z "$dryrun" ]; then
|
|
cp $f $apps/
|
|
basename $f >> $shared/$applist
|
|
fi
|
|
echo -n "."
|
|
sleep .01
|
|
done
|
|
|
|
#install scripts
|
|
echo -e "\ninstalling scripts \c"
|
|
if [ ! -d "$ghnhome/scripts" ]; then
|
|
if [ -z "$dryrun" ]; then
|
|
mkdir $ghnhome/scripts
|
|
fi
|
|
fi
|
|
|
|
for f in $distroscripts/*;
|
|
do
|
|
if [ -z "$dryrun" ]; then
|
|
cp $f $ghnhome/scripts/
|
|
fi
|
|
echo -n "."
|
|
sleep .01
|
|
done
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#install config
|
|
function escape_slashes {
|
|
sed 's/\//\\\//g'
|
|
}
|
|
|
|
function change_line {
|
|
local OLD_LINE_PATTERN=$1; shift
|
|
local NEW_LINE=$1; shift
|
|
local FILE=$1
|
|
|
|
local NEW=$(echo "${NEW_LINE}" | escape_slashes)
|
|
sed -i '/'"${OLD_LINE_PATTERN}"'/s/.*/'"${NEW}"'/' "${FILE}"
|
|
}
|
|
|
|
|
|
function replace_property {
|
|
local PROPERTY=$1
|
|
#local OLD_LINE=$(sed -n "/${PROPERTY}/p" $ghnhome/container.xml)
|
|
local NEW_LINE=$(sed -n "/${PROPERTY}/p" $distro/container.xml)
|
|
#echo "Replacing property ${PROPERTY}:"
|
|
#echo $OLD_LINE
|
|
#echo $NEW_LINE
|
|
change_line "${PROPERTY}" "${NEW_LINE}" $ghnhome/container.xml
|
|
#echo "done."
|
|
}
|
|
|
|
echo -e "\ninstalling configuration \c"
|
|
if [ ! -s "$ghnhome/container.xml" ]; then
|
|
if [ -z "$dryrun" ]; then
|
|
cp $distro/container.xml $ghnhome/
|
|
fi
|
|
echo -n "."
|
|
sleep .01
|
|
else
|
|
if [ -z "$dryrun" ]; then
|
|
#echo "Creating a backup copy of $ghnhome/container.xml"
|
|
cp $ghnhome/container.xml $ghnhome/container.xml.bck
|
|
|
|
## Please note the ' at the end of SmartGearsDistribution property
|
|
## the ' is needed to exactly math the property otherwise also
|
|
## SmartGearsDistributionBundle is matched.
|
|
for property in "SmartGearsDistribution'" "SmartGearsDistributionBundle'"
|
|
do
|
|
replace_property $property
|
|
done
|
|
fi
|
|
echo -n "."
|
|
sleep .01
|
|
fi
|
|
if [ -z "$dryrun" ]; then
|
|
cat $distro/logback.xml | sed "s|\${LOGFILE}|$ghnhome|" > $shared/logback.xml
|
|
echo -n "."
|
|
sleep .01
|
|
fi
|
|
|
|
#creating the symlink to shared and apps folder
|
|
|
|
if [ -z "$dryrun" ]; then
|
|
ln -s $shared $ghnhome/lib
|
|
fi
|
|
|
|
if [ -z "$dryrun" ]; then
|
|
ln -s $apps $ghnhome/apps
|
|
fi
|
|
|
|
echo -e "\ndone.\n"
|