Using containers to work with older CMSSW versions on RHEL9¶
You can use the wrappers offered by the
cmssw-osenv project that are
already installed in CVMFS. /cvmfs/cms.cern.ch/common/cmssw-env. You
can add additional directories that are to be mounted into the container
using the -B /work,/scratch syntax.
Interactively installing a CMSSW release¶
Start up a container suitable for the CMSSW release you want to
install. In the following example we will use an EL7 (Enterprise Linux
7 compatible) container. Ensure that /work is mounted into the
container
/cvmfs/cms.cern.ch/common/cmssw-env -B /work --cmsos el7
Now, inside of the containerized environment just proceed to install
CMSSW in your /work/$USER directory as usual
cd /work/feichtinger/CMSSW
source ${VO_CMS_SW_DIR}/cmsset_default.sh
export SCRAM_ARCH=slc7_amd64_gcc700 # override needed for this particular CMSSW version
cmsrel CMSSW_10_6_37
Running slurm jobs in a containerized environment¶
An example job based on first creating a temporary payload file that then
is passed for execution to the cmssw-env container command
#!/bin/bash
#SBATCH --job-name=cmssw-job
#SBATCH --partition=standard
#SBATCH --ntasks=1
#SBATCH --time=08:00:00
echo "# starting Job at $(date) on node ${HOSTNAME}"
echo "###########################"
echo "# INITIAL ENVIRONMENT START"
echo "###########################"
env
echo "##########################"
echo "# INITIAL ENVIRONMENT END"
echo "##########################"
JOBSCRATCH=/scratch/${USER}/${SLURM_JOBID}
mkdir -p $JOBSCRATCH
payload=$(mktemp ${JOBSCRATCH}/apptainer-payload-XXXXXX.sh)
cat > "$payload" << EOF
# Adapt this based on your install directory
cd /work/feichtinger/CMSSW/CMSSW_10_6_37
source ${VO_CMS_SW_DIR}/cmsset_default.sh
#For this particular CMSSW version we need to override the ARCH
export SCRAM_ARCH=slc7_amd64_gcc700
cmsenv
# IMPLEMENT YOUR FUNCTIONALITY HERE!
EOF
chmod u+x "$payload"
# Launch the payload in the container, make sure that /scratch
# and /work are available inside of the container
/cvmfs/cms.cern.ch/common/cmssw-env --cmsos el7 -B /scratch,/work \
--command-to-run $payload
rm -rf "$JOBSCRATCH"
echo "# ending Job at $(date) "