Hello Frederik! On 3/12/21 2:01 AM, Fredrik Salomonsson wrote: > Hi Zelphir, > > Zelphir Kaltstahl <zelphirkaltst...@posteo.de> writes: > >> Hello Guix Users, >> >> I am trying to set up GNU Guix for package testing, as I want to test a >> package >> before sending in a patch to add it to GNU Guix. >> >> I'll describe the steps I am taking and where I am seeing them in the docs in >> the following. >> >> All is happening inside a VM, which runs a Debian 10. The VM is almost fresh, >> except for guest additions and git and vim and such things. >> >> >> I start at https://guix.gnu.org/manual/en/html_node/Packaging-Guidelines.html >> <https://guix.gnu.org/manual/en/html_node/Packaging-Guidelines.html>, >> wherein I >> find a link to >> https://guix.gnu.org/manual/en/html_node/Defining-Packages.html >> <https://guix.gnu.org/manual/en/html_node/Defining-Packages.html>. >> >> Next the packaging guidelines tell me, that I may run for example: >> >> ~~~~ >> ./pre-inst-env guix build gnew --keep-failed >> ~~~~ >> >> inside the Guix build tree. >> >> I clone Guix, so that I have a source tree of Guix. >> >> I define my package inside `guix/gnu/packages/guile.scm`. >> >> In packaging guidelines, there is a link to >> https://guix.gnu.org/manual/en/html_node/Running-Guix-Before-It-Is-Installed.html >> <https://guix.gnu.org/manual/en/html_node/Running-Guix-Before-It-Is-Installed.html>. >> I am supposed to run the test inside a fresh Guix, to make sure, that the >> package will work fine for others, if I understand correctly. >> >> On >> https://guix.gnu.org/manual/en/html_node/Running-Guix-Before-It-Is-Installed.html >> <https://guix.gnu.org/manual/en/html_node/Running-Guix-Before-It-Is-Installed.html> >> I am told, that I need to generate a pre-installation script to run guix >> without >> installing it (running stuff in the Guix build tree, as far as I >> understand). To >> generate it, I need Guix again. The docs direct me to >> https://guix.gnu.org/manual/en/html_node/Building-from-Git.html >> <https://guix.gnu.org/manual/en/html_node/Building-from-Git.html>. >> >> On https://guix.gnu.org/manual/en/html_node/Building-from-Git.html >> <https://guix.gnu.org/manual/en/html_node/Building-from-Git.html> the >> dilemma is >> finally uncovered, that I need Guix to build the pre-installation script, to >> use >> that, to build a package in the Guix source tree. >> >> As you can see, there is a chicken-and-egg problem: you first need to have >> Guix installed. Typically you would install Guix System (see System >> Installation) or Guix on top of another distro (see Binary Installation); in >> either case, you would verify the OpenPGP signature on the installation >> medium. >> This “bootstraps” the trust chain. >> >> I install it. > You don't need guix to build guix, it just makes it a lot easier to > setup the environment to build guix as you don't need to hunt for its > dependencies yourself. > >> Then I run: >> >> ~~~~ >> guix environment guix --pure >> ~~~~ >> >> The docs tell me I have to run: >> >> ~~~~ >> ./bootstrap >> ./configure --localstatedir=some_directory >> ~~~~ >> >> But here I am facing a problem. I have no clue what to set the >> `--localstatedir=directory` to. The docs tell me it is important, but I see >> no >> instructions on how to choose a directory for the local state, when I have >> already a Guix installed (binary installation on foreign distro). The linked >> docs about the https://guix.gnu.org/manual/en/html_node/The-Store.html >> <https://guix.gnu.org/manual/en/html_node/The-Store.html> do not help me >> choosing it either, because that page is about the store itself, not about my >> specific scenario of doing things from Guix source tree. Since I intend to >> build >> a package inside the Guix source tree, I think it should exactly _not_ be >> /var, >> as that would conflict with the Guix installation, that I had to do to create >> the pre-inst-env script. >> >> What is the idea for the local state directory? Is it the location of a >> temporary store, which will contain anything, that I produce using the >> pre-inst-env script? That is what I am guessing. In that case I think >> `localstoredir` might be a good alias for `localstatedir`. >> >> >> I am trying with an empty directory, which I create just for that purpose, on >> the same level as the cloned Guix repository: >> >> ~~~~ >> $ tree -L 2 >> . >> ├── guix >> │ ├── ABOUT-NLS >> │ ├── aclocal.m4 >> │ ├── AUTHORS >> │ ├── autom4te.cache >> │ ├── bootstrap >> │ ├── build-aux >> │ ├── ChangeLog >> │ ├── CODE-OF-CONDUCT >> │ ├── config-daemon.ac >> │ ├── config.log >> │ ├── config.status >> │ ├── configure >> │ ├── configure.ac >> │ ├── COPYING >> │ ├── doc >> │ ├── etc >> │ ├── gnu >> │ ├── gnu.scm >> │ ├── guix >> │ ├── guix.scm >> │ ├── HACKING >> │ ├── INSTALL >> │ ├── m4 >> │ ├── Makefile >> │ ├── Makefile.am >> │ ├── Makefile.in >> │ ├── NEWS >> │ ├── nix >> │ ├── po >> │ ├── pre-inst-env >> │ ├── README >> │ ├── ROADMAP >> │ ├── scripts >> │ ├── test-env >> │ ├── tests >> │ ├── THANKS >> │ └── TODO >> └── guix-store >> ~~~~ >> >> So I run: >> >> ~~~~ >> ./configure --localstatedir=/home/user/dev/guix-store >> ~~~~ >> >> Next is running: >> >> ~~~~ >> make check >> ~~~~ >> >> Some warnings appear: >> >> ~~~~ >> Your input po file po/doc/guix-manual.de.po seems outdated (The amount of >> entries differ between files: 10012 is not 334 >> ). Please consider running po4a-updatepo to refresh it. >> ~~~~ >> >> But I am guessing, that these can be ignored for my purposes, as I am not >> doing >> anything with translations or po files. >> >> However, there are other errors, like not finding code for some modules (the >> output of make check is very long and probably I should rather put the log >> somewhere and link to it). The check seems to fail ultimately with the >> following >> result: >> >> ~~~~ >> make[4]: *** [Makefile:5563: tests/store.log] Error 1 >> make[4]: Leaving directory '/home/user/dev/guix' >> make[3]: *** [Makefile:5545: check-TESTS] Error 2 >> make[3]: Leaving directory '/home/user/dev/guix' >> make[2]: *** [Makefile:5794: check-am] Error 2 >> make[2]: Leaving directory '/home/user/dev/guix' >> make[1]: *** [Makefile:5322: check-recursive] Error 1 >> make[1]: Leaving directory '/home/user/dev/guix' >> make: *** [Makefile:5796: check] Error 2 >> ~~~~ >> >> The only red colored fail I can see is above from that, first line of the >> following: >> >> ~~~~ >> FAIL: tests/go.scm >> PASS: tests/grafts.scm >> PASS: tests/graph.scm >> PASS: tests/gremlin.scm >> SKIP: tests/hackage.scm >> PASS: tests/import-utils.scm >> PASS: tests/inferior.scm >> PASS: tests/lint.scm >> PASS: tests/modules.scm >> PASS: tests/monads.scm >> PASS: tests/nar.scm >> PASS: tests/networking.scm >> PASS: tests/opam.scm >> PASS: tests/openpgp.scm >> PASS: tests/packages.scm >> SKIP: tests/pack.scm >> PASS: tests/pki.scm >> PASS: tests/print.scm >> PASS: tests/processes.scm >> PASS: tests/profiles.scm >> SKIP: tests/publish.scm >> SKIP: tests/pypi.scm >> PASS: tests/records.scm >> PASS: tests/scripts.scm >> PASS: tests/search-paths.scm >> PASS: tests/services.scm >> PASS: tests/services/file-sharing.scm >> PASS: tests/services/linux.scm >> PASS: tests/sets.scm >> PASS: tests/size.scm >> SKIP: tests/snix.scm >> PASS: tests/status.scm >> PASS: tests/store-database.scm >> PASS: tests/store-deduplication.scm >> PASS: tests/store-roots.scm >> make[4]: *** [Makefile:5563: tests/store.log] Error 1 >> make[4]: Leaving directory '/home/user/dev/guix' >> make[3]: *** [Makefile:5545: check-TESTS] Error 2 >> make[3]: Leaving directory '/home/user/dev/guix' >> make[2]: *** [Makefile:5794: check-am] Error 2 >> make[2]: Leaving directory '/home/user/dev/guix' >> make[1]: *** [Makefile:5322: check-recursive] Error 1 >> make[1]: Leaving directory '/home/user/dev/guix' >> make: *** [Makefile:5796: check] Error 2 >> ~~~~ >> >> I am not sure, whether this means, that I have an erroneous Guix or whether >> the >> localstatedir was wrong or what else it means. > I get the same error with localstatedir=/var and using > `guix environment guix --pure`. I don't get this error when I drop the > --pure argument. Might be some environment variables that needs to be > setup for it to communicate properly with the guix daemon. > >> However, I continue. >> >> The docs on https://guix.gnu.org/manual/en/html_node/Building-from-Git.html >> <https://guix.gnu.org/manual/en/html_node/Building-from-Git.html> continue: >> >>> From there on, you can authenticate all the commits included in your >>> checkout >> by running: make authenticate >> >> It is not clear to me, whether that means, that I need to run it in my >> scenario >> or whether I should not run it. >> >> A look into the Makefile shows, that it is actually calling a guix command >> `guix >> git authenticate`. The description is "verify commit signatures and >> authorizations". "verify" or "verify-signatures" seems a more appropriate >> name, >> because it indicates checking signatures, instead of authenticating commits. >> However, this might be my lacking understanding of what `make authenticate` >> does >> or aims to do. >> >> When I try running: >> >> ~~~~ >> make authenticate >> ~~~~ >> >> I get an error: >> >> ~~~~ >> $ make authenticate >> Authenticating Git checkout... >> /bin/bash: line 1: guix: command not found >> make: *** [Makefile:6290: authenticate] Error 127 >> ~~~~ >> >> I am confused as to why it does not find guix. I am inside the environment >> created by `guix environment guix --pure`. >> >> I continue nevertheless and try to run: >> >> ~~~~ >> ./pre-inst-env guix build guile-fslib >> ~~~~ >> >> However, my whole setup now seems wo be messed up. The `guix` command can >> simply >> no longer be found: >> >> ~~~~ >> $ pwd >> /home/user/dev >> $ guix environment guix --pure >> $ pushd guix >> ~/dev/guix ~/dev >> $ ./pre-inst-env guix build guile-fslib >> guix build: error: failed to connect to >> `/home/user/dev/guix-store/guix/daemon-socket/socket': No such file or >> directory >> ~~~~ >> >> A logout and login does not change the error. >> >> Where did I go wrong? > The issue, I believe, is that there is no guix-daemon running that is > listening on that store, hence the error about missing socket file for > it. > > You can try in a different shell: > guix environment guix --pure > ./pre-inst-env guix-daemon > > And then call `guix build` in the other shell and see if that works. > > Some one correct me if I'm wrong. But just contributing a package, using > /var should be enough. Then you can use the build daemon that is already > running. As the manual points out: > > "(this assumes ‘guix-daemon’ is already running on your system; it’s OK > if it’s a different version)" [0] > > [0] > https://guix.gnu.org/manual/en/html_node/Running-Guix-Before-It-Is-Installed.html#Running-Guix-Before-It-Is-Installed > > I hope that helps. > This definitely is helpful!
I'm sorry for the delay in responding. Thank you for your efforts! I hit other errors when leaving away the --pure and I have the suspicion, that gnu-build-system requires me to have a configure script in the git tree of my repository, which I did not know before I saw it failing with a 127 error on calling a configure script, which is/was not commited in my repository. I will probably have to revise a section somewhere in my guile-hall packaging guide, to note, that one should add the configure script, even though it is generated by hall. Best regards, Zelphir -- repositories: https://notabug.org/ZelphirKaltstahl