Code development on cluck and the grunts¶
cluck.fnal.gov is the SSI group's main server, and is the only one of our machines on the public FNAL network.
grunt1 through grunt5 are the SSI group's worker nodes; they are only on a private network, and are only accessible through cluck.
Cluck is currently running Scientific Linux Fermi (SLF) version 6; the grunts (grunt1, 2, 3, 4, and 5) are running SLF5.
The home directories on the grunts are physically on a disk connecting to cluck, available at
These instructions are brief guidelines. They cannot cover all complexities.
First setup of your environment¶
Home directories on cluck and the grunts are backed up. Because backup space is at a premium, it is best to keep source code under your home directory but to keep built products on either shared or node-local scratch space. On each grunt node, you have node-local scratch space at
- check code out from the relevant repository into a directory under your "grunt home" directory. This must be done from cluck, because cluck is the only machine on the public network
- create a directory under your node-local scratch directory in which to build the product you have checked out.
Checking out source code¶
All of our git repositories hosted on
cdcvs using the same naming scheme for the URLs. To clone the git repository for a project named
X, use the following command:
git clone ssh://p-X@cdcvs.fnal.gov/cvs/projects/X
This will create a directory named
X in your current working directory.
Creating a build directory¶
Recommended practice to create the build directory for a project named
mkdir /scratch/<username>/build-X cd /scratch/<username>/build-X source <path-to-where-you-cloned-the-X-repository>/ups/setup_for_development -d <qual>
This will setuo a debug build (the meaning of
-d; your other choice is
-p for an optimized profiling build);
<qual> should be replaced by the qualifiers of the project in question for the build you're interested in. You can look in the product's
setup_for_development file to find the options; the one labeled as the default is most often the right choice.
Building code and running tests¶
While in the build directory, use the
buildtool command to build the software:
buildtool -j 20
will run cmake, then run make, using up to 20 processes. Try
buildtool --help to get complete instructions on the use of
Also see the buildtool script.
Dealing with product dependencies¶
Product dependencies are typically established when the code package is first written.
- If the version of a dependent product changes, you must exit <path-to-where-you-cloned-the-X-repository>/ups/product_deps. This is the only required change, but you may also wish to update the minimum allowed version.
- To add or remove a dependent product, see Adding Product Dependencies
You can only access public network resources from cluck, so all git commands that work with the central repository (pull, push) must be run from cluck. You can do commits from the grunts. However, we've had best success when doing all git commands from cluck, because of the sometimes annoying delays involved with NFS syncing of the shared filesystems.