Spack mirrors

Some machines may not have internet access to get packages. Then you will need a local repository of tarballs from which to retrieve your files. Spack supports this with Spack mirrors. A mirror is a URL that points to a directory on the local file system or on a server and contains tarballs for all Spack packages.

Here is an example of the directory structure of a mirror:

$ tree /path/to/mirror/
├── autoconf
│   └── autoconf-2.69.tar.gz
├── automake
│   └── automake-1.16.1.tar.gz
├── bzip2
│   └── bzip2-1.0.8.tar.gz
├── diffutils
│   └── diffutils-3.7.tar.xz
├── expat
│   └── expat-2.2.5.tar.bz2
├── gcc
│   └── gcc-9.1.0.tar.xz

spack mirror create

You can create a mirror with the command spack mirror create, provided you are on a machine that can access the Internet. The command iterates through all of Spack’s packages and downloads the ones you want.

spack mirror add

Once you’ve created a mirror, you need to let Spack know about it. It’s relatively easy. First find out the URL of your mirror. If it’s a directory, you can use a file url like this:

$ spack mirror add local_filesystem file://$HOME/spack-mirror

Order of mirrors

spack mirror ad adds a line in ~/.spack/mirrors.yaml:

  local_filesystem: file:///home/veit/spack-mirror

If you want to change the order in which mirrors are searched for packages, you can edit this file and rearrange the sections: Spack searches them from top to bottom until a suitable entry is found.

Local default cache

Spack creates a cache for resources that are downloaded as part of installations. This cache is a valid Spack mirror: it uses the same directory structure and naming scheme as other Spack mirrors. The mirror is managed locally in the Spack installation directory at ~/spack/var/spack/cache/.