Create a CMSSW sandbox
The following tutorial shows how to pack a specific CMSSW framework releases to use it on your jobs.
Quick Start
To create a sandbox file from a CMSSW release directory, you can use the cmssw-sandbox tool. For example:
$ ls $ CMSSW_7_2_3/ $ cmssw-sandbox create CMSSW_7_2_3 INFO:root:packing sandbox into ./sandbox-CMSSW_7_2_3-7b812c1.tar.bz2
Optionally, you can specify a directory to write the sandbox file with -o. Sandboxes for the same CMSSW release will not be overwritten by default, so you can use -U when creating to update your sandbox file.
The following wrapper shows how to use the sandbox. You can transfer cmssw_setup.sh with your job to use the the sandbox on the worker node.
$ source /etc/ciconnect/templates/cmssw_setup.sh $ cmssw_setup sandbox-CMSSW_7_2_3-7b812c1.tar.bz2 >>> preparing sandbox release CMSSW_7_2_3 [2016-11-23 13:38:46] wrapper ready current directory: /home/khurtado/releases/slc6/tmp /home/khurtado/releases/slc6/tmp/cmssw-tmp/CMSSW_7_2_3
Introduction
The analysis code a user needs to run often depends on the CMSSW framework. This usually requires:
- Setting up a specific CMSSW release
- Getting and compiling some user-specific code
The second step can take some time and not always be that straightforward. Rather than having every single job systematically doing this, you can do it interactively once and package it in a file that gets transferred to the worker node instead.
Using the CMSSW Sandbox Creator tool
This tool allows you to easily create a sandbox file from a CMSSW directory, it takes such directory as the input and you can specify a directory to put the sandbox, the sandbox name will have the version release and a hash.
$ cmssw-sandbox create -h usage: cmssw-sandbox create [-h] [-o OUTDIR] [-U] [-a] [-i INCLUDE_DIR] indir positional arguments: indir CMSSW framework release directory to sandbox optional arguments: -h, --help show this help message and exit -o OUTDIR, --outdir OUTDIR Sandbox output directory -U, --update Update old sandbox file. -a, --include_all Include the whole src directory. -i INCLUDE_DIR, --include_dir INCLUDE_DIR Include this directory in $CMSSW_BASE/src recursively. Ignored if -a is used. data, interface and python included by default.
Use-case example
Let's assume we want to setup CMSSW 7.2.3 and then checkout some code from git:
SCRAM_ARCH=slc6_amd64_gcc481 cmsrel CMSSW_7_2_3 cd CMSSW_7_2_3/src/ cmsenv git cms-merge-topic HuguesBrun:trigElecIdInCommonIsoSelection720 git clone https://github.com/cms-ttH/MiniAOD cd MiniAOD git checkout 0181312365929129567455eeca5b5d3f1732dc21 cd .. git clone https://github.com/cms-ttH/ttH-13TeVMultiLeptons cd ttH-13TeVMultiLeptons git checkout 08de8b5bfc05770410dbc5481fb47be89f3e7e94 # compile, do additional work on this release
Now, we can simply run the tool:
$ cmssw-sandbox create CMSSW_7_2_3 INFO:root:packing sandbox into ./sandbox-CMSSW_7_2_3-1f7f983.tar.bz2
The above command will copy the directories needed in the CMSSW framework area (bin, cfipython, config, lib, module, python), plus all data, interface, python subdirectories in $CMSSW_BASE/src recursively. To copy all content in src, you can type instead:
$ cmssw-sandbox create -a CMSSW_7_2_3
or to include some additional, but not all subdirectories in $CMSSW_BASE/src, use option -i. For example, if we want to include src and test subdirectories in $CMSSW_BASE/src recursively
$ cmssw-sandbox create -i src -i test CMSSW_7_2_3
To use the sandbox, you will need a wrapper, available in /etc/ciconnect/templates/cmssw_setup.sh