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. -- s/Fred[re]+i[ck]+/Fredrik/g