* Introducing Guix to HPC at my institution @ 2021-03-15 3:12 Sébastien Lerique 2021-03-15 13:47 ` zimoun 0 siblings, 1 reply; 16+ messages in thread From: Sébastien Lerique @ 2021-03-15 3:12 UTC (permalink / raw) To: guix-science Hi all, I'm interested in introducing Guix to the HPC team at my institution. There's quite some content on the Guix-HPC blog [0], but I was wondering if people here have stories about how such conversations went for them, which arguments worked best, which didn't. As a first step I would like to discuss with the sysadmins if they would consider activating user namespaces so users can play around. Aside from [1] and [2], are there any updated discussions about this topic, e.g. why to do it or why not? Best, Sébastien [0] https://hpc.guix.info/blog/ [1] https://hpc.guix.info/blog/2017/10/using-guix-without-being-root/ [2] https://hpc.guix.info/blog/2017/09/reproducibility-and-root-privileges/ ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Introducing Guix to HPC at my institution 2021-03-15 3:12 Introducing Guix to HPC at my institution Sébastien Lerique @ 2021-03-15 13:47 ` zimoun 2021-03-16 1:54 ` Sébastien Lerique 0 siblings, 1 reply; 16+ messages in thread From: zimoun @ 2021-03-15 13:47 UTC (permalink / raw) To: Sébastien Lerique; +Cc: guix-science Hi Sébastien, On Mon, 15 Mar 2021 at 06:19, Sébastien Lerique <sl@eauchat.org> wrote: > I'm interested in introducing Guix to the HPC team at my > institution. There's quite some content on the Guix-HPC blog [0], > but I was wondering if people here have stories about how such > conversations went for them, which arguments worked best, which > didn't. Thanks for your interest! Currently, there is no such stories, AFAIK. We discussed something like that when releasing v1.2 but we had not been able to make it. Well, if you are French speaker, a two mornings* workshop is in the pipe. The announce should come really soon. The idea is sharing feedback with other users from sysadmin to researcher. *morning in metropolitan France meaning. :-) > As a first step I would like to discuss with the sysadmins if they > would consider activating user namespaces so users can play > around. Aside from [1] and [2], are there any updated discussions > about this topic, e.g. why to do it or why not? You mean to run "bundles" on computers that do not have Guix installed, right? Well, the answer "qui peut le plus peut le moins" is maybe not satisfactoring... if you have the choice to do it, you should. Even, if you have the choice to install Guix (the package manager), you also should. Cheers, simon ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Introducing Guix to HPC at my institution 2021-03-15 13:47 ` zimoun @ 2021-03-16 1:54 ` Sébastien Lerique 2021-03-16 8:06 ` zimoun 2021-03-16 9:05 ` Ludovic Courtès 0 siblings, 2 replies; 16+ messages in thread From: Sébastien Lerique @ 2021-03-16 1:54 UTC (permalink / raw) To: zimoun; +Cc: guix-science Hi Simon, Thanks for your answer! On 15 Mar 2021 at 22:47, zimoun <zimon.toutoune@gmail.com> wrote: > Well, if you are French speaker, a two mornings* workshop is in > the > pipe. The announce should come really soon. The idea is > sharing > feedback with other users from sysadmin to researcher. > > *morning in metropolitan France meaning. :-) I am French, I'll be very happy to attend if I can! I live in Japan now though, so I guess I'll miss parts. Are you planning to record the workshop? Another thought: given Ludo's position, I am imagining that Inria Bordeaux runs Guix on some of their infrastructure, is that the case? If so, can you share any details about how that came to happen? >> As a first step I would like to discuss with the sysadmins if >> they >> would consider activating user namespaces so users can play >> around. Aside from [1] and [2], are there any updated >> discussions >> about this topic, e.g. why to do it or why not? > > You mean to run "bundles" on computers that do not have Guix > installed, right? > Well, the answer "qui peut le plus peut le moins" is maybe not > satisfactoring... if you have the choice to do it, you should. > Even, > if you have the choice to install Guix (the package manager), > you also > should. Yes I meant that. They run CentOS 8, so convincing them to run a build daemon will not be as simple as `apt install guix`, but we'll see how the conversation goes :) I'll write back here in a few days once I've thought about how to present things to the sysadmins. In the meantime, any feedback on past experience is very welcome! Sébastien ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Introducing Guix to HPC at my institution 2021-03-16 1:54 ` Sébastien Lerique @ 2021-03-16 8:06 ` zimoun 2021-03-16 9:05 ` Ludovic Courtès 1 sibling, 0 replies; 16+ messages in thread From: zimoun @ 2021-03-16 8:06 UTC (permalink / raw) To: Sébastien Lerique; +Cc: guix-science Hi Sábastien, On Tue, 16 Mar 2021 at 10:54, Sébastien Lerique <sl@eauchat.org> wrote: > On 15 Mar 2021 at 22:47, zimoun <zimon.toutoune@gmail.com> wrote: > I am French, I'll be very happy to attend if I can! I live in > Japan now though, so I guess I'll miss parts. Are you planning to > record the workshop? Cool! If I remember correctly, there is some Japaneses’s users. Do not hesitate to roam on #guix (irc.freenode.net) or drop an email to help-guix. :-) We have not discussed the record of the workshop yet. Keep you in touch. Well, I do not know if it is visible all around the world, here some materials: <https://calcul.math.cnrs.fr/2021-01-anf-ust4hpc-2021.html#programme> If I may, I would recommend the Konrad’s talk because it explains why reproducibility matters for scientific reproducibility. The next talk by Ludo provides good connections with these principles and how to do in practise. I also recommend the 2 last talks by Francois Rué et Florent Pruvost. Other materials are worth to watch when speaking about reproducibility, for sure, but they are not with a Guix angle. Last, I did not run the «TPs» so I cannot tell more. Ludo’s did a nice talk at FOSDEM 2019 about distro: <https://archive.fosdem.org/2019/schedule/event/gnu_guix_new_approach_to_software_distribution/> well, he presents some arguments why and how Guix addresses the challenge. Moreover, here <https://git.savannah.gnu.org/cgit/guix/maintenance.git/tree/talks> you can find some raw materials used in various talks. Especially one at CERN in 2018 for instance: <https://cds.cern.ch/record/2316926> > Another thought: given Ludo's position, I am imagining that Inria > Bordeaux runs Guix on some of their infrastructure, is that the > case? If so, can you share any details about how that came to > happen? I cannot share how it runs at INRIA Bordeaux since I am far from my beloved South West. :-) Well, some words how it runs at my place in a small team of a Research Institute doing stuff in the biomedical field. First, I am trained in apply maths and I studied wave propagation (numerical methods, linear solver, etc.). At the time, I am using mainly Conda and some modulefiles prepared by the cluster’s team of the different institutes I were. Then, I traveled back to home and found a permanent position in this Institute. And I deal with Biologists with few skills on how to run their computations. I inherited a small cluster and couple of strong desktop machines with an history. Therefore, at the beginning, I was doing the modulefiles by hand… then I said stop! It does not scale since I am alone and I felt as reinventing the wheel: repackaging everything by hand. Conda is still an option but Conda is doing wrong at different levels. I was following Guix, as the Emacs of distro. :-) And on Dec. 2018, Ludo organized a day in Paris and I attended. Then I installed Guix at work on my main desktop and another remote strong desktop. I teach Guix to the new users and almost support only Guix. But you know how people have their habits. :-) One and half year later (2020 is off, since I was recovering from a sport’s injury), I convinced people to switch to Guix and I am in the process to reinstall the small cluster (for historical reasons, LTS and never upgraded with too old kernel and now impossible to upgrade “for free”, whatever!). On strong desktops (256G of RAM, 64 cores) running a classic distro as Ubuntu or Debian, installing Guix on the top is straightforward. I do as much as I can on the machines I am in charge. Why Guix? Beyond reproducibility, it is easy to have R packages via “guix import”, for instance. For the record, a Medical Doctor is writing their own packages. Well, people are less waiting after me and they install the packages they need. Guix works from laptop to cluster, the surprises are really mitigated compared to the other tools I know. Last, for users a bit afraid by the command line, I pack a Docker image all included for them. Now a lot of journals ask code and data and I would like to convince people in my Institute that channels.scm+manifest.scm capture and Docker is just the container, easy to move from one place to another; it has not happened yet. That’s why I investigated in things like: <https://yhetil.org/guix/86bldahz42.fsf@gmail.com> Last, Guix is a Scheme library. Aside the parenthesis which is just not an issue for a good editor, being Lisp allows to easily hack in. Once one is a bit familiar with a Lisp (Emacs Lisp, Racket, Common Lisp, whatever, not necessary Guile) by running a tutorial, it is relatively easy to read the code and understand which part does what. For instance, my first contribution after the usual packaging is fixing a minor bug in the relevance scoring function. I never understood Conda enough to be able to fix any annoyance that I had. > Yes I meant that. They run CentOS 8, so convincing them to run a > build daemon will not be as simple as `apt install guix`, but > we'll see how the conversation goes :) Good luck! Please report their feedback if they are not convinced. > I'll write back here in a few days once I've thought about how to > present things to the sysadmins. In the meantime, any feedback on > past experience is very welcome! I guess you already know the section «Clusters Deployment»: <https://hpc.guix.info/about/> Cheers, simon ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Introducing Guix to HPC at my institution 2021-03-16 1:54 ` Sébastien Lerique 2021-03-16 8:06 ` zimoun @ 2021-03-16 9:05 ` Ludovic Courtès 2021-03-18 2:26 ` Sébastien Lerique 1 sibling, 1 reply; 16+ messages in thread From: Ludovic Courtès @ 2021-03-16 9:05 UTC (permalink / raw) To: Sébastien Lerique; +Cc: zimoun, guix-science Hi Sébastien, Sébastien Lerique <sl@eauchat.org> skribis: > Another thought: given Ludo's position, I am imagining that Inria > Bordeaux runs Guix on some of their infrastructure, is that the > case? If so, can you share any details about how that came to happen? I’ve been working with HPC people at Inria and back then I was working on Guix in my spare time. The HPC folks had been using “environment modules” forever but were looking for a solution that would provide automation, primarily, and optionally some kind of reproducibility. They invested into Spack first (actually based on my recommendation; at the time I wasn’t sure Guix could meet all their requirements) and grew dissatisfied after a couple of years, in particular because reproducibility became a more important factor for them. It’s also about the time when Ricardo and I published <https://hal.inria.fr/hal-01161771/en> (Ricardo already had experience with Guix in HPC and surely has an interesting story to share :-)). We kept discussing these matters, together with sysadmins of the local cluster, who were also looking for a solution they could offer users in addition to modules. Eventually Guix was installed on that cluster and local HPC teams got into it at that point. That’s my story! :-) It’s hopefully not the end of the story though. There are other clusters listed at <https://hpc.guix.info/about/> that provide Guix. We’re discussing with others in France, but these things take time… > Yes I meant that. They run CentOS 8, so convincing them to run a build > daemon will not be as simple as `apt install guix`, but we'll see how > the conversation goes :) Tools like modules, Conda, Spack, and “containers” (Docker, Singularity) are quite entrenched now in HPC. All these tools are relatively new so proposing yet another tool can be a hard sell. Also, cluster sysadmins tend to be conservative and don’t like the idea of having a “daemon running as root”. But my impression is that there’s increasing awareness of the limitations of these tools. It used to be that people would disagree when we said in talks that Docker/Singularity images are not reproducible; now this is more widely understood. Likewise for the deployment issues around Jupyter and workflow languages. And there’s not a zillion tools out there to address these issues. :-) Good luck with your endeavors! Ludo’. ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Introducing Guix to HPC at my institution 2021-03-16 9:05 ` Ludovic Courtès @ 2021-03-18 2:26 ` Sébastien Lerique 2021-03-26 8:22 ` Sébastien Lerique 0 siblings, 1 reply; 16+ messages in thread From: Sébastien Lerique @ 2021-03-18 2:26 UTC (permalink / raw) To: Ludovic Courtès; +Cc: zimoun, guix-science Hi Ludo, Simon, Thanks for these very interesting stories! That's a lot of resources too, I will be watching some of the talks you linked to over the coming days. I'm currently contacting people who might already feel a strong need for what Guix can offer, to see what would be the best way to introduce the topic to the sysadmins. Who knows, maybe my institution can also support the development of Guix in some way :) Will be back once I have some progress or more questions. Best, Sébastien On 16 Mar 2021 at 18:05, Ludovic Courtès <ludovic.courtes@inria.fr> wrote: > Hi Sébastien, > > Sébastien Lerique <sl@eauchat.org> skribis: > >> Another thought: given Ludo's position, I am imagining that >> Inria >> Bordeaux runs Guix on some of their infrastructure, is that the >> case? If so, can you share any details about how that came to >> happen? > > I’ve been working with HPC people at Inria and back then I was > working > on Guix in my spare time. The HPC folks had been using > “environment > modules” forever but were looking for a solution that would > provide > automation, primarily, and optionally some kind of > reproducibility. > > They invested into Spack first (actually based on my > recommendation; at > the time I wasn’t sure Guix could meet all their requirements) > and grew > dissatisfied after a couple of years, in particular because > reproducibility became a more important factor for them. It’s > also > about the time when Ricardo and I published > <https://hal.inria.fr/hal-01161771/en> (Ricardo already had > experience > with Guix in HPC and surely has an interesting story to share > :-)). > > We kept discussing these matters, together with sysadmins of the > local > cluster, who were also looking for a solution they could offer > users in > addition to modules. Eventually Guix was installed on that > cluster and > local HPC teams got into it at that point. > > That’s my story! :-) > > It’s hopefully not the end of the story though. There are other > clusters listed at <https://hpc.guix.info/about/> that provide > Guix. > We’re discussing with others in France, but these things take > time… > >> Yes I meant that. They run CentOS 8, so convincing them to run >> a build >> daemon will not be as simple as `apt install guix`, but we'll >> see how >> the conversation goes :) > > Tools like modules, Conda, Spack, and “containers” (Docker, > Singularity) > are quite entrenched now in HPC. All these tools are relatively > new so > proposing yet another tool can be a hard sell. > > Also, cluster sysadmins tend to be conservative and don’t like > the idea > of having a “daemon running as root”. > > But my impression is that there’s increasing awareness of the > limitations of these tools. It used to be that people would > disagree > when we said in talks that Docker/Singularity images are not > reproducible; now this is more widely understood. Likewise for > the > deployment issues around Jupyter and workflow languages. > > And there’s not a zillion tools out there to address these > issues. :-) > > Good luck with your endeavors! > > Ludo’. ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Introducing Guix to HPC at my institution 2021-03-18 2:26 ` Sébastien Lerique @ 2021-03-26 8:22 ` Sébastien Lerique 2021-03-29 12:03 ` Ludovic Courtès 0 siblings, 1 reply; 16+ messages in thread From: Sébastien Lerique @ 2021-03-26 8:22 UTC (permalink / raw) To: guix-science; +Cc: Ludovic Courtès, zimoun Hi Ludo, Simon, all, > Will be back once I have some progress or more questions. It turns out the HPC cluster I have access to has user namespaces activated \o/, so I'm looking into getting things running as an unpriviliged user to show other people how useful Guix can be (before approaching higher levels in the administration). I have been through the following notes: https://hpc.guix.info/blog/2017/09/reproducibility-and-root-privileges/ https://hpc.guix.info/blog/2017/10/using-guix-without-being-root/ http://issues.guix.gnu.org/34494 and am now following Guix's binary installation inside a user namespace. After decompressing the binary distribution of guix inside `~/local-guix`, my naïve next step was `unshare -mrf chroot ~/local-guix gnu/store/mmhimfwmmidf09jw1plw3aw1g1zn2nkh-bash-static-5.0.16/bin/bash`. But my knowledge of linux namespaces is hindering my next steps :). A few questions: - after setting $GUIX_PROFILE and sourcing `/root/.config/guix/current`, running `guix` warns with: GC Warning: pthread_getattr_np or pthread_attr_getstack failed for main thread GC Warning: Couldn't read /proc/stat The first warning I don't know what to do with. About the second: should I be binding `/proc` somehow? - is it possible to create build users inside the user-namespaced chroot? - last but not least, how would I go about sharing this setup with other users on the cluster? Ideally I would like to have a non-priviliged build daemon that other users can call on. (Is there such a thing as kernel group namespaces?) Is this the right way to go for running guix without being root, or is there a better way? Thanks for any guidance you might provide! Best, Sébastien ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Introducing Guix to HPC at my institution 2021-03-26 8:22 ` Sébastien Lerique @ 2021-03-29 12:03 ` Ludovic Courtès 2021-03-30 1:54 ` Sébastien Lerique 0 siblings, 1 reply; 16+ messages in thread From: Ludovic Courtès @ 2021-03-29 12:03 UTC (permalink / raw) To: Sébastien Lerique; +Cc: guix-science, zimoun Hi Sébastien, Sébastien Lerique <sl@eauchat.org> skribis: > It turns out the HPC cluster I have access to has user namespaces > activated \o/, so I'm looking into getting things running as an > unpriviliged user to show other people how useful Guix can be (before > approaching higher levels in the administration). Good! > and am now following Guix's binary installation inside a user > namespace. After decompressing the binary distribution of guix > inside `~/local-guix`, my naïve next step was `unshare -mrf chroot > ~/local-guix > gnu/store/mmhimfwmmidf09jw1plw3aw1g1zn2nkh-bash-static-5.0.16/bin/bash`. Instead of installing the “regular” binary tarball inside a namespace, it might be easier to create a tarball like so: guix pack -RR -S /bin=bin -S /etc=etc guix bash … and to unpack the resulting tarball. From there, you can run ./bin/sh to get a shell that “sees” /gnu/store. You can then run: . ./etc/profile And then, you should be able to run the daemon, like so: export GUIX_STATE_DIRECTORY=$HOME/.local/var/guix guix-daemon --disable-chroot & (Adapted from <https://lists.gnu.org/archive/html/guix-devel/2018-05/msg00139.html>.) Does that work for you? > But my knowledge of linux namespaces is hindering my next steps :). A > few questions: > > - after setting $GUIX_PROFILE and sourcing > `/root/.config/guix/current`, running `guix` warns with: > > GC Warning: pthread_getattr_np or pthread_attr_getstack failed for > main thread > GC Warning: Couldn't read /proc/stat > > The first warning I don't know what to do with. About the second: > should I be binding `/proc` somehow? Yes, you should expose /proc. The wrappers created by ‘guix pack -RR’ in the example above bind-mount everything + /gnu/store, such that you can’t tell the difference. > - is it possible to create build users inside the user-namespaced > chroot? No: you still have a single UID at hand, so there’s no way to allocate new ones. > - last but not least, how would I go about sharing this setup with > other users on the cluster? Ideally I would like to have a > non-priviliged build daemon that other users can call on. (Is there > such a thing as kernel group namespaces?) It’s not really sharable. To share it, you would need some sort of a shared trusted “proxy”; that’s precisely what guix-daemon is in normal multi-user setups. HTH! Ludo’. ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Introducing Guix to HPC at my institution 2021-03-29 12:03 ` Ludovic Courtès @ 2021-03-30 1:54 ` Sébastien Lerique 2021-03-30 7:21 ` Ludovic Courtès 0 siblings, 1 reply; 16+ messages in thread From: Sébastien Lerique @ 2021-03-30 1:54 UTC (permalink / raw) To: Ludovic Courtès; +Cc: guix-science, zimoun Hi Ludo, Thanks for the help! On 29 Mar 2021 at 21:03, Ludovic Courtès <ludovic.courtes@inria.fr> wrote: > Instead of installing the “regular” binary tarball inside a > namespace, > it might be easier to create a tarball like so: > > guix pack -RR -S /bin=bin -S /etc=etc guix bash > > … and to unpack the resulting tarball. > > From there, you can run ./bin/sh to get a shell that “sees” > /gnu/store. > You can then run: > > . ./etc/profile > > And then, you should be able to run the daemon, like so: > > export GUIX_STATE_DIRECTORY=$HOME/.local/var/guix > guix-daemon --disable-chroot & > > (Adapted from > <https://lists.gnu.org/archive/html/guix-devel/2018-05/msg00139.html>.) > > Does that work for you? Thanks! I `guix pack`'ed with a single -R since I shouldn't need PRoot, and had to add export GUIX_LOG_DIRECTORY=$HOME/.local/var/log to the environment setup in order to start guix-daemon. Then `guix install hello` warned at the beginning with user with UID 7352 not found and later failed with Backtrace: In ice-9/boot-9.scm: 1736:10 6 (with-exception-handler _ _ #:unwind? _ # _) In unknown file: 5 (apply-smob/0 #<thunk 7f5a32f85520>) In ice-9/boot-9.scm: 718:2 4 (call-with-prompt _ _ #<procedure default-prompt-handle…>) In ice-9/eval.scm: 619:8 3 (_ #(#(#<directory (guile-user) 7f5a32f88c80>))) In guix/ui.scm: 2164:12 2 (run-guix-command _ . _) In guix/scripts/offload.scm: 782:21 1 (guix-offload "x86_64-linux" "0" "1" "0") In unknown file: 0 (getpw 7352) ERROR: In procedure getpw: In procedure getpw: entry not found killing process 9106 guix install: error: unexpected EOF reading a line I'm guessing some part on the non-namespaced uids are leaking into the user namespace? Another problem appeared for substitutes (as 'guix install hello' was rebuilding the world): $ guix archive --authorize < \ /gnu/store/xb4szjambyi52bpnkjv080g2mlfqqpp0-profile/share/guix/ci.guix.gnu.org.pub guix archive: error: mkdir: Permission denied I quickly went through `guix/scripts/pack.scm` and `gnu/packages/aux-files/run-in-namespace.c` to try and understand what `guix pack -R` does, but it looks like I need to learn more about namespaces before I can digest that. My high-level understanding from poking around is that the binaries from `guix pack -R` run inside a namespace where /gnu is bind-mounted (along with /proc, /dev, /sys, ...), but the rest of the host filesystem is still available, and other host processes can also be seen. Then, anything I run from inside the `guix pack`'ed bash inherits that namespace, which is what makes guix-daemon work. If this is incorrect, could you maybe give a high-level overview of what it does? The documentation is a bit scarce on the topic (or I didn't find it). I'm also wondering why `guix-daemon` must be invoked with `--disable-chroot`. Doesn't that make the reproducibility guarantees more brittle (according to the docs)? >> - is it possible to create build users inside the >> user-namespaced >> chroot? > > No: you still have a single UID at hand, so there’s no way to > allocate > new ones. > >> - last but not least, how would I go about sharing this setup >> with >> other users on the cluster? Ideally I would like to have a >> non-priviliged build daemon that other users can call on. (Is >> there >> such a thing as kernel group namespaces?) > > It’s not really sharable. To share it, you would need some sort > of a > shared trusted “proxy”; that’s precisely what guix-daemon is in > normal > multi-user setups. Ok. My use cases here are: - trying to provide a setup that others can more-or-less easily try out to get a feel for Guix on the HPC cluster (if possible without duplicating /gnu/store), thus creating interest and user support for later presenting the case to sysadmins / university administration; - getting to know the exact requirements that I would have to convince sysadmins to agree to, with rationales/explanations for the hardest-to-obtain. Getting them to run guix-daemon as root is probably a lost case, so I'd like to explore everything else that is possible. So let's transform my two questions above into the two following: 1. what would be the list of requirements that explain why guix-daemon must run as root? What does each of those requirements accomplish? 2. knowing that my environment has user namespaces (and knowing that that may not be enough), would it be possible to set up guix-daemon as non-root with the assistance of a sysadmin (so say with root access during setup), with build users and all, and have it provide identical guarantees to a guix-daemon running as root? If not, why not, and could we work around that? Thanks again for all the help! Sébastien ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Introducing Guix to HPC at my institution 2021-03-30 1:54 ` Sébastien Lerique @ 2021-03-30 7:21 ` Ludovic Courtès 2021-03-31 5:23 ` Sébastien Lerique 0 siblings, 1 reply; 16+ messages in thread From: Ludovic Courtès @ 2021-03-30 7:21 UTC (permalink / raw) To: Sébastien Lerique; +Cc: guix-science, zimoun Hi Sébastien, Sébastien Lerique <sl@eauchat.org> skribis: > On 29 Mar 2021 at 21:03, Ludovic Courtès <ludovic.courtes@inria.fr> > wrote: > >> Instead of installing the “regular” binary tarball inside a >> namespace, >> it might be easier to create a tarball like so: >> >> guix pack -RR -S /bin=bin -S /etc=etc guix bash >> >> … and to unpack the resulting tarball. [...] > Thanks! I `guix pack`'ed with a single -R since I shouldn't need > PRoot, and had to add > > export GUIX_LOG_DIRECTORY=$HOME/.local/var/log OK. > to the environment setup in order to start guix-daemon. Then `guix > install hello` warned at the beginning with > > user with UID 7352 not found > > and later failed with > > Backtrace: > In ice-9/boot-9.scm: > 1736:10 6 (with-exception-handler _ _ #:unwind? _ # _) > In unknown file: > 5 (apply-smob/0 #<thunk 7f5a32f85520>) > In ice-9/boot-9.scm: > 718:2 4 (call-with-prompt _ _ #<procedure > default-prompt-handle…>) > In ice-9/eval.scm: > 619:8 3 (_ #(#(#<directory (guile-user) 7f5a32f88c80>))) > In guix/ui.scm: > 2164:12 2 (run-guix-command _ . _) > In guix/scripts/offload.scm: > 782:21 1 (guix-offload "x86_64-linux" "0" "1" "0") > In unknown file: > 0 (getpw 7352) > > ERROR: In procedure getpw: > In procedure getpw: entry not found Hmm could it be that nscd is not running, and that /etc/nsswitch.conf specifies a “non-standard” NSS plugin, such as ‘sssd’? https://guix.gnu.org/manual/en/html_node/Application-Setup.html#Name-Service-Switch-1 Does ‘guix install hello --no-offload’ work around the issue? > Another problem appeared for substitutes (as 'guix install hello' was > rebuilding the world): > > $ guix archive --authorize < \ > /gnu/store/xb4szjambyi52bpnkjv080g2mlfqqpp0-profile/share/guix/ci.guix.gnu.org.pub > guix archive: error: mkdir: Permission denied I guess it’s trying to write to /etc/guix. You probably need to set GUIX_STATE_DIRECTORY=$HOME/.local/var/guix here. > I quickly went through `guix/scripts/pack.scm` and > `gnu/packages/aux-files/run-in-namespace.c` to try and understand > what `guix pack -R` does, but it looks like I need to learn more about > namespaces before I can digest that. My high-level understanding from > poking around is that the binaries from `guix pack -R` run inside a > namespace where /gnu is bind-mounted (along with /proc, /dev, /sys, > ...), but the rest of the host filesystem is still available, and > other host processes can also be seen. Then, anything I run from > inside the `guix pack`'ed bash inherits that namespace, which is what > makes guix-daemon work. Correct! > If this is incorrect, could you maybe give a high-level overview of > what it does? The documentation is a bit scarce on the topic (or I > didn't find it). The design and implementation are documented in blog posts: https://guix.gnu.org/en/blog/2018/tarballs-the-ultimate-container-image-format/ https://hpc.guix.info/blog/2020/05/faster-relocatable-packs-with-fakechroot/ > I'm also wondering why `guix-daemon` must be invoked with > `--disable-chroot`. Doesn't that make the reproducibility > guarantees more brittle (according to the docs)? True, but I think (?) that’s currently unavoidable in this setup… though I forget why. You might want to try without ‘--disable-chroot’. > Ok. My use cases here are: > - trying to provide a setup that others can more-or-less easily try > out to get a feel for Guix on the HPC cluster (if possible without > duplicating /gnu/store), thus creating interest and user support for > later presenting the case to sysadmins / university administration; Safe sharing among users is not possible without a daemon coordinating accesses to the store and acting as a trusted proxy. > - getting to know the exact requirements that I would have to > convince sysadmins to agree to, with rationales/explanations for > the hardest-to-obtain. Getting them to run guix-daemon as root is > probably a lost case, so I'd like to explore everything else that is > possible. Yeah. > So let's transform my two questions above into the two following: > > 1. what would be the list of requirements that explain why guix-daemon > must run as root? What does each of those requirements accomplish? I think this article remains relevant: https://hpc.guix.info/blog/2017/09/reproducibility-and-root-privileges/ > 2. knowing that my environment has user namespaces (and knowing that > that may not be enough), would it be possible to set up guix-daemon as > non-root with the assistance of a sysadmin (so say with root access > during setup), with build users and all, and have it provide identical > guarantees to a guix-daemon running as root? If not, why not, and > could we work around that? Good question. It should be possible to make the daemon run as non-root; that’s what the trick with the ‘guix pack -R’ wrapper should achieve, but it could also be a built-in capability. Food for thought! Thanks, Ludo’. ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Introducing Guix to HPC at my institution 2021-03-30 7:21 ` Ludovic Courtès @ 2021-03-31 5:23 ` Sébastien Lerique 2021-04-01 8:35 ` Ludovic Courtès 0 siblings, 1 reply; 16+ messages in thread From: Sébastien Lerique @ 2021-03-31 5:23 UTC (permalink / raw) To: Ludovic Courtès; +Cc: guix-science, zimoun Hi Ludo, zimoun, all, Thanks again for your answers, for the links to documentation, and for the support on IRC! > Hmm could it be that nscd is not running, and that > /etc/nsswitch.conf > specifies a “non-standard” NSS plugin, such as ‘sssd’? > > https://guix.gnu.org/manual/en/html_node/Application-Setup.html#Name-Service-Switch-1 > > Does ‘guix install hello --no-offload’ work around the issue? Yes, that solves the issue! >> $ guix archive --authorize < \ >> /gnu/store/xb4szjambyi52bpnkjv080g2mlfqqpp0-profile/share/guix/ci.guix.gnu.org.pub >> guix archive: error: mkdir: Permission denied > > I guess it’s trying to write to /etc/guix. You probably need to > set > GUIX_STATE_DIRECTORY=$HOME/.local/var/guix here. Yes, that would be GUIX_CONFIGURATION_DIRECTORY. As discussed on IRC though, /etc in the tarball is a symlink to the profile, so neither `guix archive` nor I can create /etc/guix. So I resorted to creating a `/etc-guix` folder which I use for GUIX_CONFIGURATION_DIRECTORY. >> 2. knowing that my environment has user namespaces (and knowing >> that >> that may not be enough), would it be possible to set up >> guix-daemon as >> non-root with the assistance of a sysadmin (so say with root >> access >> during setup), with build users and all, and have it provide >> identical >> guarantees to a guix-daemon running as root? If not, why not, >> and >> could we work around that? > > Good question. It should be possible to make the daemon run as > non-root; that’s what the trick with the ‘guix pack -R’ wrapper > should > achieve, but it could also be a built-in capability. Yes, I'd be very happy to try and build that once things work! So, to summarize the current status, here is what I do: On my Guix System (`deigo` is my ssh config for the cluster): $ scp (guix pack -R -S /bin=bin -S /etc=etc guix bash) deigo:guix-pack.tar.gz Then on deigo: $ mkdir -p /a-working-directory/guix $ cd /a-working-directory/guix $ tar xzf ~/guix-pack.tar.gz $ mkdir etc-guix $ bin/bash $ . etc/profile $ export GUIX_STATE_DIRECTORY=$(pwd)/var/guix $ export GUIX_LOG_DIRECTORY=$(pwd)/var/log $ export GUIX_CONFIGURATION_DIRECTORY=$(pwd)/etc-guix Then the fun starts. There are 4 different cases and problems, depending on whether I use substitutes or not, and on whether `/a-working-directory` is an NFS share or a local mount. Case 1: with substitutes, on a local (non-NFS) folder ----------------------------------------------------- $ guix archive --authorize < bin/../share/guix/ci.guix.gnu.org.pub $ guix-daemon --disable-chroot & $ guix install hello [... dowloading ...] unexpected substituter message 'defining `GUIX_LOCPATH', along these lines: guix install glibc-utf8-locales export GUIX_LOCPATH="$HOME/.guix-profile/lib/locale" See the "Application Setup" section in the manual, for more info. ' I think this is https://issues.guix.gnu.org/45166. Using instead `guix pack -R -S /bin=bin -S /etc=etc -S /lib=lib guix bash glibc-utf8-locales`, and: $ export GUIX_LOCPATH=$(pwd)/lib/locale $ ls $GUIX_LOCPATH/ 2.31 seems to start working, but then `guix install hello` fails with the same error, and: $ ls $GUIX_LOCPATH/ ls: cannot access '/tmp/sebastien-lerique/guix/lib/locale/': No such file or directory Is it possible that glibc-utf8-locales gets garbage-collected? Case 2: from source (no substitutes), on a local (non-NFS) folder ----------------------------------------------------------------- No need for the locale fix here (another bug appears before that): $ guix-daemon --disable-chroot & # --no-offload works around the missing nscd problem; up to now this # doesn't seem necessary when using substitutes $ guix install hello --no-offload [... builds for a while ...] build of /gnu/store/pkn1w1q3xkn273kpmggc4dnq6n6hr9jy-bzip2-mesboot-1.0.8.drv failed The build log for bzip2-mesboot ends with: tcc -ar cq libbz2.a blocksort.o huffman.o crctable.o randtable.o compress.o decompress.o bzlib.o ranlib libbz2.a /gnu/store/prkqai3zwh3shlqpll6xyncmmqpj49dd-gash-boot-0.2.0/bin/sh: ranlib: Command not found. make: *** [libbz2.a] Error 127 command "make" "CC=tcc -I ." "AR=tcc -ar" "bzip2" "PREFIX=/gnu/store/s94hyrv1vgllxir5niiyzfc9g80l5kcd-bzip2-mesboot-1.0.8" failed with status 2 Is this new and should be reported as a bug? Should binutils-mesboot0 be part of bzip2-mesboot's inputs? (I haven't learned about the boostrapping mechanism yet.) Case 3: with substitutes, on an NFS share ----------------------------------------- Again no need for the locale fix (another bug appears before that): $ guix archive --authorize < bin/../share/guix/ci.guix.gnu.org.pub $ guix-daemon --disable-chroot & $ guix install hello [... downloading ...] guix install: error: cannot unlink `/gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31/lib': Directory not empty so checking: $ ls -lA /gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31/lib total 3840 -r-xr-xr-x 1 sebastien-lerique froeseuni 64832 Jan 1 1970 .nfs000000000172caa5000054bd [... more .nfs files ...] $ lsof -f -- /gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31/lib/.nfs000000000172caa5000054bd` reports: [... some warnings ...] COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME bash 25616 sebastien-lerique mem REG 0,52 64832 24300197 /gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31/lib/.nfs000000000172caa5000054bd guix-daem 25934 sebastien-lerique mem REG 0,52 64832 24300197 /gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31/lib/.nfs000000000172caa5000054bd Not sure what's going wrong here. Maybe it's more garbage-collecting (as in case 1), failing because of an nfs nuance or bug? Case 4: from source (no substitutes), on an NFS share ----------------------------------------------------- Fails in the exact same way as Case 2. I have no idea how to make progress in any of these cases (except the bzip2-mesboot one maybe), so any input on these different problems is very welcome :) Thanks and happy hacking! Sébastien ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Introducing Guix to HPC at my institution 2021-03-31 5:23 ` Sébastien Lerique @ 2021-04-01 8:35 ` Ludovic Courtès 2021-04-01 14:34 ` Sébastien Lerique 0 siblings, 1 reply; 16+ messages in thread From: Ludovic Courtès @ 2021-04-01 8:35 UTC (permalink / raw) To: Sébastien Lerique; +Cc: guix-science, zimoun Howdy! Sébastien Lerique <sl@eauchat.org> skribis: > Case 1: with substitutes, on a local (non-NFS) folder > ----------------------------------------------------- > > $ guix archive --authorize < bin/../share/guix/ci.guix.gnu.org.pub > $ guix-daemon --disable-chroot & > $ guix install hello > [... dowloading ...] > unexpected substituter message 'defining `GUIX_LOCPATH', along > these lines: > > guix install glibc-utf8-locales > export GUIX_LOCPATH="$HOME/.guix-profile/lib/locale" > > See the "Application Setup" section in the manual, for more info. > ' > > I think this is https://issues.guix.gnu.org/45166. > > Using instead `guix pack -R -S /bin=bin -S /etc=etc -S /lib=lib guix > bash glibc-utf8-locales`, and: > > $ export GUIX_LOCPATH=$(pwd)/lib/locale > $ ls $GUIX_LOCPATH/ > 2.31 > > seems to start working, but then `guix install hello` fails with the > same error, and: > > $ ls $GUIX_LOCPATH/ > ls: cannot access '/tmp/sebastien-lerique/guix/lib/locale/': No > such file or directory > > Is it possible that glibc-utf8-locales gets garbage-collected? Can you run guix-daemon like so? LC_ALL=en_US.utf8 guix-daemon --disable-chroot & The “unexpected substitute message” thing is a bug: it turns out that stderr of ‘guix substitute’ is consumed directly by the daemon at this point, which it shouldn’t (similar to the issue fixed by ee3226e9d54891c7e696912245e4904435be191c). > Case 2: from source (no substitutes), on a local (non-NFS) folder > ----------------------------------------------------------------- > > No need for the locale fix here (another bug appears before that): > > $ guix-daemon --disable-chroot & > # --no-offload works around the missing nscd problem; up to now > this > # doesn't seem necessary when using substitutes > $ guix install hello --no-offload > [... builds for a while ...] > build of > /gnu/store/pkn1w1q3xkn273kpmggc4dnq6n6hr9jy-bzip2-mesboot-1.0.8.drv > failed > > The build log for bzip2-mesboot ends with: > > tcc -ar cq libbz2.a blocksort.o huffman.o crctable.o randtable.o > compress.o decompress.o bzlib.o > ranlib libbz2.a > /gnu/store/prkqai3zwh3shlqpll6xyncmmqpj49dd-gash-boot-0.2.0/bin/sh: > ranlib: Command not found. > make: *** [libbz2.a] Error 127 > command "make" "CC=tcc -I ." "AR=tcc -ar" "bzip2" > "PREFIX=/gnu/store/s94hyrv1vgllxir5niiyzfc9g80l5kcd-bzip2-mesboot-1.0.8" > failed with status 2 > > Is this new and should be reported as a bug? Should binutils-mesboot0 > be part of bzip2-mesboot's inputs? (I haven't learned about the > boostrapping mechanism yet.) The problem is that ‘--disable-chroot’ is a bit of the wild west: build processes can access the whole file system and what you do as a user can interfere with them. It could be that the bzip2 build failure above is just that: the build process picks something from /usr/lib or /usr/bin, and that breaks everything. I think ‘--disable-chroot’ is OK if you’re going to use substitutes for almost everything. Otherwise, it’s not good. Your use case calls for built-in support; that way, the daemon could take still advantage of user namespaces to set up a chroot and all. > Case 3: with substitutes, on an NFS share > ----------------------------------------- > > Again no need for the locale fix (another bug appears before that): > > $ guix archive --authorize < bin/../share/guix/ci.guix.gnu.org.pub > $ guix-daemon --disable-chroot & > $ guix install hello > [... downloading ...] > guix install: error: cannot unlink > `/gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31/lib': > Directory not empty > > so checking: > > $ ls -lA /gnu/store/fa6wj5bxkj5ll1d7292a70knmyl7a0cr-glibc-2.31/lib > total 3840 > -r-xr-xr-x 1 sebastien-lerique froeseuni 64832 Jan 1 1970 > .nfs000000000172caa5000054bd > [... more .nfs files ...] Ah yes, that’s a known issue with NFS. I’m not aware of any workaround. Thanks, Ludo’. ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Introducing Guix to HPC at my institution 2021-04-01 8:35 ` Ludovic Courtès @ 2021-04-01 14:34 ` Sébastien Lerique 2021-04-10 20:43 ` Ludovic Courtès 0 siblings, 1 reply; 16+ messages in thread From: Sébastien Lerique @ 2021-04-01 14:34 UTC (permalink / raw) To: Ludovic Courtès; +Cc: guix-science, zimoun Hello! On 01 Apr 2021 at 17:35, Ludovic Courtès <ludovic.courtes@inria.fr> wrote: >> Case 1: with substitutes, on a local (non-NFS) folder >> ----------------------------------------------------- >> [snip] > > Can you run guix-daemon like so? > > LC_ALL=en_US.utf8 guix-daemon --disable-chroot & Then: $ guix install hello --no-offload [... dowloading ...] 13.3 MB will be downloaded substitution of /gnu/store/395pvii4bcjqxvdv7h0drq10lxi01sv1-glibc-utf8-locales-2.31 failed guix install: error: some substitutes for the outputs of derivation `/gnu/store/b2jkmg71m0dpf3i6hvskb32ra48lls28-glibc-utf8-locales-2.31.drv' failed (usually happens due to networking issues); try `--fallback' to build derivation from source Restarting from scratch and using `--fallback` then leads to the bzip2-mesboot failure of Case 2. If, instead of resarting from scratch, I just run again `guix install hello --no-offload`, I then get: guix install: error: got unexpected path `/gnu/store/pwcp239kjf7lnj5i4lkdzcfcxwcfyk72-bash-minimal-5.0.16/bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.utf8)' from substituter And indeed once again lib/locale is a dead symlink, as the glibc-utf8-locales packaged in my tar.gz has been removed from the store. Why is that? I had a look through the same commands with --debug=4 or 5, but to no insight (aside from seeing locale derivations being deleted at some stage). I posted the end of the log produced by `guix install hello --no-offload --debug=4`, starting with the failed substitution, here: https://paste.debian.net/1191991/ . > The “unexpected substitute message” thing is a bug: it turns out > that > stderr of ‘guix substitute’ is consumed directly by the daemon > at this > point, which it shouldn’t (similar to the issue fixed by > ee3226e9d54891c7e696912245e4904435be191c). Ok, I'll file a bug for that then :) >> Case 2: from source (no substitutes), on a local (non-NFS) >> folder >> ----------------------------------------------------------------- >> [snip] > > The problem is that ‘--disable-chroot’ is a bit of the wild > west: build > processes can access the whole file system and what you do as a > user can > interfere with them. > > It could be that the bzip2 build failure above is just that: the > build > process picks something from /usr/lib or /usr/bin, and that > breaks > everything. > > I think ‘--disable-chroot’ is OK if you’re going to use > substitutes for > almost everything. Otherwise, it’s not good. Your use case > calls for > built-in support; that way, the daemon could take still > advantage of > user namespaces to set up a chroot and all. I see. By the way, starting guix-daemon without `--disable-chroot` (and without substitutes) leads to: guix build: error: cannot change ownership of ‘/gnu/store/0dn61y4n8ig333b23hmc80hvlcy8gdli-guile-bootstrap-2.0.drv.chroot’: Invalid argument so --disable-chroot is indeed still necessary! I am interested in working on this built-in support once I get the substitutes case working (although I will probably come ask for guidance for that) :) Thanks! Sébastien ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Introducing Guix to HPC at my institution 2021-04-01 14:34 ` Sébastien Lerique @ 2021-04-10 20:43 ` Ludovic Courtès 2021-04-12 1:21 ` Sébastien Lerique 0 siblings, 1 reply; 16+ messages in thread From: Ludovic Courtès @ 2021-04-10 20:43 UTC (permalink / raw) To: Sébastien Lerique; +Cc: guix-science, zimoun Hi Sébastien, Sébastien Lerique <sl@eauchat.org> skribis: > If, instead of resarting from scratch, I just run again `guix install > hello --no-offload`, I then get: > > guix install: error: got unexpected path > `/gnu/store/pwcp239kjf7lnj5i4lkdzcfcxwcfyk72-bash-minimal-5.0.16/bin/bash: > warning: setlocale: LC_ALL: cannot change locale (en_US.utf8)' from > substituter I (re-)fixed this particular problem here: https://issues.guix.gnu.org/46362 So if you create a pack containing the ‘guix’ package from current master, this problem should no longer be there. Ludo’. ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Introducing Guix to HPC at my institution 2021-04-10 20:43 ` Ludovic Courtès @ 2021-04-12 1:21 ` Sébastien Lerique 2021-04-12 12:43 ` Ludovic Courtès 0 siblings, 1 reply; 16+ messages in thread From: Sébastien Lerique @ 2021-04-12 1:21 UTC (permalink / raw) To: Ludovic Courtès; +Cc: guix-science, zimoun Hi Ludo, On 11 Apr 2021 at 05:43, Ludovic Courtès <ludo@gnu.org> wrote: >> If, instead of resarting from scratch, I just run again `guix >> install >> hello --no-offload`, I then get: >> >> guix install: error: got unexpected path >> `/gnu/store/pwcp239kjf7lnj5i4lkdzcfcxwcfyk72-bash-minimal-5.0.16/bin/bash: >> warning: setlocale: LC_ALL: cannot change locale (en_US.utf8)' >> from >> substituter > > I (re-)fixed this particular problem here: > > https://issues.guix.gnu.org/46362 > > So if you create a pack containing the ‘guix’ package from > current > master, this problem should no longer be there. Success! With substitutes: $ guix install hello --no-offload [... installs ...] $ GUIX_PROFILE="/home/s/sebastien-lerique/.guix-profile" $ . "$GUIX_PROFILE/etc/profile" $ hello Hello, world! Then my next steps are to try out a few more things, see if some builds work (based on existing substitutes, not from scratch), gather some interest here now that I can demo, and then come back to explore builtin support for a non-root shared build daemon. Thank you!! Sébastien ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: Introducing Guix to HPC at my institution 2021-04-12 1:21 ` Sébastien Lerique @ 2021-04-12 12:43 ` Ludovic Courtès 0 siblings, 0 replies; 16+ messages in thread From: Ludovic Courtès @ 2021-04-12 12:43 UTC (permalink / raw) To: Sébastien Lerique; +Cc: guix-science, zimoun Hi, Sébastien Lerique <sl@eauchat.org> skribis: > Success! With substitutes: > > $ guix install hello --no-offload > [... installs ...] > $ GUIX_PROFILE="/home/s/sebastien-lerique/.guix-profile" > $ . "$GUIX_PROFILE/etc/profile" > $ hello > Hello, world! Yay! (Of course, “echo hello world” would have been simpler but not as as fun. :-)) > Then my next steps are to try out a few more things, see if some > builds work (based on existing substitutes, not from scratch), > gather some interest here now that I can demo, and then come back to > explore builtin support for a non-root shared build daemon. Awesome, let us know how it goes! Ludo’. ^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2021-04-12 12:43 UTC | newest] Thread overview: 16+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2021-03-15 3:12 Introducing Guix to HPC at my institution Sébastien Lerique 2021-03-15 13:47 ` zimoun 2021-03-16 1:54 ` Sébastien Lerique 2021-03-16 8:06 ` zimoun 2021-03-16 9:05 ` Ludovic Courtès 2021-03-18 2:26 ` Sébastien Lerique 2021-03-26 8:22 ` Sébastien Lerique 2021-03-29 12:03 ` Ludovic Courtès 2021-03-30 1:54 ` Sébastien Lerique 2021-03-30 7:21 ` Ludovic Courtès 2021-03-31 5:23 ` Sébastien Lerique 2021-04-01 8:35 ` Ludovic Courtès 2021-04-01 14:34 ` Sébastien Lerique 2021-04-10 20:43 ` Ludovic Courtès 2021-04-12 1:21 ` Sébastien Lerique 2021-04-12 12:43 ` Ludovic Courtès
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).