Guix: Difference between revisions
Line 51: | Line 51: | ||
For now, Guix is only available on nodes with x86_64 architecture (not on POWER or ARM nodes). | For now, Guix is only available on nodes with x86_64 architecture (not on POWER or ARM nodes). | ||
= | = Advanced usage examples = | ||
== Generating image to use with singularity == | == Generating image to use with singularity == | ||
Revision as of 09:11, 17 March 2021
The Guix package manager is available on Grid'5000 to provide an alternative way of installing software on nodes.
This page describes the use of Guix on Grid'5000. For additional information about Guix, see:
- The Guix website
- The Guix Reference Card
- The Guix manual, package management section
- The Guix HPC blog, with information about Guix usage in a HPC and reproducible context
How to use Guix on Grid'5000
In order to use guix on Grid'5000 you must ensure that some environment variables are correctly set:
ddelabroye@node:~$ env | grep GUIX GUIX_DAEMON_SOCKET=guix://guix.sophia.grid5000.fr GUIX_LOCPATH=/var/guix/profiles/per-user/root/guix-profile/lib/locale GUIX_PROFILE=/home/ddelabroye/.guix-profile
If those variables are not set you will have to manually source /etc/profile.d/guix.sh
:
node$ . /etc/profile.d/guix.sh
In order to initialize your .guix-profile
you might want to do a guix pull
first (be patient it will take a while the first time):
node$ guix pull
Guix is available on the standard environment directly through the guix
command.
For example:
node$ guix install hello
In order to have everything set properly you need to ensure that different PATH variable are set, you can do this by simply running:
GUIX_PROFILE=~/.guix-profile . "$GUIX_PROFILE/etc/profile"
You can then use what you just installed:
node$ hello Hello, world!
Each Grid'5000 site hosts a Guix server communicating with each other. So if you install a package on Nancy and then decide to install the same package in Grenoble the guix server from Grenoble will fetch it from Nancy.
Note: To work properly, a .guix
directory is created in your home directory (it's a Grid'5000-specific directory). If you remove it, Guix will stop working since your profile is stored there.
Warning | |
---|---|
If you have a guix profile because you have used guix before you should move it somewhere else or it won't work with the guix we provide |
Compilation
When you try to install or compile a package, the following steps happen:
- Guix first tries to fetch the compiled package from ci.guix.gnu.org
- If not found, it will try to find it on all Grid'5000 Guix servers (on other sites)
- If it still not found, it will be built on a dedicated machine on Grid'5000, which is not accessible to the users
Supported architecture
For now, Guix is only available on nodes with x86_64 architecture (not on POWER or ARM nodes).
Advanced usage examples
Generating image to use with singularity
You can use Guix to create container image for singularity with guix pack. For instance, to build an image containing emacs and bash, use:
$ guix pack -f squashfs bash emacs gcc .... /gnu/store/7pzhxrkjrfk3sh9i4dn2k61gvi1slr7g-squashfs-pack.gz.squashfs
$ singularity run /gnu/store/7pzhxrkjrfk3sh9i4dn2k61gvi1slr7g-squashfs-pack.gz.squashfs WARNING: passwd file doesn't exist in container, not updating WARNING: group file doesn't exist in container, not updating /bin/sh: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8) No runscript found in container, executing /bin/sh sh: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
$ gcc -v Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/gnu/store/xpdy9vvqym9xv7praqkwsm3gdzn2kv1p-gcc- 10.2.0/libexec/gcc/x86_64-unknown-linux-gnu/10.2.0/lto-wrapper Target: x86_64-unknown-linux-gnu Configured with: Thread model: posix Supported LTO compression algorithms: zlib gcc version 10.2.0 (GCC)
Note: If you forget the bash (or similar) package, singularity run and singularity exec will fail with an unhelpful “no such file or directory” message.
For more information of singularity usage under Grid'5000, see Singularity page.
Container
Guix container command can be used to easily isolate the execution of your program. For instance, this will instanciate an isolated container containing coreutils, gcc and procps
$ guix environment --ad-hoc --container coreutils gcc procps ddelabroye@chetemi-8 ~ [env]$ gcc -v Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/gnu/store/xpdy9vvqym9xv7praqkwsm3gdzn2kv1p-gcc- 10.2.0/libexec/gcc/x86_64-unknown-linux-gnu/10.2.0/lto-wrapper Target: x86_64-unknown-linux-gnu Configured with: Thread model: posix Supported LTO compression algorithms: zlib gcc version 10.2.0 (GCC)