This repo contains the infrastructure and environment definitions to deploy site-provided software on OLCF resources via Spack environments.
Clone this repo and it's facility-modified spack fork somewhere on an OLCF filesystem:
git clone --recurse-submodules git@github.com:mpbelhorn/olcf-spack-environments.git
or
git clone --recurse-submodules https://github.com/mpbelhorn/olcf-spack-environments
Next, initialize spack and the build environment. This is done by calling
FACSPACK_MY_ENVS=/path/to/host-specific/private/envs FACSPACK_ENV_NAME=base . ./init-facility-spack.sh
This will configure the spack build- and run-time environment build and install
the facility spack environment FACSPACK_ENV_NAME
tracked by this repo for the
current machine in a private location under FACSPACK_MY_ENVS
. Both of these
variables are optional. If omitted, each variable will take on their default
values:
FACSPACK_MY_ENVS="/sw/${_THIS_HOST}/spack-envs"
FACSPACK_ENV_NAME="base"
such that sourcing this script by itself
. ./init-facility-spack.sh
will setup the runtime shell environment to manipulate the production spack environment on the current system.
This repo will always track at least one spack environment per machine named
base
which is the complete standard software environment used in production
for that machine. Furthermore, only the user account with owner permissions on
the production environment may be used to manipulate it in the default
FACSPACK_MY_ENVS
. This is an intentional safety mechanism to prevent multiple
users from concurrently modifying the production environment. Users may set an
alternate FACSPACK_MY_ENVS
under which they can run build tests using any
tracked hosts/${_THIS_HOST}/${FACSPACK_ENV_NAME}/spack.yaml
file in this repo.
From these variables, a unique path per each environment name will be constructed:
FACSPACK_ENV="${FACSPACK_MY_ENVS}/${FACSPACK_ENV_NAME}"
The value of ${_THIS_HOST}
is determined automatically from the hostname on
which the init script is being run. For each system and environment tracked in
this repo that you wish to work on, ensure that the final expanded value of
FACSPACK_ENV
corresponds to an actual existing directory.
Configuration paths in our spack.yaml
environments that are not fixed to
universal values are expressed in terms of relative paths to either the spack
instance setup by init-facility-spack
or the path to the FACSPACK_MY_ENVS
.
These paths are referenced in the spack.yaml
files via environment variables
set by init-facility-spack
. This allows the spack.yaml
environment files to
define portable and relocatable spack environments which can be re-deployed in
arbitrary private locations by any users without needing to modify the
environment file.
The following variables are exported in Spack's runtime environment by
init-facility-spack
and can be referred to in the spack.yaml
the enviornment
files tracked in this repo.
${FACSPACK_ENV}
: Path to where spack environment will be installed. Contains subdirsopt
andmodules
.${FACSPACK_ENV_MODULEROOT}
: Shortcut to${FACSPACK_ENV}/modules
under which static and spack-generated modules are generated. Contains subdirectoriesspack
,flat
, andsite
corresponding to lmod, tcl, and static modulefiles respectively.${FACSPACK_CONF_COMMON}
: Path to facility-wide common configuration files under${this_repo}/share
.${FACSPACK_CONF_HOST}
: Path to host-specific configuration files under${this_repo}/hosts/${_THIS_HOST}
There are (as of spack v0.15.0) a couple exceptional paths used in spack.yaml
files which cannot de-reference environment variables. These affect
- Mirrors
- Extensions
Spack does not internally expand environment variables in the configuration of these items so they must be expressed as hard-coded full path strings. The default values in this repo should point to permanent world-readable paths on the OLCF filesystem populated with OLCF-maintained extensions and mirrors.
The upstream development branch of spack is not used directly. Instead, the OLCF
has implemented some customizations that are tracked in the "olcf-X.Y.Z"
branches of a facility fork of spack
where X.Y.Z
refers to the tagged release of upstream spack from which the
OLCF-modified branch is forked.