Guix: Difference between revisions
Jlelaurain (talk | contribs) No edit summary |
|||
Line 15: | Line 15: | ||
'''Note''': For now, Guix is only available on Grid'5000 nodes with x86_64 architecture (not on POWER or ARM nodes). | '''Note''': For now, Guix is only available on Grid'5000 nodes with x86_64 architecture (not on POWER or ARM nodes). | ||
{{Warning|text=Too use GUIX on Grid'5000, we strongly recommend not to use the <code>guix install</code> command, which can cause side effects with the use of environment modules. We recommend using <code>guix shell</code> to set up isolated development environments (https://guix.gnu.org/manual/en/html_node/Invoking-guix-shell.html).}} | |||
= Quick start = | = Quick start = | ||
Guix is available on frontends and nodes (using standard or deployed ''-nfs'' and ''-big'' environments) directly through the <code class="command">guix</code> command. | |||
== guix shell (the recommended way)== | |||
You can find all you need here : https://guix.gnu.org/manual/en/html_node/Invoking-guix-shell.html | |||
For exemple, to use openmpi, you can do : | |||
{{Term|location=fontend|cmd=<code class="command">guix shell openmpi -- mpirun --version</code>}} | |||
It is also possible to create manifest with command below. For example with openmpi, automake and bash : | |||
{{Term|location=fontend|cmd=<code class="command">guix shell --export-manifest openmpi automake bash > manifest.scm</code>}} | |||
And we can after use this manifest to load our environment : | |||
{{Term|location=fontend|cmd=<code class="command">guix shell -m manifest.scm -- which mpirun automake</code>}} | |||
It's also possible to open a shell within this environment if desired : | |||
{{Term|location=fontend|cmd=<code class="command">guix shell -m manifest.scm -- bash</code>}} | |||
== guix install (not recommended)== | |||
<code>guix install</code> command is not recommended on Grid'5000 because it can conflicts with environnment modules. | |||
For example: | For example to install hello command : | ||
{{Term|location=fontend|cmd=<code class="command"> guix</code> install <code class="replace">hello</code>}} | {{Term|location=fontend|cmd=<code class="command"> guix</code> install <code class="replace">hello</code>}} | ||
Line 37: | Line 57: | ||
(be patient it will take a while the first time) | (be patient it will take a while the first time) | ||
To list installed packages : | |||
{{Term|location=fontend|cmd=<code class="command"> guix package -I</code>}} | |||
To remove package installed with <code>guix install</code> commmand : | |||
{{Term|location=fontend|cmd=<code class="command"> guix remove hello</code>}} | |||
= Advanced usage examples = | = Advanced usage examples = |
Revision as of 15:54, 23 June 2023
Note | |
---|---|
This page is actively maintained by the Grid'5000 team. If you encounter problems, please report them (see the Support page). Additionally, as it is a wiki page, you are free to make minor corrections yourself if needed. If you would like to suggest a more fundamental change, please contact the Grid'5000 team. |
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
Note: For now, Guix is only available on Grid'5000 nodes with x86_64 architecture (not on POWER or ARM nodes).
Warning | |
---|---|
Too use GUIX on Grid'5000, we strongly recommend not to use the |
Quick start
Guix is available on frontends and nodes (using standard or deployed -nfs and -big environments) directly through the guix
command.
guix shell (the recommended way)
You can find all you need here : https://guix.gnu.org/manual/en/html_node/Invoking-guix-shell.html
For exemple, to use openmpi, you can do :
It is also possible to create manifest with command below. For example with openmpi, automake and bash :
And we can after use this manifest to load our environment :
It's also possible to open a shell within this environment if desired :
guix install (not recommended)
guix install
command is not recommended on Grid'5000 because it can conflicts with environnment modules.
For example to install hello command :
To make the hello executable available, programs installed by Guix must be added to your PATH. You can do this by simply running:
(you can add these two commands to your .bashrc to make it persistent)
You can then use what you just installed:
> Hello, world!
To update available packages from Guix channels, use:
(be patient it will take a while the first time)
To list installed packages :
To remove package installed with guix install
commmand :
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:
.... /gnu/store/7pzhxrkjrfk3sh9i4dn2k61gvi1slr7g-squashfs-pack.gz.squashfs
The built image can be run using singularity. For instance, from a node:
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)
Singularity> 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 shell command, with --container option, can be used to easily isolate the execution of your program. For instance, this will instanciate an isolated container containing coreutils
, gcc
and procps
Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/gnu/store/j3zyz07nivflink7ix0cqasl1aa52vd8-gcc-12.2.0/libexec/gcc/x86_64-unknown-linux-gnu/12.2.0/lto-wrapper Target: x86_64-unknown-linux-gnu Configured with: Thread model: posix Supported LTO compression algorithms: zlib gcc version 12.2.0 (GCC)
Configuration details
Here are some details of Guix deployment and configuration under Grid'5000 that may help in case of problem or for your customized deployment.
Guix profile
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 |
Environment variables
In order to use Guix on Grid'5000, some environment variables are correctly set:
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
:
Package installation steps
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. (Each Grid'5000 site hosts a Guix server communicating with each other. If you install a package on Nancy and then decide to install the same package in Grenoble, it will be fetched from Nancy).
- If it still not found, it will be compiled on a dedicated machine on Grid'5000, which is not accessible to the users