CVMFS

The Cern Virtual Machine File System (CernVM-FS or CVMFS) is a read only HTTP based file system which appears as a normal file system on the grid UI and on the nodes. It is not meant for distributing data but files that you need to run your program. For example, c++ libraries your program depends on.

1. Usage

If you need Fastjet, HepMC, ROOT, Rivet, CLHEP or LHAPDF, you can benefit from other people's suffering. To set the environment, add the following lines into your "~/.bashrc"

export PATH=/cvmfs/pheno.egi.eu/HEJ/Dependencies/bin/:/cvmfs/pheno.egi.eu/HEJ/Dependencies/Rivet/bin/:$PATH
export LD_LIBRARY_PATH=/cvmfs/pheno.egi.eu/HEJ/Dependencies/lib/:/cvmfs/pheno.egi.eu/HEJ/Dependencies/Rivet/lib/:$LD_LIBRARY_PATH
source /cvmfs/pheno.egi.eu/HEJ/Dependencies/root-6.02.08/bin/thisroot.sh
source /cvmfs/pheno.egi.eu/compilers/GCC/4.9.2/setup.sh
export CC=gcc
export CXX=g++

The default verion of gcc is quite old on the gridui, thus also a newer versio of the compiler is set up. To be able to link on the nodes, you need to add the same variabels to your diver script.

    def SetEnv(self):
        os.environ["LFC_HOST"]="lfc01.dur.scotgrid.ac.uk"
        os.environ["LCG_CATALOG_TYPE"]="lfc"
        os.environ["LFC_HOME"]="/grid/pheno/hapola"
        os.environ["LCG_GFAL_INFOSYS"]="lcgbdii.gridpp.rl.ac.uk:2170"
        os.environ["CXX"]="g++"
        os.environ["CC"]="gcc"
	    
	os.environ["PATH"]=os.environ.get("PATH",'')+":/cvmfs/pheno.egi.eu/HEJ/Dependencies/bin/"
	os.environ["PATH"]=os.environ.get("PATH",'')+":/cvmfs/pheno.egi.eu/HEJ/Dependencies/Rivet/bin/"
	os.environ["LD_LIBRARY_PATH"]="/cvmfs/pheno.egi.eu/HEJ/Dependencies/lib/"
	os.environ["LD_LIBRARY_PATH"]=os.environ.get("LD_LIBRARY_PATH",'')+":/cvmfs/pheno.egi.eu/HEJ/Dependencies/Rivet/lib/"

	scmd = "source /cvmfs/pheno.egi.eu/HEJ/Dependencies/root-6.02.08/bin/thisroot.sh;"
        scmd = scmd + "source /cvmfs/pheno.egi.eu/compilers/GCC/4.9.2/setup.sh;"
        scmd = scmd +  "env -0"
        process = Popen(scmd, stdout=PIPE, stdin=PIPE,  shell=True,
                        executable="/bin/bash")
        output, unused_err = process.communicate()
        os.environ.update(line.partition('=')[::2] for line in output.split('\0'))

If you need other libraries to be added, check out the info in IPPP help.