Newer
Older
# Copyright (C) 2015 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
# SPDX-License-Identifier: GPL-3.0-only
# First commited by David Emschermann
## semi-automated script installing of FairSoft, FairRoot and CbmRoot
# usage:
# $ ./autoinstall_framework.sh
# for installation of all three or

David Emschermann
committed
# $ ./autoinstall_framework.sh 0 0 1
# for installation of CbmRoot or
# $ ./autoinstall_framework.sh --help
# to see a help file with possible user flags.
#
# 11.06.2020 - modification for robustness and to bring up to line with standard by Eoin Clerkin
# 31.08.2018 - re-introduce old version
# 24.05.2018 - switch to oct17p1 as dev version
# 31.01.2017 - make ROOT6 the default
# 17.12.2015 - split fairsoft directory into src and install
# 01.12.2015 - add selection of root version
# 17.07.2015 - introduce option to compile dev settings
# 02.06.2015 - introduce parameters for individual package selection
# 13.03.2015 - initial version
# by David Emschermann
main()
{
exec &> >(tee -a .autoinstall_framework.log) # So the user can check up a complete log if he wishes.
echo "FSOFTVER: $FSOFTVER"
echo "FROOTVER: $FROOTVER"
echo "NUMOFCPU: $NUMOFCPU"
setup_env_variables()
{
# choose your root version
export ROOTVER=6
export FSOFTDEV=apr22
export FROOTDEV=v18.6.8
export FSOFTPRO=apr21p2
export FROOTPRO=v18.6.7
# set default version to pro
export FSOFTVER=$FSOFTPRO
export FROOTVER=$FROOTPRO
export CBMSRCDIR=`pwd`
}
number_of_cpus()
{
arch=`uname -s | tr '[A-Z]' '[a-z]'`
# get the number of processors
if [ "$arch" = "linux" ]; then
NUMOFCPU=$([ -f /proc/cpuinfo ] && grep -i processor /proc/cpuinfo | wc -l || echo 1)
elif [ "$arch" = "darwin" ];
then
NUMOFCPU=$(sysctl -n hw.ncpu)
fi
}
parse_command_line()
{
SETUP_FAIRSOFT=0 && SETUP_FAIRROOT=0 && SETUP_CBMROOT=0;
[ $# -eq "0" ] && SETUP_FAIRSOFT=1 && SETUP_FAIRROOT=1 && SETUP_CBMROOT=1 : echo "Some Error has occurred" # Default behaviour with no flags, all three should be installed.
while test $# -gt 0; do
case "$1" in

David Emschermann
committed
-s|-fs|-fairsoft|--fairsoft)
echo "*** FairSoft to be installed"
SETUP_FAIRSOFT="1";
shift;;

David Emschermann
committed
-r|-fr|-fairroot|--fairroot)
echo "*** FairRoot to be installed"
SETUP_FAIRROOT="1";
shift;;
-use_fairsoft|--use_fairsoft)
shift
export SIMPATH=$1
echo "*** Use FairSoft from $SIMPATH"
SETUP_FAIRSOFT="0";
USE_EXTERNAL_FAIRSOFT=1
shift;;
-use_fairroot|--use_fairroot)
shift
export FAIRROOTPATH=$1
echo "*** Use FairRoot from $FAIRROOTPATH"
SETUP_FAIRROOT="0";
USE_EXTERNAL_FAIRROOT=1
shift;;

David Emschermann
committed
-c|-cr|-cbmroot|--cbmroot)
echo "*** CbmRoot to be installed"
SETUP_CBMROOT="1";
shift;;

David Emschermann
committed
-d|dev|-dev|--dev)
echo "*** DEV VERSION specified"
export FSOFTVER=$FSOFTDEV
export FROOTVER=$FROOTDEV
shift;;

David Emschermann
committed
-p|pro|-pro|--pro)
echo "*** PRO VERSION specified"
export FSOFTVER=$FSOFTPRO
export FROOTVER=$FROOTPRO
shift;;
-nproc)
shift
NUMOFCPU=$1
re='^[0-9]+$'
if ! [[ $NUMOFCPU =~ $re ]]; then
echo "$NUMOFCPU passed as argument of -nproc is no integer"
exit 1
fi
echo "*** Building with $NUMOFCPU processes in parallel"
shift;;

David Emschermann
committed
-o|old|-old|--old)
echo "*** OLD VERSION specified"
export FSOFTVER=$FSOFTOLD
export FROOTVER=$FROOTOLD
shift;;

David Emschermann
committed
-y|-yes|--yes)
echo "Will update environment to new build after installation"
ANSWER="YES";
shift;;
-n|-no|--no)
echo "In case someone wants to put in script."
ANSWER="NO";
shift;;

David Emschermann
committed
# This unusual addition is to continue to provide back compatiability
# with previous versions of autoinstall_framework.
# It is important to keep this in case someone has hardcoded installation
# instructions somewhere and thus this should avoid breaking his program.
# In particular the old behaviour accepts 1, 2 or 3 numerical arguments whereby
# argument 1 greater or equal to 1 would install FairSoft
# argument 2 greater or equal to 1 would install FairRoot
# argument 3 greater or equal to 1 would install CbmRoot
# ergo
# ./autobuild_framework dev 1 0 0

David Emschermann
committed
# would install FairSoft but not FairRoot nor CbmRoot.
if [ $1 -gt 0 ]; then
SETUP_FAIRSOFT="1";
echo "FairSoft flaged for install"
if [ ! -z $2 ]; then # This combersome and longform if statement exist due to known issues regarding ampersands within bash cases.
if [ $2 -gt 0 ]; then
SETUP_FAIRROOT="1";
echo "FairRoot flaged for install"
fi
if [ ! -z $3 ]; then # This combersome and longform if statement exist due to known issues regarding ampersands within bash cases.
if [ $3 -gt 0 ]; then
SETUP_CBMROOT="1";
echo "CbmRoot flaged for install"
fi
fi
# To prevent the pausing a script with maybe autoinstall_framework called the old way.
ANSWER="NO";
break;;
-h|-help|--help|*)

David Emschermann
committed
echo "Autoinstall_framework will install FairSoft, FairRoot and CbmRoot packages"
echo "If no flags are specified, the program will install all three"
echo "otherwise the user may specify one or more to by calling the corresponding flags"
echo
echo "-h, --help Shows this brief help"
echo
echo "-fs, --fairsoft Installation of FairSoft"
echo "-fr, --fairroot Installation of FairRoot"
echo "-cr, --cbmroot Installation of CbmRoot"
echo
echo "-use_fairsoft <PATH> Take FairSoft installation from <PATH>"
echo "--use_fairsoft <PATH> Take FairSoft installation from <PATH>"
echo "-use_fairroot <PATH> Take FairRoot installation from <PATH>"
echo "--use_fairroot <PATH> Take FairRoot installation from <PATH>"
echo
echo
echo "-nproc <number> Use <number> of paralle processes for compilation"
echo
echo "-d, --dev Runs with dev version (FairSoft: $FSOFTDEV, FairRoot: $FROOTDEV)"
echo "-p, --pro Runs with pro version (FairSoft: $FSOFTPRO, FairRoot: $FROOTPRO)"
echo "-o, --old Runs with old version (FairSoft: $FSOFTOLD, FairRoot: $FROOTOLD)"
echo "-y, --yes Automatically uses new envirnoment configuration post installation"

David Emschermann
committed
echo "-n, --no Answers no to automatic environment update"
echo ""
echo "Example case to install only FairRoot and CbmRoot (and not FairSoft)"
echo "./autoinstall_framework.sh -fr -cr"
echo "Example case to install on Debian10 only CbmRoot and use FairSoft/FairRoot from external installation"
echo "./autoinstall_framework.sh --use_fairsoft /cvmfs/fairsoft.gsi.de/debian10/fairsoft/apr21p2 \ "
echo " --use_fairroot /cvmfs/fairsoft.gsi.de/debian10/fairroot/v18.6.7_fs_apr21p2 -cr"
echo
echo "Example case to install on Debian11 only CbmRoot and use FairSoft/FairRoot from external installation"
echo "./autoinstall_framework.sh --use_fairsoft /cvmfs/cbm.gsi.de/debian11/fairsoft/apr21p2 \ "
echo " --use_fairroot /cvmfs/cbm.gsi.de/debian11/fairroot/v18.6.7_apr21p2 -cr"
nof_missing_packages=0
missing_packages=""
# Array with binaries which are needed for the compilation
programs=(cmake curl gcc g++ gfortran make patch sed bzip2 unzip gzip tar svn git flex lsb_release wget automake autoconf libtoolize)
for executable in "${programs[@]}"; do
check_executable $executable
done
check_file_exist /usr/include/sqlite3.h sqlite3-dev
check_file_exist /usr/include/X11/Xlib.h x11-dev
check_file_exist /usr/include/X11/Xft/Xft.h xft-dev
check_file_exist /usr/include/X11/extensions/Xext.h xext-dev
check_file_exist /usr/include/X11/xpm.h xpm-dev
check_file_exist /usr/include/GL/glu.h mesa-dev
check_file_exist /usr/include/curses.h ncurses-dev
check_file_exist /usr/include/bzlib.h bz2-dev
check_file_exist /usr/include/openssl/ssl.h ssl-dev
check_file_exist /usr/include/gsl/gsl_types.h gsl-dev
check_file_exist /usr/include/tbb/tbb.h tbb-dev
check_file_exist /usr/include/xercesc/dom/DOM.hpp xecesc-dev
check_file_exist /usr/include/yaml-cpp/binary.h yaml-cpp
check_file_exist /usr/bin/curl-config curl-dev
check_file_exist /usr/bin/xml2-config xml2-dev
if [ $year -lt 20 ]; then
check_file_exist /usr/bin/xmkmf xutils-dev
check_file_exist /usr/bin/krb5-config krb5-dev
tmp=$(which python2-config)
if [ $? -ne 0 ]; then
tmp=$(which python3-config)
if [ $? -ne 0 ]; then
nof_missing_packages=$((nof_missing_packages+1))
missing_packages="python-dev, $missing_packages"
fi
fi
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
if [ $nof_missing_packages -ne 0 ]; then
echo ""
echo "The following packages are missing and need to be installed"
echo $missing_packages
echo ""
echo "For further information which packages need to be installed"
echo "check the documentation on the FairSoft GitHub page at"
if [ $year -lt 20 ]; then
echo ""
echo "https://github.com/FairRootGroup/FairSoft/tree/$FSOFTVER"
echo ""
echo "For Linux check dependencies.md"
echo "For macosx check dependencies_macosx.md"
else
echo "https://github.com/FairRootGroup/FairSoft/blob/$FSOFTVER/legacy/dependencies.md"
fi
echo ""
echo "and follow the given instructions."
echo
# check if sqlite3 is available
missing=0
if [[ "$missing_packages" =~ .*"sqlite3".* ]]; then
missing=$((missing+1))
fi
if [[ "$missing_packages" =~ .*"gsl".* ]]; then
missing=$((missing+1))
fi
if [[ "$missing_packages" =~ .*"tbb".* ]]; then
missing=$((missing+1))
fi
if [[ $missing -ne 0 ]];then
if [[ "$missing_packages" =~ .*"sqlite3".* ]]; then
echo
echo "Sqlite3 is not available which may not be part of the above installation instructions"
echo
echo "On Debian or Ubuntu, please install as follows:"
echo "sudo apt install libsqlite3-dev"
echo
echo "On OpenSuSE, please install as follows:"
echo "zypper install libsqlite3-0 sqlite3-devel"
echo
echo "On Fedora, please install as follows:"
echo "dnf install sqlite-devel"
echo
echo "afterwards, restart autoinstall_framework.sh"
echo
fi
if [[ "$missing_packages" =~ .*"tbb".* ]]; then
echo
echo "The tbb development package is not available which may not be part of the above installation instructions"
echo
echo "On Debian or Ubuntu, please install as follows:"
echo "sudo apt install libtbb-dev"
echo
echo "On OpenSuSE, please install as follows:"
echo "zypper install tbb-devel"
echo
echo "On Fedora, please install as follows:"
echo "dnf install tbb-devel"
echo
echo "afterwards, restart autoinstall_framework.sh"
echo
fi
if [[ "$missing_packages" =~ .*"gsl".* ]]; then
echo
echo "The gsl development package is not available which may not be part of the above installation instructions"
echo
echo "On Debian or Ubuntu, please install as follows:"
echo "sudo apt install libgsl-dev"
echo
echo "On OpenSuSE, please install as follows:"
echo "zypper install gsl-devel"
echo
echo "On Fedora, please install as follows:"
echo "dnf install gsl-devel"
echo
echo "afterwards, restart autoinstall_framework.sh"
echo
fi
fi
exit
echo
echo "All needed external software is installed"
echo
}
check_executable()
{
# check if executable is available
# pass result into a temporary variable to have a quite mode
tmp=$(which $1)
if [ $? -ne 0 ]; then
nof_missing_packages=$((nof_missing_packages+1))
missing_packages="$1, $missing_packages"
fi
}

David Emschermann
committed
check_file_exist()
{
file=$1
package=$2

David Emschermann
committed
if [ ! -f $file ] ; then
nof_missing_packages=$((nof_missing_packages+1))
missing_packages="$package, $missing_packages"
fi
}

David Emschermann
committed
install_fairsoft()
{
if [ $SETUP_FAIRSOFT -ge 1 ]; then
echo "Setting up FairSoft ..."
cd ..
git clone https://github.com/FairRootGroup/FairSoft fairsoft_src_${FSOFTVER}_root${ROOTVER}
cd fairsoft_src_${FSOFTVER}_root${ROOTVER}
git tag -l
git checkout -b tag_$FSOFTVER $FSOFTVER
year=$(echo $FSOFTVER | cut -c4,5)
if [ $year -lt 20 ]; then
install_fairsoft_before_2020
else
install_fairsoft_since_2020
fi
cd $CBMSRCDIR
echo "done installing FairSoft"
fi
}
install_fairsoft_before_2020()
{
if [ $ROOTVER -eq 6 ]; then
sed s/build_root6=no/build_root6=yes/ automatic.conf > automatic1_root.conf
else
cp automatic.conf automatic1_root.conf
fi
FSOFTINSTALLPATH=`pwd | sed s/fairsoft_src_/fairsoft_/`
sed /SIMPATH_INSTALL/d automatic1_root.conf > automatic2_path.conf
echo " SIMPATH_INSTALL=$FSOFTINSTALLPATH/installation" >> automatic2_path.conf
sed s/compiler=/compiler=gcc/ automatic2_path.conf > automatic3_gcc.conf
./configure.sh automatic3_gcc.conf
result=$?
if [ $result -ne 0 ]; then
echo
echo "Something went wrong with the installation."
echo "Please check the output above."
exit
fi
install_fairsoft_since_2020()
{
FSOFTINSTALLPATH=`pwd | sed s/fairsoft_src_/fairsoft_/`
cmake -S $PWD -B $PWD/build -C $PWD/FairSoftConfig.cmake -DCMAKE_INSTALL_PREFIX=$FSOFTINSTALLPATH/installation
if [ $? -ne 0 ]; then
echo "Something went wrong with the FairSoft configuration"
exit
fi
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
cmake --build $PWD/build -j$NUMOFCPU
if [ $? -ne 0 ]; then
echo "Something went wrong with the FairSoft build"
exit
fi
}
install_fairroot()
{
if [ $SETUP_FAIRROOT -ge 1 ]; then
echo "Setting up FairRoot ..."
cd ..
echo "SIMPATH before: $SIMPATH"
cd fairsoft_${FSOFTVER}_root${ROOTVER}/installation/
export SIMPATH=`pwd`
echo "SIMPATH now : $SIMPATH"
cd $CBMSRCDIR
echo PATH=$SIMPATH/bin:$PATH
export PATH=$SIMPATH/bin:$PATH
cd ..
git clone https://github.com/FairRootGroup/FairRoot.git fairroot_src_$FROOTVER-fairsoft_${FSOFTVER}_root${ROOTVER}
cd fairroot_src_$FROOTVER-fairsoft_${FSOFTVER}_root${ROOTVER}
git tag -l
git checkout -b tag_$FROOTVER $FROOTVER
mkdir -p build
cd build
cmake \
-DCMAKE_CXX_COMPILER=$($SIMPATH/bin/fairsoft-config --cxx) \
-DCMAKE_C_COMPILER=$($SIMPATH/bin/fairsoft-config --cc) \
-DCMAKE_INSTALL_PREFIX=../../fairroot_$FROOTVER-fairsoft_${FSOFTVER}_root${ROOTVER} \
..
nice make install -j$NUMOFCPU
cd $CBMSRCDIR
echo "done installing FairRoot"
fi
}
install_cbmroot()
{
if [ ${SETUP_CBMROOT} -eq "1" ]; then
echo "Setting up CbmRoot ..."
echo "SIMPATH before: $SIMPATH"
if [[ -z $USE_EXTERNAL_FAIRSOFT ]]; then
cd ..
cd fairsoft_${FSOFTVER}_root${ROOTVER}/installation/
export SIMPATH=`pwd`
fi
echo "SIMPATH now : $SIMPATH"
cd $CBMSRCDIR
if [[ -z $USE_EXTERNAL_FAIRROOT ]]; then
cd ..
cd fairroot_$FROOTVER-fairsoft_${FSOFTVER}_root${ROOTVER}
export FAIRROOTPATH=`pwd`
fi
echo "FAIRROOTPATH: $FAIRROOTPATH"
cd $CBMSRCDIR
echo PATH=$SIMPATH/bin:$PATH
export PATH=$SIMPATH/bin:$PATH
cd ..
cd $CBMSRCDIR
mkdir -p build
cd build
cmake \
-DCMAKE_CXX_COMPILER=$($SIMPATH/bin/fairsoft-config --cxx) \
-DCMAKE_C_COMPILER=$($SIMPATH/bin/fairsoft-config --cc) \
..
nice make -j$NUMOFCPU
if [ $? -ne 0 ]; then
echo "Something went wrong with the CbmRoot installation"
exit
fi
cd ..
echo "done installing CbmRoot"
[ -z $ANSWER ] && (
cat << EOT
Since the system is now installed. Shall I switch to the new environment?
source build/config.sh
Reply Yes or Y for confirmation ????
EOT
if (echo "$ANSWER" | sed -n '/^\(Y\|y\)/!{q10}'); then
echo "A yes detected."
source build/config.sh;
echo "Environmental variables and paths updated"
fi
fi
}
#####################################################################################