--- Begin Message ---
Subject: |
“guix pull” fails on setlocale |
Date: |
Thu, 23 May 2019 23:01:08 +0200 |
User-agent: |
mu4e 1.2.0; emacs 26.2 |
Hi Guix,
I’m getting this weird error on “guix pull”:
--8<---------------cut here---------------start------------->8---
address@hidden:~] $ guix pull
Updating channel 'guix' from Git repository at
'https://git.savannah.gnu.org/git/guix.git'...
Building from this channel:
guix https://git.savannah.gnu.org/git/guix.git e26d628
Computing Guix derivation for 'x86_64-linux'... \@ build-started
/gnu/store/pryjyasqnhc69qqjsbvv5f1ksi25mjdc-libgit2-0.28.tar.xz.drv -
x86_64-linux
/gnu/var/log/guix/drvs/pr//yjyasqnhc69qqjsbvv5f1ksi25mjdc-libgit2-0.28.tar.xz.drv
2110
|@ build-log 2110 252
Backtrace:
2 (primitive-load "/gnu/store/lgad0sg02p56jadwqrq674250d5?")
In ice-9/eval.scm:
619:8 1 (_ #f)
In unknown file:
0 (setlocale 6 "en_US.utf8")
ERROR: In procedure setlocale:
In procedure setlocale: Invalid argument
builder for
`/gnu/store/pryjyasqnhc69qqjsbvv5f1ksi25mjdc-libgit2-0.28.tar.xz.drv' failed
with exit code 1
@ build-failed
/gnu/store/pryjyasqnhc69qqjsbvv5f1ksi25mjdc-libgit2-0.28.tar.xz.drv - 1 builder
for `/gnu/store/pryjyasqnhc69qqjsbvv5f1ksi25mjdc-libgit2-0.28.tar.xz.drv'
failed with exit code 1
cannot build derivation
`/gnu/store/nj6zd6gn3x1rf08ayxxwd1v0fyg71v9c-libgit2-0.28.2.drv': 1
dependencies couldn't be built
cannot build derivation
`/gnu/store/82x55s3m26j3rpq45ppijzvvh3rhxhsb-guile-git-0.2.0.drv': 1
dependencies couldn't be built
Backtrace:
In ./guix/store.scm:
1667:8 19 (_ _)
1667:8 18 (_ _)
In ./guix/gexp.scm:
708:2 17 (_ _)
In ./guix/monads.scm:
482:9 16 (_ _)
In ./guix/gexp.scm:
573:13 15 (_ _)
In ./guix/store.scm:
1667:8 14 (_ _)
In ./guix/gexp.scm:
708:2 13 (_ _)
In ./guix/monads.scm:
482:9 12 (_ _)
In ./guix/gexp.scm:
573:13 11 (_ _)
In ./guix/store.scm:
1667:8 10 (_ _)
In ./guix/gexp.scm:
708:2 9 (_ _)
In ./guix/monads.scm:
482:9 8 (_ _)
In ./guix/gexp.scm:
573:13 7 (_ _)
In ./guix/store.scm:
1667:8 6 (_ _)
1690:38 5 (_ #<store-connection 256.99 d5cfb40>)
In ./guix/packages.scm:
936:16 4 (cache! #<weak-table 420/883> #<package address@hidden> ?)
In ./guix/grafts.scm:
314:4 3 (graft-derivation #<store-connection 256.99 d5cfb40> # # ?)
192:4 2 (references-oracle #<store-connection 256.99 d5cfb40> #)
201:20 1 (_ _ _)
In ./guix/store.scm:
1203:15 0 (_ #<store-connection 256.99 d5cfb40> _ _)
./guix/store.scm:1203:15: Throw to key `srfi-34' with args `(#<condition
&store-protocol-error [message: "build of
`/gnu/store/82x55s3m26j3rpq45ppijzvvh3rhxhsb-guile-git-0.2.0.drv' failed"
status: 100] d59ede0>)'.
guix pull: error: You found a bug: the program
'/gnu/store/2mjaq8zxq60ifqxj3fra7f8gyxxccypm-compute-guix-derivation'
failed to compute the derivation for Guix (version:
"e26d628b0fabf5a0aa7c4164a9558c66c61e02ab"; system: "x86_64-linux";
host version: "ebd45195dd10eea9ce2c563697989bd4b27dfdd3"; pull-version: 1).
Please report it by email to <address@hidden>.
--8<---------------cut here---------------end--------------->8---
I’m using “guix” from the result of a previous “guix pull”, but it’s the
same if I use a git checkout.
The daemon is probably a little special. I’m using the daemon from a
git checkout inside of an environment for “guix”, because localstatedir
in my case is /gnu/var.
I also tried using the daemon from the same “guix pull” tree, after
setting GUIX_DATABASE_DIRECTORY=/gnu/var/guix/db and
GUIX_STATE_DIRECTORY=/gnu/var/guix.
Here’s how I launch the daemon:
--8<---------------cut here---------------start------------->8---
#!/bin/bash
export GUIX_PROFILE=/gnu/var/guix/profiles/custom/guix-remote/.guix-profile
# We need this to augment the GUILE_LOAD_PATH such that it includes
# the Guile bindings to gnutls. Sourcing the whole profile is
# overkill, but who cares, eh?
source ${GUIX_PROFILE}/etc/profile
# Fix locale warnings
export GUIX_LOCPATH=${GUIX_PROFILE}/lib/locale
# Fix certificate validation
export SSL_CERT_DIR=${GUIX_PROFILE}/etc/ssl/certs/
#export GUIX_DATABASE_DIRECTORY=/gnu/var/guix/db
#export GUIX_STATE_DIRECTORY=/gnu/var/guix
#/gnu/remote/.guix-pull/bin/guix-daemon \
#/gnu/remote/guix/pre-inst-env guix-daemon \
exec /gnu/remote/guix/pre-inst-env guix-daemon \
--disable-log-compression \
--build-users-group=guix-builder \
--listen=141.80.186.209:9999 \
--substitute-urls="https://berlin.guixsd.org https://mirror.hydra.gnu.org"
$@
--8<---------------cut here---------------end--------------->8---
All communication with the daemon happens over network; the local socket
is not involved, but this doesn’t seem to make any difference here.
The simplest reproducer is to run Guile where the daemon runs and to
evaluate setlocale:
--8<---------------cut here---------------start------------->8---
address@hidden:~] (716) $
/gnu/store/r658y3cgpnf99nxjxqgjiaizx20ac4k0-guile-2.2.4/bin/guile
guile: warning: failed to install locale
warning: failed to install locale: Invalid argument
GNU Guile 2.2.4
Copyright (C) 1995-2017 Free Software Foundation, Inc.
Guile comes with ABSOLUTELY NO WARRANTY; for details type `,show w'.
This program is free software, and you are welcome to redistribute it
under certain conditions; type `,show c' for details.
Enter `,help' for help.
scheme@(guile-user)> (setlocale 6 "en_US.utf8")
ERROR: In procedure setlocale:
In procedure setlocale: Invalid argument
Entering a new prompt. Type `,bt' for a backtrace or `,q' to continue.
scheme@(guile-user) [1]>
--8<---------------cut here---------------end--------------->8---
This is expected because GUIX_LOCPATH isn’t set in this environment.
It’s fine when I set GUIX_LOCPATH to the value it has in the above
guix-daemon wrapper:
--8<---------------cut here---------------start------------->8---
address@hidden:~] (719) $
GUIX_LOCPATH=/gnu/var/guix/profiles/custom/guix-remote/.guix-profile/lib/locale
/gnu/store/r658y3cgpnf99nxjxqgjiaizx20ac4k0-guile-2.2.4/bin/guile
GNU Guile 2.2.4
Copyright (C) 1995-2017 Free Software Foundation, Inc.
Guile comes with ABSOLUTELY NO WARRANTY; for details type `,show w'.
This program is free software, and you are welcome to redistribute it
under certain conditions; type `,show c' for details.
Enter `,help' for help.
scheme@(guile-user)> (setlocale 6 "en_US.utf8")
$1 = "en_US.utf8"
scheme@(guile-user)>
--8<---------------cut here---------------end--------------->8---
I don’t understand why Guile as used in the builder of
libgit2-0.28.tar.xz would behave any different as the daemons
environment looks fine to me:
--8<---------------cut here---------------start------------->8---
address@hidden:~] (723) $ sudo strings /proc/27562/environ
GUIX_LOCPATH=/gnu/var/guix/profiles/custom/guix-remote/.guix-profile/lib/locale
NIX_BUILD_HOOK=/gnu/remote/guix/nix/scripts/offload
NIX_HASH=
NIX_LIBEXEC_DIR=/gnu/remote/guix/nix/scripts
LC_ALL=en_US.UTF-8
GUILE_LOAD_PATH=/gnu/remote/guix:/gnu/remote/guix:/gnu/var/guix/profiles/custom/guix-remote/.guix-profile/share/guile/site/2.2
GUIX_PROFILE=/gnu/var/guix/profiles/custom/guix-remote/.guix-profile
GUILE_LOAD_COMPILED_PATH=/gnu/remote/guix:/gnu/var/guix/profiles/custom/guix-remote/.guix-profile/lib/guile/2.2/site-ccache
PATH=/gnu/remote/guix/scripts:/gnu/remote/guix:/gnu/var/guix/profiles/custom/guix-remote/.guix-profile/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
PWD=/
LANG=en_US.UTF-8
SSL_CERT_DIR=/gnu/var/guix/profiles/custom/guix-remote/.guix-profile/etc/ssl/certs/
SHLVL=0
NIX_ROOT_FINDER=/gnu/remote/guix/nix/scripts/list-runtime-roots
GUIX_UNINSTALLED=1
--8<---------------cut here---------------end--------------->8---
What’s going on here?
--
Ricardo
--- End Message ---
--- Begin Message ---
Subject: |
Re: bug#35874: “guix pull” fails on setlocale |
Date: |
Sun, 26 May 2019 23:24:30 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/26.2 (gnu/linux) |
Hello!
Ricardo Wurmus <address@hidden> skribis:
>> I believe the patch below solves the problem. WDYT?
>
> Yes, I think this would fix it. I set two of these variables before
> (not NIX_STORE_DIR) and it seemed to work fine.
Great. Pushed as dfc69e4b6d4bbc41a4d37b3cc6ea12adb34aaafa.
Thanks,
Ludo’.
--- End Message ---