Xroot Startup Tutorial

#!/bin/bash
########################################################################
#  This script generates two scripts that are used to configure xrootd
#  to be used with a particular cmssw version.  The reason this script
#  was created was to make life a little easier when implementing
#  the xrootd startup script for each version of cmssw.  The script
#  is currently configured with the below variables to generate a setup
#  shell script and a root macro.
#
########################################################################
# Variables for script
########################################################################
POSSIBLE_CMSSW_SW_VO_BASES="/grp/cms/purdueCMS /apps/02/cmssoft/cms"
SETUP_SCRIPT="setup.sh"
SETUP_MACRO="rootlogon.C"
DEPLOYMENT_DIR=/grp/cms/root/etc

########################################################################
# Select the cmssw base directory
########################################################################
#select CMSSW base
PS3='Choose software base:'
select CMSSW_SW_VO_BASE in $POSSIBLE_CMSSW_SW_VO_BASES
do
echo $CMSSW_SW_VO_BASE
break
done
########################################################################
# Select the architecture to use
########################################################################
ARCHS=$(ls -d ${CMSSW_SW_VO_BASE}/sl*)
count=0
for a in $ARCHS
do
POSSIBLE_ARCHS[count]=$(basename $a)
let count=count+1
done
source $CMSSW_SW_VO_BASE/cmsset_default.sh

# select ARCH
PS3='Choose Architecture:'
echo
select arch in $ARCHS
do
echo -n $arch
break
done
SCRAM_ARCH=$(basename $arch)
########################################################################
# Select cmssw version
########################################################################
CMSSW_VERSIONS=$(ls  $CMSSW_SW_VO_BASE/$SCRAM_ARCH/cms/cmssw/)
PS3='Choose CMSSW version:'
echo
select CMSSW_VERSION in $CMSSW_VERSIONS
do
echo -n $CMSSW_VERSION
break
done
########################################################################
# Get enviroment variables from scram
########################################################################
START_DIR=`pwd`
mkdir -p cmssw_test
cd cmssw_test
pwd
scramv1 project CMSSW $CMSSW_VERSION
cd $CMSSW_VERSION/src
scramv1 runtime -sh -dump $START_DIR/env.sh > /dev/null
cd $START_DIR
rm -rf cmssw_test

vars=$(cat env.sh | awk '{c=index($2,"=");x=substr($2,0,c-1);print x }')
values=$(cat env.sh | awk '{c=index($2,"=");d=length($2);x=substr($2,c+1,d);e=index(x,";");x=substr(x,0,e-1);print x}')
rm -f env.sh

CMSSW_BASE=`pwd`
index=0
markIndex=-1;
for v in $vars
do
VARS[index]=$v
if [ "$v" == "CMSSW_BASE" ]
then
let markIndex=index
fi
let index=index+1
done

index=0
for v in $values
do
VALUES[index]=$(echo $v | sed -e "s/\"//g")
let index=index+1
done

CMSSW_BASE=${VALUES[markIndex]}
CMSSW_BASE_SUB=$(echo $CMSSW_BASE | sed -e "s/\//|/g")
CMSSW_SW_VO_BASE_SUB=$(echo $CMSSW_SW_VO_BASE | sed -e "s/\//|/g")

##########################################################################
# Create a directory to hold the generated files
##########################################################################
TARGET_DIR=$(basename ${CMSSW_SW_VO_BASE})_${CMSSW_VERSION}
mkdir -p $TARGET_DIR

##########################################################################
# Generate a setup file that will be use to setup the user environment
##########################################################################
START_DIR=`pwd`
cd $TARGET_DIR

cat > $SETUP_SCRIPT <<EOF
##########################################################################
# Generated on $(date)
##########################################################################
CMSSW_BASE=${CMSSW_BASE}
EOF

for((i=0;i<$index;i++))
do

if [ "${VARS[$i]}" != "CMSSW_BASE" ]
then
vv=${VALUES[$i]//\//|}
#v1=$(echo $vv | sed -e "s/${CMSSW_BASE_SUB}*/\${CMSSW_BASE}/g" | sed -e "s/${CMSSW_SW_VO_BASE_SUB}*/\${CMSSW_SW_VO_BASE}/g" )
v1=$(echo $vv | sed -e "s/${CMSSW_BASE_SUB}*/\${CMSSW_BASE}/g" )
v=$(echo $v1 | sed -e "s/|/\//g")

echo "export ${VARS[$i]}=\"$v\";" >> $SETUP_SCRIPT
echo "" >> $SETUP_SCRIPT
fi
done


cat >> $SETUP_SCRIPT <<EOF
export XROOTD=\$ROOTSYS/bin/xrootd
export XRDLOG=/var/log/xrootd.log
export XRDUSER=daemon
export XRDDEBUG=1
export XRDLIBS=\$ROOTSYS/lib
export DCAPLIB=/opt/d-cache/dcap/lib
export LD_LIBRARY_PATH=\$DCAPLIB:\$XRDLIBS:\$LD_LIBRARY_PATH
export PATH=\$PATH:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/opt/d-cache/dcap/bin:/usr/moab/bin:/usr/pbs/bin
EOF
cd $START_DIR

########################################################################
# build a rootLogon macro file.
########################################################################
START_DIR=`pwd`
cd $TARGET_DIR

CMSSW_RELEASE_BASE=$CMSSW_SW_VO_BASE/$SCRAM_ARCH/cms/cmssw/$CMSSW_VERSION

echo "{" > ${SETUP_MACRO}
echo "    // Setup macro for $CMSSW_RELEASE_BASE" >> {$SETUP_MACRO}
#for path in $(find $CMSSW_RELEASE_BASE/src -name interface)
echo "    gInterpreter->AddIncludePath(\".\");" >> ${SETUP_MACRO}
echo "    gInterpreter->AddIncludePath(\"${CMSSW_RELEASE_BASE}/src\");" >> ${SETUP_MACRO}

#for path in $(ls -d $CMSSW_RELEASE_BASE/src/*)
#do
#  echo "    gInterpreter->AddIncludePath(\"${path}\");" >> ${SETUP_MACRO}
#done

#for path in $(find ${CMSSW_RELEASE_BASE}/src -name classes.h)
#do
#p=${path%/classes.h}
#  echo "    gInterpreter->AddIncludePath(\"${p}\");" >> ${SETUP_MACRO}
#done

#for path in $(find ${CMSSW_RELEASE_BASE}/src -name classes.h)
#do
#p=${path%/classes.h}
#  echo "    gInterpreter->AddIncludePath(\"${p}\");" >> ${SETUP_MACRO}
#done

echo "}" >> ${SETUP_MACRO}
cd $START_DIR
#########################################################################
# Deploy to the deployment directory
#########################################################################
if [ -e "$DEPLOYMENT_DIR" ]
then
mkdir -p $DEPLOYMENT_DIR
fi
mv $TARGET_DIR $DEPLOYMENT_DIR