Spack provides ability to reuse software pre-installed on system via spack external packages to avoid reinstalling software already present on a system. You should consult output of spack concretize -f
if you are in a
Spack environment or spack spec <spec>
for one of packages to see list of dependencies. We have compiled a list of Spack packages that should be external when building Spack stacks on NERSC systems. You may run spack external find <spec>
to update your spack.yaml however we recommend you always confirm your Spack configuration with what's provided by system.
Spack Package | Description |
---|---|
bash | This is GNU Bourne Again Shell known as bash shell which is typically found in most linux systems. You can check supported shells by cat /etc/shells , you can check version of bash by running /usr/bin/bash --version . This package should not be installed as spack package |
bzip2 | /usr/bin/bzip2 should be available on system. You can run bzip2 --version to check version. You can check if rpm is available by running rpm -q --whatprovides $(which bzip2) |
cpio | The GNU cpio is program to manage archives of files, this program is available at /usr/bin/cpio . This package should not be installed via spack |
cray-libsci | cray-libsci is provided by Cray Programming Environment. You should should see available module by running module avail cray-libsci . The cray-libsci package is typically installed in /opt/cray/pe/libsci/ . For instance a modulefile cray-libsci/21.08.1.2 should be external for package [email protected] . |
cray-mpich | cray-mpich is MPI wrapper based on mpich provided by Cray. You can find cray-mpich modulefile, this is typically installed at /opt/cray/pe/mpich/ on cray machines. You should set this as external for packages that depend on MPI. |
cuda | cuda is typically provided on NERSC but not as a system library (/usr/bin/nvcc ) but usually through modules. You can find this typically in modules such as module av cuda nvhcp nvidia cudatoolkit CUDA. You should run nvcc --version to check version. The nvhpc compiler provides typically providers three versions of cuda for instance cuda packages by [email protected] are located /opt/nvidia/hpc_sdk/Linux_x86_64/21.9/cuda on Perlmutter. If you want to set a [email protected] external then the path would be /opt/nvidia/hpc_sdk/Linux_x86_64/21.9/cuda/10.2/ . Sometimes you may not want cuda as external especially when one needs to install from source or you have incompatible between compiler and cuda version. For reference please see nvhpc release notes. There is a more detailed breakdown of cuda compatibility requirement found at https://gist.github.com/ax3l/9489132. Please check the cuda driver via nvidia-smi for driver compatiblity. |
coreutils | This package is install on Linux OS which provides common utilities like cat , ls , echo and many other utilities. You can check if coreutils is installed and its version by running rpm -qi coreutils |
diffutils | This is the GNU diffutils package which providers /usr/bin/diff . This package should be external and will most likely get picked up when building a large software stack |
findutils | The findutils package providers find and xargs command which is provided by OS. This is typically located in /usr/bin/find and /usr/bin/xargs . Please check the version of the utility or check the rpm version by running rpm -qi findutils . |
git | git is typically provided on NERSC systems that can be found at /usr/bin/git . This should be an external, we don't need spack to install multiple versions of git that user will never need. |
libfabric | The libfabric package is provided by Cray which can be searched by running module av libfabric . This is typically installed at /opt/cray/libfabric/ . |
krb5 | This is the Kerberos third party network authentication system, this package is generally installed on NERSC system. You can check the version of rpm by running rpm -qi krb5 |
m4 | GNU m4 is Unix macro processor this is typically provided by the Operation system and located at /usr/bin/m4 . The m4 spack package can be installed without any issues however there is no need for having multiple copies of m4 when doing software stack builds. |
openssl | OpenSSL is provided by Operating System, you can run rpm -q openssl to check if its installed. The program is located at /usr/bin/openssl and you can get version by running /usr/bin/openssl version . Please make sure the version matches the external spec you define i.e openssl@<version> |
openssh | openssh provides SSH program which is installed at /usr/bin/ssh . This should not be installed via spack which is typically found when installing packages like openmpi . You can check the version by running ssh -V or check the rpm metadata by running rpm -qi openssh |
pdsh | PDSH is parallel remote shell which is provided on NERSC system at /usr/bin/pdsh . You can check the version and set this as external. This package is a dependency for few packages including scr |
readline | This package is provided by OS and located at /usr/bin/readline . This should not be installed by spack |
sed | Sed is a Linux utility that performs operation on input text and modifies the output. It is used for pattern matching or word substitution. You can find this utility in /usr/bin/sed and it is typically installed as an rpm. This package should not be installed via spack |
slurm | slurm is the NERSC supported batch scheduler, this package should never be installed by spack which is true when you try installing MPI providers. Slurm is picked up as dependency when you set openmpi scheduler=slurm , mpich +slurm , or mvapich2 process_managers=slurm . You can check version of slurm by running /usr/bin/sinfo --version . Please review the output of spack concretize to ensure slurm doesn't get picked up as dependency for any other packages. You can run spack dependents slurm to see all packages that depend on slurm if you recognize a package then you should consider setting this as external. |
tar | The tar utility is provided by Operating system and located at /usr/bin/tar . You can check the version by running /usr/bin/tar --version and set this as external |
tcsh | Tcsh is a compatible C shell which is installed on NERSC system, you can find supported shell by running cat /etc/shells , to find version of tcsh you can run /usr/bin/tcsh --version . |
unzip | The unzip utility is provided by OS and located at /usr/bin/unzip . |
util-linux-uuid | This package provides essential Linux utilities that is installed by OS. This maps to util-linux package on SLES and you can find the version by running rpm -qi util-linux |
zsh | NERSC supports zsh and it is provided by system library located at /usr/bin/zsh . This package should not be installed by spack |