Subject: bug#45654: Building guile on x86_64 for aarch64 fails because of a missing guile

From: Ludovic Courtès <[email-masked]>
Date: Wed, 06 Jan 2021 14:29:27 +0100

Hi Stefan,

Stefan <[email-masked]> skribis:

> Hi Ludo’!
>
>> Stefan: I recommend against ‘--disable-chroot’ as anything could leak
>> into build processes.
>
> Thanks for your reply. I understand that ‘--disable-chroot’ is not a good idea. In the end my try building guix over night fails with test errors. As I wrote in the bug ticket, I even did a reboot after the reconfigure. But just restarting qemu-binfmt and guix-daemon is no solution in my case:
>
> stefan@guix ~$ sudo herd restart qemu-binfmt
> Service qemu-binfmt has been stopped.
> Service qemu-binfmt has been started.
> stefan@guix ~$ sudo herd restart guix-daemon
> Service guix-daemon has been stopped.
> Service guix-daemon has been started.
> stefan@guix ~$ guix build --system=aarch64-linux guix
> Folgende Ableitung wird erstellt:
>    /gnu/store/4wdh7yy6g7imycaz9c21vcmk9l97qnpv-guix-1.2.0-8.7624ebb.drv
> /gnu/store/4wdh7yy6g7imycaz9c21vcmk9l97qnpv-guix-1.2.0-8.7624ebb.drv wird erstellt …
> while setting up the build environment: executing `/gnu/store/x3gq648qnfnla7nppyfjvj62s2i8y7rl-guile-3.0.2/bin/guile': No such file or directory

I have:

--8<---------------cut here---------------start------------->8---
$ file /gnu/store/x3gq648qnfnla7nppyfjvj62s2i8y7rl-guile-3.0.2/bin/guile
/gnu/store/x3gq648qnfnla7nppyfjvj62s2i8y7rl-guile-3.0.2/bin/guile: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /gnu/store/cb88z63hyg1icd2kkahiink2p291mhr2-glibc-2.31/lib/ld-linux-aarch64.so.1, for GNU/Linux 2.6.32, not stripped
--8<---------------cut here---------------end--------------->8---

So ENOENT above means that the ELF interpreter of this file is not in
the build chroot, and that in turns almost certainly hints at an
inconsistency between the ‘--chroot-directory’ flags passed to
guix-daemon and the file name that shows up in
/proc/sys/fs/binfmt_misc/qemu-aarch64 (set up by ‘qemu-binfmt’).

I don’t see why restarting the two services has no effect.  Could you
compare the output of:

  guix gc -R $(cat /proc/sys/fs/binfmt_misc/qemu-aarch64 |grep interpreter|cut -d ' ' -f 2-)

with the ‘--chroot-directory’ flags shown by:

  cat /proc/$(LC_ALL=C sudo -E herd status guix-daemon | grep Running| sed -'es/.* \([0-9]\+\).*/\1/g')/cmdline | xargs -0 echo

?

> I’ll now retry with
>
> sudo -b env -i PATH=/gnu/store/x3gq648qnfnla7nppyfjvj62s2i8y7rl-guile-3.0.2/bin /gnu/store/ca91bk34z3hmzv5d8j5xi0z8f4riyx7m-guix-1.2.0-8.7624ebb/bin/guix-daemon --build-users-group guixbuild --max-silent-time 0 --timeout 0 --log-compression bzip2 --discover=no --substitute-urls https://ci.guix.gnu.org --disable-chroot

Setting PATH like this won’t make any difference.

HTH!

Ludo’.