Spack#

Spack is a packaged management tool which can be used to extend the installed software on the system, without requiring specialist knowledge on how to build particular pieces of software.

Installing Spack#

Installing Spack simply requires cloning the Spack git repository, and sourcing setup-env.sh in your interactive session or adding it to your bash environment.

Spack installations can become quite large consuming considerable disk space. To avoid filling the limited /users/ or /project directories it is recommended to install Spack into the /nobackup filestore.

To install Spack in /nobackup/projects/<project>/$USER (replacing <project> with your project code):

# Clone the Spack repository
$ git clone https://github.com/spack/spack.git /nobackup/projects/<project>/$USER/spack

# Add the installation location of Spack to your bash environment
$ echo 'export SPACK_ROOT=/nobackup/projects/<project>/$USER/spack' >> ~/.bash_profile
$ echo 'source $SPACK_ROOT/share/spack/setup-env.sh' >> ~/.bash_profile

After re-logging in to Bede, or re-sourcing your bash environment spack should be available for use.

Using Spack#

Spack provides a command line interface with a number of subcommands which can be used to query, manage and enable the use of software packages in the Spack ecosystem.

Querying available packages#

Packages available for installation via spack can be found using spack list or on the Spack Package List webpage.

# List all packages
spack list
# List packages which match the pattern "gromacs"
spack list gromacs

More information can be found for a given package using spack info

E.g. to get information about the package gromacs

spack info gromacs

Installing packages#

Once you know which package(s) you wish to install, the install subcommand can be used to install named packages.

Specific package versions can be installed using the <package>@<version> format.

I.e. to install the default gromacs, or a specific version such as 2021.5:

# Install the default available gromacs
spack install gromacs
# Install gromacs 2021.5
spack install gromacs@2021.5

Spack packages may also provided variants. Spack package variants are package specific, and are often used to configure the build type or optional features such as MPI or CUDA support.

For example, to install the default version of gromacs with CUDA and MPI variants enabled:

spack install gromacs +mpi +cuda

Listing installed packages#

To list packages which have been installed into the current spack environment, use the find subcommands

spack find

Using installed packages#

Spack packages will not be available on your $PATH by default once installed, but provides mechanisms to load packages and make them available for use.

Spack provides the load subcommand to load an installed package and make it available for use.

I.e. to load the default installed version of gromacs:

spack load gromacs
# The package is then available for use
gmx -version

Packages can then be unloaded via the unload subcommand, and found using the --loaded option of the find subcommand:

# List loaded modules
spack find --loaded
# Unload a loaded module
spack unload gromacs

Alternatively, Spack includes Environment module integration, allowing spack installed software to be available via module load and the associated commands. Please refer to the Spack Modules Documentation for more information.

Uninstalling packages#

Packages can be uninstalled using the uninstall subcommand.

E.g. to uninstall gromacs

spack uninstall gromacs

Project Spack installations#

If a project wishes to create a spack installation, for example under /projects/<project>/spack and you would like an easy way for your users to add it to their environment, please contact us and we can make a module.

If you are a user who wishes to supplement your project’s spack installation, follow the installation instructions above and then tell it where your project’s copy of spack is:

cat > $SPACK_ROOT/etc/spack/upstreams.yaml <<EOF
upstreams:
  spack-central:
    install_tree: /projects/<project>/spack
    modules:
      tcl: /projects/<project>/spack/share/spack/modules
EOF