help-guix
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Setting up guix source tree for testing a package


From: Fredrik Salomonsson
Subject: Re: Setting up guix source tree for testing a package
Date: Thu, 11 Mar 2021 17:01:07 -0800

Hi Zelphir,

Zelphir Kaltstahl <zelphirkaltstahl@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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]