232 lines
7.1 KiB
Bash
Executable File
232 lines
7.1 KiB
Bash
Executable File
#!/bin/bash
|
|
# $Revision: 1.28.10.1 $
|
|
# $Date: 2010-01-27 03:15:13 $
|
|
# Author: Ferdi Franceschini (ffr@ansto.gov.au)
|
|
# Last revision by $Author: jgn $
|
|
|
|
# Deploys SICServer and configuration files to
|
|
# an instrument control computer.
|
|
# It requires a MANIFEST.TXT file for each instrument
|
|
|
|
# INSTCFCOMMON.TXT file contains paths to the common configuration files
|
|
# used by the instrument specific configurations, it should be placed in
|
|
# the 'config' directory for each instrument. The paths are relative
|
|
# to the instrument source directory. This file is optional.
|
|
|
|
usage()
|
|
{
|
|
cat <<EOF
|
|
deploySICS.sh copies SICS and the files listed
|
|
in the MANIFEST.TXT files to the IC host.
|
|
Usage:
|
|
./deploySICS.sh [-n] INSTRUMENT [TARGET_HOST [TARGET_DIR]]
|
|
where
|
|
-n if present inhibits the actual deployment (for testing the script)
|
|
INSTRUMENT can be hrpd, echidna, hipd, wombat, lyrebird ... (not "./xxx")
|
|
or test/INSTRUMENT or INSTRUMENT/test for test deployment
|
|
TARGET_HOST can be a remote host or 'localhost'
|
|
defaults to ics1-<instrument>.nbi... or ics1-test.nbi... for test
|
|
TARGET_DIR is the top part of the directory tree
|
|
defaults to /usr/local or /usr/local/TEST_SICS/<instrument> for test
|
|
tail directories in TARGET_DIR will be created on TARGET_HOST if necessary.
|
|
Examples:
|
|
./deploySICS.sh -n echidna
|
|
prepares deployment of echidna (./hrpd)
|
|
to directory /usr/local/sics on isc1-echidna.nbi.ansto.gov.au
|
|
./deploySICS.sh -n reflectometer/test
|
|
prepares deployment of platypus (./reflectometer)
|
|
to directory usr/local/TEST_SICS/platypus on isc1-test.nbi.ansto.gov.au
|
|
./deploySICS.sh -n test/echidna localhost $HOME
|
|
prepares deployment of echidna (./hrpd)
|
|
to directory $HOME/TEST_SICS/echidna on localhost
|
|
EOF
|
|
}
|
|
|
|
# Copy sics server configuration files to a given destination
|
|
# Usage: copy_server_config SERVER_DIRECTORY
|
|
copy_server_config() {
|
|
sicserver_path=$1
|
|
cp -a --preserve=timestamps $COMMON $INSTSPEC $TEMPDIR/$DESTDIR/$sicserver_path
|
|
if [ -e $INSTCFDIR/INSTCFCOMMON.TXT ]; then
|
|
for f in $(cat $INSTCFDIR/INSTCFCOMMON.TXT); do
|
|
cp --parents --preserve=timestamps $f $TEMPDIR/$DESTDIR/$sicserver_path
|
|
done
|
|
fi
|
|
}
|
|
|
|
shopt -s nocasematch
|
|
|
|
if [[ "$1" = "-n" ]]
|
|
then
|
|
DEPLOY="NO"
|
|
shift
|
|
else
|
|
DEPLOY="YES"
|
|
fi
|
|
|
|
if [ $# -eq 0 -o $# -gt 3 ]
|
|
then
|
|
usage
|
|
exit 1
|
|
fi
|
|
|
|
TESTING=$(dirname "$1")
|
|
INSTRUMENT=$(basename "$1")
|
|
if [[ "$INSTRUMENT" = "test" ]]
|
|
then
|
|
TESTING=$(basename "$1")
|
|
INSTRUMENT=$(dirname "$1")
|
|
fi
|
|
|
|
SRCDIR="."
|
|
TEMPDIR=$HOME/tmp
|
|
|
|
|
|
|
|
# Set the destination host
|
|
# instrument name and the
|
|
# instrument src directory
|
|
|
|
SICSDIR=sics
|
|
case $INSTRUMENT in
|
|
echidna|hrpd)
|
|
INSTRUMENT=echidna
|
|
DESTHOST=${2:-ics1-echidna.nbi.ansto.gov.au}
|
|
INSTSRC=$SRCDIR/hrpd;;
|
|
wombat|hipd)
|
|
INSTRUMENT=wombat
|
|
DESTHOST=${2:-ics1-wombat.nbi.ansto.gov.au}
|
|
INSTSRC=$SRCDIR/hipd;;
|
|
koala|qld)
|
|
INSTRUMENT=koala
|
|
DESTHOST=${2:-ics1-koala.nbi.ansto.gov.au}
|
|
INSTSRC=$SRCDIR/qld;;
|
|
platypus|reflectometer)
|
|
INSTRUMENT=platypus
|
|
DESTHOST=${2:-ics1-platypus.nbi.ansto.gov.au}
|
|
INSTSRC=$SRCDIR/reflectometer;;
|
|
kowari|rsd)
|
|
INSTRUMENT=kowari
|
|
DESTHOST=${2:-ics1-kowari.nbi.ansto.gov.au}
|
|
INSTSRC=$SRCDIR/rsd;;
|
|
quokka|sans)
|
|
INSTRUMENT=quokka
|
|
DESTHOST=${2:-ics1-quokka.nbi.ansto.gov.au}
|
|
INSTSRC=$SRCDIR/sans;;
|
|
pelican|pelican)
|
|
INSTRUMENT=pelican
|
|
DESTHOST=${2:-ics1-pelican.nbi.ansto.gov.au}
|
|
INSTSRC=$SRCDIR/pelican;;
|
|
lyrebird|lyrebird)
|
|
INSTRUMENT=lyrebird
|
|
DESTHOST=${2:-ics1-taipan.nbi.ansto.gov.au}
|
|
#SICSDIR=nbi/sics/lyrebird
|
|
INSTSRC=$SRCDIR/lyrebird;;
|
|
taipan|tas)
|
|
INSTRUMENT=taipan
|
|
DESTHOST=${2:-ics1-taipan.nbi.ansto.gov.au}
|
|
#SICSDIR=nbi/sics/taipan
|
|
INSTSRC=$SRCDIR/tas;;
|
|
kookaburra|kookaburra)
|
|
INSTRUMENT=kookaburra
|
|
DESTHOST=${2:-ics1-kookaburra.nbi.ansto.gov.au}
|
|
#SICSDIR=nbi/sics/kookaburra
|
|
INSTSRC=$SRCDIR/kookaburra;;
|
|
esac
|
|
INSTCFDIR=$INSTSRC/config
|
|
|
|
make -C ../ $INSTRUMENT || exit $?
|
|
|
|
if [[ "$TESTING" = "test" ]]
|
|
then
|
|
DESTHOST=${2:-ics1-test.nbi.ansto.gov.au}
|
|
DESTDIR=${3:-/usr/local}/TEST_SICS/$INSTRUMENT
|
|
TARDIR=${DESTDIR:1}
|
|
# remove and recreate the temporary directory
|
|
rm -fr $TEMPDIR/$DESTDIR
|
|
mkdir -p $TEMPDIR/$DESTDIR
|
|
#copy TEST_SICS/fakeDMC and remove .svn any directories
|
|
cp -a $SRCDIR/TEST_SICS/* $TEMPDIR/$DESTDIR
|
|
rm -fr $(find $TEMPDIR/$DESTDIR -name .svn)
|
|
# step down to the sics directory
|
|
DESTDIR=$DESTDIR/$SICSDIR
|
|
mkdir -p $TEMPDIR/$DESTDIR
|
|
else
|
|
DESTDIR=${3:-/usr/local}/$SICSDIR
|
|
TARDIR=${DESTDIR:1}
|
|
# remove and recreate the temporary directory
|
|
rm -fr $TEMPDIR/$DESTDIR
|
|
mkdir -p $TEMPDIR/$DESTDIR
|
|
fi
|
|
|
|
echo "Deploying $INSTRUMENT to $DESTHOST:$DESTDIR"
|
|
|
|
EXTRACT_CMDS="tar vxzp -C /; touch /$DESTDIR/{DataNumber,extraconfig.tcl,newserver/config/nexus/nexus.dic,script_validator/DataNumber}"
|
|
if [[ "$DESTHOST" = "localhost" ]]
|
|
then
|
|
EXTRACT=$EXTRACT_CMDS
|
|
EXTRACT_NODEPLOY=$EXTRACT_CMDS
|
|
elif [[ "$TESTING" != "test" ]]
|
|
then
|
|
EXTRACT="ssh $DESTHOST $EXTRACT_CMDS; chown -R root:root /$DESTDIR/newserver; chown ${INSTRUMENT}_sics. /$DESTDIR/{DataNumber,newserver/config/nexus/nexus.dic,script_validator/{DataNumber,data}}; chown ${INSTRUMENT}. /$DESTDIR/extraconfig.tcl"
|
|
EXTRACT_NODEPLOY="ssh $DESTHOST $EXTRACT_CMDS; chown -R root:root /$DESTDIR/newserver; chown ${INSTRUMENT}_sics. /$DESTDIR/{DataNumber,newserver/config/nexus/nexus.dic}; chown ${INSTRUMENT}. /$DESTDIR/extraconfig.tcl"
|
|
else
|
|
EXTRACT="ssh $DESTHOST $EXTRACT_CMDS"
|
|
EXTRACT_NODEPLOY="ssh $DESTHOST $EXTRACT_CMDS"
|
|
fi
|
|
|
|
if [ ! -e $SRCDIR/MANIFEST.TXT ]
|
|
then
|
|
echo "$SRCDIR/MANIFEST.TXT not found"
|
|
exit 1
|
|
fi
|
|
if [ ! -e $SRCDIR/$INSTSRC/MANIFEST.TXT ]
|
|
then
|
|
echo "$SRCDIR/$INSTSRC/MANIFEST.TXT not found"
|
|
echo "You must list the files required for $INSTRUMENT in the manifest"
|
|
exit 1
|
|
fi
|
|
|
|
# Get list of files to copy and prepend directory name
|
|
COMMON=$(for f in $(cat $SRCDIR/MANIFEST.TXT); do echo -n "$SRCDIR/$f "; done)
|
|
INSTSPEC=$(for f in $(cat $INSTSRC/MANIFEST.TXT); do echo -n "$INSTSRC/$f "; done)
|
|
|
|
# Create Instrument Control Server directories and copy SICS configs to the 'server' directory
|
|
mkdir -p $TEMPDIR/$DESTDIR/{batch,newserver,log,tmp}
|
|
copy_server_config newserver
|
|
cp -a --preserve=timestamps ../SICServer $TEMPDIR/$DESTDIR/newserver
|
|
|
|
# Create Script Validator directories
|
|
mkdir -p $TEMPDIR/$DESTDIR/script_validator/{data,log,tmp}
|
|
|
|
# Create a manifest of the files installed on the IC host
|
|
echo "Date: $(date -Iminutes)" > $TEMPDIR/$DESTDIR/newserver/MANIFEST.TXT
|
|
echo -e "The following files were installed by $USER\n" >> $TEMPDIR/$DESTDIR/newserver/MANIFEST.TXT
|
|
cat $SRCDIR/MANIFEST.TXT $SRCDIR/$INSTSRC/MANIFEST.TXT >> $TEMPDIR/$DESTDIR/newserver/MANIFEST.TXT
|
|
|
|
cd $TEMPDIR
|
|
# remove any .svn directories
|
|
rm -rf $(find $TARDIR -type d -name .svn)
|
|
# remove any temporary editor files
|
|
find $TARDIR -type f -name .\*.sw\? -exec rm {} \;
|
|
# remove any editor backup files directories
|
|
find $TARDIR -type f -name \*~ -exec rm {} \;
|
|
# set modes for files
|
|
find $TARDIR -type f -exec chmod u-s,g-x+wr,o-wx+r {} \;
|
|
find $TARDIR -type f -perm -100 -exec chmod go+x {} \;
|
|
# set modes for directories
|
|
find $TARDIR -type d -exec chmod u+rwx,g+rwxs,o-w+rx {} \;
|
|
|
|
# Strip leading / from DESTDIR and extract to destination
|
|
if [[ "$DEPLOY" = "YES" ]]
|
|
then
|
|
if [[ "$DESTHOST" = "localhost" ]]
|
|
then
|
|
eval "tar -cz ${TARDIR} | $EXTRACT"
|
|
else
|
|
tar -cz ${TARDIR} | $EXTRACT
|
|
fi
|
|
else
|
|
echo "tar -cz -C $TEMPDIR $TARDIR | $EXTRACT_NODEPLOY"
|
|
fi
|