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: Zelphir Kaltstahl
Subject: Re: Setting up guix source tree for testing a package
Date: Wed, 17 Mar 2021 21:46:52 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.7.1

Hello Frederik!

On 3/12/21 2:01 AM, Fredrik Salomonsson wrote:
> 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.
>
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




reply via email to

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