Subject: Re: bug#47428: Problems building the up-to-date "devel" manual for the website

From: Ludovic Courtès <[email-masked]>
Date: Fri, 09 Jul 2021 17:36:40 +0200

Hi,

Maxim Cournoyer <[email-masked]> skribis:

> Ludovic Courtès <[email-masked]> writes:

[...]

>> FWIW, the map(PROT_NONE) issue was (I think) fixed by
>> 0aef94e7bcbd272720f14c5343f74da5201ef90a (in May), itself a followup to
>> 47d48f0c43c13c0b43bc3e37b6239efd4bf2f74c, so I think the comment is
>> stale.

[...]

> Sadly, the error is still the same, even using guix in my tree (master):
>
> mmap(PROT_NONE) failed
> builder for `/gnu/store/f8fdzi1hp7b3ln2zz6z87p3cj3gf0ac5-guix-translated-texinfo.drv'
> failed due to signal 11 (Segmentation fault)
>
> So the comment is still valid, I'm afraid :-/.

TL;DR: I pushed another fix; gory explanations follow.

That’s from “make as-derivation”?  What does this say:

  guix gc --references /gnu/store/f8fdzi1hp7b3ln2zz6z87p3cj3gf0ac5-guix-translated-texinfo.drv \
  | grep guile-3.0

?

Looking at libgc, the “mmap(PROT_NONE) failed” message is guarded by
#ifdef USE_MUNMAP.  Since (@ (gnu packages guile) guile-3.0-latest) uses
(@ (gnu packages bdw-gc) libgc/disable-munmap), it shouldn’t be possible
to see that message:

--8<---------------cut here---------------start------------->8---
$ strings $(guix build -e '(@ (gnu packages bdw-gc) libgc/disable-munmap)' |grep -e [0-9]$)/lib/libgc.so |grep PROT_NONE
$ echo $?
1
$ guix describe
Generacio 187	Jul 09 2021 12:07:58	(nuna)
  guix b182121
    repository URL: https://git.savannah.gnu.org/git/guix.git
    branch: master
    commit: b182121458c0126a05a41fec78a4f42472ba8081
--8<---------------cut here---------------end--------------->8---

Let’s see what happens on berlin:

--8<---------------cut here---------------start------------->8---
ludo@berlin ~/tmp$ sudo herd schedule mcron |grep manual-devel
Password:
/gnu/store/xsmjh2k3pjx6cv0rvkkqw8jsj8a574n4-update-guix-manual-devel
/gnu/store/xsmjh2k3pjx6cv0rvkkqw8jsj8a574n4-update-guix-manual-devel
/gnu/store/xsmjh2k3pjx6cv0rvkkqw8jsj8a574n4-update-guix-manual-devel
/gnu/store/xsmjh2k3pjx6cv0rvkkqw8jsj8a574n4-update-guix-manual-devel
/gnu/store/xsmjh2k3pjx6cv0rvkkqw8jsj8a574n4-update-guix-manual-devel
ludo@berlin ~/tmp$ sudo su - static-web-site -c /gnu/store/xsmjh2k3pjx6cv0rvkkqw8jsj8a574n4-update-guix-manual-devel

building manual from work tree around commit 4236b8586d9a644d6521c8303863125439aabce8,  9 July 2021
The following derivations will be built:
   /gnu/store/bpwr5awf74cixbgjvz2pqdflm3awvjkj-guix-manual.drv
   /gnu/store/8xd3cig2iqy01kdxmcxwj70vfwhbkslb-html-indexes.drv
   /gnu/store/91nzqswih459bx3b3sc4pwblrqng7h0m-guix-html-manual-highlighted.drv
   /gnu/store/119k1wz7fwylawgvgrb4n9qdslfkqmqq-guix-html-manual.drv
   /gnu/store/qk96yrhyr0mxkyab7z9qi3rml6vfnrii-texinfo-manual-source.drv
   /gnu/store/mykrlk2nfrs4bhypj94k0k1w610d1r0i-guix-translated-texinfo.drv
   /gnu/store/2gq0svljs882azy6v1izill3hy42rxi2-guix-html-index-de.drv
   /gnu/store/m5rld6plv31w0xlg356370lzyf47k77x-guix-html-manual-highlighted.drv
   /gnu/store/2sdcnjsg5nlyg57c0xvqllssns8hnjhr-guix-html-index-fr.drv
   /gnu/store/52963c7phbm2s2wzynblmgm1j4v9y3ns-guix-html-index-ru.drv
   /gnu/store/56g425snxx2ya6cx2hcxpvb391cj7n73-guix-html-index-ru.drv
   /gnu/store/i1z5xazp71j17llk63q40n8i7aninbi0-guix-html-index-zh-cn.drv
   /gnu/store/isndvz5csv97fmmfcsga13fqlpir576c-guix-html-index-es.drv
   /gnu/store/l68hi1pj303wfr18pq7q1xxhaly5va6i-guix-html-index-de.drv
   /gnu/store/nnpyprm04rhwhdd6qvmbd1rn96lnz2jb-guix-html-index-en.drv
   /gnu/store/nzy2wb5ci0mn0zbppfhcq96j30km5gq7-guix-html-index-en.drv
   /gnu/store/rspygvlzr4v5bfx1a71iijxim8vdpp69-guix-html-index-fr.drv
   /gnu/store/varb0z4kscaqizvf462wvjqw89jnmkj2-guix-html-index-es.drv
   /gnu/store/zc6hjfqil3h1qv9wfn6limkzs4r31b92-guix-html-index-zh-cn.drv
   /gnu/store/ng573kmh8jdqjdgl25rc4f8an1d9lf3w-guix-pdf-manual.drv
building path(s) `/gnu/store/23cklqq6i4h7rrxsskh5nngd7p7718na-html-indexes'
builder for `/gnu/store/s871bvkh1spgrpmms8323pa32a3arfmc-guix-translated-texinfo' failed previously (cached)
cannot build derivation `/gnu/store/qk96yrhyr0mxkyab7z9qi3rml6vfnrii-texinfo-manual-source.drv': 1 dependencies couldn't be built
cannot build derivation `/gnu/store/119k1wz7fwylawgvgrb4n9qdslfkqmqq-guix-html-manual.drv': 1 dependencies couldn't be built
cannot build derivation `/gnu/store/ng573kmh8jdqjdgl25rc4f8an1d9lf3w-guix-pdf-manual.drv': 1 dependencies couldn't be built
cannot build derivation `/gnu/store/bpwr5awf74cixbgjvz2pqdflm3awvjkj-guix-manual.drv': 1 dependencies couldn't be built
Backtrace:
           7 (primitive-load "/gnu/store/xsmjh2k3pjx6cv0rvkkqw8jsj8a…")
In ice-9/boot-9.scm:
  1752:10  6 (with-exception-handler _ _ #:unwind? _ # _)
In guix/store.scm:
   646:37  5 (thunk)
  2076:24  4 (run-with-store #<store-connection 256.99 7f146fb8f2d0> …)
In unknown file:
           3 (_ #<procedure 7f146f865b60 at ice-9/eval.scm:330:13 ()> …)
In guix/store.scm:
  1945:38  2 (_ #<store-connection 256.99 7f147ca41460>)
  1383:15  1 (_ #<store-connection 256.99 7f147ca41460> _ _)
In ice-9/boot-9.scm:
  1685:16  0 (raise-exception _ #:continuable? _)

ice-9/boot-9.scm:1685:16: In procedure raise-exception:
ERROR:
  1. &store-protocol-error:
      message: "build of `/gnu/store/bpwr5awf74cixbgjvz2pqdflm3awvjkj-guix-manual.drv' failed"
      status: 100
ludo@berlin ~/tmp$ zcat $(guix build --log-file /gnu/store/s871bvkh1spgrpmms8323pa32a3arfmc-guix-translated-texinfo) | tail -3
Your input po file ./guix-manual.es.po seems outdated (The amount of entries differ between files: 10633 is not 453
). Please consider running po4a-updatepo to refresh it.
mmap(PROT_NONE) failed
--8<---------------cut here---------------end--------------->8---

How come?  Reason is that this mcron job uses an old Guile, without
‘--disable-munmap’:

--8<---------------cut here---------------start------------->8---
ludo@berlin ~/tmp$ guix gc --references $(guix gc --derivers /gnu/store/s871bvkh1spgrpmms8323pa32a3arfmc-guix-translated-texinfo) | grep guile-3.0
/gnu/store/b0syji3mdp78sz1a4q8s3mnd8hdbkp0h-guile-3.0.2.drv
--8<---------------cut here---------------end--------------->8---

This, in turn, is because ‘doc/build.scm’ uses (default-guile), which is
3.0.2 as shown above (on ‘master’).  (guix self) itself forces use of
‘guile-3.0-latest’ by calling ‘set-guile-for-build’ in ‘compiled-guix’,
but ‘doc/build.scm’ doesn’t do that.

Based on this investigation, I pushed these three commits:

  cf88c967af self: Remove stale comment about "mmap(PROT_NONE) failed" crash.
  609e66e45f Revert "self: Build translated manuals with a single process."
  580a031e7d doc: Build manual translations with 'guile-3.0-latest'.

I think it fixes the problem For Good™.  Normally, berlin shouldn’t need
to be reconfigured; it should built the manual Just Fine next time.
We’ll soon know…

Thanks,
Ludo’.