guix-devel
[Top][All Lists]
Advanced

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

Re: Heads-up: transition to Guile 2.2


From: Ludovic Courtès
Subject: Re: Heads-up: transition to Guile 2.2
Date: Mon, 15 May 2017 17:48:56 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.2 (gnu/linux)

Hi,

Pjotr Prins <address@hidden> skribis:

> The good news is that I got a build of a recent guix with
>
>   env -i /bin/bash --login --noprofile --norc
>   ~/.guix-profile/bin/guix environment guix --ad-hoc help2man git strace 
> pkg-config
>   rm -rf autom4te.cache/ # to be sure
>   make clean
>   ./bootstrap
>   ./configure --localstatedir=/var
>   make clean # to be sure
>   make
>
> which is *nice*. It is clear my environment is somewhat unstable - a
> combination of PATH pollution and (I think) recent tools mixed into the
> build process.
>
> And this is what my message is about, the tooling in my guix environment is
> old. Checking inside above environment
>
>   gcc --version
>     gcc (GCC) 5.4.0
>
>  guile --version
>    guile (GNU Guile) 2.0.14
>
> So, what is happening is that I am building a recent tree with an old
> toolset. This is exactly what I meant! I don't dare do a guix pull
> now, to avoid the tree build failing again(!). Heh.
>
> Everyone, I mean everyone, is building guix with different toolsets, i.e,
> combinations of tools and versions.
>
> This is wrong and unguixy.

Yes, I kinda agree, though again, we need to distinguish between
developers and users (I know I know, the deficiencies of ‘guix pull’
gives users an incentive to do use the
checkout/autoreconf/configure/make dance, but let’s put that aside for
now.)

As a developer, it’s important to be able to choose the tools that you
use.  For instance, to “port” Guix to Guile 2.2, I needed to build it
and run it with 2.2, but of course I couldn’t force it to users before
it was ready.  Thus, I believe the normal ./configure && make approach
makes sense in this developer context.

As a user though, I clearly don’t want to worry about these
shenanigans.  I want to be able to get the latest Guix and package set,
and I don’t care about what it involves behind the scenes.

>> >   ./configure --localstatedir=/var
>> >
>> > complains with 
>> >
>> >   configure: error: C preprocessor "/lib/cpp" fails sanity check
>> 
>> What does config.log say?
>
> It was a whole range of gcc 7.10 errors, looking for limit.h etc. Lost the 
> log in anger ;)

Lack of limits.h, could it be that you had ‘gcc’ in your profile instead
of ‘gcc-toolchain’ (the latter brings in the libc and Linux headers,
including <limits.h>, while the former does not)?

> It was during profile path resolving of Guix. I happen to have this in
> a screen. The full trace is
>
>   warning: collision encountered: 
> /gnu/store/b11lvv9x75jgiiw7rpyb53vj8j57jrw6-mysql-5.7.17/share/man/man1/mysqltest.1.gz
>  
>   
> /gnu/store/vdvwj57w1rnay7khvi0c4wp05f35gqcl-mysql-5.6.25/share/man/man1/mysqltest.1.gz
>   warning: arbitrarily choosing 
> /gnu/store/b11lvv9x75jgiiw7rpyb53vj8j57jrw6-mysql-5.7.17/share/man/man1/mysqltest.1.gz
>   Backtrace:
>   In ice-9/boot-9.scm:
>    160: 17 [catch #t #<catch-closure 8cac60> ...]
>   In unknown file:
>      ?: 16 [apply-smob/1 #<catch-closure 8cac60>]
>   In ice-9/boot-9.scm:
>     66: 15 [call-with-prompt prompt0 ...]
>   In ice-9/eval.scm:
>    432: 14 [eval # #]
>   In ice-9/boot-9.scm:
>   2404: 13 [save-module-excursion #<procedure 8ea7c0 at 
> ice-9/boot-9.scm:4051:3 ()>]
>   4056: 12 [#<procedure 8ea7c0 at ice-9/boot-9.scm:4051:3 ()>]
>   1727: 11 [%start-stack load-stack #<procedure 8fcae0 at 
> ice-9/boot-9.scm:4047:10 ()>]
>   1732: 10 [#<procedure 8fd6f0 ()>]
>   In unknown file:
>      ?: 9 [primitive-load 
> "/gnu/store/v9h4yaza43hi1780piyvvjsn5ba43hbn-profile-builder"]
>   In ./guix/build/profiles.scm:
>    133: 8 [build-profile 
> "/gnu/store/2qnn7divxnh5phd1k8sq7g9p29y1vapc-profile" # ...]
>   In unknown file:
>      ?: 7 [hash-for-each #<procedure d3f3f0 at ./guix/build/union.scm:143:21 
> (file dirs-with-file)> ...]
>      ?: 6 [hash-for-each #<procedure b92b10 at ./guix/build/union.scm:143:21 
> (file dirs-with-file)> ...]
>      ?: 5 [hash-for-each #<procedure eabd80 at ./guix/build/union.scm:143:21 
> (file dirs-with-file)> ...]
>      ?: 4 [hash-for-each #<procedure f24720 at ./guix/build/union.scm:143:21 
> (file dirs-with-file)> ...]
>   In ./guix/build/union.scm:
>    110: 3 [union 
> "/gnu/store/2qnn7divxnh5phd1k8sq7g9p29y1vapc-profile/share/man/man1/python.1" 
> ...]
>   In unknown file:
>      ?: 2 [partition #<procedure file-is-directory? (file)> #]
>   In ./guix/build/union.scm:
>     49: 1 [file-is-directory? 
> "/gnu/store/q6rbp7s542jkhrhz04hsp2i60gw0h4as-python-2.7.12/share/man/man1/python.1"]
>   In unknown file:
>      ?: 0 [stat 
> "/gnu/store/q6rbp7s542jkhrhz04hsp2i60gw0h4as-python-2.7.12/share/man/man1/python.1"
>  ...]
>
>   ERROR: In procedure stat:
>   ERROR: In procedure stat: No such file or directory: 
> "/gnu/store/q6rbp7s542jkhrhz04hsp2i60gw0h4as-python-2.7.12/share/man/man1/python.1"
>   builder for `/gnu/store/ssqb8qmdna28yjq2ggy5bxiy2wn5q1k7-profile.drv' 
> failed with exit code 1
>   guix package: error: build failed: build of 
> `/gnu/store/ssqb8qmdna28yjq2ggy5bxiy2wn5q1k7-profile.drv' failed
>
> but, lets not focus on that right now.

Hmm that looks like a genuine bug.  Could you email the details to
bug-guix if possible, ideally with a simple way to reproduce it (like
take commit XYZ, run “./pre-inst-env guix package -p new -i python …”)?

> No need. What I am suggesting is that we create an environment with a recent
> and *tested* set of tools to build the source tree. If that build is
> reproducible with recent tooling it will be easy to hunt down bugs. Currently
> we can pull a guix environment, but point me where we have an automated build
> of that to prove that it is working. Tell me how *you* can recreate
> the exact same build environment that I am using. Above environment
> isolation feature is useful, but does not guarantee reproducible
> builds from source. The point is that we *can* do it.
>
> I suggest to create a guix-build package which is tested against every commit
> that updates guix itself on the build farm. We don't have to trigger for
> updated packages. Just for commits to the core.
>
> Do you get what I mean? I think it is fairly trivial to achieve, If you agree
> this is important I may even have a go at it at some point. 

Yeah, I get what you mean.

Currently we have the ‘current-guix’ package, which is the ‘guix’
package built from the current Git checkout.  I think it’s pretty much
what you have in mind?  It’s fully specified in a “guixy” way, which is
to say that the ‘guix’ package specifies precisely the dependency graph.

The GuixSD installation tests are the only things that use
‘current-guix’ right now.

The future pull/channel command, though, will probably use something
similar to ‘current-guix’, as opposed to the terrible dependency mixture
that ‘guix pull’ uses.

Thanks for your feedback,
Ludo’.



reply via email to

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