contrib: Enable building in Guix containers #15277

pull dongcarl wants to merge 4 commits into bitcoin:master from dongcarl:2019-01-guix changing 5 files +634 −1
  1. dongcarl commented at 5:10 PM on January 28, 2019: member

    This post is kept updated as this project progresses. Use this latest update link to see what's new.

    Please read the README.md.


    Guix Introduction

    This PR enables building bitcoin in Guix containers. Guix is a transactional package manager much like Nix, but unlike Nix, it has more of a focus on bootstrappability and reproducibility which are attractive for security-sensitive projects like bitcoin.

    Guix Build Walkthrough

    Please read the README.md.

    Old instructions no. 4

    Old instructions no. 3

    Old instructions no. 2

    <details> <summary>Old instructions no. 1</summary> In this PR, we define a Guix [manifest](https://www.gnu.org/software/guix/manual/en/html_node/Invoking-guix-package.html#profile_002dmanifest) in `contrib/guix/manifest.scm`, which declares what packages we want in our environment.

    We can then invoke

    guix environment --manifest=contrib/guix/manifest.scm --container --pure --no-grafts --no-substitutes
    

    To have Guix:

    1. Build an environment containing the packages we defined in our contrib/guix/manifest.scm manifest from the Guix bootstrap binaries (see bootstrappability for more details).
    2. Start a container with that environment that has no network access, and no access to the host's filesystem except to the pwd that it was started in.
    3. Drop you into a shell in that container.

    Note: if you don't want to wait hours for Guix to build the entire world from scratch, you can eliminate the --no-substitutes option to have Guix download from available binary sources. Note that this convenience doesn't necessarily compromise your security, as you can check that a package was built correctly after the fact using guix build --check <packagename>

    Therefore, we can perform a build of bitcoin much like in Gitian by invoking the following:

    make -C depends -j"$(nproc)" download && \
        cat contrib/guix/build.sh | guix environment --manifest=contrib/guix/manifest.scm --container --pure --no-grafts --no-substitutes
    

    We don't include make -C depends -j"$(nproc)" download inside contrib/guix/build.sh because contrib/guix/build.sh is run inside the container, which has no network access (which is a good thing).

    </details>

    Rationale

    I believe that this represents a substantial improvement for the "supply chain security" of bitcoin because:

    1. We no longer have to rely on Ubuntu for our build environment for our releases (oh the horror), because Guix builds everything about the container, we can perform this on almost any Linux distro/system.
    2. It is now much easier to determine what trusted binaries are in our supply chain, and even make a nice visualization! (see bootstrappability).
    3. There is active effort among Guix folks to minimize the number of trusted binaries even further. OriansJ's stage0, and janneke's Mes all aim to achieve reduced binary boostrap for Guix. In fact, I believe if OriansJ gets his way, we will end up some day with only a single trusted binary: hex0 (a ~500 byte self-hosting hex assembler).

    Steps to Completion

    • Successfully build bitcoin inside the Guix environment
    • Make check-symbols pass
    • Do the above but without nasty hacks
    • Solve some of the more innocuous hacks
    • Make it cross-compile (HELP WANTED HERE)
      • Linux
        • x86_64-linux-gnu
        • i686-linux-gnu
        • aarch64-linux-gnu
        • arm-linux-gnueabihf
        • riscv64-linux-gnu
      • OS X
        • x86_64-apple-darwin14
      • Windows
        • x86_64-w64-mingw32
    • Maybe make importer for depends syntax
    • Document build process for future releases
    • Extra: Pin the revision of Guix that we build with with Guix inferiors

    Help Wanted

    Old content no. 3

    Old content no. 2

    <details> <summary>Old content no. 1</summary> As of now, the command described above to perform a build of bitcoin a lot like Gitian works, but fails at the `check-symbols` stage. This is because a few dynamic libraries are linked in that shouldn't be.

    Here's what ldd src/bitcoind looks like when built in a Guix container:

    	linux-vdso.so.1 (0x00007ffcc2d90000)
    	libdl.so.2 => /gnu/store/h90vnqw0nwd0hhm1l5dgxsdrigddfmq4-glibc-2.28/lib/libdl.so.2 (0x00007fb7eda09000)
    	librt.so.1 => /gnu/store/h90vnqw0nwd0hhm1l5dgxsdrigddfmq4-glibc-2.28/lib/librt.so.1 (0x00007fb7ed9ff000)
    	libstdc++.so.6 => /gnu/store/4sqps8dczv3g7rwbdibfz6rf5jlk7w90-gcc-5.5.0-lib/lib/libstdc++.so.6 (0x00007fb7ed87c000)
    	libpthread.so.0 => /gnu/store/h90vnqw0nwd0hhm1l5dgxsdrigddfmq4-glibc-2.28/lib/libpthread.so.0 (0x00007fb7ed85b000)
    	libm.so.6 => /gnu/store/h90vnqw0nwd0hhm1l5dgxsdrigddfmq4-glibc-2.28/lib/libm.so.6 (0x00007fb7ed6da000)
    	libgcc_s.so.1 => /gnu/store/4sqps8dczv3g7rwbdibfz6rf5jlk7w90-gcc-5.5.0-lib/lib/libgcc_s.so.1 (0x00007fb7ed6bf000)
    	libc.so.6 => /gnu/store/h90vnqw0nwd0hhm1l5dgxsdrigddfmq4-glibc-2.28/lib/libc.so.6 (0x00007fb7ed506000)
    	/gnu/store/h90vnqw0nwd0hhm1l5dgxsdrigddfmq4-glibc-2.28/lib/ld-linux-x86-64.so.2 => /usr/lib64/ld-linux-x86-64.so.2 (0x00007fb7ee3a0000)
    

    And here's what it looks in one of our releases:

    	linux-vdso.so.1 (0x00007ffff52cd000)
    	libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f87726b4000)
    	librt.so.1 => /usr/lib/librt.so.1 (0x00007f87726aa000)
    	libm.so.6 => /usr/lib/libm.so.6 (0x00007f8772525000)
    	libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007f877250b000)
    	libc.so.6 => /usr/lib/libc.so.6 (0x00007f8772347000)
    	/lib64/ld-linux-x86-64.so.2 => /usr/lib64/ld-linux-x86-64.so.2 (0x00007f8773392000)
    

    I suspect it is because my script does not apply the gitian-input patches described in the release process but there is no description as to how these patches are applied. It might also be something else entirely.

    Edit: It is something else. It appears that the gitian inputs are only used by gitian-win-signer.yml

    </details>

    How to Help

    1. Install Guix on your distro either from source or perform a binary installation
    2. Try out my branch and the command described above!
  2. ryanofsky commented at 6:10 PM on January 28, 2019: member

    To help explain this PR: I didn't immediately realize this change is mainly using GUIX as a container environment, not using GUIX as a package manger.

    The depends command first downloads binaries because networking is not available in the container:

    make -C depends -j"$(nproc)" download
    

    Then a normal build is basically done, but inside a container with GUIX autotools, gcc, perl, etc packages:

    guix environment --manifest=contrib/guix/manifest.scm --container --pure --no-grafts --no-substitutes < contrib/guix/build.sh
    
  3. in src/Makefile.am:591 in d003431caf outdated
     587 | @@ -588,13 +588,13 @@ clean-local:
     588 |  check-symbols: $(bin_PROGRAMS)
     589 |  if GLIBC_BACK_COMPAT
     590 |  	@echo "Checking glibc back compat..."
     591 | -	$(AM_V_at) READELF=$(READELF) CPPFILT=$(CPPFILT) $(top_srcdir)/contrib/devtools/symbol-check.py < $(bin_PROGRAMS)
     592 | +	$(AM_V_at) READELF=$(READELF) CPPFILT=$(CPPFILT) python3 $(top_srcdir)/contrib/devtools/symbol-check.py < $(bin_PROGRAMS)
    


    MarcoFalke commented at 6:23 PM on January 28, 2019:

    nit: Don't we use $(PYTHON) for those?


    dongcarl commented at 6:36 PM on January 28, 2019:

    Good catch!

  4. dongcarl force-pushed on Jan 28, 2019
  5. DrahtBot commented at 6:42 PM on January 28, 2019: member

    <!--e57a25ab6845829454e8d69fc972939a-->

    The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.

    <!--174a7506f384e20aa4161008e828411d-->

    Conflicts

    No conflicts as of last run.

  6. fanquake added the label Build system on Jan 28, 2019
  7. practicalswift commented at 9:32 AM on January 29, 2019: contributor

    Concept ACK @dongcarl The scope of PR would include making builds reproducible, right? If so, what type of reproducibility would be required? What are the reproducibility requirements of Guix?

  8. fanquake commented at 12:34 PM on January 29, 2019: member

    Concept ACK

  9. dongcarl commented at 5:13 PM on January 29, 2019: member

    @practicalswift Yes it would, we would want bit-for-bit reproducibility so that we can sign hashes just like in gitian. My plan is to use Guix simply as a container environment builder right now, which has worked quite well.

    I've already upstreamed patches that would make the bitcoin-core Guix package deterministic. I think the next step after having everything working in a container environment is to make custom Guix packages for our depends (we can't just use the Guix package they have because of differing configure/build flags between Guix packages and our depends tree).

  10. laanwj commented at 3:09 PM on January 30, 2019: member

    This PR enables building bitcoin in Guix containers. Guix is a transactional package manager much like Nix, but unlike Nix, it has more of a focus on bootstrappability and reproducibility which are attractive for security-sensitive projects like bitcoin.

    Nice. I've been playing around with NixOS a bit lately, didn't know about guix. Concept ACK. Thanks for working on this! @theuni what do you think?

  11. in contrib/guix/build.sh:7 in 1e7a391d49 outdated
       0 | @@ -0,0 +1,37 @@
       1 | +set -ex
       2 | +
       3 | +# Make /usr/bin if it doesn't exist
       4 | +[ -e /usr/bin ] || mkdir -p /usr/bin
       5 | +
       6 | +# Symlink file to a conventional path
       7 | +[ -e /usr/bin ] || ln -s "$(command -v file)" /usr/bin/file
    


    dongcarl commented at 3:21 PM on January 30, 2019:
    [ -e /usr/bin/file ] || ln -s "$(command -v file)" /usr/bin/file
    
  12. in contrib/guix/build.sh:4 in 1e7a391d49 outdated
       0 | @@ -0,0 +1,37 @@
       1 | +set -ex
    


    practicalswift commented at 9:16 AM on January 31, 2019:

    Should specify which shell is to be used with shebang line?


    wtogami commented at 7:41 PM on February 7, 2019:

    Not necessarily. You can limit your shell syntax to the least common denominator of posix syntax supported by the most minimal shells (busybox, dash, etc.) Specify a specific other shell if you want convenience of syntax features of that particular shell?


    dongcarl commented at 7:46 PM on February 7, 2019:

    @practicalswift Didn't see this... But yes @wtogami is right, I try to conform to the common denominator of POSIX sh for portability's sake.

  13. laanwj commented at 6:30 PM on January 31, 2019: member

    Travis fail:

    Missing expected shebang "#!/usr/bin/env bash" or "#!/bin/sh" in contrib/guix/build.sh
    
  14. dongcarl force-pushed on Jan 31, 2019
  15. MarcoFalke added the label Needs gitian build on Feb 1, 2019
  16. MarcoFalke removed the label Needs gitian build on Feb 1, 2019
  17. dongcarl force-pushed on Feb 4, 2019
  18. in contrib/guix/manifest.scm:10 in af6149ebfa outdated
       5 | + shells
       6 | + python
       7 | + pkg-config
       8 | + linux
       9 | + certs
      10 | + curl)
    


    wtogami commented at 7:50 PM on February 7, 2019:

    curl shouldn't be necessary in the container if depends is pre-populated. May require editing the depends system?

  19. in contrib/guix/build.sh:21 in af6149ebfa outdated
      16 | +./autogen.sh
      17 | +
      18 | +CONFIGFLAGS="--enable-glibc-back-compat --enable-reduce-exports --disable-bench --disable-gui-tests"
      19 | +HOST_CFLAGS="-O2 -g"
      20 | +HOST_CXXFLAGS="-O2 -g"
      21 | +HOST_LDFLAGS=-static-libstdc++
    


    wtogami commented at 11:06 PM on February 7, 2019:
    	libstdc++.so.6 => /gnu/store/4sqps8dczv3g7rwbdibfz6rf5jlk7w90-gcc-5.5.0-lib/lib/libstdc++.so.6 (0x00007fb7ed87c000)
    

    Your ldd output indicates that it isn't static linking libstdc++.

  20. wtogami commented at 11:15 PM on February 7, 2019: contributor

    Your ldd output ...

    /gnu/store/h90vnqw0nwd0hhm1l5dgxsdrigddfmq4-glibc-2.28/lib/ld-linux-x86-64.so.2 => /usr/lib64/ld-linux-x86-64.so.2 (0x00007fb7ee3a0000)
    

    Sounds to be caused by Guix's intentional hardcoding with -rpath.

    https://www.gnu.org/software/guix/manual/en/html_node/Application-Setup.html

    The wrapper’s purpose is to inspect the -L and -l switches passed to the linker, add corresponding -rpath arguments, and invoke the actual linker with this new set of arguments. By default, the linker wrapper refuses to link to libraries outside the store to ensure “purity”. This can be annoying when using the toolchain to link with local libraries. To allow references to libraries outside the store you need to define the environment variable GUIX_LD_WRAPPER_ALLOW_IMPURITIES.

  21. dongcarl commented at 8:23 PM on February 12, 2019: member

    Just an update. I've worked through most of the problems, right now at the end of the build, when make -C src --jobs=1 check-symbols is executed, we get the following:

    ==> out <==
    make: Entering directory '/home/dongcarl/src/bitcoin/v0.17.1-guix/src'
    Checking glibc back compat...
    qt/bitcoin-qt: NEEDED library libexpat.so.1 is not allowed
    
    ==> err <==
    make: *** [Makefile:11768: check-symbols] Error 1
    

    What's curious about this is that in our releases, libexpat shows up when I do ldd bitcoin-qt:

            libexpat.so.1 => /usr/lib/libexpat.so.1 (0x00007f7e48c95000)
    

    which is almost identical to how it shows up when I do ldd src/qt/bitcoin-qt on my builds:

            libexpat.so.1 => /usr/lib/libexpat.so.1 (0x00007fe212e8a000)
    

    Maybe I'm understanding how linkers work incorrectly, but will continue digging.

  22. wtogami commented at 10:54 PM on February 14, 2019: contributor
    ==> out <==
    make: Entering directory '/home/dongcarl/src/bitcoin/v0.17.1-guix/src'
    Checking glibc back compat...
    qt/bitcoin-qt: NEEDED library libexpat.so.1 is not allowed
    
    ==> err <==
    make: *** [Makefile:11768: check-symbols] Error 1
    

    What's curious about this is that in our releases, libexpat shows up when I do ldd bitcoin-qt:

            libexpat.so.1 => /usr/lib/libexpat.so.1 (0x00007f7e48c95000)
    

    which is almost identical to how it shows up when I do ldd src/qt/bitcoin-qt on my builds:

            libexpat.so.1 => /usr/lib/libexpat.so.1 (0x00007fe212e8a000)
    

    Maybe I'm understanding how linkers work incorrectly, but will continue digging.

               $ objdump -p /path/to/program | grep NEEDED
    
           Note, however, that this alternative shows only the direct dependencies of the executable, while ldd shows the entire dependency tree of the executable.
    
  23. dongcarl commented at 12:51 AM on February 15, 2019: member

    @wtogami Good find! Here it is for my Guix container build of bitcoin-qt:

      NEEDED               libpthread.so.0
      NEEDED               libdl.so.2
      NEEDED               libm.so.6
      NEEDED               libfontconfig.so.1
      NEEDED               libexpat.so.1
      NEEDED               libfreetype.so.6
      NEEDED               libX11-xcb.so.1
      NEEDED               libX11.so.6
      NEEDED               libxcb.so.1
      NEEDED               librt.so.1
      NEEDED               libgcc_s.so.1
      NEEDED               libc.so.6
      NEEDED               ld-linux-x86-64.so.2
    

    Here it is for the release version of bitcoin-qt:

      NEEDED               libpthread.so.0
      NEEDED               libdl.so.2
      NEEDED               libm.so.6
      NEEDED               libfontconfig.so.1
      NEEDED               libfreetype.so.6
      NEEDED               libX11-xcb.so.1
      NEEDED               libX11.so.6
      NEEDED               libxcb.so.1
      NEEDED               librt.so.1
      NEEDED               libgcc_s.so.1
      NEEDED               libc.so.6
      NEEDED               ld-linux-x86-64.so.2
    

    It would seem that libexpat.so.1 is a direct dependency of the Guix build version but not the release version.

  24. in contrib/guix/build.sh:3 in af6149ebfa outdated
       0 | @@ -0,0 +1,39 @@
       1 | +#!/bin/sh
       2 | +
    


    fanquake commented at 2:36 AM on February 15, 2019:

    Can you add export LC_ALL=C to make Travis happy.


    MarcoFalke commented at 3:40 PM on March 18, 2019:

    @dongcarl ^ ?

  25. in depends/funcs.mk:81 in af6149ebfa outdated
      76 | @@ -77,7 +77,7 @@ $(1)_download_path_fixed=$(subst :,\:,$$($(1)_download_path))
      77 |  
      78 |  #default commands
      79 |  $(1)_fetch_cmds ?= $(call fetch_file,$(1),$(subst \:,:,$$($(1)_download_path_fixed)),$$($(1)_download_file),$($(1)_file_name),$($(1)_sha256_hash))
      80 | -$(1)_extract_cmds ?= mkdir -p $$($(1)_extract_dir) && echo "$$($(1)_sha256_hash)  $$($(1)_source)" > $$($(1)_extract_dir)/.$$($(1)_file_name).hash &&  $(build_SHA256SUM) -c $$($(1)_extract_dir)/.$$($(1)_file_name).hash && tar --strip-components=1 -xf $$($(1)_source)
      81 | +$(1)_extract_cmds ?= mkdir -p $$($(1)_extract_dir) && echo "$$($(1)_sha256_hash)  $$($(1)_source)" > $$($(1)_extract_dir)/.$$($(1)_file_name).hash &&  $(build_SHA256SUM) -c $$($(1)_extract_dir)/.$$($(1)_file_name).hash && tar --no-same-owner --strip-components=1 -xf $$($(1)_source)
    


    fanquake commented at 2:45 AM on February 15, 2019:

    Looks like the additions of --no-same-owner to tar commands inside depends is extensive.


    dongcarl commented at 9:47 PM on February 18, 2019:

    @fanquake Yup, should I make it a separate PR?


    fanquake commented at 2:26 AM on March 13, 2019:

    Resolving as this has been split in to #15581.

  26. laanwj added this to the milestone 0.19.0 on Feb 21, 2019
  27. laanwj commented at 9:03 AM on February 21, 2019: member

    Adding, optimistically, the 0.19 milestone.

  28. dongcarl commented at 7:01 PM on February 21, 2019: member

    Another observation I made today: the guix build output had

      NEEDED               libdl.so.2
    

    for bitcoind, bitcoin-cli, bitcoin-tx, and test_bitcoin, while the release versions didn't. However, bitcoin-qt had that NEED in both the guix build and the release build.

  29. in contrib/guix/manifest.scm:84 in 30bb204a4d outdated
      79 | +   "autoconf"
      80 | +   "coreutils"
      81 | +   "which"
      82 | +   "tcsh"
      83 | +   "libtool"
      84 | +   "python2"
    


    MarcoFalke commented at 9:12 PM on February 27, 2019:

    Hmm, why would we need this?

  30. MarcoFalke commented at 8:09 PM on February 28, 2019: member

    How much RAM is needed to build this? It seems that when compiling tar (or something) and running its unit tests, it OOMs

    Currently I run gitian builds on a 1CPU 4GB bionic and the below failed on a machine with 8GB

    $ guix environment --manifest=contrib/guix/manifest.scm --container --pure --no-grafts --no-substitutes
    ....
    
    
    
    146: bad next volume                                 ok
    147: file start at the beginning of a posix volume   ok
    
    Owner and Groups
    
    148: --owner and --group                             ok
    149: --owner-map and --group-map                     ok
    
    Sparse files
    
    150: sparse files                                    ok
    151: extracting sparse file over a pipe              ok
    152: storing sparse files > 8G                       ok
    153: storing long sparse file names                  ok
    Killed
    

    When I run guix environment --container --pure --no-grafts --no-substitutes tar it does not get killed.

    Full logs from above:

    stdout is empty stderr is:

    <details><summary>stderr</summary>

    guile: warning: failed to install locale
    hint: Consider installing the `glibc-utf8-locales' or `glibc-locales' package and
    defining `GUIX_LOCPATH', along these lines:
    
         guix package -i glibc-utf8-locales
         export GUIX_LOCPATH="$HOME/.guix-profile/lib/locale"
    
    See the "Application Setup" section in the manual, for more info.
    
    
    The following derivations will be built:
       /gnu/store/vhv41qv6jp628638kpi4sz4j3zn4qc6k-profile.drv
       /gnu/store/p6ip1v8qaxjqvpyb2fh5xcs4zvxp79b0-info-dir.drv
       /gnu/store/ry9v3ggm7w4f8yg8vdgag70mzzvhr7sb-xz-5.2.4.tar.gz.drv
       /gnu/store/xfvxiv4vz34kffr48y9r5q7v0ng9sl2w-certdata2pem-2013.drv
       /gnu/store/aiyyn6psglsh74irdpb4xjckwx2ab0f7-xtrans-1.3.5.tar.bz2.drv
       /gnu/store/p22bal0ia4zwjnip1ygspasw0ihqbllb-xtrans-1.3.5.drv
       /gnu/store/ir6k33mr9qilg55sb9p0ip8md2fsip31-xcb-proto-1.13.tar.bz2.drv
       /gnu/store/f98gcg2vl9jga7a97r2rqlz3mzbqhzpl-python-minimal-3.7.0.drv
       /gnu/store/jm5j862fm8ir4nwgabs1l5f79ngzki5r-libxslt-1.1.32.drv
       /gnu/store/xgzvalqpjzrhrwx91j2n2q3sy1n2frwi-xcb-proto-1.13.drv
       /gnu/store/z2rs4kjpk93sbx3wjayrkpy8r4s9vg45-python-minimal-wrapper-3.7.0.drv
       /gnu/store/8as0ncngkj4agfjgww14m7kmk0ixl77j-fontconfig-2.13.1.drv
       /gnu/store/ai77aiv2zadhx9q8c3q6bfikvhdds9hp-libxft-2.3.2.drv
       /gnu/store/kn049rjvb6in7mprrkinzhgk1rxvg3fn-libxrender-0.9.10.drv
       /gnu/store/m7wznzi150l1xmzd4q3spakjfd45bgvf-xorgproto-2018.4.tar.bz2.drv
       /gnu/store/vm171sqh8872sa5d3w09bbf4dgzbciqs-util-macros-1.19.2.tar.bz2.drv
       /gnu/store/3ch9p55s0k01n1adqywlyyyhij318h3b-libxext-1.3.3.drv
       /gnu/store/3fhgy83diq5gb1cd26pysy4v2a1xcrj6-util-macros-1.19.2.drv
       /gnu/store/7s8mbaw3qrwldilcjm2ixw3ziacsjbb0-xorgproto-2018.4.drv
       /gnu/store/ikvkgar6yscbrg0n1nhiri305xk9qq48-tk-8.6.8.drv
       /gnu/store/pybyi9shr94xk27xxhrh5bxf57i8kapc-libxcb-1.13.drv
       /gnu/store/vh5iib4gysm7gbamqd7fi03ngvlfc9kn-libx11-1.6.6.drv
       /gnu/store/vvm5b4m9z5h49pphmwi2b38rz8jqnykp-libxau-1.0.8.drv
       /gnu/store/xsk9mn6kjbpvl4ayxh0hwm65p0fcvlwx-libxdmcp-1.1.2.drv
       /gnu/store/v1zzsnhnjrjsxbkk191n003187pl2x7m-util-linux-2.32.1.tar.xz.drv
       /gnu/store/5s2zhcmxz4b544mh71m0np880njwms70-net-base-5.3.drv
       /gnu/store/l10arjy2qx9wdvb2ww5czc03yiiiq16j-util-linux-2.32.1.tar.xz.drv
       /gnu/store/b78vb0m6gqadlhq6x9128md2kmrwhz7f-ca-certificate-bundle.drv
       /gnu/store/szrgb5jydahaxi9hfwlg38p04xzjqfxz-shishi-1.0.2.drv
       /gnu/store/1liq09a42rg51i2jsyav248jn4kb92bh-tzdata2018d.tar.gz.drv
       /gnu/store/xn642asrl27q5zdcpfb8jm6x3r8k64bx-tzcode2018d.tar.gz.drv
       /gnu/store/ha6aplh18j0mwm962f9m3gy7l5bb5xv5-libxml2-2.9.8.drv
       /gnu/store/j96ymnrypiwj0wg8vq3z26ncaa65rp95-tzdata-2018d.drv
       /gnu/store/0r4vmf2gv1h1627lixj8qxgnc25d00dx-python-wrapper-3.7.0.drv
       /gnu/store/0zklfyrrdw65c2q2972imdji0dy5yar8-libtiff-4.0.9.drv
       /gnu/store/dam9vx59xa6vvyzv60d9iv7vkm4nrcrn-tcl-8.6.8.drv
       /gnu/store/5l79hasx8c91rmcn3lk9s2a468idzfz8-ghostscript-9.24.drv
       /gnu/store/d077q0lpmlc0j78mgkrv89jyadbl7288-groff-1.22.3.drv
       /gnu/store/h0wghrjf1x7aqr3f5f59wvm15zav9plv-nghttp2-1.32.0.drv
       /gnu/store/mcykd75g6p353zrhx0wprnxyn3g7r8qd-gss-1.0.3.drv
       /gnu/store/s9jq43dj4wysb90kl9qk3r0sdwacqczl-openldap-2.4.46.drv
       /gnu/store/mw8ykj23iikxpm3p1z3j5vbf7i1zm0cr-which-2.21.tar.gz.drv
       /gnu/store/1zbzjr3acwjkz5f9bxf5way8qffy5va0-fonts-dir.drv
       /gnu/store/caa8w4lrzx8i8h2sy7c9y4npykblpw6r-pcre-8.42.drv
       /gnu/store/24g01xjcl4kg15nbf8z9sfsyldf9qvgf-gcc-8.2.0.drv
       /gnu/store/1jxh89f4fm9x8iniy1hw7xark15794cf-gcc-toolchain-8.2.0.drv
       /gnu/store/1sf91y8n6l9264s2h50fg7fd2nip1v2y-tcsh-6.20.00.drv
       /gnu/store/1w2ssg0lr638ix7gjv09v91hnl8fpmr4-grep-3.1.drv
       /gnu/store/5ainc4iplmapdby5k25g6kg6dixij6pn-which-2.21.drv
       /gnu/store/7k6a4cw5ij8hzfb67xb35fya2dc7b17m-curl-7.62.0.drv
       /gnu/store/b9vd4y9ayjhfkpf5r9394h6qjz1v6422-util-linux-2.32.1.drv
       /gnu/store/h9m9pzcycbqik310fkfs947j8fcjiach-python-3.7.0.drv
       /gnu/store/jkv17qls0wc8wa1827r339j2c7srx0ps-nss-certs-3.39.drv
       /gnu/store/ls2gzc9dls3mfii18xx79cangf25v1gn-python2-2.7.15.drv
       /gnu/store/n916hx1hb2b19fypa34q6874kfs3h63z-xz-5.2.4.drv
       /gnu/store/njbrqkirhklq4c7vdj5fk6x1x1pgpi8m-tar-1.30.drv
       /gnu/store/x4pkx320q9mjawy5hhafbv841jlip0q1-manual-database.drv
    guile: warning: failed to install locale
    hint: Consider installing the `glibc-utf8-locales' or `glibc-locales' package and
    defining `GUIX_LOCPATH', along these lines:
    
         guix package -i glibc-utf8-locales
         export GUIX_LOCPATH="$HOME/.guix-profile/lib/locale"
    
    See the "Application Setup" section in the manual, for more info.
    
    
    building /gnu/store/njbrqkirhklq4c7vdj5fk6x1x1pgpi8m-tar-1.30.drv...
    starting phase `set-SOURCE-DATE-EPOCH'
    phase `set-SOURCE-DATE-EPOCH' succeeded after 0.0 seconds
    starting phase `set-paths'
    environment variable `PATH' set to `/gnu/store/bl3pxxj6frg0dww8pj5dvh2d1akwvj47-tar-1.30/bin:/gnu/store/h0c398zan9ibhk4w0c944vp5pwgzkfpd-gzip-1.9/bin:/gnu/store/j74aabxwayjl9yfyrm6ni482gykxq48b-bzip2-1.0.6/bin:/gnu/store/9425b5dwpfc04bb4p58hsjypxghliyr3-xz-5.2.4/bin:/gnu/store/ypiyk8ngn79cz655jrl0hng37xv54yjr-file-5.33/bin:/gnu/store/4bzzz0lzjc9b7bfsnqbq2j22d4fvf433-diffutils-3.6/bin:/gnu/store/a4rxl40jr7gmq8bp3dryq4yq67cwkwiw-patch-2.7.6/bin:/gnu/store/fd621k6fmdnr1yiw0lbvw5spqaa169j3-findutils-4.6.0/bin:/gnu/store/l67sib1ld0fgyf0f4vrzyxnmn4yvimvb-gawk-4.2.1/bin:/gnu/store/lmfddplnplxd03bcqv3w9pynbnr1fp8k-sed-4.5/bin:/gnu/store/02k245xy33cvcnr8vm3lagm9zmb1s2wa-grep-3.1/bin:/gnu/store/5s2nib1lrd2101bbrivcl17kjx1mspw6-coreutils-8.30/bin:/gnu/store/7j3941iannrngdvgbclyxid12vds5w9i-make-4.2.1/bin:/gnu/store/q19l04vd2za80mk1845pz7r8cz29qk43-bash-minimal-4.4.23/bin:/gnu/store/9ysmg2739n1ms84lx6hifncgc5l2hiy9-ld-wrapper-0/bin:/gnu/store/02iklp4swqs0ipxhg5x9b2shmj6b30h1-binutils-2.31.1/bin:/gnu/store/n2p1zs14y89lwkg9da68y12pc10c6sw9-gcc-5.5.0/bin:/gnu/store/h90vnqw0nwd0hhm1l5dgxsdrigddfmq4-glibc-2.28/bin:/gnu/store/h90vnqw0nwd0hhm1l5dgxsdrigddfmq4-glibc-2.28/sbin'
    environment variable `BASH_LOADABLES_PATH' unset
    environment variable `C_INCLUDE_PATH' set to `/gnu/store/j74aabxwayjl9yfyrm6ni482gykxq48b-bzip2-1.0.6/include:/gnu/store/9425b5dwpfc04bb4p58hsjypxghliyr3-xz-5.2.4/include:/gnu/store/ypiyk8ngn79cz655jrl0hng37xv54yjr-file-5.33/include:/gnu/store/l67sib1ld0fgyf0f4vrzyxnmn4yvimvb-gawk-4.2.1/include:/gnu/store/7j3941iannrngdvgbclyxid12vds5w9i-make-4.2.1/include:/gnu/store/02iklp4swqs0ipxhg5x9b2shmj6b30h1-binutils-2.31.1/include:/gnu/store/n2p1zs14y89lwkg9da68y12pc10c6sw9-gcc-5.5.0/include:/gnu/store/h90vnqw0nwd0hhm1l5dgxsdrigddfmq4-glibc-2.28/include:/gnu/store/xha1mk4qji8fmg62nygfzdx0l94ikdhm-linux-libre-headers-4.14.67/include'
    environment variable `CPLUS_INCLUDE_PATH' set to `/gnu/store/j74aabxwayjl9yfyrm6ni482gykxq48b-bzip2-1.0.6/include:/gnu/store/9425b5dwpfc04bb4p58hsjypxghliyr3-xz-5.2.4/include:/gnu/store/ypiyk8ngn79cz655jrl0hng37xv54yjr-file-5.33/include:/gnu/store/l67sib1ld0fgyf0f4vrzyxnmn4yvimvb-gawk-4.2.1/include:/gnu/store/7j3941iannrngdvgbclyxid12vds5w9i-make-4.2.1/include:/gnu/store/02iklp4swqs0ipxhg5x9b2shmj6b30h1-binutils-2.31.1/include:/gnu/store/n2p1zs14y89lwkg9da68y12pc10c6sw9-gcc-5.5.0/include:/gnu/store/h90vnqw0nwd0hhm1l5dgxsdrigddfmq4-glibc-2.28/include:/gnu/store/xha1mk4qji8fmg62nygfzdx0l94ikdhm-linux-libre-headers-4.14.67/include'
    environment variable `LIBRARY_PATH' set to `/gnu/store/j74aabxwayjl9yfyrm6ni482gykxq48b-bzip2-1.0.6/lib:/gnu/store/9425b5dwpfc04bb4p58hsjypxghliyr3-xz-5.2.4/lib:/gnu/store/ypiyk8ngn79cz655jrl0hng37xv54yjr-file-5.33/lib:/gnu/store/l67sib1ld0fgyf0f4vrzyxnmn4yvimvb-gawk-4.2.1/lib:/gnu/store/02iklp4swqs0ipxhg5x9b2shmj6b30h1-binutils-2.31.1/lib:/gnu/store/h90vnqw0nwd0hhm1l5dgxsdrigddfmq4-glibc-2.28/lib:/gnu/store/a3p8zc23w5asxck5h4mswz4s8yl9s6pa-glibc-2.28-static/lib:/gnu/store/mn3ymm3f2r4xjqf8m9fgmadh6b8p6fvr-glibc-utf8-locales-2.28/lib'
    environment variable `GUIX_LOCPATH' set to `/gnu/store/mn3ymm3f2r4xjqf8m9fgmadh6b8p6fvr-glibc-utf8-locales-2.28/lib/locale'
    phase `set-paths' succeeded after 0.0 seconds
    starting phase `install-locale'
    using 'en_US.utf8' locale for category "LC_ALL"
    phase `install-locale' succeeded after 0.0 seconds
    starting phase `unpack'
    tar-1.30/
    tar-1.30/ABOUT-NLS
    tar-1.30/AUTHORS
    tar-1.30/COPYING
    tar-1.30/ChangeLog
    tar-1.30/ChangeLog.1
    tar-1.30/INSTALL
    tar-1.30/Make.rules
    tar-1.30/Makefile.am
    tar-1.30/Makefile.in
    tar-1.30/NEWS
    tar-1.30/README
    tar-1.30/THANKS
    tar-1.30/TODO
    tar-1.30/acinclude.m4
    tar-1.30/aclocal.m4
    tar-1.30/build-aux/
    tar-1.30/build-aux/ar-lib
    tar-1.30/build-aux/compile
    tar-1.30/build-aux/config.guess
    tar-1.30/build-aux/config.rpath
    tar-1.30/build-aux/config.sub
    tar-1.30/build-aux/depcomp
    tar-1.30/build-aux/gitlog-to-changelog
    tar-1.30/build-aux/install-sh
    tar-1.30/build-aux/mdate-sh
    tar-1.30/build-aux/missing
    tar-1.30/build-aux/texinfo.tex
    tar-1.30/build-aux/ylwrap
    tar-1.30/config.h.in
    tar-1.30/configure
    tar-1.30/configure.ac
    tar-1.30/doc/
    tar-1.30/doc/Makefile.am
    tar-1.30/doc/Makefile.in
    tar-1.30/doc/dumpdir.texi
    tar-1.30/doc/fdl.texi
    tar-1.30/doc/freemanuals.texi
    tar-1.30/doc/gendocs_template
    tar-1.30/doc/genfile.texi
    tar-1.30/doc/header.texi
    tar-1.30/doc/intern.texi
    tar-1.30/doc/mastermenu.el
    tar-1.30/doc/parse-datetime.texi
    tar-1.30/doc/recipes.texi
    tar-1.30/doc/rendition.texi
    tar-1.30/doc/rmt.8
    tar-1.30/doc/snapshot.texi
    tar-1.30/doc/sparse.texi
    tar-1.30/doc/stamp-vti
    tar-1.30/doc/tar-snapshot-edit.texi
    tar-1.30/doc/tar.1
    tar-1.30/doc/tar.info
    tar-1.30/doc/tar.info-1
    tar-1.30/doc/tar.info-2
    tar-1.30/doc/tar.texi
    tar-1.30/doc/texify.sed
    tar-1.30/doc/untabify.el
    tar-1.30/doc/value.texi
    tar-1.30/doc/version.texi
    tar-1.30/gnu/
    tar-1.30/gnu/Makefile.am
    tar-1.30/gnu/Makefile.in
    tar-1.30/gnu/_Noreturn.h
    tar-1.30/gnu/acl-errno-valid.c
    tar-1.30/gnu/acl-internal.c
    tar-1.30/gnu/acl-internal.h
    tar-1.30/gnu/acl.h
    tar-1.30/gnu/acl_entries.c
    tar-1.30/gnu/alignof.h
    tar-1.30/gnu/alloca.c
    tar-1.30/gnu/alloca.in.h
    tar-1.30/gnu/allocator.c
    tar-1.30/gnu/allocator.h
    tar-1.30/gnu/anytostr.c
    tar-1.30/gnu/areadlink-with-size.c
    tar-1.30/gnu/areadlink.c
    tar-1.30/gnu/areadlink.h
    tar-1.30/gnu/areadlinkat-with-size.c
    tar-1.30/gnu/areadlinkat.c
    tar-1.30/gnu/arg-nonnull.h
    tar-1.30/gnu/argmatch.c
    tar-1.30/gnu/argmatch.h
    tar-1.30/gnu/argp-ba.c
    tar-1.30/gnu/argp-eexst.c
    tar-1.30/gnu/argp-fmtstream.c
    tar-1.30/gnu/argp-fmtstream.h
    tar-1.30/gnu/argp-fs-xinl.c
    tar-1.30/gnu/argp-help.c
    tar-1.30/gnu/argp-namefrob.h
    tar-1.30/gnu/argp-parse.c
    tar-1.30/gnu/argp-pin.c
    tar-1.30/gnu/argp-pv.c
    tar-1.30/gnu/argp-pvh.c
    tar-1.30/gnu/argp-version-etc.c
    tar-1.30/gnu/argp-version-etc.h
    tar-1.30/gnu/argp-xinl.c
    tar-1.30/gnu/argp.h
    tar-1.30/gnu/asnprintf.c
    tar-1.30/gnu/asprintf.c
    tar-1.30/gnu/assure.h
    tar-1.30/gnu/at-func.c
    tar-1.30/gnu/at-func2.c
    tar-1.30/gnu/backup-find.c
    tar-1.30/gnu/backup-internal.h
    tar-1.30/gnu/backupfile.c
    tar-1.30/gnu/backupfile.h
    tar-1.30/gnu/basename-lgpl.c
    tar-1.30/gnu/basename.c
    tar-1.30/gnu/bitrotate.c
    tar-1.30/gnu/bitrotate.h
    tar-1.30/gnu/btowc.c
    tar-1.30/gnu/c++defs.h
    tar-1.30/gnu/c-ctype.c
    tar-1.30/gnu/c-ctype.h
    tar-1.30/gnu/c-strcase.h
    tar-1.30/gnu/c-strcasecmp.c
    tar-1.30/gnu/c-strcaseeq.h
    tar-1.30/gnu/c-strncasecmp.c
    tar-1.30/gnu/canonicalize-lgpl.c
    tar-1.30/gnu/careadlinkat.c
    tar-1.30/gnu/careadlinkat.h
    tar-1.30/gnu/chdir-long.c
    tar-1.30/gnu/chdir-long.h
    tar-1.30/gnu/chmodat.c
    tar-1.30/gnu/chown.c
    tar-1.30/gnu/chownat.c
    tar-1.30/gnu/cloexec.c
    tar-1.30/gnu/cloexec.h
    tar-1.30/gnu/close-stream.c
    tar-1.30/gnu/close-stream.h
    tar-1.30/gnu/close.c
    tar-1.30/gnu/closedir.c
    tar-1.30/gnu/closeout.c
    tar-1.30/gnu/closeout.h
    tar-1.30/gnu/config.charset
    tar-1.30/gnu/dirent--.h
    tar-1.30/gnu/dirent-private.h
    tar-1.30/gnu/dirent-safer.h
    tar-1.30/gnu/dirent.in.h
    tar-1.30/gnu/dirfd.c
    tar-1.30/gnu/dirname-lgpl.c
    tar-1.30/gnu/dirname.c
    tar-1.30/gnu/dirname.h
    tar-1.30/gnu/dosname.h
    tar-1.30/gnu/dup-safer-flag.c
    tar-1.30/gnu/dup-safer.c
    tar-1.30/gnu/dup.c
    tar-1.30/gnu/dup2.c
    tar-1.30/gnu/errno.in.h
    tar-1.30/gnu/error.c
    tar-1.30/gnu/error.h
    tar-1.30/gnu/euidaccess.c
    tar-1.30/gnu/exclude.c
    tar-1.30/gnu/exclude.h
    tar-1.30/gnu/exitfail.c
    tar-1.30/gnu/exitfail.h
    tar-1.30/gnu/faccessat.c
    tar-1.30/gnu/fchdir.c
    tar-1.30/gnu/fchmodat.c
    tar-1.30/gnu/fchown-stub.c
    tar-1.30/gnu/fchownat.c
    tar-1.30/gnu/fcntl.c
    tar-1.30/gnu/fcntl.in.h
    tar-1.30/gnu/fd-hook.c
    tar-1.30/gnu/fd-hook.h
    tar-1.30/gnu/fd-safer-flag.c
    tar-1.30/gnu/fd-safer.c
    tar-1.30/gnu/fdopendir.c
    tar-1.30/gnu/fdutimensat.c
    tar-1.30/gnu/file-has-acl.c
    tar-1.30/gnu/fileblocks.c
    tar-1.30/gnu/filename.h
    tar-1.30/gnu/filenamecat-lgpl.c
    tar-1.30/gnu/filenamecat.h
    tar-1.30/gnu/flexmember.h
    tar-1.30/gnu/float+.h
    tar-1.30/gnu/float.c
    tar-1.30/gnu/float.in.h
    tar-1.30/gnu/fnmatch.c
    tar-1.30/gnu/fnmatch.in.h
    tar-1.30/gnu/fnmatch_loop.c
    tar-1.30/gnu/fpending.c
    tar-1.30/gnu/fpending.h
    tar-1.30/gnu/fprintftime.c
    tar-1.30/gnu/fprintftime.h
    tar-1.30/gnu/fseek.c
    tar-1.30/gnu/fseeko.c
    tar-1.30/gnu/fstat.c
    tar-1.30/gnu/fstatat.c
    tar-1.30/gnu/full-write.c
    tar-1.30/gnu/full-write.h
    tar-1.30/gnu/futimens.c
    tar-1.30/gnu/get-permissions.c
    tar-1.30/gnu/getcwd-lgpl.c
    tar-1.30/gnu/getcwd.c
    tar-1.30/gnu/getdelim.c
    tar-1.30/gnu/getdtablesize.c
    tar-1.30/gnu/getfilecon.c
    tar-1.30/gnu/getgroups.c
    tar-1.30/gnu/getline.c
    tar-1.30/gnu/getopt-cdefs.in.h
    tar-1.30/gnu/getopt-core.h
    tar-1.30/gnu/getopt-ext.h
    tar-1.30/gnu/getopt-pfx-core.h
    tar-1.30/gnu/getopt-pfx-ext.h
    tar-1.30/gnu/getopt.c
    tar-1.30/gnu/getopt.in.h
    tar-1.30/gnu/getopt1.c
    tar-1.30/gnu/getopt_int.h
    tar-1.30/gnu/getpagesize.c
    tar-1.30/gnu/getprogname.c
    tar-1.30/gnu/getprogname.h
    tar-1.30/gnu/gettext.h
    tar-1.30/gnu/gettime.c
    tar-1.30/gnu/gettimeofday.c
    tar-1.30/gnu/group-member.c
    tar-1.30/gnu/hard-locale.c
    tar-1.30/gnu/hard-locale.h
    tar-1.30/gnu/hash.c
    tar-1.30/gnu/hash.h
    tar-1.30/gnu/human.c
    tar-1.30/gnu/human.h
    tar-1.30/gnu/imaxtostr.c
    tar-1.30/gnu/intprops.h
    tar-1.30/gnu/inttostr.c
    tar-1.30/gnu/inttostr.h
    tar-1.30/gnu/inttypes.in.h
    tar-1.30/gnu/iswblank.c
    tar-1.30/gnu/itold.c
    tar-1.30/gnu/langinfo.in.h
    tar-1.30/gnu/lchown.c
    tar-1.30/gnu/limits.in.h
    tar-1.30/gnu/link.c
    tar-1.30/gnu/linkat.c
    tar-1.30/gnu/localcharset.c
    tar-1.30/gnu/localcharset.h
    tar-1.30/gnu/locale.in.h
    tar-1.30/gnu/localeconv.c
    tar-1.30/gnu/localtime-buffer.c
    tar-1.30/gnu/localtime-buffer.h
    tar-1.30/gnu/lseek.c
    tar-1.30/gnu/lstat.c
    tar-1.30/gnu/malloc.c
    tar-1.30/gnu/malloca.c
    tar-1.30/gnu/malloca.h
    tar-1.30/gnu/malloca.valgrind
    tar-1.30/gnu/mbchar.c
    tar-1.30/gnu/mbchar.h
    tar-1.30/gnu/mbrtowc.c
    tar-1.30/gnu/mbscasecmp.c
    tar-1.30/gnu/mbsinit.c
    tar-1.30/gnu/mbsrtowcs-impl.h
    tar-1.30/gnu/mbsrtowcs-state.c
    tar-1.30/gnu/mbsrtowcs.c
    tar-1.30/gnu/mbtowc-impl.h
    tar-1.30/gnu/mbtowc.c
    tar-1.30/gnu/mbuiter.c
    tar-1.30/gnu/mbuiter.h
    tar-1.30/gnu/memchr.c
    tar-1.30/gnu/memchr.valgrind
    tar-1.30/gnu/mempcpy.c
    tar-1.30/gnu/memrchr.c
    tar-1.30/gnu/minmax.h
    tar-1.30/gnu/mkdir.c
    tar-1.30/gnu/mkdirat.c
    tar-1.30/gnu/mkdtemp.c
    tar-1.30/gnu/mkfifo.c
    tar-1.30/gnu/mkfifoat.c
    tar-1.30/gnu/mknod.c
    tar-1.30/gnu/mknodat.c
    tar-1.30/gnu/mktime-internal.h
    tar-1.30/gnu/mktime.c
    tar-1.30/gnu/modechange.c
    tar-1.30/gnu/modechange.h
    tar-1.30/gnu/msvc-inval.c
    tar-1.30/gnu/msvc-inval.h
    tar-1.30/gnu/msvc-nothrow.c
    tar-1.30/gnu/msvc-nothrow.h
    tar-1.30/gnu/nl_langinfo.c
    tar-1.30/gnu/nstrftime.c
    tar-1.30/gnu/obstack.c
    tar-1.30/gnu/obstack.h
    tar-1.30/gnu/offtostr.c
    tar-1.30/gnu/open.c
    tar-1.30/gnu/openat-die.c
    tar-1.30/gnu/openat-priv.h
    tar-1.30/gnu/openat-proc.c
    tar-1.30/gnu/openat.c
    tar-1.30/gnu/openat.h
    tar-1.30/gnu/opendir-safer.c
    tar-1.30/gnu/opendir.c
    tar-1.30/gnu/parse-datetime.c
    tar-1.30/gnu/parse-datetime.h
    tar-1.30/gnu/parse-datetime.y
    tar-1.30/gnu/pathmax.h
    tar-1.30/gnu/pipe-safer.c
    tar-1.30/gnu/printf-args.c
    tar-1.30/gnu/printf-args.h
    tar-1.30/gnu/printf-parse.c
    tar-1.30/gnu/printf-parse.h
    tar-1.30/gnu/priv-set.c
    tar-1.30/gnu/priv-set.h
    tar-1.30/gnu/progname.c
    tar-1.30/gnu/progname.h
    tar-1.30/gnu/quote.h
    tar-1.30/gnu/quotearg.c
    tar-1.30/gnu/quotearg.h
    tar-1.30/gnu/raise.c
    tar-1.30/gnu/rawmemchr.c
    tar-1.30/gnu/rawmemchr.valgrind
    tar-1.30/gnu/read.c
    tar-1.30/gnu/readdir.c
    tar-1.30/gnu/readlink.c
    tar-1.30/gnu/readlinkat.c
    tar-1.30/gnu/realloc.c
    tar-1.30/gnu/ref-add.sin
    tar-1.30/gnu/ref-del.sin
    tar-1.30/gnu/regcomp.c
    tar-1.30/gnu/regex.c
    tar-1.30/gnu/regex.h
    tar-1.30/gnu/regex_internal.c
    tar-1.30/gnu/regex_internal.h
    tar-1.30/gnu/regexec.c
    tar-1.30/gnu/rename.c
    tar-1.30/gnu/renameat.c
    tar-1.30/gnu/renameat2.c
    tar-1.30/gnu/renameat2.h
    tar-1.30/gnu/rewinddir.c
    tar-1.30/gnu/rmdir.c
    tar-1.30/gnu/root-uid.h
    tar-1.30/gnu/rpmatch.c
    tar-1.30/gnu/safe-read.c
    tar-1.30/gnu/safe-read.h
    tar-1.30/gnu/safe-write.c
    tar-1.30/gnu/safe-write.h
    tar-1.30/gnu/same-inode.h
    tar-1.30/gnu/save-cwd.c
    tar-1.30/gnu/save-cwd.h
    tar-1.30/gnu/savedir.c
    tar-1.30/gnu/savedir.h
    tar-1.30/gnu/se-context.c
    tar-1.30/gnu/se-context.in.h
    tar-1.30/gnu/se-selinux.c
    tar-1.30/gnu/se-selinux.in.h
    tar-1.30/gnu/selinux-at.c
    tar-1.30/gnu/selinux-at.h
    tar-1.30/gnu/set-permissions.c
    tar-1.30/gnu/setenv.c
    tar-1.30/gnu/signal.in.h
    tar-1.30/gnu/size_max.h
    tar-1.30/gnu/sleep.c
    tar-1.30/gnu/snprintf.c
    tar-1.30/gnu/stat-macros.h
    tar-1.30/gnu/stat-time.c
    tar-1.30/gnu/stat-time.h
    tar-1.30/gnu/stat-w32.c
    tar-1.30/gnu/stat-w32.h
    tar-1.30/gnu/stat.c
    tar-1.30/gnu/statat.c
    tar-1.30/gnu/stdalign.in.h
    tar-1.30/gnu/stdarg.in.h
    tar-1.30/gnu/stdbool.in.h
    tar-1.30/gnu/stddef.in.h
    tar-1.30/gnu/stdint.in.h
    tar-1.30/gnu/stdio-impl.h
    tar-1.30/gnu/stdio.in.h
    tar-1.30/gnu/stdlib.in.h
    tar-1.30/gnu/stpcpy.c
    tar-1.30/gnu/strcasecmp.c
    tar-1.30/gnu/strchrnul.c
    tar-1.30/gnu/strchrnul.valgrind
    tar-1.30/gnu/strdup.c
    tar-1.30/gnu/streq.h
    tar-1.30/gnu/strerror-override.c
    tar-1.30/gnu/strerror-override.h
    tar-1.30/gnu/strerror.c
    tar-1.30/gnu/strftime.h
    tar-1.30/gnu/string.in.h
    tar-1.30/gnu/strings.in.h
    tar-1.30/gnu/stripslash.c
    tar-1.30/gnu/strncasecmp.c
    tar-1.30/gnu/strndup.c
    tar-1.30/gnu/strnlen.c
    tar-1.30/gnu/strnlen1.c
    tar-1.30/gnu/strnlen1.h
    tar-1.30/gnu/strtoimax.c
    tar-1.30/gnu/strtol.c
    tar-1.30/gnu/strtoll.c
    tar-1.30/gnu/strtoul.c
    tar-1.30/gnu/strtoull.c
    tar-1.30/gnu/strtoumax.c
    tar-1.30/gnu/symlink.c
    tar-1.30/gnu/symlinkat.c
    tar-1.30/gnu/sys_stat.in.h
    tar-1.30/gnu/sys_time.in.h
    tar-1.30/gnu/sys_types.in.h
    tar-1.30/gnu/sysexits.in.h
    tar-1.30/gnu/tempname.c
    tar-1.30/gnu/tempname.h
    tar-1.30/gnu/time-internal.h
    tar-1.30/gnu/time.in.h
    tar-1.30/gnu/time_r.c
    tar-1.30/gnu/time_rz.c
    tar-1.30/gnu/timegm.c
    tar-1.30/gnu/timespec-sub.c
    tar-1.30/gnu/timespec.c
    tar-1.30/gnu/timespec.h
    tar-1.30/gnu/tzset.c
    tar-1.30/gnu/uinttostr.c
    tar-1.30/gnu/umaxtostr.c
    tar-1.30/gnu/unistd--.h
    tar-1.30/gnu/unistd-safer.h
    tar-1.30/gnu/unistd.c
    tar-1.30/gnu/unistd.in.h
    tar-1.30/gnu/unitypes.in.h
    tar-1.30/gnu/uniwidth/
    tar-1.30/gnu/uniwidth/cjk.h
    tar-1.30/gnu/uniwidth/width.c
    tar-1.30/gnu/uniwidth.in.h
    tar-1.30/gnu/unlink.c
    tar-1.30/gnu/unlinkat.c
    tar-1.30/gnu/unlinkdir.c
    tar-1.30/gnu/unlinkdir.h
    tar-1.30/gnu/unlocked-io.h
    tar-1.30/gnu/unsetenv.c
    tar-1.30/gnu/unused-parameter.h
    tar-1.30/gnu/utime.c
    tar-1.30/gnu/utime.in.h
    tar-1.30/gnu/utimens.c
    tar-1.30/gnu/utimens.h
    tar-1.30/gnu/utimensat.c
    tar-1.30/gnu/vasnprintf.c
    tar-1.30/gnu/vasnprintf.h
    tar-1.30/gnu/vasprintf.c
    tar-1.30/gnu/verify.h
    tar-1.30/gnu/version-etc-fsf.c
    tar-1.30/gnu/version-etc.c
    tar-1.30/gnu/version-etc.h
    tar-1.30/gnu/vsnprintf.c
    tar-1.30/gnu/warn-on-use.h
    tar-1.30/gnu/wchar.in.h
    tar-1.30/gnu/wcrtomb.c
    tar-1.30/gnu/wctype-h.c
    tar-1.30/gnu/wctype.in.h
    tar-1.30/gnu/wcwidth.c
    tar-1.30/gnu/write.c
    tar-1.30/gnu/xalloc-die.c
    tar-1.30/gnu/xalloc-oversized.h
    tar-1.30/gnu/xalloc.h
    tar-1.30/gnu/xasprintf.c
    tar-1.30/gnu/xgetcwd.c
    tar-1.30/gnu/xgetcwd.h
    tar-1.30/gnu/xmalloc.c
    tar-1.30/gnu/xsize.c
    tar-1.30/gnu/xsize.h
    tar-1.30/gnu/xstrndup.c
    tar-1.30/gnu/xstrndup.h
    tar-1.30/gnu/xstrtol-error.c
    tar-1.30/gnu/xstrtol.c
    tar-1.30/gnu/xstrtol.h
    tar-1.30/gnu/xstrtoul.c
    tar-1.30/gnu/xstrtoumax.c
    tar-1.30/gnu/xvasprintf.c
    tar-1.30/gnu/xvasprintf.h
    tar-1.30/lib/
    tar-1.30/lib/Makefile.am
    tar-1.30/lib/Makefile.in
    tar-1.30/lib/attr-xattr.in.h
    tar-1.30/lib/paxerror.c
    tar-1.30/lib/paxexit-status.c
    tar-1.30/lib/paxlib.h
    tar-1.30/lib/paxnames.c
    tar-1.30/lib/rmt.h
    tar-1.30/lib/rtapelib.c
    tar-1.30/lib/stdopen.c
    tar-1.30/lib/stdopen.h
    tar-1.30/lib/system-ioctl.h
    tar-1.30/lib/system.h
    tar-1.30/lib/wordsplit.c
    tar-1.30/lib/wordsplit.h
    tar-1.30/lib/xattr-at.c
    tar-1.30/lib/xattr-at.h
    tar-1.30/m4/
    tar-1.30/m4/00gnulib.m4
    tar-1.30/m4/absolute-header.m4
    tar-1.30/m4/acl.m4
    tar-1.30/m4/alloca.m4
    tar-1.30/m4/argp.m4
    tar-1.30/m4/asm-underscore.m4
    tar-1.30/m4/backupfile.m4
    tar-1.30/m4/bison.m4
    tar-1.30/m4/btowc.m4
    tar-1.30/m4/builtin-expect.m4
    tar-1.30/m4/canonicalize.m4
    tar-1.30/m4/chdir-long.m4
    tar-1.30/m4/chown.m4
    tar-1.30/m4/clock_time.m4
    tar-1.30/m4/close-stream.m4
    tar-1.30/m4/close.m4
    tar-1.30/m4/closedir.m4
    tar-1.30/m4/closeout.m4
    tar-1.30/m4/codeset.m4
    tar-1.30/m4/configmake.m4
    tar-1.30/m4/d-ino.m4
    tar-1.30/m4/dirent-safer.m4
    tar-1.30/m4/dirent_h.m4
    tar-1.30/m4/dirfd.m4
    tar-1.30/m4/dirname.m4
    tar-1.30/m4/double-slash-root.m4
    tar-1.30/m4/dup.m4
    tar-1.30/m4/dup2.m4
    tar-1.30/m4/eealloc.m4
    tar-1.30/m4/environ.m4
    tar-1.30/m4/errno_h.m4
    tar-1.30/m4/error.m4
    tar-1.30/m4/euidaccess.m4
    tar-1.30/m4/exponentd.m4
    tar-1.30/m4/extensions.m4
    tar-1.30/m4/extern-inline.m4
    tar-1.30/m4/faccessat.m4
    tar-1.30/m4/fchdir.m4
    tar-1.30/m4/fchmodat.m4
    tar-1.30/m4/fchownat.m4
    tar-1.30/m4/fcntl-o.m4
    tar-1.30/m4/fcntl.m4
    tar-1.30/m4/fcntl_h.m4
    tar-1.30/m4/fdopendir.m4
    tar-1.30/m4/fileblocks.m4
    tar-1.30/m4/filenamecat.m4
    tar-1.30/m4/flexmember.m4
    tar-1.30/m4/float_h.m4
    tar-1.30/m4/fnmatch.m4
    tar-1.30/m4/fpending.m4
    tar-1.30/m4/fseek.m4
    tar-1.30/m4/fseeko.m4
    tar-1.30/m4/fstat.m4
    tar-1.30/m4/fstatat.m4
    tar-1.30/m4/futimens.m4
    tar-1.30/m4/getcwd-abort-bug.m4
    tar-1.30/m4/getcwd-path-max.m4
    tar-1.30/m4/getcwd.m4
    tar-1.30/m4/getdelim.m4
    tar-1.30/m4/getdtablesize.m4
    tar-1.30/m4/getgroups.m4
    tar-1.30/m4/getline.m4
    tar-1.30/m4/getopt.m4
    tar-1.30/m4/getpagesize.m4
    tar-1.30/m4/getprogname.m4
    tar-1.30/m4/gettext.m4
    tar-1.30/m4/gettime.m4
    tar-1.30/m4/gettimeofday.m4
    tar-1.30/m4/glibc21.m4
    tar-1.30/m4/gnulib-common.m4
    tar-1.30/m4/gnulib-comp.m4
    tar-1.30/m4/group-member.m4
    tar-1.30/m4/hard-locale.m4
    tar-1.30/m4/host-cpu-c-abi.m4
    tar-1.30/m4/human.m4
    tar-1.30/m4/iconv.m4
    tar-1.30/m4/include_next.m4
    tar-1.30/m4/intlmacosx.m4
    tar-1.30/m4/intmax_t.m4
    tar-1.30/m4/inttostr.m4
    tar-1.30/m4/inttypes-pri.m4
    tar-1.30/m4/inttypes.m4
    tar-1.30/m4/inttypes_h.m4
    tar-1.30/m4/iswblank.m4
    tar-1.30/m4/langinfo_h.m4
    tar-1.30/m4/largefile.m4
    tar-1.30/m4/lchown.m4
    tar-1.30/m4/lib-ld.m4
    tar-1.30/m4/lib-link.m4
    tar-1.30/m4/lib-prefix.m4
    tar-1.30/m4/libunistring-base.m4
    tar-1.30/m4/limits-h.m4
    tar-1.30/m4/link-follow.m4
    tar-1.30/m4/link.m4
    tar-1.30/m4/linkat.m4
    tar-1.30/m4/localcharset.m4
    tar-1.30/m4/locale-fr.m4
    tar-1.30/m4/locale-ja.m4
    tar-1.30/m4/locale-zh.m4
    tar-1.30/m4/locale_h.m4
    tar-1.30/m4/localeconv.m4
    tar-1.30/m4/localtime-buffer.m4
    tar-1.30/m4/longlong.m4
    tar-1.30/m4/lseek.m4
    tar-1.30/m4/lstat.m4
    tar-1.30/m4/malloc.m4
    tar-1.30/m4/malloca.m4
    tar-1.30/m4/manywarnings.m4
    tar-1.30/m4/mbchar.m4
    tar-1.30/m4/mbiter.m4
    tar-1.30/m4/mbrtowc.m4
    tar-1.30/m4/mbsinit.m4
    tar-1.30/m4/mbsrtowcs.m4
    tar-1.30/m4/mbstate_t.m4
    tar-1.30/m4/mbtowc.m4
    tar-1.30/m4/memchr.m4
    tar-1.30/m4/mempcpy.m4
    tar-1.30/m4/memrchr.m4
    tar-1.30/m4/minmax.m4
    tar-1.30/m4/mkdir.m4
    tar-1.30/m4/mkdirat.m4
    tar-1.30/m4/mkdtemp.m4
    tar-1.30/m4/mkfifo.m4
    tar-1.30/m4/mkfifoat.m4
    tar-1.30/m4/mknod.m4
    tar-1.30/m4/mktime.m4
    tar-1.30/m4/mmap-anon.m4
    tar-1.30/m4/mode_t.m4
    tar-1.30/m4/modechange.m4
    tar-1.30/m4/msvc-inval.m4
    tar-1.30/m4/msvc-nothrow.m4
    tar-1.30/m4/multiarch.m4
    tar-1.30/m4/nl_langinfo.m4
    tar-1.30/m4/nls.m4
    tar-1.30/m4/nocrash.m4
    tar-1.30/m4/nstrftime.m4
    tar-1.30/m4/obstack.m4
    tar-1.30/m4/off_t.m4
    tar-1.30/m4/open-cloexec.m4
    tar-1.30/m4/open.m4
    tar-1.30/m4/openat.m4
    tar-1.30/m4/opendir.m4
    tar-1.30/m4/parse-datetime.m4
    tar-1.30/m4/pathmax.m4
    tar-1.30/m4/paxutils.m4
    tar-1.30/m4/po.m4
    tar-1.30/m4/printf.m4
    tar-1.30/m4/priv-set.m4
    tar-1.30/m4/progtest.m4
    tar-1.30/m4/quote.m4
    tar-1.30/m4/quotearg.m4
    tar-1.30/m4/raise.m4
    tar-1.30/m4/rawmemchr.m4
    tar-1.30/m4/read.m4
    tar-1.30/m4/readdir.m4
    tar-1.30/m4/readlink.m4
    tar-1.30/m4/readlinkat.m4
    tar-1.30/m4/realloc.m4
    tar-1.30/m4/regex.m4
    tar-1.30/m4/rename.m4
    tar-1.30/m4/renameat.m4
    tar-1.30/m4/rewinddir.m4
    tar-1.30/m4/rmdir.m4
    tar-1.30/m4/rmt.m4
    tar-1.30/m4/rpmatch.m4
    tar-1.30/m4/rtapelib.m4
    tar-1.30/m4/safe-read.m4
    tar-1.30/m4/safe-write.m4
    tar-1.30/m4/save-cwd.m4
    tar-1.30/m4/savedir.m4
    tar-1.30/m4/selinux-context-h.m4
    tar-1.30/m4/selinux-selinux-h.m4
    tar-1.30/m4/setenv.m4
    tar-1.30/m4/signal_h.m4
    tar-1.30/m4/size_max.m4
    tar-1.30/m4/sleep.m4
    tar-1.30/m4/snprintf.m4
    tar-1.30/m4/ssize_t.m4
    tar-1.30/m4/stat-time.m4
    tar-1.30/m4/stat.m4
    tar-1.30/m4/stdalign.m4
    tar-1.30/m4/stdarg.m4
    tar-1.30/m4/stdbool.m4
    tar-1.30/m4/stddef_h.m4
    tar-1.30/m4/stdint.m4
    tar-1.30/m4/stdint_h.m4
    tar-1.30/m4/stdio_h.m4
    tar-1.30/m4/stdlib_h.m4
    tar-1.30/m4/stpcpy.m4
    tar-1.30/m4/strcase.m4
    tar-1.30/m4/strchrnul.m4
    tar-1.30/m4/strdup.m4
    tar-1.30/m4/strerror.m4
    tar-1.30/m4/string_h.m4
    tar-1.30/m4/strings_h.m4
    tar-1.30/m4/strndup.m4
    tar-1.30/m4/strnlen.m4
    tar-1.30/m4/strtoimax.m4
    tar-1.30/m4/strtol.m4
    tar-1.30/m4/strtoll.m4
    tar-1.30/m4/strtoul.m4
    tar-1.30/m4/strtoull.m4
    tar-1.30/m4/strtoumax.m4
    tar-1.30/m4/symlink.m4
    tar-1.30/m4/symlinkat.m4
    tar-1.30/m4/sys_socket_h.m4
    tar-1.30/m4/sys_stat_h.m4
    tar-1.30/m4/sys_time_h.m4
    tar-1.30/m4/sys_types_h.m4
    tar-1.30/m4/sysexits.m4
    tar-1.30/m4/system.m4
    tar-1.30/m4/tempname.m4
    tar-1.30/m4/time_h.m4
    tar-1.30/m4/time_r.m4
    tar-1.30/m4/time_rz.m4
    tar-1.30/m4/timegm.m4
    tar-1.30/m4/timespec.m4
    tar-1.30/m4/tm_gmtoff.m4
    tar-1.30/m4/tzset.m4
    tar-1.30/m4/ulonglong.m4
    tar-1.30/m4/unistd-safer.m4
    tar-1.30/m4/unistd_h.m4
    tar-1.30/m4/unlink.m4
    tar-1.30/m4/unlinkat.m4
    tar-1.30/m4/unlinkdir.m4
    tar-1.30/m4/unlocked-io.m4
    tar-1.30/m4/utime.m4
    tar-1.30/m4/utime_h.m4
    tar-1.30/m4/utimens.m4
    tar-1.30/m4/utimensat.m4
    tar-1.30/m4/utimes.m4
    tar-1.30/m4/vasnprintf.m4
    tar-1.30/m4/vasprintf.m4
    tar-1.30/m4/version-etc.m4
    tar-1.30/m4/vsnprintf.m4
    tar-1.30/m4/warn-on-use.m4
    tar-1.30/m4/warnings.m4
    tar-1.30/m4/wchar_h.m4
    tar-1.30/m4/wchar_t.m4
    tar-1.30/m4/wcrtomb.m4
    tar-1.30/m4/wctype_h.m4
    tar-1.30/m4/wcwidth.m4
    tar-1.30/m4/wint_t.m4
    tar-1.30/m4/write.m4
    tar-1.30/m4/xalloc.m4
    tar-1.30/m4/xgetcwd.m4
    tar-1.30/m4/xsize.m4
    tar-1.30/m4/xstrndup.m4
    tar-1.30/m4/xstrtol.m4
    tar-1.30/m4/xvasprintf.m4
    tar-1.30/po/
    tar-1.30/po/LINGUAS
    tar-1.30/po/Makefile.in.in
    tar-1.30/po/Makevars
    tar-1.30/po/POTFILES.in
    tar-1.30/po/Rules-quot
    tar-1.30/po/bg.gmo
    tar-1.30/po/bg.po
    tar-1.30/po/boldquot.sed
    tar-1.30/po/ca.gmo
    tar-1.30/po/ca.po
    tar-1.30/po/cs.gmo
    tar-1.30/po/cs.po
    tar-1.30/po/da.gmo
    tar-1.30/po/da.po
    tar-1.30/po/de.gmo
    tar-1.30/po/de.po
    tar-1.30/po/el.gmo
    tar-1.30/po/el.po
    tar-1.30/po/en@boldquot.header
    tar-1.30/po/en@quot.header
    tar-1.30/po/eo.gmo
    tar-1.30/po/eo.po
    tar-1.30/po/es.gmo
    tar-1.30/po/es.po
    tar-1.30/po/et.gmo
    tar-1.30/po/et.po
    tar-1.30/po/eu.gmo
    tar-1.30/po/eu.po
    tar-1.30/po/fi.gmo
    tar-1.30/po/fi.po
    tar-1.30/po/fr.gmo
    tar-1.30/po/fr.po
    tar-1.30/po/ga.gmo
    tar-1.30/po/ga.po
    tar-1.30/po/gl.gmo
    tar-1.30/po/gl.po
    tar-1.30/po/hr.gmo
    tar-1.30/po/hr.po
    tar-1.30/po/hu.gmo
    tar-1.30/po/hu.po
    tar-1.30/po/id.gmo
    tar-1.30/po/id.po
    tar-1.30/po/insert-header.sin
    tar-1.30/po/it.gmo
    tar-1.30/po/it.po
    tar-1.30/po/ja.gmo
    tar-1.30/po/ja.po
    tar-1.30/po/ko.gmo
    tar-1.30/po/ko.po
    tar-1.30/po/ky.gmo
    tar-1.30/po/ky.po
    tar-1.30/po/ms.gmo
    tar-1.30/po/ms.po
    tar-1.30/po/nb.gmo
    tar-1.30/po/nb.po
    tar-1.30/po/nl.gmo
    tar-1.30/po/nl.po
    tar-1.30/po/pl.gmo
    tar-1.30/po/pl.po
    tar-1.30/po/pt.gmo
    tar-1.30/po/pt.po
    tar-1.30/po/pt_BR.gmo
    tar-1.30/po/pt_BR.po
    tar-1.30/po/quot.sed
    tar-1.30/po/remove-potcdate.sin
    tar-1.30/po/ro.gmo
    tar-1.30/po/ro.po
    tar-1.30/po/ru.gmo
    tar-1.30/po/ru.po
    tar-1.30/po/sk.gmo
    tar-1.30/po/sk.po
    tar-1.30/po/sl.gmo
    tar-1.30/po/sl.po
    tar-1.30/po/sr.gmo
    tar-1.30/po/sr.po
    tar-1.30/po/stamp-po
    tar-1.30/po/sv.gmo
    tar-1.30/po/sv.po
    tar-1.30/po/tar.pot
    tar-1.30/po/tr.gmo
    tar-1.30/po/tr.po
    tar-1.30/po/uk.gmo
    tar-1.30/po/uk.po
    tar-1.30/po/vi.gmo
    tar-1.30/po/vi.po
    tar-1.30/po/zh_CN.gmo
    tar-1.30/po/zh_CN.po
    tar-1.30/po/zh_TW.gmo
    tar-1.30/po/zh_TW.po
    tar-1.30/rmt/
    tar-1.30/rmt/Makefile.am
    tar-1.30/rmt/Makefile.in
    tar-1.30/rmt/rmt.c
    tar-1.30/scripts/
    tar-1.30/scripts/Makefile.am
    tar-1.30/scripts/Makefile.in
    tar-1.30/scripts/backup-specs
    tar-1.30/scripts/backup.in
    tar-1.30/scripts/backup.sh.in
    tar-1.30/scripts/dump-remind.in
    tar-1.30/scripts/restore.in
    tar-1.30/src/
    tar-1.30/src/Makefile.am
    tar-1.30/src/Makefile.in
    tar-1.30/src/arith.h
    tar-1.30/src/buffer.c
    tar-1.30/src/checkpoint.c
    tar-1.30/src/common.h
    tar-1.30/src/compare.c
    tar-1.30/src/create.c
    tar-1.30/src/delete.c
    tar-1.30/src/exclist.c
    tar-1.30/src/exit.c
    tar-1.30/src/extract.c
    tar-1.30/src/incremen.c
    tar-1.30/src/list.c
    tar-1.30/src/map.c
    tar-1.30/src/misc.c
    tar-1.30/src/names.c
    tar-1.30/src/sparse.c
    tar-1.30/src/suffix.c
    tar-1.30/src/system.c
    tar-1.30/src/tar.c
    tar-1.30/src/tar.h
    tar-1.30/src/transform.c
    tar-1.30/src/unlink.c
    tar-1.30/src/update.c
    tar-1.30/src/utf8.c
    tar-1.30/src/warning.c
    tar-1.30/src/xattrs.c
    tar-1.30/src/xattrs.h
    tar-1.30/src/xheader.c
    tar-1.30/tests/
    tar-1.30/tests/Makefile.am
    tar-1.30/tests/Makefile.in
    tar-1.30/tests/T-cd.at
    tar-1.30/tests/T-dir00.at
    tar-1.30/tests/T-dir01.at
    tar-1.30/tests/T-empty.at
    tar-1.30/tests/T-mult.at
    tar-1.30/tests/T-nest.at
    tar-1.30/tests/T-nonl.at
    tar-1.30/tests/T-null.at
    tar-1.30/tests/T-null2.at
    tar-1.30/tests/T-rec.at
    tar-1.30/tests/T-recurse.at
    tar-1.30/tests/T-zfile.at
    tar-1.30/tests/acls01.at
    tar-1.30/tests/acls02.at
    tar-1.30/tests/acls03.at
    tar-1.30/tests/add-file.at
    tar-1.30/tests/append.at
    tar-1.30/tests/append01.at
    tar-1.30/tests/append02.at
    tar-1.30/tests/append03.at
    tar-1.30/tests/append04.at
    tar-1.30/tests/append05.at
    tar-1.30/tests/argcv.c
    tar-1.30/tests/argcv.h
    tar-1.30/tests/atlocal.in
    tar-1.30/tests/backup01.at
    tar-1.30/tests/capabs_raw01.at
    tar-1.30/tests/checkseekhole.c
    tar-1.30/tests/chtype.at
    tar-1.30/tests/ckmtime.c
    tar-1.30/tests/comperr.at
    tar-1.30/tests/comprec.at
    tar-1.30/tests/delete01.at
    tar-1.30/tests/delete02.at
    tar-1.30/tests/delete03.at
    tar-1.30/tests/delete04.at
    tar-1.30/tests/delete05.at
    tar-1.30/tests/difflink.at
    tar-1.30/tests/dirrem01.at
    tar-1.30/tests/dirrem02.at
    tar-1.30/tests/exclude.at
    tar-1.30/tests/exclude01.at
    tar-1.30/tests/exclude02.at
    tar-1.30/tests/exclude03.at
    tar-1.30/tests/exclude04.at
    tar-1.30/tests/exclude05.at
    tar-1.30/tests/exclude06.at
    tar-1.30/tests/exclude07.at
    tar-1.30/tests/exclude08.at
    tar-1.30/tests/exclude09.at
    tar-1.30/tests/exclude10.at
    tar-1.30/tests/exclude11.at
    tar-1.30/tests/exclude12.at
    tar-1.30/tests/exclude13.at
    tar-1.30/tests/exclude14.at
    tar-1.30/tests/exclude15.at
    tar-1.30/tests/exclude16.at
    tar-1.30/tests/extrac01.at
    tar-1.30/tests/extrac02.at
    tar-1.30/tests/extrac03.at
    tar-1.30/tests/extrac04.at
    tar-1.30/tests/extrac05.at
    tar-1.30/tests/extrac06.at
    tar-1.30/tests/extrac07.at
    tar-1.30/tests/extrac08.at
    tar-1.30/tests/extrac09.at
    tar-1.30/tests/extrac10.at
    tar-1.30/tests/extrac11.at
    tar-1.30/tests/extrac12.at
    tar-1.30/tests/extrac13.at
    tar-1.30/tests/extrac14.at
    tar-1.30/tests/extrac15.at
    tar-1.30/tests/extrac16.at
    tar-1.30/tests/extrac17.at
    tar-1.30/tests/extrac18.at
    tar-1.30/tests/extrac19.at
    tar-1.30/tests/extrac20.at
    tar-1.30/tests/extrac21.at
    tar-1.30/tests/filerem01.at
    tar-1.30/tests/filerem02.at
    tar-1.30/tests/genfile.c
    tar-1.30/tests/grow.at
    tar-1.30/tests/gzip.at
    tar-1.30/tests/ignfail.at
    tar-1.30/tests/incr01.at
    tar-1.30/tests/incr02.at
    tar-1.30/tests/incr03.at
    tar-1.30/tests/incr04.at
    tar-1.30/tests/incr05.at
    tar-1.30/tests/incr06.at
    tar-1.30/tests/incr07.at
    tar-1.30/tests/incr08.at
    tar-1.30/tests/incr09.at
    tar-1.30/tests/incr10.at
    tar-1.30/tests/incr11.at
    tar-1.30/tests/incremental.at
    tar-1.30/tests/indexfile.at
    tar-1.30/tests/label01.at
    tar-1.30/tests/label02.at
    tar-1.30/tests/label03.at
    tar-1.30/tests/label04.at
    tar-1.30/tests/label05.at
    tar-1.30/tests/link01.at
    tar-1.30/tests/link02.at
    tar-1.30/tests/link03.at
    tar-1.30/tests/link04.at
    tar-1.30/tests/listed01.at
    tar-1.30/tests/listed02.at
    tar-1.30/tests/listed03.at
    tar-1.30/tests/listed04.at
    tar-1.30/tests/listed05.at
    tar-1.30/tests/long01.at
    tar-1.30/tests/longv7.at
    tar-1.30/tests/lustar01.at
    tar-1.30/tests/lustar02.at
    tar-1.30/tests/lustar03.at
    tar-1.30/tests/map.at
    tar-1.30/tests/multiv01.at
    tar-1.30/tests/multiv02.at
    tar-1.30/tests/multiv03.at
    tar-1.30/tests/multiv04.at
    tar-1.30/tests/multiv05.at
    tar-1.30/tests/multiv06.at
    tar-1.30/tests/multiv07.at
    tar-1.30/tests/multiv08.at
    tar-1.30/tests/multiv09.at
    tar-1.30/tests/multiv10.at
    tar-1.30/tests/numeric.at
    tar-1.30/tests/old.at
    tar-1.30/tests/onetop01.at
    tar-1.30/tests/onetop02.at
    tar-1.30/tests/onetop03.at
    tar-1.30/tests/onetop04.at
    tar-1.30/tests/onetop05.at
    tar-1.30/tests/opcomp01.at
    tar-1.30/tests/opcomp02.at
    tar-1.30/tests/opcomp03.at
    tar-1.30/tests/opcomp04.at
    tar-1.30/tests/opcomp05.at
    tar-1.30/tests/opcomp06.at
    tar-1.30/tests/options.at
    tar-1.30/tests/options02.at
    tar-1.30/tests/options03.at
    tar-1.30/tests/owner.at
    tar-1.30/tests/package.m4
    tar-1.30/tests/pipe.at
    tar-1.30/tests/positional01.at
    tar-1.30/tests/positional02.at
    tar-1.30/tests/positional03.at
    tar-1.30/tests/recurs02.at
    tar-1.30/tests/recurse.at
    tar-1.30/tests/remfiles01.at
    tar-1.30/tests/remfiles02.at
    tar-1.30/tests/remfiles03.at
    tar-1.30/tests/remfiles04a.at
    tar-1.30/tests/remfiles04b.at
    tar-1.30/tests/remfiles04c.at
    tar-1.30/tests/remfiles05a.at
    tar-1.30/tests/remfiles05b.at
    tar-1.30/tests/remfiles05c.at
    tar-1.30/tests/remfiles06a.at
    tar-1.30/tests/remfiles06b.at
    tar-1.30/tests/remfiles06c.at
    tar-1.30/tests/remfiles07a.at
    tar-1.30/tests/remfiles07b.at
    tar-1.30/tests/remfiles07c.at
    tar-1.30/tests/remfiles08a.at
    tar-1.30/tests/remfiles08b.at
    tar-1.30/tests/remfiles08c.at
    tar-1.30/tests/remfiles09a.at
    tar-1.30/tests/remfiles09b.at
    tar-1.30/tests/remfiles09c.at
    tar-1.30/tests/remfiles10.at
    tar-1.30/tests/rename01.at
    tar-1.30/tests/rename02.at
    tar-1.30/tests/rename03.at
    tar-1.30/tests/rename04.at
    tar-1.30/tests/rename05.at
    tar-1.30/tests/same-order01.at
    tar-1.30/tests/same-order02.at
    tar-1.30/tests/selacl01.at
    tar-1.30/tests/selnx01.at
    tar-1.30/tests/shortfile.at
    tar-1.30/tests/shortrec.at
    tar-1.30/tests/shortupd.at
    tar-1.30/tests/sigpipe.at
    tar-1.30/tests/sparse01.at
    tar-1.30/tests/sparse02.at
    tar-1.30/tests/sparse03.at
    tar-1.30/tests/sparse04.at
    tar-1.30/tests/sparse05.at
    tar-1.30/tests/sparse06.at
    tar-1.30/tests/sparse07.at
    tar-1.30/tests/sparsemv.at
    tar-1.30/tests/sparsemvp.at
    tar-1.30/tests/spmvp00.at
    tar-1.30/tests/spmvp01.at
    tar-1.30/tests/spmvp10.at
    tar-1.30/tests/star/
    tar-1.30/tests/star/README
    tar-1.30/tests/star/gtarfail.at
    tar-1.30/tests/star/gtarfail2.at
    tar-1.30/tests/star/multi-fail.at
    tar-1.30/tests/star/pax-big-10g.at
    tar-1.30/tests/star/quicktest.sh
    tar-1.30/tests/star/ustar-big-2g.at
    tar-1.30/tests/star/ustar-big-8g.at
    tar-1.30/tests/testsuite
    tar-1.30/tests/testsuite.at
    tar-1.30/tests/time01.at
    tar-1.30/tests/time02.at
    tar-1.30/tests/truncate.at
    tar-1.30/tests/update.at
    tar-1.30/tests/update01.at
    tar-1.30/tests/update02.at
    tar-1.30/tests/update03.at
    tar-1.30/tests/verbose.at
    tar-1.30/tests/verify.at
    tar-1.30/tests/version.at
    tar-1.30/tests/volsize.at
    tar-1.30/tests/volume.at
    tar-1.30/tests/xattr01.at
    tar-1.30/tests/xattr02.at
    tar-1.30/tests/xattr03.at
    tar-1.30/tests/xattr04.at
    tar-1.30/tests/xattr05.at
    tar-1.30/tests/xattr06.at
    tar-1.30/tests/xattr07.at
    tar-1.30/tests/xform-h.at
    tar-1.30/tests/xform01.at
    tar-1.30/tests/xform02.at
    tar-1.30/tests/xform03.at
    phase `unpack' succeeded after 0.2 seconds
    starting phase `bootstrap'
    GNU build system bootstrapping not needed
    phase `bootstrap' succeeded after 0.0 seconds
    starting phase `patch-usr-bin-file'
    phase `patch-usr-bin-file' succeeded after 0.1 seconds
    starting phase `patch-source-shebangs'
    patch-shebang: ./build-aux/ar-lib: changing `/bin/sh' to `/gnu/store/q19l04vd2za80mk1845pz7r8cz29qk43-bash-minimal-4.4.23/bin/sh'
    patch-shebang: ./build-aux/compile: changing `/bin/sh' to `/gnu/store/q19l04vd2za80mk1845pz7r8cz29qk43-bash-minimal-4.4.23/bin/sh'
    patch-shebang: ./build-aux/config.guess: changing `/bin/sh' to `/gnu/store/q19l04vd2za80mk1845pz7r8cz29qk43-bash-minimal-4.4.23/bin/sh'
    patch-shebang: ./build-aux/config.rpath: changing `/bin/sh' to `/gnu/store/q19l04vd2za80mk1845pz7r8cz29qk43-bash-minimal-4.4.23/bin/sh'
    patch-shebang: ./build-aux/config.sub: changing `/bin/sh' to `/gnu/store/q19l04vd2za80mk1845pz7r8cz29qk43-bash-minimal-4.4.23/bin/sh'
    patch-shebang: ./build-aux/depcomp: changing `/bin/sh' to `/gnu/store/q19l04vd2za80mk1845pz7r8cz29qk43-bash-minimal-4.4.23/bin/sh'
    patch-shebang: ./build-aux/install-sh: changing `/bin/sh' to `/gnu/store/q19l04vd2za80mk1845pz7r8cz29qk43-bash-minimal-4.4.23/bin/sh'
    patch-shebang: ./build-aux/mdate-sh: changing `/bin/sh' to `/gnu/store/q19l04vd2za80mk1845pz7r8cz29qk43-bash-minimal-4.4.23/bin/sh'
    patch-shebang: ./build-aux/missing: changing `/bin/sh' to `/gnu/store/q19l04vd2za80mk1845pz7r8cz29qk43-bash-minimal-4.4.23/bin/sh'
    patch-shebang: ./build-aux/ylwrap: changing `/bin/sh' to `/gnu/store/q19l04vd2za80mk1845pz7r8cz29qk43-bash-minimal-4.4.23/bin/sh'
    patch-shebang: ./configure: changing `/bin/sh' to `/gnu/store/q19l04vd2za80mk1845pz7r8cz29qk43-bash-minimal-4.4.23/bin/sh'
    patch-shebang: ./gnu/config.charset: changing `/bin/sh' to `/gnu/store/q19l04vd2za80mk1845pz7r8cz29qk43-bash-minimal-4.4.23/bin/sh'
    patch-shebang: ./scripts/backup.in: changing `/bin/sh' to `/gnu/store/q19l04vd2za80mk1845pz7r8cz29qk43-bash-minimal-4.4.23/bin/sh'
    patch-shebang: ./scripts/backup.sh.in: changing `/bin/sh' to `/gnu/store/q19l04vd2za80mk1845pz7r8cz29qk43-bash-minimal-4.4.23/bin/sh'
    patch-shebang: ./scripts/dump-remind.in: changing `/bin/sh' to `/gnu/store/q19l04vd2za80mk1845pz7r8cz29qk43-bash-minimal-4.4.23/bin/sh'
    patch-shebang: ./scripts/restore.in: changing `/bin/sh' to `/gnu/store/q19l04vd2za80mk1845pz7r8cz29qk43-bash-minimal-4.4.23/bin/sh'
    patch-shebang: ./tests/star/quicktest.sh: changing `/bin/sh' to `/gnu/store/q19l04vd2za80mk1845pz7r8cz29qk43-bash-minimal-4.4.23/bin/sh'
    patch-shebang: ./tests/testsuite: changing `/bin/sh' to `/gnu/store/q19l04vd2za80mk1845pz7r8cz29qk43-bash-minimal-4.4.23/bin/sh'
    phase `patch-source-shebangs' succeeded after 0.1 seconds
    starting phase `configure'
    source directory: "/tmp/guix-build-tar-1.30.drv-0/tar-1.30" (relative from build: ".")
    build directory: "/tmp/guix-build-tar-1.30.drv-0/tar-1.30"
    configure flags: ("CONFIG_SHELL=/gnu/store/q19l04vd2za80mk1845pz7r8cz29qk43-bash-minimal-4.4.23/bin/bash" "SHELL=/gnu/store/q19l04vd2za80mk1845pz7r8cz29qk43-bash-minimal-4.4.23/bin/bash" "--prefix=/gnu/store/ipx79bfj2mrc8npj7s3qi3zri11jfhaw-tar-1.30" "--enable-fast-install" "--build=x86_64-unknown-linux-gnu")
    configure: WARNING: unrecognized options: --enable-fast-install
    checking for a BSD-compatible install... /gnu/store/5s2nib1lrd2101bbrivcl17kjx1mspw6-coreutils-8.30/bin/install -c
    checking whether build environment is sane... yes
    checking for a thread-safe mkdir -p... /gnu/store/5s2nib1lrd2101bbrivcl17kjx1mspw6-coreutils-8.30/bin/mkdir -p
    checking for gawk... gawk
    checking whether make sets $(MAKE)... no
    checking whether make supports nested variables... yes
    checking whether UID '998' is supported by ustar format... yes
    checking whether GID '998' is supported by ustar format... yes
    checking how to create a ustar tar archive... gnutar
    checking whether make supports nested variables... (cached) yes
    checking for style of include used by make... GNU
    checking for gcc... gcc
    checking whether the C compiler works... yes
    checking for C compiler default output file name... a.out
    checking for suffix of executables... 
    checking whether we are cross compiling... no
    checking for suffix of object files... o
    checking whether we are using the GNU C compiler... yes
    checking whether gcc accepts -g... yes
    checking for gcc option to accept ISO C89... none needed
    checking whether gcc understands -c and -o together... yes
    checking dependency style of gcc... gcc3
    checking for gcc option to accept ISO C99... none needed
    checking for gcc option to accept ISO Standard C... (cached) none needed
    checking for ranlib... ranlib
    checking for bison... no
    checking for byacc... no
    checking how to run the C preprocessor... gcc -E
    checking for grep that handles long lines and -e... /gnu/store/02k245xy33cvcnr8vm3lagm9zmb1s2wa-grep-3.1/bin/grep
    checking for egrep... /gnu/store/02k245xy33cvcnr8vm3lagm9zmb1s2wa-grep-3.1/bin/grep -E
    checking for ANSI C header files... yes
    checking for sys/types.h... yes
    checking for sys/stat.h... yes
    checking for stdlib.h... yes
    checking for string.h... yes
    checking for memory.h... yes
    checking for strings.h... yes
    checking for inttypes.h... yes
    checking for stdint.h... yes
    checking for unistd.h... yes
    checking minix/config.h usability... no
    checking minix/config.h presence... no
    checking for minix/config.h... no
    checking whether it is safe to define __EXTENSIONS__... yes
    checking whether _XOPEN_SOURCE should be defined... no
    checking for Minix Amsterdam compiler... no
    checking for ar... ar
    checking for _LARGEFILE_SOURCE value needed for large files... no
    checking for special C compiler options needed for large files... no
    checking for _FILE_OFFSET_BITS value needed for large files... no
    checking for special C compiler options needed for large files... (cached) no
    checking for _FILE_OFFSET_BITS value needed for large files... (cached) no
    checking for inline... inline
    checking for fcntl.h... yes
    checking for linux/fd.h... yes
    checking for memory.h... (cached) yes
    checking for net/errno.h... no
    checking for sgtty.h... yes
    checking for string.h... (cached) yes
    checking for sys/param.h... yes
    checking for sys/device.h... no
    checking for sys/gentape.h... no
    checking for sys/inet.h... no
    checking for sys/io/trioctl.h... no
    checking for sys/mtio.h... yes
    checking for sys/time.h... yes
    checking for sys/tprintf.h... no
    checking for sys/tape.h... no
    checking for unistd.h... (cached) yes
    checking for locale.h... yes
    checking for sys/types.h... (cached) yes
    checking for features.h... yes
    checking for linewrap.h... no
    checking for sys/socket.h... yes
    checking for dirent.h... yes
    checking for wctype.h... yes
    checking for stdio_ext.h... yes
    checking for sys/stat.h... (cached) yes
    checking for getopt.h... yes
    checking for sys/cdefs.h... yes
    checking for limits.h... yes
    checking for wchar.h... yes
    checking for stdint.h... (cached) yes
    checking for inttypes.h... (cached) yes
    checking for crtdefs.h... no
    checking for langinfo.h... yes
    checking for xlocale.h... no
    checking for sys/mman.h... yes
    checking for priv.h... no
    checking for malloc.h... yes
    checking for selinux/selinux.h... no
    checking for strings.h... (cached) yes
    checking for sysexits.h... yes
    checking for utime.h... yes
    checking for netdb.h... yes
    checking for sys/wait.h... yes
    checking for pwd.h... yes
    checking for grp.h... yes
    checking for sys/buf.h... no
    checking sys/mkdev.h usability... no
    checking sys/mkdev.h presence... no
    checking for sys/mkdev.h... no
    checking sys/sysmacros.h usability... yes
    checking sys/sysmacros.h presence... yes
    checking for sys/sysmacros.h... yes
    checking for st_fstype string in struct stat... no
    checking sys/acl.h usability... no
    checking sys/acl.h presence... no
    checking for sys/acl.h... no
    checking for mode_t... yes
    checking for pid_t... yes
    checking for off_t... yes
    checking for uid_t in sys/types.h... yes
    checking for major_t... no
    checking for minor_t... no
    checking for dev_t... yes
    checking for ino_t... yes
    checking for ssize_t... yes
    checking for fchmod... yes
    checking for flockfile... yes
    checking for funlockfile... yes
    checking for pathconf... yes
    checking for btowc... yes
    checking for canonicalize_file_name... yes
    checking for getcwd... yes
    checking for readlink... yes
    checking for realpath... yes
    checking for readlinkat... yes
    checking for chown... yes
    checking for fchown... yes
    checking for _set_invalid_parameter_handler... no
    checking for fchdir... yes
    checking for fdopendir... yes
    checking for faccessat... yes
    checking for fchmodat... yes
    checking for lchmod... no
    checking for fcntl... yes
    checking for symlink... yes
    checking for mempcpy... yes
    checking for isblank... yes
    checking for iswctype... yes
    checking for mbsrtowcs... yes
    checking for wmemchr... yes
    checking for wmemcpy... yes
    checking for wmempcpy... yes
    checking for fstatat... yes
    checking for futimens... yes
    checking for getdelim... yes
    checking for getdtablesize... yes
    checking for getprogname... no
    checking for getexecname... no
    checking for gettimeofday... yes
    checking for nanotime... no
    checking for iswcntrl... yes
    checking for iswblank... yes
    checking for link... yes
    checking for openat... yes
    checking for linkat... yes
    checking for lstat... yes
    checking for mbsinit... yes
    checking for mbrtowc... yes
    checking for mprotect... yes
    checking for mkdirat... yes
    checking for mkfifo... yes
    checking for mkfifoat... yes
    checking for mknodat... yes
    checking for mknod... yes
    checking for tzset... yes
    checking for nl_langinfo... yes
    checking for renameat... yes
    checking for setenv... yes
    checking for sleep... yes
    checking for snprintf... yes
    checking for strdup... yes
    checking for strndup... yes
    checking for strtoimax... yes
    checking for strtoumax... yes
    checking for symlinkat... yes
    checking for localtime_r... yes
    checking for timegm... yes
    checking for pipe... yes
    checking for unlinkat... yes
    checking for utime... yes
    checking for futimes... yes
    checking for futimesat... yes
    checking for utimensat... yes
    checking for lutimes... yes
    checking for vasnprintf... no
    checking for wcrtomb... yes
    checking for wcwidth... yes
    checking for setlocale... yes
    checking for fsync... yes
    checking for size_t... yes
    checking for working alloca.h... yes
    checking for alloca... yes
    checking for C/C++ restrict keyword... __restrict
    checking whether clearerr_unlocked is declared... yes
    checking whether feof_unlocked is declared... yes
    checking whether ferror_unlocked is declared... yes
    checking whether fflush_unlocked is declared... yes
    checking whether fgets_unlocked is declared... yes
    checking whether fputc_unlocked is declared... yes
    checking whether fputs_unlocked is declared... yes
    checking whether fread_unlocked is declared... yes
    checking whether fwrite_unlocked is declared... yes
    checking whether getc_unlocked is declared... yes
    checking whether getchar_unlocked is declared... yes
    checking whether putc_unlocked is declared... yes
    checking whether putchar_unlocked is declared... yes
    checking whether strerror_r is declared... yes
    checking for strerror_r... yes
    checking whether strerror_r returns char *... yes
    checking build system type... x86_64-unknown-linux-gnu
    checking host system type... x86_64-unknown-linux-gnu
    checking for d_ino member in directory struct... yes
    checking for long file names... yes
    checking whether <wchar.h> uses 'inline' correctly... yes
    checking for nl_langinfo and CODESET... yes
    checking for a traditional french locale... none
    checking whether // is distinct from /... no
    checking whether realpath works... yes
    checking for unistd.h... (cached) yes
    checking for working chown... yes
    checking whether chown dereferences symlinks... yes
    checking whether chown honors trailing slash... yes
    checking whether chown always updates ctime... yes
    checking whether the preprocessor supports include_next... yes
    checking whether system header files limit the line length... no
    checking if environ is properly declared... yes
    checking for complete errno.h... yes
    checking type of array argument to getgroups... gid_t
    checking whether lstat correctly handles trailing slash... yes
    checking whether fchdir is declared... yes
    checking for working fcntl.h... yes
    checking for mbstate_t... yes
    checking whether stdin defaults to large file offsets... yes
    checking whether fseeko is declared... yes
    checking for fseeko... yes
    checking whether stat file-mode macros are broken... no
    checking for nlink_t... yes
    checking whether fchmodat is declared without a macro... yes
    checking whether fstat is declared without a macro... yes
    checking whether fstatat is declared without a macro... yes
    checking whether futimens is declared without a macro... yes
    checking whether lchmod is declared without a macro... yes
    checking whether lstat is declared without a macro... yes
    checking whether mkdirat is declared without a macro... yes
    checking whether mkfifo is declared without a macro... yes
    checking whether mkfifoat is declared without a macro... yes
    checking whether mknod is declared without a macro... yes
    checking whether mknodat is declared without a macro... yes
    checking whether stat is declared without a macro... yes
    checking whether utimensat is declared without a macro... yes
    checking whether getcwd (NULL, 0) allocates memory for result... yes
    checking for getcwd with POSIX signature... yes
    checking whether getcwd is declared... yes
    checking whether getdelim is declared... yes
    checking whether getdtablesize is declared... yes
    checking whether getline is declared... yes
    checking for getopt.h... (cached) yes
    checking for getopt_long_only... yes
    checking whether getopt is POSIX compatible... yes
    checking for working GNU getopt function... yes
    checking for working GNU getopt_long function... yes
    checking for struct timeval... yes
    checking for wide-enough struct timeval.tv_sec member... yes
    checking whether gettimeofday is declared without a macro... yes
    checking host CPU and C ABI... x86_64
    checking whether limits.h has ULLONG_WIDTH etc.... yes
    checking for wint_t... yes
    checking whether wint_t is too small... no
    checking for unsigned long long int... yes
    checking for long long int... yes
    checking whether stdint.h conforms to C99... yes
    checking whether stdint.h predates C++11... no
    checking whether stdint.h has UINTMAX_WIDTH etc.... yes
    checking whether imaxabs is declared without a macro... yes
    checking whether imaxdiv is declared without a macro... yes
    checking whether strtoimax is declared without a macro... yes
    checking whether strtoumax is declared without a macro... yes
    checking for inttypes.h... (cached) yes
    checking whether the inttypes.h PRIxNN macros are broken... no
    checking whether iswcntrl works... yes
    checking for towlower... yes
    checking for wctype_t... yes
    checking for wctrans_t... yes
    checking whether wctype is declared without a macro... yes
    checking whether iswctype is declared without a macro... yes
    checking whether wctrans is declared without a macro... yes
    checking whether towctrans is declared without a macro... yes
    checking for O_CLOEXEC... yes
    checking whether we are using the GNU C Library >= 2.1 or uClibc... yes
    checking for wchar_t... yes
    checking for max_align_t... yes
    checking whether NULL can be used in arbitrary expressions... yes
    checking whether malloc, realloc, calloc are POSIX compliant... yes
    checking for stdlib.h... (cached) yes
    checking for GNU libc compatible malloc... yes
    checking for a traditional japanese locale... none
    checking for a transitional chinese locale... none
    checking for a french Unicode locale... fr_FR.UTF-8
    checking for mmap... yes
    checking for MAP_ANONYMOUS... yes
    checking whether memchr works... yes
    checking whether memrchr is declared... yes
    checking whether <limits.h> defines MIN and MAX... no
    checking whether <sys/param.h> defines MIN and MAX... yes
    checking whether time_t is signed... yes
    checking whether alarm is declared... yes
    checking for working mktime... yes
    checking whether struct tm is in sys/time.h or time.h... time.h
    checking for struct tm.tm_zone... yes
    checking for struct tm.tm_gmtoff... yes
    checking for promoted mode_t type... mode_t
    checking for stdbool.h that conforms to C99... yes
    checking for _Bool... yes
    checking for compound literals... yes
    checking for library containing setfilecon... no
    checking whether setenv is declared... yes
    checking search.h usability... yes
    checking search.h presence... yes
    checking for search.h... yes
    checking for tsearch... yes
    checking for sigset_t... yes
    checking whether snprintf returns a byte count as in C99... yes
    checking whether snprintf is declared... yes
    checking whether strdup is declared... yes
    checking whether strerror(0) succeeds... yes
    checking whether ffsl is declared without a macro... yes
    checking whether ffsll is declared without a macro... yes
    checking whether memmem is declared without a macro... yes
    checking whether mempcpy is declared without a macro... yes
    checking whether memrchr is declared without a macro... yes
    checking whether rawmemchr is declared without a macro... yes
    checking whether stpcpy is declared without a macro... yes
    checking whether stpncpy is declared without a macro... yes
    checking whether strchrnul is declared without a macro... yes
    checking whether strdup is declared without a macro... yes
    checking whether strncat is declared without a macro... yes
    checking whether strndup is declared without a macro... yes
    checking whether strnlen is declared without a macro... yes
    checking whether strpbrk is declared without a macro... yes
    checking whether strsep is declared without a macro... yes
    checking whether strcasestr is declared without a macro... yes
    checking whether strtok_r is declared without a macro... yes
    checking whether strerror_r is declared without a macro... yes
    checking whether strsignal is declared without a macro... yes
    checking whether strverscmp is declared without a macro... yes
    checking whether ffs is declared without a macro... yes
    checking whether strcasecmp is declared without a macro... yes
    checking whether strncasecmp is declared without a macro... yes
    checking whether strndup is declared... (cached) yes
    checking whether strnlen is declared... (cached) yes
    checking whether strtoimax is declared... (cached) yes
    checking whether strtoumax is declared... (cached) yes
    checking for struct timespec in <time.h>... yes
    checking whether unsetenv is declared... yes
    checking whether the utimes function works... yes
    checking for inttypes.h... yes
    checking for stdint.h... yes
    checking for intmax_t... yes
    checking where to find the exponent in a 'double'... word 1 bit 20
    checking for snprintf... (cached) yes
    checking for strnlen... yes
    checking for wcslen... yes
    checking for wcsnlen... yes
    checking for mbrtowc... (cached) yes
    checking for wcrtomb... (cached) yes
    checking whether _snprintf is declared... no
    checking whether vsnprintf is declared... yes
    checking for sys/acl.h... (cached) no
    configure: WARNING: libacl development library was not found or not usable.
    configure: WARNING: GNU tar will be built without ACL support.
    checking for alloca as a compiler built-in... yes
    checking whether program_invocation_name is declared... yes
    checking whether program_invocation_short_name is declared... yes
    checking whether program_invocation_name is defined... yes
    checking whether program_invocation_short_name is defined... yes
    checking whether btowc(0) is correct... yes
    checking whether btowc(EOF) is correct... guessing yes
    checking for __builtin_expect... yes
    checking whether this system has an arbitrary file name length limit... yes
    checking for library containing clock_gettime... none required
    checking for clock_gettime... yes
    checking for clock_settime... yes
    checking for closedir... yes
    checking for d_ino member in directory struct... (cached) yes
    checking whether alphasort is declared without a macro... yes
    checking whether closedir is declared without a macro... yes
    checking whether dirfd is declared without a macro... yes
    checking whether fdopendir is declared without a macro... yes
    checking whether opendir is declared without a macro... yes
    checking whether readdir is declared without a macro... yes
    checking whether rewinddir is declared without a macro... yes
    checking whether scandir is declared without a macro... yes
    checking for dirfd... yes
    checking whether dirfd is declared... (cached) yes
    checking whether dirfd is a macro... no
    checking whether // is distinct from /... (cached) no
    checking whether dup works... yes
    checking whether dup2 works... yes
    checking for error_at_line... yes
    checking for euidaccess... yes
    checking for fchownat... yes
    checking whether fchownat works with AT_SYMLINK_NOFOLLOW... yes
    checking whether fchownat works with an empty file name... yes
    checking whether fcntl handles F_DUPFD correctly... yes
    checking whether fcntl understands F_DUPFD_CLOEXEC... needs runtime check
    checking whether fcntl is declared without a macro... yes
    checking whether openat is declared without a macro... yes
    checking whether fdopendir is declared... (cached) yes
    checking whether fdopendir works... yes
    checking for getxattr with XATTR_NAME_POSIX_ACL macros... yes
    checking for struct stat.st_blocks... yes
    checking for flexible array member... yes
    checking whether conversion from 'int' to 'long double' works... yes
    checking for working GNU fnmatch... yes
    checking for __fpending... yes
    checking whether __fpending is declared... yes
    checking for fseeko... (cached) yes
    checking whether fstatat (..., 0) works... yes
    checking whether futimens works... yes
    checking whether getcwd handles long file names properly... yes
    checking for getpagesize... yes
    checking whether getcwd aborts when 4k < cwd_length < 16k... no
    checking for working getdelim function... yes
    checking whether getdtablesize works... yes
    checking for getgroups... yes
    checking for working getgroups... yes
    checking whether getgroups handles negative values... yes
    checking for getline... yes
    checking for working getline function... yes
    checking for getpagesize... (cached) yes
    checking whether getpagesize is declared... yes
    checking whether program_invocation_name is declared... (cached) yes
    checking whether program_invocation_short_name is declared... (cached) yes
    checking whether __argv is declared... no
    checking whether gettimeofday clobbers localtime buffer... no
    checking for gettimeofday with POSIX signature... almost
    checking for group_member... yes
    checking whether INT32_MAX < INTMAX_MAX... yes
    checking whether INT64_MAX == LONG_MAX... yes
    checking whether UINT32_MAX < UINTMAX_MAX... yes
    checking whether UINT64_MAX == ULONG_MAX... yes
    checking whether iswblank is declared... yes
    checking whether langinfo.h defines CODESET... yes
    checking whether langinfo.h defines T_FMT_AMPM... yes
    checking whether langinfo.h defines ERA... yes
    checking whether langinfo.h defines YESEXPR... yes
    checking whether nl_langinfo is declared without a macro... yes
    checking for lchown... yes
    checking whether link obeys POSIX... yes
    checking for __xpg4... no
    checking whether link(2) dereferences a symlink... no
    checking whether linkat() can link symlinks... yes
    checking whether linkat handles trailing slash correctly... yes
    checking whether locale.h conforms to POSIX:2001... yes
    checking whether struct lconv is properly defined... yes
    checking whether setlocale is declared without a macro... yes
    checking whether duplocale is declared without a macro... yes
    checking whether lseek detects pipes... yes
    checking for stdlib.h... (cached) yes
    checking for GNU libc compatible malloc... (cached) yes
    checking whether mbrtowc handles incomplete characters... guessing yes
    checking whether mbrtowc works as well as mbtowc... guessing yes
    checking whether mbrtowc handles a NULL pwc argument... yes
    checking whether mbrtowc handles a NULL string argument... yes
    checking whether mbrtowc has a correct return value... yes
    checking whether mbrtowc returns 0 when parsing a NUL character... guessing yes
    checking whether mbrtowc works on empty input... yes
    checking whether the C locale is free of encoding errors... no
    checking whether mbrtowc handles incomplete characters... (cached) guessing yes
    checking whether mbrtowc works as well as mbtowc... (cached) guessing yes
    checking whether mbrtowc handles incomplete characters... (cached) guessing yes
    checking whether mbrtowc works as well as mbtowc... (cached) guessing yes
    checking whether mbsrtowcs works... yes
    checking for mempcpy... (cached) yes
    checking for memrchr... yes
    checking whether mkdir handles trailing slash... yes
    checking whether mkdir handles trailing dot... yes
    checking for mkdtemp... yes
    checking whether mkfifo rejects trailing slashes... yes
    checking whether mknod can create fifo without root privileges... yes
    checking for __mktime_internal... no
    checking whether YESEXPR works... yes
    checking for obstacks that work with any size object... no
    checking whether open recognizes a trailing slash... yes
    checking for opendir... yes
    checking for struct tm.tm_zone... (cached) yes
    checking for getppriv... no
    checking whether program_invocation_name is declared... (cached) yes
    checking whether program_invocation_short_name is declared... (cached) yes
    checking for raise... yes
    checking for rawmemchr... yes
    checking for readdir... yes
    checking whether readlink signature is correct... yes
    checking whether readlink handles trailing slash correctly... yes
    checking whether readlinkat signature is correct... yes
    checking for working re_compile_pattern... yes
    checking whether rename honors trailing slash on destination... yes
    checking whether rename honors trailing slash on source... yes
    checking whether rename manages hard links correctly... yes
    checking whether rename manages existing destinations correctly... yes
    checking linux/fs.h usability... yes
    checking linux/fs.h presence... yes
    checking for linux/fs.h... yes
    checking for linux/fs.h... (cached) yes
    checking for rewinddir... yes
    checking whether rmdir works... yes
    checking for rpmatch... yes
    checking selinux/flask.h usability... no
    checking selinux/flask.h presence... no
    checking for selinux/flask.h... no
    checking whether setenv validates arguments... yes
    checking for volatile sig_atomic_t... yes
    checking for sighandler_t... yes
    checking whether pthread_sigmask is declared without a macro... yes
    checking whether sigaction is declared without a macro... yes
    checking whether sigaddset is declared without a macro... yes
    checking whether sigdelset is declared without a macro... yes
    checking whether sigemptyset is declared without a macro... yes
    checking whether sigfillset is declared without a macro... yes
    checking whether sigismember is declared without a macro... yes
    checking whether sigpending is declared without a macro... yes
    checking whether sigprocmask is declared without a macro... yes
    checking for stdint.h... (cached) yes
    checking for SIZE_MAX... yes
    checking whether sleep is declared... yes
    checking for working sleep... yes
    checking for snprintf... (cached) yes
    checking whether snprintf respects a size of 1... yes
    checking whether printf supports POSIX/XSI format strings with positions... yes
    checking for ssize_t... (cached) yes
    checking whether stat handles trailing slashes on files... yes
    checking for struct stat.st_atim.tv_nsec... yes
    checking whether struct stat.st_atim is of type struct timespec... yes
    checking for struct stat.st_birthtimespec.tv_nsec... no
    checking for struct stat.st_birthtimensec... no
    checking for struct stat.st_birthtim.tv_nsec... no
    checking for working stdalign.h... yes
    checking for va_copy... yes
    checking for max_align_t... (cached) yes
    checking whether NULL can be used in arbitrary expressions... (cached) yes
    checking which flavor of printf attribute matches inttypes macros... system
    checking whether dprintf is declared without a macro... yes
    checking whether fpurge is declared without a macro... no
    checking whether fseeko is declared without a macro... yes
    checking whether ftello is declared without a macro... yes
    checking whether getdelim is declared without a macro... yes
    checking whether getline is declared without a macro... yes
    checking whether gets is declared without a macro... no
    checking whether pclose is declared without a macro... yes
    checking whether popen is declared without a macro... yes
    checking whether renameat is declared without a macro... yes
    checking whether snprintf is declared without a macro... yes
    checking whether tmpfile is declared without a macro... yes
    checking whether vdprintf is declared without a macro... yes
    checking whether vsnprintf is declared without a macro... yes
    checking whether _Exit is declared without a macro... yes
    checking whether atoll is declared without a macro... yes
    checking whether canonicalize_file_name is declared without a macro... yes
    checking whether getloadavg is declared without a macro... yes
    checking whether getsubopt is declared without a macro... yes
    checking whether grantpt is declared without a macro... yes
    checking whether initstate is declared without a macro... yes
    checking whether initstate_r is declared without a macro... yes
    checking whether mkdtemp is declared without a macro... yes
    checking whether mkostemp is declared without a macro... yes
    checking whether mkostemps is declared without a macro... yes
    checking whether mkstemp is declared without a macro... yes
    checking whether mkstemps is declared without a macro... yes
    checking whether posix_openpt is declared without a macro... yes
    checking whether ptsname is declared without a macro... yes
    checking whether ptsname_r is declared without a macro... yes
    checking whether qsort_r is declared without a macro... yes
    checking whether random is declared without a macro... yes
    checking whether random_r is declared without a macro... yes
    checking whether reallocarray is declared without a macro... yes
    checking whether realpath is declared without a macro... yes
    checking whether rpmatch is declared without a macro... yes
    checking whether secure_getenv is declared without a macro... yes
    checking whether setenv is declared without a macro... yes
    checking whether setstate is declared without a macro... yes
    checking whether setstate_r is declared without a macro... yes
    checking whether srandom is declared without a macro... yes
    checking whether srandom_r is declared without a macro... yes
    checking whether strtod is declared without a macro... yes
    checking whether strtoll is declared without a macro... yes
    checking whether strtoull is declared without a macro... yes
    checking whether unlockpt is declared without a macro... yes
    checking whether unsetenv is declared without a macro... yes
    checking for stpcpy... yes
    checking for strcasecmp... yes
    checking for strncasecmp... yes
    checking whether strncasecmp is declared... (cached) yes
    checking for strchrnul... yes
    checking whether strchrnul works... yes
    checking for working strerror function... yes
    checking for working strndup... yes
    checking for working strnlen... yes
    checking whether strtoimax works... yes
    checking for strtol... yes
    checking for strtoll... yes
    checking for strtoul... yes
    checking for strtoull... yes
    checking whether symlink handles trailing slash correctly... yes
    checking whether symlinkat handles trailing slash correctly... yes
    checking for nlink_t... (cached) yes
    checking whether fchmodat is declared without a macro... (cached) yes
    checking whether fstat is declared without a macro... (cached) yes
    checking whether fstatat is declared without a macro... (cached) yes
    checking whether futimens is declared without a macro... (cached) yes
    checking whether lchmod is declared without a macro... (cached) yes
    checking whether lstat is declared without a macro... (cached) yes
    checking whether mkdirat is declared without a macro... (cached) yes
    checking whether mkfifo is declared without a macro... (cached) yes
    checking whether mkfifoat is declared without a macro... (cached) yes
    checking whether mknod is declared without a macro... (cached) yes
    checking whether mknodat is declared without a macro... (cached) yes
    checking whether stat is declared without a macro... (cached) yes
    checking whether utimensat is declared without a macro... (cached) yes
    checking whether localtime_r is declared... yes
    checking whether localtime_r is compatible with its POSIX signature... yes
    checking for timezone_t... no
    checking whether tzset clobbers localtime buffer... no
    checking whether chdir is declared without a macro... yes
    checking whether chown is declared without a macro... yes
    checking whether dup is declared without a macro... yes
    checking whether dup2 is declared without a macro... yes
    checking whether dup3 is declared without a macro... yes
    checking whether environ is declared without a macro... yes
    checking whether euidaccess is declared without a macro... yes
    checking whether faccessat is declared without a macro... yes
    checking whether fchdir is declared without a macro... yes
    checking whether fchownat is declared without a macro... yes
    checking whether fdatasync is declared without a macro... yes
    checking whether fsync is declared without a macro... yes
    checking whether ftruncate is declared without a macro... yes
    checking whether getcwd is declared without a macro... yes
    checking whether getdomainname is declared without a macro... yes
    checking whether getdtablesize is declared without a macro... yes
    checking whether getgroups is declared without a macro... yes
    checking whether gethostname is declared without a macro... yes
    checking whether getlogin is declared without a macro... yes
    checking whether getlogin_r is declared without a macro... yes
    checking whether getpagesize is declared without a macro... yes
    checking whether getusershell is declared without a macro... yes
    checking whether setusershell is declared without a macro... yes
    checking whether endusershell is declared without a macro... yes
    checking whether group_member is declared without a macro... yes
    checking whether isatty is declared without a macro... yes
    checking whether lchown is declared without a macro... yes
    checking whether link is declared without a macro... yes
    checking whether linkat is declared without a macro... yes
    checking whether lseek is declared without a macro... yes
    checking whether pipe is declared without a macro... yes
    checking whether pipe2 is declared without a macro... yes
    checking whether pread is declared without a macro... yes
    checking whether pwrite is declared without a macro... yes
    checking whether readlink is declared without a macro... yes
    checking whether readlinkat is declared without a macro... yes
    checking whether rmdir is declared without a macro... yes
    checking whether sethostname is declared without a macro... yes
    checking whether sleep is declared without a macro... yes
    checking whether symlink is declared without a macro... yes
    checking whether symlinkat is declared without a macro... yes
    checking whether truncate is declared without a macro... yes
    checking whether ttyname_r is declared without a macro... yes
    checking whether unlink is declared without a macro... yes
    checking whether unlinkat is declared without a macro... yes
    checking whether usleep is declared without a macro... yes
    checking whether unlink honors trailing slashes... yes
    checking whether unlink of a parent directory fails as it should... guessing yes
    checking for unsetenv... yes
    checking for unsetenv() return type... int
    checking whether unsetenv obeys POSIX... yes
    checking whether utime is declared without a macro... yes
    checking whether utimensat works... yes
    checking for ptrdiff_t... yes
    checking for vasprintf... yes
    checking for vsnprintf... yes
    checking whether snprintf respects a size of 1... (cached) yes
    checking whether printf supports POSIX/XSI format strings with positions... (cached) yes
    checking whether btowc is declared without a macro... yes
    checking whether wctob is declared without a macro... yes
    checking whether mbsinit is declared without a macro... yes
    checking whether mbrtowc is declared without a macro... yes
    checking whether mbrlen is declared without a macro... yes
    checking whether mbsrtowcs is declared without a macro... yes
    checking whether mbsnrtowcs is declared without a macro... yes
    checking whether wcrtomb is declared without a macro... yes
    checking whether wcsrtombs is declared without a macro... yes
    checking whether wcsnrtombs is declared without a macro... yes
    checking whether wcwidth is declared without a macro... yes
    checking whether wmemchr is declared without a macro... yes
    checking whether wmemcmp is declared without a macro... yes
    checking whether wmemcpy is declared without a macro... yes
    checking whether wmemmove is declared without a macro... yes
    checking whether wmemset is declared without a macro... yes
    checking whether wcslen is declared without a macro... yes
    checking whether wcsnlen is declared without a macro... yes
    checking whether wcscpy is declared without a macro... yes
    checking whether wcpcpy is declared without a macro... yes
    checking whether wcsncpy is declared without a macro... yes
    checking whether wcpncpy is declared without a macro... yes
    checking whether wcscat is declared without a macro... yes
    checking whether wcsncat is declared without a macro... yes
    checking whether wcscmp is declared without a macro... yes
    checking whether wcsncmp is declared without a macro... yes
    checking whether wcscasecmp is declared without a macro... yes
    checking whether wcsncasecmp is declared without a macro... yes
    checking whether wcscoll is declared without a macro... yes
    checking whether wcsxfrm is declared without a macro... yes
    checking whether wcsdup is declared without a macro... yes
    checking whether wcschr is declared without a macro... yes
    checking whether wcsrchr is declared without a macro... yes
    checking whether wcscspn is declared without a macro... yes
    checking whether wcsspn is declared without a macro... yes
    checking whether wcspbrk is declared without a macro... yes
    checking whether wcsstr is declared without a macro... yes
    checking whether wcstok is declared without a macro... yes
    checking whether wcswidth is declared without a macro... yes
    checking whether wcsftime is declared without a macro... yes
    checking whether mbrtowc handles incomplete characters... (cached) guessing yes
    checking whether mbrtowc works as well as mbtowc... (cached) guessing yes
    checking whether wcrtomb return value is correct... yes
    checking whether iswcntrl works... (cached) yes
    checking for towlower... (cached) yes
    checking for wctype_t... (cached) yes
    checking for wctrans_t... (cached) yes
    checking whether wctype is declared without a macro... (cached) yes
    checking whether iswctype is declared without a macro... (cached) yes
    checking whether wctrans is declared without a macro... (cached) yes
    checking whether towctrans is declared without a macro... (cached) yes
    checking whether wcwidth is declared... (cached) yes
    checking whether wcwidth works reasonably in UTF-8 locales... yes
    checking for stdint.h... (cached) yes
    checking whether time.h and sys/time.h may both be included... yes
    checking for struct stat.st_blksize... yes
    checking for library containing setsockopt... none required
    checking for library containing setsockopt... (cached) none required
    checking for sys/mtio.h... (cached) yes
    checking which ioctl field to test for reversed bytes... mt_type
    checking whether to build rmt... yes
    checking for remote tape header files... yes
    checking for sys/buf.h... (cached) no
    checking for struct stat.st_blksize... (cached) yes
    checking for library containing gethostbyname... none required
    checking sys/xattr.h usability... yes
    checking sys/xattr.h presence... yes
    checking for sys/xattr.h... yes
    checking for library containing getxattr... none required
    checking for library containing fgetxattr... none required
    checking for library containing lgetxattr... none required
    checking for library containing setxattr... none required
    checking for library containing fsetxattr... none required
    checking for library containing lsetxattr... none required
    checking for library containing listxattr... none required
    checking for library containing flistxattr... none required
    checking for library containing llistxattr... none required
    checking whether getgrgid is declared... yes
    checking whether getpwuid is declared... yes
    checking whether time is declared... yes
    checking for waitpid... yes
    checking for remote shell... no
    checking for netdb.h... (cached) yes
    checking for default archive format... GNU
    checking for default archive... -
    checking for default blocking... 20
    checking for default quoting style... escape
    checking for ld used by gcc... /gnu/store/9ysmg2739n1ms84lx6hifncgc5l2hiy9-ld-wrapper-0/bin/ld
    checking if the linker (/gnu/store/9ysmg2739n1ms84lx6hifncgc5l2hiy9-ld-wrapper-0/bin/ld) is GNU ld... yes
    checking for shared library run path origin... done
    checking for the common suffixes of directories in the library search path... lib,lib
    checking for iconv... yes
    checking for working iconv... yes
    checking for iconv declaration... 
             extern size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
    checking iconv.h usability... yes
    checking iconv.h presence... yes
    checking for iconv.h... yes
    checking for iconv_t... yes
    checking for a sed that does not truncate output... /gnu/store/lmfddplnplxd03bcqv3w9pynbnr1fp8k-sed-4.5/bin/sed
    checking whether NLS is requested... yes
    checking for msgfmt... no
    checking for gmsgfmt... :
    checking for xgettext... no
    checking for msgmerge... no
    checking for CFPreferencesCopyAppValue... no
    checking for CFLocaleCopyCurrent... no
    checking for GNU gettext in libc... yes
    checking whether to use NLS... yes
    checking where the gettext function comes from... libc
    checking that generated files are newer than configure... done
    configure: creating ./config.status
    config.status: creating tests/Makefile
    config.status: creating tests/atlocal
    config.status: creating Makefile
    config.status: creating doc/Makefile
    config.status: creating gnu/Makefile
    config.status: creating lib/Makefile
    config.status: creating po/Makefile.in
    config.status: creating scripts/Makefile
    config.status: creating rmt/Makefile
    config.status: creating src/Makefile
    config.status: creating config.h
    config.status: executing depfiles commands
    config.status: executing po-directories commands
    config.status: creating po/POTFILES
    config.status: creating po/Makefile
    config.status: executing tests/atconfig commands
    configure: WARNING: unrecognized options: --enable-fast-install
    phase `configure' succeeded after 33.8 seconds
    starting phase `patch-generated-file-shebangs'
    patch-makefile-SHELL: ./po/Makefile: changing `SHELL' from `/bin/sh' to `/gnu/store/q19l04vd2za80mk1845pz7r8cz29qk43-bash-minimal-4.4.23/bin/sh'
    phase `patch-generated-file-shebangs' succeeded after 0.1 seconds
    starting phase `set-shell-file-name'
    phase `set-shell-file-name' succeeded after 0.0 seconds
    starting phase `build'
    make  all-recursive
    make[1]: Entering directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30'
    Making all in doc
    make[2]: Entering directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/doc'
    make[2]: Nothing to be done for 'all'.
    make[2]: Leaving directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/doc'
    Making all in gnu
    make[2]: Entering directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/gnu'
      GEN      alloca.h
      GEN      dirent.h
      GEN      fcntl.h
      GEN      configmake.h
      GEN      getopt.h
      GEN      getopt-cdefs.h
      GEN      inttypes.h
      GEN      langinfo.h
      GEN      limits.h
      GEN      locale.h
      GEN      signal.h
      GEN      stdio.h
      GEN      stdlib.h
      GEN      selinux/selinux.h
      GEN      selinux/context.h
      GEN      string.h
      GEN      strings.h
      GEN      sys/stat.h
      GEN      time.h
      GEN      sys/time.h
      GEN      sys/types.h
      GEN      unistd.h
      GEN      uniwidth.h
      GEN      unitypes.h
      GEN      wchar.h
      GEN      wctype.h
    make  all-recursive
    make[3]: Entering directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/gnu'
    make[4]: Entering directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/gnu'
      CC       acl-errno-valid.o
      CC       acl-internal.o
      CC       get-permissions.o
      CC       set-permissions.o
      CC       allocator.o
      CC       areadlink.o
      CC       areadlink-with-size.o
      CC       areadlinkat.o
      CC       areadlinkat-with-size.o
      CC       argmatch.o
      CC       argp-ba.o
      CC       argp-eexst.o
      CC       argp-fmtstream.o
      CC       argp-fs-xinl.o
      CC       argp-help.o
      CC       argp-parse.o
      CC       argp-pin.o
      CC       argp-pv.o
      CC       argp-pvh.o
      CC       argp-xinl.o
      CC       argp-version-etc.o
      CC       backupfile.o
      CC       backup-find.o
      CC       bitrotate.o
      CC       c-ctype.o
      CC       c-strcasecmp.o
      CC       c-strncasecmp.o
      CC       careadlinkat.o
      CC       cloexec.o
      CC       close-stream.o
      CC       closeout.o
      CC       opendir-safer.o
      CC       dirname.o
      CC       basename.o
      CC       dirname-lgpl.o
      CC       basename-lgpl.o
      CC       stripslash.o
      CC       exclude.o
      CC       exitfail.o
      CC       chmodat.o
      CC       chownat.o
      CC       fd-hook.o
      CC       fd-safer-flag.o
      CC       file-has-acl.o
      CC       dup-safer-flag.o
      CC       fdutimensat.o
      CC       filenamecat-lgpl.o
      CC       fprintftime.o
      CC       full-write.o
      CC       gettime.o
      CC       getprogname.o
      CC       hard-locale.o
      CC       hash.o
      CC       human.o
      CC       imaxtostr.o
      CC       inttostr.o
      CC       offtostr.o
      CC       uinttostr.o
      CC       umaxtostr.o
      CC       localcharset.o
      CC       malloca.o
      CC       mbchar.o
      CC       mbscasecmp.o
      CC       mbuiter.o
      CC       modechange.o
      CC       nstrftime.o
      CC       openat-die.o
      CC       parse-datetime.o
      CC       priv-set.o
      CC       progname.o
      CC       quotearg.o
      CC       renameat2.o
      CC       safe-read.o
      CC       safe-write.o
      CC       save-cwd.o
      CC       savedir.o
      CC       se-context.o
      CC       se-selinux.o
      CC       stat-time.o
      CC       statat.o
      CC       strnlen1.o
      CC       tempname.o
      CC       timespec.o
      CC       timespec-sub.o
      CC       unistd.o
      CC       dup-safer.o
      CC       fd-safer.o
      CC       pipe-safer.o
      CC       unlinkdir.o
      CC       utimens.o
      CC       version-etc.o
      CC       version-etc-fsf.o
      CC       xmalloc.o
      CC       wctype-h.o
      CC       xalloc-die.o
      CC       xgetcwd.o
      CC       xsize.o
      CC       xstrndup.o
      CC       xstrtol.o
      CC       xstrtoul.o
      CC       xstrtol-error.o
      CC       xstrtoumax.o
      CC       xvasprintf.o
      CC       xasprintf.o
      CC       asnprintf.o
      CC       chdir-long.o
      CC       fcntl.o
      CC       getopt.o
      CC       getopt1.o
      CC       localtime-buffer.o
      CC       mbrtowc.o
      CC       mktime.o
      CC       obstack.o
      CC       openat-proc.o
      CC       printf-args.o
      CC       printf-parse.o
      CC       selinux-at.o
      CC       time_rz.o
      CC       vasnprintf.o
      GEN      charset.alias
      GEN      ref-add.sed
      GEN      ref-del.sed
      CC       uniwidth/width.o
      AR       libgnu.a
    make[4]: Leaving directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/gnu'
    make[3]: Leaving directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/gnu'
    make[2]: Leaving directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/gnu'
    Making all in lib
    make[2]: Entering directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/lib'
      GEN      rmt-command.h
    make  all-am
    make[3]: Entering directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/lib'
      CC       paxerror.o
      CC       paxexit-status.o
      CC       paxnames.o
      CC       wordsplit.o
      CC       rtapelib.o
      CC       stdopen.o
      CC       xattr-at.o
      AR       libtar.a
    make[3]: Leaving directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/lib'
    make[2]: Leaving directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/lib'
    Making all in rmt
    make[2]: Entering directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/rmt'
      CC       rmt.o
      CCLD     rmt
    make[2]: Leaving directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/rmt'
    Making all in src
    make[2]: Entering directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/src'
      CC       buffer.o
      CC       delete.o
      CC       checkpoint.o
      CC       compare.o
      CC       create.o
      CC       exit.o
      CC       exclist.o
      CC       extract.o
      CC       xheader.o
      CC       incremen.o
      CC       list.o
      CC       map.o
      CC       misc.o
      CC       names.o
      CC       sparse.o
      CC       suffix.o
      CC       system.o
      CC       tar.o
      CC       transform.o
      CC       unlink.o
      CC       update.o
      CC       utf8.o
      CC       warning.o
      CC       xattrs.o
      CCLD     tar
    make[2]: Leaving directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/src'
    Making all in scripts
    make[2]: Entering directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/scripts'
    make[2]: Nothing to be done for 'all'.
    make[2]: Leaving directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/scripts'
    Making all in po
    make[2]: Entering directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/po'
    make[2]: Nothing to be done for 'all'.
    make[2]: Leaving directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/po'
    Making all in tests
    make[2]: Entering directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/tests'
    make[2]: Nothing to be done for 'all'.
    make[2]: Leaving directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/tests'
    make[2]: Entering directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30'
    make[2]: Leaving directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30'
    make[1]: Leaving directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30'
    phase `build' succeeded after 5.8 seconds
    starting phase `check'
    Making check in doc
    make[1]: Entering directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/doc'
    make[1]: Nothing to be done for 'check'.
    make[1]: Leaving directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/doc'
    Making check in gnu
    make[1]: Entering directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/gnu'
    make  check-recursive
    make[2]: Entering directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/gnu'
    make[3]: Entering directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/gnu'
    make[3]: Nothing to be done for 'check-am'.
    make[3]: Leaving directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/gnu'
    make[2]: Leaving directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/gnu'
    make[1]: Leaving directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/gnu'
    Making check in lib
    make[1]: Entering directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/lib'
    make  check-am
    make[2]: Entering directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/lib'
    make[2]: Nothing to be done for 'check-am'.
    make[2]: Leaving directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/lib'
    make[1]: Leaving directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/lib'
    Making check in rmt
    make[1]: Entering directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/rmt'
    make[1]: Nothing to be done for 'check'.
    make[1]: Leaving directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/rmt'
    Making check in src
    make[1]: Entering directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/src'
    make[1]: Nothing to be done for 'check'.
    make[1]: Leaving directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/src'
    Making check in scripts
    make[1]: Entering directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/scripts'
    make[1]: Nothing to be done for 'check'.
    make[1]: Leaving directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/scripts'
    Making check in po
    make[1]: Entering directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/po'
    make[1]: Nothing to be done for 'check'.
    make[1]: Leaving directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/po'
    Making check in tests
    make[1]: Entering directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/tests'
    make  genfile checkseekhole ckmtime
    make[2]: Entering directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/tests'
      CC       genfile.o
      CC       argcv.o
      CC       checkseekhole.o
      CC       ckmtime.o
      CCLD     checkseekhole
      CCLD     ckmtime
      CCLD     genfile
    make[2]: Leaving directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/tests'
    make  check-local
    make[2]: Entering directory '/tmp/guix-build-tar-1.30.drv-0/tar-1.30/tests'
    /gnu/store/q19l04vd2za80mk1845pz7r8cz29qk43-bash-minimal-4.4.23/bin/bash ./testsuite -k '!link mismatch,!directory removed before reading,!explicitly named directory removed before reading'
    ## ------------------------ ##
    ## GNU tar 1.30 test suite. ##
    ## ------------------------ ##
      1: tar version                                     ok
      2: decompressing from stdin                        ok
      3: mixing options                                  ok
      4: interspersed options                            ok
      5: TAR_OPTIONS with string arguments               ok
    
    Option compatibility
    
      6: occurrence compatibility                        ok
      7: occurrence compatibility                        ok
      8: --verify compatibility                          ok
      9: compress option compatibility                   ok
     10: --pax-option compatibility                      ok
     11: --pax-option compatibility                      skipped (opcomp06.at:24)
    
    Positional options
    
     12: Exclude                                         ok
     13: Directory                                       ok
     14: Several options                                 ok
     15: The --add-file option                           ok
    
    The -T option
    
     16: multiple file lists                             ok
     17: nested file lists                               ok
     18: recursive file lists                            ok
     19: files-from & recurse: toggle                    ok
     20: toggle --recursion (not) from -T                ok
     21: -C in file lists                                ok
     22: empty entries                                   ok
     23: 0-separated file without -0                     ok
     24: --null enables verbatim reading                 ok
     25: empty file                                      ok
     26: entries with missing newlines                   ok
     27: recursive extraction from --files-from          ok
     28: trailing slash in --files-from                  ok
    
    Various options
    
     29: tar --index-file=FILE --file=-                  ok
     30: tar cvf -                                       ok
     31: gzip                                            ok
     32: recurse                                         ok
     33: recurse: toggle                                 ok
     34: short records                                   ok
     35: --numeric-owner basic tests                     ok
    
    The --same-order option
    
     36: working -C with --same-order                    ok
     37: multiple -C options                             ok
    
    Append
    
     38: append                                          ok
     39: appending files with long names                 ok
     40: append vs. create                               ok
     41: append with name transformation                 ok
     42: append with verify                              ok
     43: append after changed blocking                   ok
    
    Transforms
    
     44: transforming hard links on create               ok
     45: transformations and GNU volume labels           ok
     46: transforming escaped delimiters on create       ok
     47: transforming hard link targets                  ok
    
    Exclude
    
     48: exclude                                         ok
     49: exclude wildcards                               ok
     50: exclude: anchoring                              ok
     51: exclude: wildcards match slash                  ok
     52: exclude: case insensitive                       ok
     53: exclude: lots of excludes                       ok
     54: exclude: long files in pax archives             ok
     55: exclude: --exclude-backups option               ok
     56: --exclude-tag option                            ok
     57: --exclude-tag option and --listed-incremental   ok
     58: --exclude-tag option in incremental pass        ok
     59: --exclude-tag-under option                      ok
     60: --exclude-tag-under and --listed-incremental    ok
     61: --exclude-tag-under option in incremental pass  ok
     62: --exclude-tag-all option                        ok
     63: --exclude-tag-all and --listed-incremental      ok
     64: --exclude-tag-all option in incremental pass    ok
    
    Deletions
    
     65: deleting a member after a big one               ok
     66: deleting a member from stdin archive            ok
     67: deleting members with long names                ok
     68: deleting a large last member                    ok
     69: deleting non-existing member                    ok
    
    Extracting
    
     70: extract over an existing directory              ok
     71: extracting symlinks over an existing file       ok
     72: extraction loops                                ok
     73: extract + fnmatch                               ok
     74: extracting selected members from pax            ok
     75: mode of extracted directories                   ok
     76: extracting symlinks to a read-only dir          ok
     77: restoring mode on existing directory            ok
     78: extracting even when . and .. are unreadable    ok
     79: -C and delayed setting of metadata              ok
     80: scarce file descriptors                         ok
     81: extract dot permissions                         ok
     82: extract over symlinks                           ok
     83: extract -C symlink                              ok
     84: extract parent mkdir failure                    ok
     85: extract empty directory with -C                 ok
     86: name matching/transformation ordering           ok
     87: keep-old-files                                  ok
     88: skip-old-files                                  ok
     89: keep-directory-symlink                          ok
     90: delay-directory-restore                         ok
     91: extracting existing dir with --backup           ok
    
    Volume label operations
    
     93: single-volume label                             ok
     94: multi-volume label                              ok
     95: test-label option                               ok
     96: label with non-create option                    ok
     97: label with non-create option                    ok
    
    Incremental archives
    
     98: incremental                                     ok
     99: restore broken symlinks from incremental        ok
    100: restoring timestamps from incremental           ok
    101: --listed for individual files                   ok
    102: working --listed                                ok
    103: incremental dump when the parent directory is unreadable ok
    104: --listed-incremental and --one-file-system      ok
    105: --listed-incremental and remounted directories  skipped (listed05.at:36)
    106: renamed files in incrementals                   ok
    107: proper icontents initialization                 ok
    108: incremental dumps with -C                       ok
    109: incremental dumps of nested directories         ok
    110: incremental restores with -C                    ok
    111: filename normalization                          ok
    112: incremental with alternating -C                 ok
    113: concatenated incremental archives (deletes)     ok
    114: concatenated incremental archives (renames)     ok
    
    Files removed while archiving
    
    115: file removed as we read it (ca. 22 seconds)     ok
    116: toplevel file removed (ca. 24 seconds)          ok
    
    Renames
    
    119: renamed dirs in incrementals                    ok
    120: move between hierarchies                        ok
    121: cyclic renames                                  ok
    122: renamed directory containing subdirectories     ok
    123: renamed subdirectories                          ok
    124: changed file types in incrementals              ok
    
    Ignore failing reads
    
    125: ignfail                                         ok
    
    Link handling
    
    126: link count gt 2                                 ok
    127: preserve hard links with --remove-files         ok
    128: working -l with --remove-files                  ok
    129: link count is 1 but multiple occurrences        ok
    
    Specific archive formats
    
    130: long names in V7 archives                       ok
    131: long file names divisible by block size         ok
    132: ustar: unsplittable file name                   ok
    133: ustar: unsplittable path name                   ok
    134: ustar: splitting long names                     ok
    135: old archives                                    ok
    136: time: tricky time stamps                        ok
    137: time: clamping mtime                            ok
    
    Multivolume archives
    
    138: multivolume dumps from pipes                    ok
    139: skipping a straddling member                    ok
    140: MV archive & long filenames                     ok
    141: split directory members in a MV archive         ok
    142: Restoring after an out of sync volume           ok
    143: Multivolumes with L=record_size                 ok
    144: volumes split at an extended header             skipped (multiv07.at:31)
    145: multivolume header creation                     ok
    146: bad next volume                                 ok
    147: file start at the beginning of a posix volume   ok
    
    Owner and Groups
    
    148: --owner and --group                             ok
    149: --owner-map and --group-map                     ok
    
    Sparse files
    
    150: sparse files                                    ok
    151: extracting sparse file over a pipe              ok
    152: storing sparse files > 8G                       ok
    153: storing long sparse file names                  ok
    

    </details>

  31. wtogami commented at 9:22 AM on March 1, 2019: contributor

    https://www.gnu.org/software/guix/manual/en/guix.html#The-GCC-toolchain "Guix offers individual compiler packages such as gcc but if you are in need of a complete toolchain for compiling and linking source code what you really want is the gcc-toolchain package. This package provides a complete GCC toolchain for C/C++ development, including GCC itself, the GNU C Library (headers and binaries, plus debugging symbols in the debug output), Binutils, and a linker wrapper. The wrapper’s purpose is to inspect the -L and -l switches passed to the linker, add corresponding -rpath arguments, and invoke the actual linker with this new set of arguments. By default, the linker wrapper refuses to link to libraries outside the store to ensure “purity”. This can be annoying when using the toolchain to link with local libraries. To allow references to libraries outside the store you need to define the environment variable GUIX_LD_WRAPPER_ALLOW_IMPURITIES.

    It's very bad practice to ship binaries with -rpath. Carl got rid of it with patchelf --remove-rpath but it still has a problem with the interpreter. Carl noted,"So everything works except the interpreter, because the interpreter path is different for different architectures. So I don't wanna just do patchelf --set-interpreter /lib64/ld-linux-x86-64.so.2 or sth like that."

    I'm not really sure how this works where you normally don't need to explicitly specify where to find the interpreter.

  32. theuni commented at 7:22 PM on March 1, 2019: member

    (@wtogami asked me to weigh in on his comment above, I haven't read the history here)

    If the guix environment uses some wonky path to the runtime loader, an alternative one can be set when linking using -Wl,--dynamic-linker=Foo, where Foo is the more generic path for that arch. That of course means that the binaries won't run in guix by default anymore. Fun trick, though, I believe you can use the loader as a launcher for a binary if its loader path is busted.

    For example, this should work in a non-guix environment. It used to, anyway: /lib64/ld-linux-x86-64.so.2 ./my_guix_binary

    There shouldn't be any need to modify a binary after the fact. Imo doing so is brittle and indicative that something is wrong/missing. If the toolchain can't do what's needed, let's make sure that any temporary hacks are paired with upstream bug reports and/or patches.

  33. wtogami commented at 11:33 PM on March 3, 2019: contributor

    For example, this should work in a non-guix environment. It used to, anyway: /lib64/ld-linux-x86-64.so.2 ./my_guix_binary There shouldn't be any need to modify a binary after the fact. Imo doing so is brittle and indicative that something is wrong/missing. If the toolchain can't do what's needed, let's make sure that any temporary hacks are paired with upstream bug reports and/or patches

    I think we are using guix not in way it was intended so they may not accept an upstream ticket to accommodate our use case?

    I think this one hack to explicitly specify the standard loader path may be acceptable for our build process. Could also symlink that one library within guix's filesystem.

  34. dongcarl force-pushed on Mar 11, 2019
  35. dongcarl commented at 6:13 PM on March 11, 2019: member

    Before you execute any scripts, please get on the same version of Guix as me:

    guix pull --commit=12327d74475d4079065a0f8f5d2491e4679fb53e
    

    The push @ https://github.com/bitcoin/bitcoin/pull/15277/commits/21bc51a27bc41a1a849e719dba5e317f2aa699ac includes some fixes and a convenience script for Guix builds located at contrib/guix/guix-build.sh. It is recommended that you read over the script before executing it. It is fairly simple and commented.

    The script is meant to be run from the root of the git repository and assumes that you have a working guix and patchelf in your path.

    Tip: I usually invoke the script like this:

    ./contrib/guix/guix-build.sh > out 2> err
    

    This way I can filter through the output much more easily for debugging.

    Unlike Gitian, we don't move the results of the build process into a nice little tarball yet, but you can inspect src/bitcoind, src/qt/bitcoin-qt, etc. to take a look at the result.

    I believe that we have solved most of the linker issues mentioned above, but only through patchelf hacks. In an offline conversation with @theuni, he noted that perhaps we can use spec files to override the GNU toolchain options in a less fragile way and have the toolchain produce the right thing.

  36. fanquake commented at 3:03 PM on March 16, 2019: member

    @dongcarl Looks good. I started playing around with this, and made up a Docker file that sets up a build environment. The Dockerfile, as well as some notes on usage are available here.

    It's basically:

    • Building the image sets up Alpine with Guix.
    • Run the image (which starts the guix deamon), mounting your bitcoin directory for use inside the (alpine) container. I'm using master with this PR on top (21bc51a).
    • Call docker exec and pass your script as an argument, which kicks off a build.

    Setting up the Guix environment and downloading everything works fine, depends currently bombs out when building fontconfig with:

    docker exec -it alpine-guix /bin/bash -c "contrib/guix/guix-build.sh"
    + make -C depends -j48 download
    make: Entering directory '/bitcoin/depends'
    make[1]: Entering directory '/bitcoin/depends'
    make[1]: Leaving directory '/bitcoin/depends'
    make[1]: Entering directory '/bitcoin/depends'
    make[1]: Leaving directory '/bitcoin/depends'
    make[1]: Entering directory '/bitcoin/depends'
    make[1]: Leaving directory '/bitcoin/depends'
    make: Leaving directory '/bitcoin/depends'
    ++ guix environment --manifest=contrib/guix/manifest.scm --container --pure --no-grafts -- printenv LIBRARY_PATH
    + sudo rm -f '/gnu/store/fg0wma7z9028489ic5sbq3f9a9l4y9c1-profile/lib/*.la'
    + guix environment --manifest=contrib/guix/manifest.scm --container --pure --no-grafts -- sh contrib/guix/build.sh
    + '[' -e /usr/bin ']'
    + mkdir -p /usr/bin
    + '[' -e /usr/bin/file ']'
    ++ command -v file
    + ln -s /gnu/store/fg0wma7z9028489ic5sbq3f9a9l4y9c1-profile/bin/file /usr/bin/file
    ++ nproc
    + make -C depends --jobs=6
    make: Entering directory '/bitcoin/depends'
    Configuring fontconfig...
    tar: ./lib/libexpat.so: Cannot utime: No such file or directory
    tar: ./lib/libexpat.so.1: Cannot utime: No such file or directory
    tar: Exiting with failure status due to previous errors
    tar: ./lib/libfreetype.so: Cannot utime: No such file or directory
    tar: ./lib/libfreetype.so.6: Cannot utime: No such file or directory
    tar: Exiting with failure status due to previous errors
    make: *** [funcs.mk:243: /bitcoin/depends/work/build/x86_64-pc-linux-gnu/fontconfig/2.12.1-1d13fef55ce/./.stamp_configured] Error 2
    make: Leaving directory '/bitcoin/depends'
    
  37. fanquake commented at 3:44 AM on March 17, 2019: member

    Looks like it's related to the fact that inside depends/x86_64-pc-linux-gnu/lib libexpat.so & libfreetype.so are symlinks?

    cd depends/x86_64-pc-linux-gnu/lib
    ls -l
    total 980
    -rwxr-xr-x    1 root     root           982 Mar 16 14:29 libexpat.la
    lrwxrwxrwx    1 root     root            17 Mar 17 03:37 libexpat.so -> libexpat.so.1.6.8
    lrwxrwxrwx    1 root     root            17 Mar 17 03:37 libexpat.so.1 -> libexpat.so.1.6.8
    -rwxr-xr-x    1 root     root        258736 Mar 16 14:29 libexpat.so.1.6.8
    -rwxr-xr-x    1 root     root          1003 Mar 16 14:28 libfreetype.la
    lrwxrwxrwx    1 root     root            21 Mar 17 03:37 libfreetype.so -> libfreetype.so.6.13.0
    lrwxrwxrwx    1 root     root            21 Mar 17 03:37 libfreetype.so.6 -> libfreetype.so.6.13.0
    -rwxr-xr-x    1 root     root        729560 Mar 16 14:28 libfreetype.so.6.13.0
    drwxr-xr-x    4 root     root           128 Mar 16 14:28 pkgconfig
    
    file libexpat.so
    libexpat.so: symbolic link to libexpat.so.1.6.8
    file libexpat.so.1.6.8
    libexpat.so.1.6.8: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, not stripped
    
  38. in contrib/guix/guix-build.sh:1 in 0275b4f4a1 outdated
       0 | @@ -0,0 +1,20 @@
       1 | +#!/bin/bash -ex
    


    MarcoFalke commented at 3:49 PM on March 18, 2019:
    Missing expected shebang "#!/usr/bin/env bash" or "#!/bin/sh" in contrib/guix/guix-build.sh
    
  39. dongcarl force-pushed on Mar 18, 2019
  40. dongcarl commented at 4:14 PM on March 18, 2019: member

    @fanquake re: #15277 (comment)

    I've tried to recreate your situation but I think I've encountered a different problem than yours. I think they might be related.

    <details> <summary>Error log</summary>

    + guix environment --manifest=contrib/guix/manifest.scm --container --pure --no-grafts -- sh contrib/guix/build.sh
    + '[' -e /usr/bin ']'
    + mkdir -p /usr/bin
    + '[' -e /usr/bin/file ']'
    ++ command -v file
    + ln -s /gnu/store/fg0wma7z9028489ic5sbq3f9a9l4y9c1-profile/bin/file /usr/bin/file
    ++ nproc
    + make -C depends --jobs=48
    make: Entering directory '/bitcoin/depends'
    mkdir: cannot create directory '/bitcoin/depends/built': Permission denied
    mkdir: cannot create directory '/bitcoin/depends/built': Permission denied
    mkdir: cannot create directory '/bitcoin/depends/built': Permission denied
    mkdir: cannot create directory '/bitcoin/depends/built': Permission denied
    mkdir: cannot create directory '/bitcoin/depends/built': Permission denied
    mkdir: cannot create directory '/bitcoin/depends/built': Permission denied
    mkdir: cannot create directory '/bitcoin/depends/built': Permission denied
    mkdir: cannot create directory '/bitcoin/depends/built': Permission denied
    mkdir: cannot create directory '/bitcoin/depends/built': Permission denied
    mkdir: cannot create directory '/bitcoin/depends/built': Permission denied
    mkdir: cannot create directory '/bitcoin/depends/built': Permission denied
    mkdir: cannot create directory '/bitcoin/depends/built': Permission denied
    mkdir: cannot create directory '/bitcoin/depends/built': Permission denied
    mkdir: cannot create directory '/bitcoin/depends/built': Permission denied
    mkdir: cannot create directory '/bitcoin/depends/built': Permission denied
    mkdir: cannot create directory '/bitcoin/depends/built': Permission denied
    mkdir: cannot create directory '/bitcoin/depends/built': Permission denied
    mkdir: cannot create directory '/bitcoin/depends/built': Permission denied
    mkdir: cannot create directory '/bitcoin/depends/built': Permission denied
    mkdir: cannot create directory '/bitcoin/depends/built': Permission denied
    mkdir: cannot create directory '/bitcoin/depends/built': Permission denied
    mkdir: cannot create directory '/bitcoin/depends/built': Permission denied
    mkdir: cannot create directory '/bitcoin/depends/built': Permission denied
    Extracting native_protobuf...
    /bitcoin/depends/sources/protobuf-2.6.1.tar.bz2: OK
    Preprocessing native_protobuf...
    Configuring native_protobuf...
    mkdir: cannot create directory '/bitcoin/depends/x86_64-pc-linux-gnu': Permission denied
    /gnu/store/q19l04vd2za80mk1845pz7r8cz29qk43-bash-minimal-4.4.23/bin/sh: line 0: cd: /bitcoin/depends/x86_64-pc-linux-gnu: No such file or directory
    make: *** [funcs.mk:243: /bitcoin/depends/work/build/x86_64-pc-linux-gnu/native_protobuf/2.6.1-cdfecf3ad0b/./.stamp_configured] Error 1
    make: Leaving directory '/bitcoin/depends'
    

    </details>

    I can verify this by first going into the docker container with

    docker exec -it alpine-guix sh
    

    Then going into the guix containter with

    guix environment --manifest=contrib/guix/manifest.scm --container --pure --no-grafts
    

    Then trying to create a directory under depends with

    mkdir depends/hi
    

    And I get the error output

    mkdir: cannot create directory 'depends/hi': Permission denied
    

    This is because even though the Guix container thinks it's root, it doesn't have the almighty power of root. And the depends directory is not owned by root but by something else:

    root@b7b7c36bfc82 /bitcoin [env]# ls -lh depends/
    total 144K
    -rw-r--r-- 1 65534 65534 6.8K Mar 18 15:02 Makefile
    -rw-r--r-- 1 65534 65534 3.5K Mar 18 15:02 README.md
    drwxr-xr-x 2 65534 65534 4.0K Mar 18 15:02 builders
    -rwxr-xr-x 1 65534 65534  44K Mar 18 15:02 config.guess
    -rw-r--r-- 1 65534 65534 2.3K Mar 18 15:02 config.site.in
    -rwxr-xr-x 1 65534 65534  35K Mar 18 15:02 config.sub
    -rw-r--r-- 1 65534 65534 2.5K Mar 18 15:02 description.md
    -rw-r--r-- 1 65534 65534  12K Mar 18 15:02 funcs.mk
    drwxr-xr-x 2 65534 65534 4.0K Mar 18 15:02 hosts
    drwxr-xr-x 2 65534 65534 4.0K Mar 18 15:02 packages
    -rw-r--r-- 1 65534 65534 4.8K Mar 18 15:02 packages.md
    drwxr-xr-x 5 65534 65534 4.0K Mar 18 15:02 patches
    drwxr-xr-x 3 root      0 4.0K Mar 18 15:07 sources
    drwxr-xr-x 4 root      0 4.0K Mar 18 15:13 work
    

    I think this might also be the cause of your issues. I haven't looked into solutions but perhaps a good chown would fix it. Otherwise we can just copy the directory when creating the image instead of mounting it.

    In the end, I hope that we'll have a mix of people using this inside a docker container and those who will run on their distro of choice. It would make for more diversity.

  41. fanquake commented at 2:24 AM on March 19, 2019: member

    @dongcarl Thanks, I've changed how I'm building the Docker image (COPYing the bitcoin source in during the image build, rather than mounting a volume at runtime) and now the depends build and Core compilation all complete. A better approach in future might just be to put git into the Alpine container, and clone a specific tag.

    The entire build output (45k lines) is available here. Note that towards the end I had to re-reun docker exec, because I forgot to install patchelf into the alpine container when building the image..

    The updated running instructions are basically:

    • Merge this PR into your bitcoin repository.
    • Re build the Docker image (it now has to be done from inside /bitcoin).
    • docker run -it --name alpine-guix --privileged --workdir /bitcoin alpine-guix.
    • docker exec -it alpine-guix /bin/bash -c "contrib/guix/guix-build.sh".

    Everything is available here. @MarcoFalke Thanks for your comments re --privileged. Now that the build is working I can start looking at which permissions are actually required, rather than a blanket approach. Edit: I've started looking at that here: https://github.com/fanquake/core-review/issues/5.

  42. dongcarl commented at 2:58 PM on March 20, 2019: member

    @fanquake I'm glad to see that you've got it working!

    Let's continue the conversation about capabilities here: https://github.com/fanquake/core-review/issues/5

  43. dongcarl force-pushed on Apr 9, 2019
  44. dongcarl force-pushed on Apr 15, 2019
  45. dongcarl commented at 4:12 PM on April 15, 2019: member

    Quite a big update this week.

    1. I was able to get rid of a hack that required sudo on the machine running Guix and which also violated Guix's functional model. Now, the only semi-hacks present are the patchelf commands.
    2. I was able to get rid of the annoying (but innocuous) warning messages from setting locale to C.UTF-8 which is not a thing in Guix containers.

    Next steps:

    1. Cross-compilation: I've experimented with it a bit, and the cross compiler packages need a little bit of patching, but I've gotten great info from conversations with @theuni.
    2. Modify our gcc package to output binaries that don't need the patchelf commands: I've written a gcc-bitcoin Guix package that seems to take care of the default rpaths that Guix tries to inject, but rpaths pointing to the depends directory is still there, which is strange. Doing the same for our patching of the interpreter path is even more involved, and I believe patching interpreter path using patchelf is less risky than the rpath.

    It is now much safer to experiment with this branch, though it is still experimental.

  46. fanquake commented at 4:55 AM on April 16, 2019: member

    @dongcarl Nice work. I've just completed a build with the new changes. Full output is here. Note I had to guix pull beforehand to get the gcc@8.3.0 packages.

    I was able to get rid of the annoying (but innocuous) warning messages from setting locale to C.UTF-8 which is not a thing in Guix containers.

    👍

  47. dongcarl commented at 10:19 AM on April 16, 2019: member

    @fanquake Ah! You're absolutely right. People can be at the same version of Guix I'm at by executing:

    guix pull --commit=12327d74475d4079065a0f8f5d2491e4679fb53e
    

    Will add to instructions!

  48. dongcarl force-pushed on May 20, 2019
  49. dongcarl commented at 3:26 AM on May 20, 2019: member

    Will need more time to describe this new push better, but here's how one can experiment with it:

    With Guix installed, pull my fork which has a few patches yet to be upstreamed (isn't it nice that this is so simple?):

    guix pull --url=https://github.com/dongcarl/guix.git  \
              --commit=2a520532d355f07ba3988fd40b2687b0d6c025b8 \
              --max-jobs=$(nproc)
    

    While on this branch @ 6b832d9797179206b083d296e52ff402fc4d040a, we can perform a deterministic build of i686, x86_64, aarch64, and armhf by simply invoking:

    ./contrib/guix/guix-build.sh
    

    The resulting tarballs will reside in output/, let's compare our results!

    $ find output/ -type f -print0 | sort -z | xargs -r0 sha256sum
    21b947acc435441db30622477134e375686d18b88de2c1f30e0dc2bdff865947  output/bitcoin-0.18.99-aarch64-linux-gnu-debug.tar.gz
    c51285da04af92b310771a650aed64df708cb7834b63ff8874331f8ccf779253  output/bitcoin-0.18.99-aarch64-linux-gnu.tar.gz
    4386a3b03bcf30898dd2f338061ed46fb58a0c5e4a3ac86d3381fb4b5ca7b0ae  output/bitcoin-0.18.99-arm-linux-gnueabihf-debug.tar.gz
    398593ce9135a2b643f594cb961fd1d6f49375850cc57c47d8102b8ecf7c5e29  output/bitcoin-0.18.99-arm-linux-gnueabihf.tar.gz
    572d78d9f2d27974c82b97c44b8adf60988c4350dfb58244364a54aa660971c6  output/bitcoin-0.18.99-i686-linux-gnu-debug.tar.gz
    87d533b6cca16631303dea753b5974989db22ed3c672eb0b4fae6c55f7815283  output/bitcoin-0.18.99-i686-linux-gnu.tar.gz
    61919303a7b89e3165ea915120c628c7e8896f1f43c9d05d0b2dd306336b2e86  output/bitcoin-0.18.99-x86_64-linux-gnu-debug.tar.gz
    4e475578e01f0c4b09720f4088eba8a0c8468343a361cfc9095377771a709141  output/bitcoin-0.18.99-x86_64-linux-gnu.tar.gz
    3d63f5f0d8bca4b84dad46419ead588b6d035656b1d64e80cdfdf1a46d1fd9f8  output/src/bitcoin-0.18.99.tar.gz
    
    
  50. DrahtBot added the label Needs rebase on May 20, 2019
  51. dongcarl commented at 3:17 PM on May 20, 2019: member

    Used -Wl,--dynamic-linker=Foo trick by @theuni to eliminate all instances ofpatchelf!

  52. dongcarl commented at 3:20 PM on May 20, 2019: member

    Also despite what @DrahtBot says I'm not going to rebase until we fix our GLIBC compat issues...

  53. fanquake commented at 5:06 AM on May 21, 2019: member

    @dongcarl I've tried building your latest updates, but am running into the following:

    downloading from https://ci.guix.gnu.org/nar/gzip/6w65nzbc3ah30y5kr4zx9rcgknpjr1f5-nss-certs-3.43...
     nss-certs-3.43  150KiB                                                                                                         50KiB/s 00:01 [###               ]  21.4%Backtrace:
    
    gzip: stdout: Broken pipe
               3 (apply-smob/1 #<catch-closure 1572300>)
    In ice-9/boot-9.scm:
        705:2  2 (call-with-prompt _ _ #<procedure default-prompt-handle?>)
    In ice-9/eval.scm:
        619:8  1 (_ #(#(#<directory (guile-user) 1627140>)))
    In guix/ui.scm:
      1747:12  0 (run-guix-command _ . _)
    
    guix/ui.scm:1747:12: In procedure run-guix-command:
    Throw to key `encoding-error' with args `("scm_to_stringn" "cannot convert wide string to output locale" 84 #f #f)'.
     nss-certs-3.43  150KiB                                                                                                        120KiB/s 00:01 [##################] 100.0%substitution of /gnu/store/6w65nzbc3ah30y5kr4zx9rcgknpjr1f5-nss-certs-3.43 failed
    killing process 4880
    guix environment: error: some substitutes for the outputs of derivation `/gnu/store/dv7if5fn1ysi89hg969125z54y8hv8p8-nss-certs-3.43.drv' failed (usually happens due to networking issues); try `--fallback' to build derivation from source 
    

    I've seen this issue before, in the time between guix 1.0.0 and 1.0.1, will debug.

  54. dongcarl commented at 10:51 AM on May 21, 2019: member

    @fanquake Looks like a network error downloading from the substitutes server (which serves binaries)... Try the --fallback or --no-substitutes options.

  55. fanquake commented at 11:29 AM on May 21, 2019: member

    @dongcarl No worries. I ended up dropping nss-certs from the manifest to get a build running.

    The results & inputs are below:

    + gzip
    + mkdir -p /dongcarl/output/src
    + mv -n /dongcarl/output/src/bitcoin-0.18.99.tar.gz /dongcarl/output/src
    bash-4.4# find output/ -type f -print0 | sort -z | xargs -r0 sha256sum
    299712eedebb43175ca73e2968a8ea8bda053e403b5ec7274eb3167ea15c53d1  output/bitcoin-0.18.99-aarch64-linux-gnu-debug.tar.gz
    cd5d7f6c5329e0a233b4129d5e16758841cac2015be8cb59b72e98940e6272f1  output/bitcoin-0.18.99-aarch64-linux-gnu.tar.gz
    eeff2f18d67429b669494e6e920185db0ea3539f7824333b95308d075f3df2d1  output/bitcoin-0.18.99-arm-linux-gnueabihf-debug.tar.gz
    f98c907b73fa8ac453d952a1911256abd89be3d2768f3377a1cea59297b196d4  output/bitcoin-0.18.99-arm-linux-gnueabihf.tar.gz
    deaf5ecf8a90a0ff752fc8e658edabf7b063195b83d2a905d452e8dbdb33768e  output/bitcoin-0.18.99-i686-linux-gnu-debug.tar.gz
    f207c5617e67d936cf5913f8090fd0975ce591eea27b54ee4f9f1240b1b90e8c  output/bitcoin-0.18.99-i686-linux-gnu.tar.gz
    d94cbc18be3c728076e1ce42a6cd35e282ef3ecbdcba6674585c19e80350952d  output/bitcoin-0.18.99-x86_64-linux-gnu-debug.tar.gz
    7634f5d856288f3a7ef8b5a004884502fd6de7ea6cc705346912671d4e33c391  output/bitcoin-0.18.99-x86_64-linux-gnu.tar.gz
    3b87b80d2437a52581702ac08d575705de47e4f39582bdda73829c96d1c754e2  output/src/bitcoin-0.18.99.tar.gz
    
    bash-4.4# guix --version
    guix (GNU Guix) 2a520532d355f07ba3988fd40b2687b0d6c025b8
    Copyright (C) 2019 the Guix authors
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.
    
    bash-4.4# git status
    HEAD detached at 6b832d979
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
    
    	modified:   contrib/guix/manifest.scm
    
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
    
    	distsrc-aarch64-linux-gnu/
    	distsrc-arm-linux-gnueabihf/
    	distsrc-i686-linux-gnu/
    	distsrc-x86_64-linux-gnu/
    
    no changes added to commit (use "git add" and/or "git commit -a")
    
    diff --git a/contrib/guix/manifest.scm b/contrib/guix/manifest.scm
    index 43739bad5..fbca883f9 100644
    --- a/contrib/guix/manifest.scm
    +++ b/contrib/guix/manifest.scm
    @@ -56,6 +56,6 @@
        "python@3"
        "pkg-config"
        "util-linux"
    -   "nss-certs"
    +   ;;"nss-certs"
        "curl"
        "patchelf"))
    
  56. dongcarl commented at 11:49 AM on May 21, 2019: member

    @fanquake Huh... Mind uploading your output/ so I can diffoscope?

  57. fanquake commented at 2:46 PM on May 26, 2019: member
    guix --version
    guix (GNU Guix) 2a520532d355f07ba3988fd40b2687b0d6c025b8
    
    git log
    commit 36c85a9d842133b1a7ea33e02f9239673da49caa (HEAD -> 2019-01-guix, origin/2019-01-guix)
    
    find output/ -type f -print0 | sort -z | xargs -r0 sha256sum
    aa0d78ada1e6fb8de25960549332a84c74d991bf41f3a058b751c2f54670d728  output/bitcoin-0.18.99-aarch64-linux-gnu-debug.tar.gz
    698262af678b9ac2a9ea78fb97ab41b1a1e7413f1e6ef759c169f7a3dc4387e8  output/bitcoin-0.18.99-aarch64-linux-gnu.tar.gz
    2d7f0a4f4ee020287c8d07a515e89ae0b3d34421aa373e402ea4aa52369cadbe  output/bitcoin-0.18.99-arm-linux-gnueabihf-debug.tar.gz
    908a1f3156983fe378724634a3a7098c7ad5eae48bbef8f799a39739a0053baa  output/bitcoin-0.18.99-arm-linux-gnueabihf.tar.gz
    55afde7d02bd5bbeebc0337d7cd31d24ce24f0b930d0cc38a01336c01ebee782  output/bitcoin-0.18.99-i686-linux-gnu-debug.tar.gz
    68fd087f6f8c6033dceb8f8735519760567a3b960708b316c7ffec096f9784d9  output/bitcoin-0.18.99-i686-linux-gnu.tar.gz
    be3de8a91a07bb6ec7426c51b7d4d7d17c28b64451c509876c9335773c9dd262  output/bitcoin-0.18.99-x86_64-linux-gnu-debug.tar.gz
    6071d9bb321e47f114582cdd791bf2408793136b39b143409c2dfe4ce1bc511f  output/bitcoin-0.18.99-x86_64-linux-gnu.tar.gz
    3b87b80d2437a52581702ac08d575705de47e4f39582bdda73829c96d1c754e2  output/src/bitcoin-0.18.99.tar.gz
    
  58. dongcarl commented at 2:41 PM on May 28, 2019: member

    Work has been picked back up on a Guix package for debian. There's some overlap between Guix and debian developers. See here for more details: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=850644

  59. dongcarl commented at 7:14 PM on May 29, 2019: member

    Quick update:

    1. Upstreamed initial riscv64 support to Guix, will be adding support here soon.
    2. Tested the arm-linux-gnueabihf binaries that this build process produces on actual hardware (BeagleBone Black). Works well, even bitcoin-qt over X forwarding worked. aarch64 hardware is in the mail (Pine64).
  60. dongcarl commented at 11:50 AM on May 30, 2019: member

    RISCV64 support has landed! Updated instructions are below.


    With Guix installed, pull my fork which has a few patches yet to be upstreamed:

    guix pull --url=https://github.com/dongcarl/guix.git  \
              --commit=5242e0a5e046e2aaa4da7b0d3756caa78ed6ca1f \
              --max-jobs=$(nproc)
    

    While on this branch @ 985e42d, we can perform a deterministic build of i686, x86_64, aarch64, armhf, and riscv64 by simply invoking:

    ./contrib/guix/guix-build.sh
    
  61. fanquake commented at 9:42 PM on May 30, 2019: member
    guix --version
    guix (GNU Guix) 5242e0a5e046e2aaa4da7b0d3756caa78ed6ca1f
    
    git log
    commit 985e42d5fa351fb638f871341cb60d845e2f1b9b (HEAD -> 2019-01-guix, origin/2019-01-guix)
    
    find output/ -type f -print0 | sort -z | xargs -r0 sha256sum
    d580457f04a049de6aa853027748b6dedc6b6029718a387f741c32559a790796  output/bitcoin-0.18.99-aarch64-linux-gnu-debug.tar.gz
    41a328ef6b9968b19f0ad4919130a1512c799a1370144c7bd42a59ccb1bd95bc  output/bitcoin-0.18.99-aarch64-linux-gnu.tar.gz
    e282c8285801dd7f571454095e7ab415284caaba388c773b21876f3c25b1551f  output/bitcoin-0.18.99-arm-linux-gnueabihf-debug.tar.gz
    d32d59bf38bbd1db0eeea83e799553fe0f325acbd98c8a7b2d6765f5c8233358  output/bitcoin-0.18.99-arm-linux-gnueabihf.tar.gz
    be1b6abf328100ed09ce46a11d61722f5a2402e956cc2a5b93baa0ed4c0978e0  output/bitcoin-0.18.99-i686-linux-gnu-debug.tar.gz
    61b3d06e6ae7d2bdebd714034d2e0b330b97c291a4511b7ba794a84339b46696  output/bitcoin-0.18.99-i686-linux-gnu.tar.gz
    b0517b563165eeb57d1ef54cdefce50398efdbd8a39bb6571d87588e6077f2c3  output/bitcoin-0.18.99-riscv64-linux-gnu-debug.tar.gz
    950cb554a09e5f5e8479f3f0c129be2d3dd5f1b150645fc27ebe6d973ab08c2c  output/bitcoin-0.18.99-riscv64-linux-gnu.tar.gz
    c8962baf81b731d132bf73315eef251d046d0792dd33460d31e3701fd610e06b  output/bitcoin-0.18.99-x86_64-linux-gnu-debug.tar.gz
    43502673170d982698fbdf4d77242135a6a3b9bc4de1e70d7a192a83c0e57227  output/bitcoin-0.18.99-x86_64-linux-gnu.tar.gz
    3b87b80d2437a52581702ac08d575705de47e4f39582bdda73829c96d1c754e2  output/src/bitcoin-0.18.99.tar.gz
    
  62. dongcarl force-pushed on May 31, 2019
  63. dongcarl commented at 6:24 PM on May 31, 2019: member

    Rebased.

  64. DrahtBot removed the label Needs rebase on May 31, 2019
  65. in depends/packages.md:156 in e1c026c948 outdated
     149 | @@ -146,3 +150,34 @@ $($(package)_config_opts) will be appended.
     150 |  Most autotools projects can be properly staged using:
     151 |  
     152 |      $(MAKE) DESTDIR=$($(package)_staging_dir) install
     153 | +
     154 | +## Build outputs:
     155 | +
     156 | +In general, the output of a depends package should not contain any libtool
    


    laanwj commented at 9:51 AM on June 9, 2019:

    Do we want this to be "in general" or a hard rule? Are there exceptions thinkable?


    dongcarl commented at 4:55 PM on June 10, 2019:

    Hmmm, I should rebase as this is already merged. But I can't think of any exceptions off the top of my head right now. I thought of the phrasing "in general" as in: don't include libtool archives unless it is absolutely necessary. Perhaps next time I touch the file I'll rephrase it that way.

  66. in contrib/guix/build.sh:50 in e1c026c948 outdated
      45 | +mkdir -p "${OUTDIR}"
      46 | +
      47 | +# Environment variables for determism
      48 | +export QT_RCC_TEST=1
      49 | +export QT_RCC_SOURCE_DATE_OVERRIDE=1
      50 | +export TAR_OPTIONS="--owner=0 --group=0 --numeric-owner --mtime='@${REFERENCE_UNIX_TIMESTAMP}' --sort=name"
    


    laanwj commented at 2:49 PM on June 9, 2019:

    In #16141, TAR_OPTIONS has been removed from the gitian descriptor. Do we want to do the same here?


    dongcarl commented at 5:07 PM on June 10, 2019:

    It seems that change breaks a few things... I've made a few cleanups to how we archive in this script that can be cleanly backported to Gitian, so I'll go take a look and fix things up.

  67. in contrib/guix/build.sh:74 in e1c026c948 outdated
      69 | +
      70 | +# Declare binaries to wrap
      71 | +FAKETIME_HOST_PROGS="gcc g++"
      72 | +FAKETIME_PROGS="date ar ranlib nm"
      73 | +
      74 | +create_faketime_wrapper() {
    


    laanwj commented at 2:50 PM on June 9, 2019:

    as guix is basically a system for deterministic builds, I'm surprised our own faketime hack is still needed !


    fanquake commented at 7:44 PM on June 9, 2019:

    I think @theuni mentioned that some of these hacks may be able to be dropped.


    dongcarl commented at 5:10 PM on June 10, 2019:

    Ah... So Guix's normal package build system would set SOURCE_DATE_EPOCH and expect packages to follow that and submit patches upstream if they don't (because faketime hacking is a little ugly in the end). However, we are only using Guix's environment functionality, which doesn't assume you want to do this. Perhaps it'd be worth setting SOURCE_DATE_EPOCH at the start of the script and see what fails to build deterministically. Mostly likely most packages would honor it.


    laanwj commented at 2:58 PM on June 11, 2019:

    OK, agree that this is something that could be done in a future PR, I was just curious

  68. laanwj commented at 2:53 PM on June 9, 2019: member

    Another observation I made today: the guix build output had

      NEEDED               libdl.so.2
    

    for bitcoind, bitcoin-cli, bitcoin-tx, and test_bitcoin, while the release versions didn't. However, bitcoin-qt had that NEED in both the guix build and the release build.

    This is strange. libdl shouldn't be needed for any of our executables. It is used to load dynamic libraries at runtime which is definitely not what we want bitcoin to do, or even be able to. I wonder what is using it, and what symbols from it are used.

  69. dongcarl commented at 4:47 PM on June 10, 2019: member

    Another observation I made today: the guix build output had

      NEEDED               libdl.so.2
    

    for bitcoind, bitcoin-cli, bitcoin-tx, and test_bitcoin, while the release versions didn't. However, bitcoin-qt had that NEED in both the guix build and the release build.

    This is strange. libdl shouldn't be needed for any of our executables. It is used to load dynamic libraries at runtime which is definitely not what we want bitcoin to do, or even be able to. I wonder what is using it, and what symbols from it are used. @laanwj It seems that my intermediary changes have fixed this. Here's a gist with ldd output for x86_64 and readelf --dynamic output for all linux architectures: https://gist.github.com/dongcarl/505711aeb677185680f9868ca7c9a100.

  70. in contrib/guix/guix-build.sh:19 in e1c026c948 outdated
      14 | +    # specified by 'contrib/guix/manifest.scm'
      15 | +    guix environment --manifest=contrib/guix/manifest.scm \
      16 | +                     --load-path=contrib/guix/packages \
      17 | +                     --container \
      18 | +                     --pure \
      19 | +                     --no-grafts \
    


    laanwj commented at 5:36 AM on June 12, 2019:

    --max-jobs=$(nproc) \ ?

  71. laanwj commented at 11:38 AM on June 12, 2019: member

    @laanwj It seems that my intermediary changes have fixed thi

    Right—looks like only bitcoin-qt has a dependency on libdl now, and the dependency indeed comes through the QLibrary loading mechanism:

    $ objdump -d bitcoin-qt |grep dlopen
    00000000001468d0 <dlopen@plt>:
      1468d0:       ff 25 92 89 11 02       jmpq   *0x2118992(%rip)        # 225f268 <dlopen@GLIBC_2.2.5>
    
      d69e3a:       e8 91 ca 3d ff          callq  1468d0 <dlopen@plt>
    $ addr2line -Cife bitcoin-qt.dbg 0xd69e3a
    QLibraryPrivate::load_sys()
    

    I checked and this is no different than the gitian-build executables. Maybe there's a way to disable QLibrary's dynamic loading to remove the dependency, but there's no need to do so here.

  72. laanwj commented at 8:04 AM on June 13, 2019: member

    Mildly tested ACK

    • installed and built guix environment on a debian stretch VM using GNU's guix-install.sh
    • built a full set of executables using contrib/guix/guix-build.sh. I had some minor issues but was able to resolve them with help in #bitcoin-builds
    • (manually) checked build sanity using readelf and nm for a few platforms, as well as that of the debug symbols
    • tested:
      • riscv64 test_bitcoin: all 351 unit tests passed (Fedora Rawhide on SiFive Unleashed board)
      • riscv64 bitcoind: currently running a node, seems to be stable
      • amd64 test_bitcoin: all 351 unit tests passed (Debian Stretch)
      • amd64 bitcoind: currentty running a node, seems to be stable, interface to clightningd works
      • amd64 bitcoin-qt: lightly tested interactively
      • arm32 test_bitcoin: all 351 unit tests passed (Debian Stretch)
      • aarch64 test_bitcoin: all 351 unit tests passed (Ubuntu 18.04)
      • x86_32: test_bitcoin: all 351 unit tests passed (Ubuntu 18.04, tested on a 64-bit install with 32-bit libraries installed)

    I have not tried anything with regard to determinism. At some point we should likely try building the same commit on different environments and comparing the output.

  73. fanquake commented at 2:56 AM on June 15, 2019: member
    guix --version
    guix (GNU Guix) 5242e0a5e046e2aaa4da7b0d3756caa78ed6ca1f
    
    git log
    commit 87362339977761cbd3b449b22e443ff7f38b0b17 (HEAD -> 2019-01-guix, origin/2019-01-guix)
    
    find output/ -type f -print0 | sort -z | xargs -r0 sha256sum
    96a735f146aed74dd01327408123b38043809d411e3e7c63e796dfb4939ca891  output/bitcoin-0.18.99-aarch64-linux-gnu-debug.tar.gz
    90057c6a0b57cb6ec7a5f37ca4f0d32234e5506182db69dc6240166073a121cd  output/bitcoin-0.18.99-aarch64-linux-gnu.tar.gz
    22f8264e88c69b6f9014fb39d5e12c35e1eb57b94e452e7748736f81436bbafa  output/bitcoin-0.18.99-arm-linux-gnueabihf-debug.tar.gz
    740128a7b35788de9ea531fd5a982465e8662e17519fd06ca61d7e961f244664  output/bitcoin-0.18.99-arm-linux-gnueabihf.tar.gz
    77c43756470cba7aa21291f515eb18cd064b70bb3e50e48b406865987e86f3ab  output/bitcoin-0.18.99-i686-linux-gnu-debug.tar.gz
    4a5c1d4278841873d15623c60120b4259e31c9bf7ee0173762ae7b785ae77c40  output/bitcoin-0.18.99-i686-linux-gnu.tar.gz
    6b9e742e06a9f7141d3d8eefedb57bd01bc82d0b17796c9f825c88bb8cd1cae8  output/bitcoin-0.18.99-riscv64-linux-gnu-debug.tar.gz
    1632118c33f28694d734805c57aebcc55df1ca07ee740c8649f71aa62c9fd89a  output/bitcoin-0.18.99-riscv64-linux-gnu.tar.gz
    4fa04cb6bc25af887f21e3320b918e3a3e60181d8f45ae2d5575c9cb4fc44897  output/bitcoin-0.18.99-x86_64-linux-gnu-debug.tar.gz
    e7f8c1e85d1e5400bba3cc51aa4b42cc2c6868bbf0195c8f35629878386a5214  output/bitcoin-0.18.99-x86_64-linux-gnu.tar.gz
    9a2e293a45ad3e83e11eb4c82902508a9010922f9464fb17859f962ef0e6bd02  output/src/bitcoin-0.18.99.tar.gz
    
  74. fanquake commented at 3:59 PM on June 22, 2019: member
    guix --version
    guix (GNU Guix) aedb0cf16e82caea01f82f795e473756067a1165
    
    git log
    commit 0be753b04070cc06965dff13118beabe46a1097a (HEAD -> 2019-01-guix, origin/2019-01-guix)
    
    find output/ -type f -print0 | sort -z | xargs -r0 sha256sum
    f70ac4e25b66dc30cadaaf9989c62051bc23ab9198b2564ad70d3b768dd6d613  output/bitcoin-0.18.99-aarch64-linux-gnu-debug.tar.gz
    6c69021b500137af3d24af7d4eb0d0ab26c089937390a8547db6b5ac7c5379cb  output/bitcoin-0.18.99-aarch64-linux-gnu.tar.gz
    a0622a449302de4e531db85d9a4d35a5005b6f7c929d45992f52efacc7e38957  output/bitcoin-0.18.99-arm-linux-gnueabihf-debug.tar.gz
    58c870a464d61302317eb32a53e793c45b7249ce3f86146ed2ccc9483074a985  output/bitcoin-0.18.99-arm-linux-gnueabihf.tar.gz
    5f7e597f046ac72d106bc5259707c1ec0fe1611c6c06423884a2afa79bc02377  output/bitcoin-0.18.99-i686-linux-gnu-debug.tar.gz
    c07a1014d95428c97314731a5e0b7925a8d7b7868ec021a429176b85581b6fbe  output/bitcoin-0.18.99-i686-linux-gnu.tar.gz
    78cefd96baa16c9c8552f88a6e84f61ed8eb794ac524d96ab5c2670b986c11fa  output/bitcoin-0.18.99-riscv64-linux-gnu-debug.tar.gz
    aa37b770330a0b81b36c686489f7606a7145f354e43a23862409fe08ce9e149e  output/bitcoin-0.18.99-riscv64-linux-gnu.tar.gz
    e733f2c28581427742fbad99d7e0b80c0584ec25aa7f8b88a2f437b68bf6e207  output/bitcoin-0.18.99-x86_64-linux-gnu-debug.tar.gz
    465716ef10f2d28bd17767732501c70923c60c14efec95b940658fc6e8ecbbad  output/bitcoin-0.18.99-x86_64-linux-gnu.tar.gz
    9a2e293a45ad3e83e11eb4c82902508a9010922f9464fb17859f962ef0e6bd02  output/src/bitcoin-0.18.99.tar.gz
    
  75. dongcarl commented at 9:20 PM on June 22, 2019: member

    For both

    $ uname -rvmo
    4.9.0-9-amd64 [#1](/bitcoin-bitcoin/1/) SMP Debian 4.9.168-1+deb9u3 (2019-06-16) x86_64 GNU/Linux
    

    and

    $ uname -rvmo
    5.1.9-arch1-1-ARCH [#1](/bitcoin-bitcoin/1/) SMP PREEMPT Tue Jun 11 16:18:09 UTC 2019 x86_64 GNU/Linux
    

    I'm getting:

    $ find output/ -type f -print0 | sort -z | xargs -r0 sha256sum
    ed24d2574d9b27cf9434cb272f8f06170e96b10fad4d4fa46b4ef5de0a18f57a  output/bitcoin-0.18.99-aarch64-linux-gnu-debug.tar.gz
    cfb6889f0588492d112cc0bc2a41ef1ccdfbeea71d8405b935af708f5a643b6b  output/bitcoin-0.18.99-aarch64-linux-gnu.tar.gz
    2e60551ef3e4cac1d2f671984da2d2c230a3e7183983e08de052cac76c983032  output/bitcoin-0.18.99-arm-linux-gnueabihf-debug.tar.gz
    6212a7c3456bd4fda1c590202018b1ce232928509a4f139c0a0c42c0fb7c2637  output/bitcoin-0.18.99-arm-linux-gnueabihf.tar.gz
    a98a6f0d7bf6bf2392fd421669c3924836f538ffe508f9a0b9bd4f7d25489dfb  output/bitcoin-0.18.99-i686-linux-gnu-debug.tar.gz
    1273da1f073b8beb0169e5c12557c85944784a39e35b3252c754ea3679f41ee4  output/bitcoin-0.18.99-i686-linux-gnu.tar.gz
    7fb997e1744249c98812be8eea863c8d5b764e740d77f57b64ab06ef47317d48  output/bitcoin-0.18.99-riscv64-linux-gnu-debug.tar.gz
    8198a30d7c67bebd1a34a94d3fb2e613c2347674a2e31c8b71e7c1c95aa0e0b2  output/bitcoin-0.18.99-riscv64-linux-gnu.tar.gz
    8adb618f108ccb2e1c1beb24b4b14aeafa8c151a60b4329d73812bbad728313f  output/bitcoin-0.18.99-x86_64-linux-gnu-debug.tar.gz
    ca982c12daa54b2f125a2b24539f572567f86ababb4262aada17cbe85c40a15c  output/bitcoin-0.18.99-x86_64-linux-gnu.tar.gz
    85904ad700577afba1ba3e21dbc4af093c4ebc05b057d3afff939c9bc997f022  output/src/bitcoin-0.18.99.tar.gz
    

    with

    $ guix describe
    Generation 2    Jun 20 2019 03:59:40    (current)
      guix aedb0cf
        repository URL: https://github.com/dongcarl/guix.git
        branch: 2019-05-bitcoin-staging
        commit: aedb0cf16e82caea01f82f795e473756067a1165
    

    and

    $ git rev-parse HEAD
    0be753b04070cc06965dff13118beabe46a1097a
    
  76. practicalswift commented at 9:37 PM on June 22, 2019: contributor

    @dongcarl Thanks for your excellent work here!

    What is the status of the upstreaming of the guix changes in your dongcarl/guix? What changes are required and have they been submitted? :-)

  77. dongcarl commented at 9:48 PM on June 22, 2019: member

    @practicalswift

    Thanks for your excellent work here!

    :blush:

    What is the status of the upstreaming of the guix changes in your dongcarl/guix? What changes are required and have they been submitted? :-)

    There are only 2 commits that aren't upstream yet: https://github.com/dongcarl/guix/commit/878e7a4dc8483b6f1796e847e26e82ced41c7cf7 and https://github.com/dongcarl/guix/commit/aedb0cf16e82caea01f82f795e473756067a1165.

    https://github.com/dongcarl/guix/commit/878e7a4dc8483b6f1796e847e26e82ced41c7cf7 is already submitted here: https://lists.gnu.org/archive/html/guix-patches/2019-05/msg00283.html

    And https://github.com/dongcarl/guix/commit/aedb0cf16e82caea01f82f795e473756067a1165 hasn't been submitted yet, but I plan on doing it this week (it's a little more extensive)

  78. practicalswift commented at 7:02 AM on June 23, 2019: contributor

    FWIW: I'm getting the same checksum for the i686-linux binaries as @dongcarl, but guix-build.sh fails before the other platforms have been built.

    $ guix pull --url=https://github.com/dongcarl/guix.git --commit=aedb0cf16e82caea01f82f795e473756067a1165 --max-jobs=$(nproc)
    $ guix --version | grep ^guix
    guix (GNU Guix) aedb0cf16e82caea01f82f795e473756067a1165
    $ git clone https://github.com/bitcoin/bitcoin bitcoin-guix
    $ cd bitcoin-guix
    $ git fetch origin pull/15277/head:2019-01-guix
    $ git checkout 2019-01-guix
    $ git rev-parse HEAD
    0be753b04070cc06965dff13118beabe46a1097a
    $ contrib/guix/guix-build.sh
    …
    rm -f ../../lib/libQt5Widgets.a
    ar cqs ../../lib/libQt5Widgets.a .obj/qaction.o .obj/qactiongroup.o .obj/qapplication.o .obj/qwidgetbackingstore.o .obj/qboxlayout.o .obj/qgridlayout.o .obj/qlayout.o .obj/qlayoutengine.o .obj/qlayoutitem.o .obj/qshortcut.o .obj/qsizepolicy.o .obj/qstackedlayout.o .obj/qtooltip.o .obj/qwidget.o .obj/qwidgetaction.o .obj/qgesture.o .obj/qstan
    dardgestures.o .obj/qgesturerecognizer.o .obj/qgesturemanager.o .obj/qdesktopwidget.o .obj/qwidgetsvariant.o .obj/qwidgetwindow.o .obj/qwindowcontainer.o .obj/qformlayout.o .obj/qwhatsthis.o .obj/qdrawutil.o .obj/qstyle.o .obj/qstyleanimation.o .obj/qstylefactory.o .obj/qstyleoption.o .obj/qstyleplugin.o .obj/qstylehelper.o .obj/qcommonstyle
    .o .obj/qproxystyle.o .obj/qstylepainter.o .obj/qstylesheetstyle.o .obj/qstylesheetstyle_default.o .obj/qpixmapstyle.o .obj/qwindowsstyle.o .obj/qfusionstyle.o .obj/qframe.o .obj/qtoolbar.o .obj/qtoolbarlayout.o .obj/qtoolbarseparator.o .obj/qabstractscrollarea.o .obj/qfocusframe.o .obj/qwidgetanimator.o .obj/qtoolbararealayout.o .obj/qabstr
    actbutton.o .obj/qabstractslider.o .obj/qbuttongroup.o .obj/qcalendarwidget.o .obj/qcheckbox.o .obj/qcombobox.o .obj/qcommandlinkbutton.o .obj/qdatetimeedit.o .obj/qdockwidget.o .obj/qdockarealayout.o .obj/qeffects.o .obj/qfontcombobox.o .obj/qgroupbox.o .obj/qkeysequenceedit.o .obj/qlabel.o .obj/qlineedit_p.o .obj/qlineedit.o .obj/qwidgetli
    necontrol.o .obj/qmainwindow.o .obj/qmainwindowlayout.o .obj/qmdiarea.o .obj/qmdisubwindow.o .obj/qmenu.o .obj/qmenubar.o .obj/qprogressbar.o .obj/qpushbutton.o .obj/qradiobutton.o .obj/qwidgetresizehandler.o .obj/qdialogbuttonbox.o .obj/qrubberband.o .obj/qscrollarea.o .obj/qscrollbar.o .obj/qsizegrip.o .obj/qslider.o .obj/qabstractspinbox.
    o .obj/qspinbox.o .obj/qsplashscreen.o .obj/qsplitter.o .obj/qstackedwidget.o .obj/qstatusbar.o .obj/qtabbar.o .obj/qplaintextedit.o .obj/qtextedit.o .obj/qtabwidget.o .obj/qtoolbox.o .obj/qtoolbutton.o .obj/qtoolbarextension.o .obj/qwidgettextcontrol.o .obj/qcolordialog.o .obj/qdialog.o .obj/qerrormessage.o .obj/qfiledialog.o .obj/qsidebar.
    o .obj/qfilesystemmodel.o .obj/qfileinfogatherer.o .obj/qfontdialog.o .obj/qinputdialog.o .obj/qmessagebox.o .obj/qprogressdialog.o .obj/qaccessiblewidget.o .obj/qaccessiblewidgetfactory.o .obj/complexwidgets.o .obj/qaccessiblemenu.o .obj/qaccessiblewidgets.o .obj/rangecontrols.o .obj/simplewidgets.o .obj/itemviews.o .obj/qabstractitemview.o
     .obj/qheaderview.o .obj/qbsptree.o .obj/qabstractitemdelegate.o .obj/qitemdelegate.o .obj/qitemeditorfactory.o .obj/qstyleditemdelegate.o .obj/qcolumnview.o .obj/qcolumnviewgrip.o .obj/qdatawidgetmapper.o .obj/qdirmodel.o .obj/qlistview.o .obj/qlistwidget.o .obj/qtableview.o .obj/qtablewidget.o .obj/qtreeview.o .obj/qtreewidget.o .obj/qtree
    widgetitemiterator.o .obj/qfileiconprovider.o .obj/qgraphicsgridlayout.o .obj/qgraphicsitem.o .obj/qgraphicsitemanimation.o .obj/qgraphicslayout.o .obj/qgraphicslayout_p.o .obj/qgraphicslayoutitem.o .obj/qgraphicslinearlayout.o .obj/qgraphicsproxywidget.o .obj/qgraphicsscene.o .obj/qgraphicsscene_bsp.o .obj/qgraphicsscenebsptreeindex.o .obj/
    qgraphicssceneevent.o .obj/qgraphicssceneindex.o .obj/qgraphicsscenelinearindex.o .obj/qgraphicstransform.o .obj/qgraphicsview.o .obj/qgraphicswidget.o .obj/qgraphicswidget_p.o .obj/qgraphicslayoutstyleinfo.o .obj/qgraphicsgridlayoutengine.o .obj/qsimplex_p.o .obj/qgraphicsanchorlayout_p.o .obj/qgraphicsanchorlayout.o .obj/qsystemtrayicon.o
    .obj/qcolormap.o .obj/qcompleter.o .obj/qscroller.o .obj/qscrollerproperties.o .obj/qflickgesture.o .obj/qundostack.o .obj/qundogroup.o .obj/qundoview.o .obj/qsystemtrayicon_x11.o .obj/qgraphicseffect.o .obj/qpixmapfilter.o .obj/qrc_qstyle.o .obj/qrc_qmessagebox.o .obj/moc_qpixmapstyle_p.o
    make[2]: Leaving directory '/bitcoin/depends/work/build/x86_64-linux-gnu/qt/5.9.7-69ee22e4522/qtbase/src/widgets'
    make[1]: Leaving directory '/bitcoin/depends/work/build/x86_64-linux-gnu/qt/5.9.7-69ee22e4522/qtbase/src'
    make: *** [funcs.mk:253: /bitcoin/depends/work/build/x86_64-linux-gnu/qt/5.9.7-69ee22e4522/qtbase/.stamp_built] Error 2
    make: Leaving directory '/bitcoin/depends'
    $ find output/ -type f -print0 | sort -z | xargs -r0 sha256sum
    a98a6f0d7bf6bf2392fd421669c3924836f538ffe508f9a0b9bd4f7d25489dfb  output/bitcoin-0.18.99-i686-linux-gnu-debug.tar.gz
    1273da1f073b8beb0169e5c12557c85944784a39e35b3252c754ea3679f41ee4  output/bitcoin-0.18.99-i686-linux-gnu.tar.gz
    85904ad700577afba1ba3e21dbc4af093c4ebc05b057d3afff939c9bc997f022  output/src/bitcoin-0.18.99.tar.gz
    
  79. fanquake commented at 8:09 AM on June 23, 2019: member

    @dongcarl You can disregard my previous post, I must have miss-built or tainted my build environment somehow..

    I've setup a new environment from scratch, using a slightly newer version of my alpine-guix dockerfile, rebuilt everything, and all my hashes match with yours 🚀 .

    As you mentioned, after a little cleaning up, upstreaming patches and appeasing the linter, I'd like to see this merged pretty soon. It's self-contained in contrib/, a lot of the changes here are actually already in master and followups, fixes, as well as cross compilation for macOS and Windows can follow later.

    bash-5.0# uname -rvmo
    4.9.125-linuxkit [#1](/bitcoin-bitcoin/1/) SMP Fri Sep 7 08:20:28 UTC 2018 x86_64 Linux
    
    bash-5.0# find output/ -type f -print0 | sort -z | xargs -r0 sha256sum
    ed24d2574d9b27cf9434cb272f8f06170e96b10fad4d4fa46b4ef5de0a18f57a  output/bitcoin-0.18.99-aarch64-linux-gnu-debug.tar.gz
    cfb6889f0588492d112cc0bc2a41ef1ccdfbeea71d8405b935af708f5a643b6b  output/bitcoin-0.18.99-aarch64-linux-gnu.tar.gz
    2e60551ef3e4cac1d2f671984da2d2c230a3e7183983e08de052cac76c983032  output/bitcoin-0.18.99-arm-linux-gnueabihf-debug.tar.gz
    6212a7c3456bd4fda1c590202018b1ce232928509a4f139c0a0c42c0fb7c2637  output/bitcoin-0.18.99-arm-linux-gnueabihf.tar.gz
    a98a6f0d7bf6bf2392fd421669c3924836f538ffe508f9a0b9bd4f7d25489dfb  output/bitcoin-0.18.99-i686-linux-gnu-debug.tar.gz
    1273da1f073b8beb0169e5c12557c85944784a39e35b3252c754ea3679f41ee4  output/bitcoin-0.18.99-i686-linux-gnu.tar.gz
    7fb997e1744249c98812be8eea863c8d5b764e740d77f57b64ab06ef47317d48  output/bitcoin-0.18.99-riscv64-linux-gnu-debug.tar.gz
    8198a30d7c67bebd1a34a94d3fb2e613c2347674a2e31c8b71e7c1c95aa0e0b2  output/bitcoin-0.18.99-riscv64-linux-gnu.tar.gz
    8adb618f108ccb2e1c1beb24b4b14aeafa8c151a60b4329d73812bbad728313f  output/bitcoin-0.18.99-x86_64-linux-gnu-debug.tar.gz
    ca982c12daa54b2f125a2b24539f572567f86ababb4262aada17cbe85c40a15c  output/bitcoin-0.18.99-x86_64-linux-gnu.tar.gz
    85904ad700577afba1ba3e21dbc4af093c4ebc05b057d3afff939c9bc997f022  output/src/bitcoin-0.18.99.tar.gz
    
    bash-5.0# guix describe
    Generation 1	Jun 23 2019 02:53:32	(current)
      guix aedb0cf
        repository URL: https://github.com/dongcarl/guix.git
        commit: aedb0cf16e82caea01f82f795e473756067a1165
    
    bash-5.0# git rev-parse HEAD
    0be753b04070cc06965dff13118beabe46a1097a
    

    @practicalswift Is it possible you've run out of disk space while building? Could you try running a build like this ./contrib/guix/guix-build.sh > out 2> err, as well as posting any more logs / info ?

  80. practicalswift commented at 5:41 PM on June 23, 2019: contributor

    I did another run and obtained the following results:

    Please note that I'm getting the same hashes as @dongcarl and @fanquake for the non-debug files.

    But not for the debug files.

    $ guix pull --url=https://github.com/dongcarl/guix.git --commit=aedb0cf16e82caea01f82f795e473756067a1165 --max-jobs=$(nproc)
    $ guix --version | grep ^guix
    guix (GNU Guix) aedb0cf16e82caea01f82f795e473756067a1165
    $ git clone https://github.com/bitcoin/bitcoin bitcoin-guix
    $ cd bitcoin-guix
    $ git fetch origin pull/15277/head:2019-01-guix
    $ git checkout 2019-01-guix
    $ git rev-parse HEAD
    0be753b04070cc06965dff13118beabe46a1097a
    $ rm -rf output/
    $ contrib/guix/guix-build.sh 2>&1 | tee guix-build.output
    …
    + tar --create --no-recursion --mode=u+rw,go+r-w,a+X --null --files-from=-
    + sort --zero-terminated
    + gzip
    + mkdir -p /bitcoin/output/src
    + mv -n /bitcoin/output/src/bitcoin-0.18.99.tar.gz /bitcoin/output/src
    $ find output/ -type f -print0 | sort -z | xargs -r0 sha256sum
    fdd0c80022363fc21cdeeebb0b8cbaf3ca9f1d7162a1bcca0c272274fb306f06  output/bitcoin-0.18.99-aarch64-linux-gnu-debug.tar.gz
    cfb6889f0588492d112cc0bc2a41ef1ccdfbeea71d8405b935af708f5a643b6b  output/bitcoin-0.18.99-aarch64-linux-gnu.tar.gz
    5d947ce818a629fff5b9ecfe9aac866384b6062730d9b5a8f9a0333539c29bd5  output/bitcoin-0.18.99-arm-linux-gnueabihf-debug.tar.gz
    6212a7c3456bd4fda1c590202018b1ce232928509a4f139c0a0c42c0fb7c2637  output/bitcoin-0.18.99-arm-linux-gnueabihf.tar.gz
    17cb465713bf50272eaa483a3c40ce2f33e61752f835032ae8513edbb1a92fc8  output/bitcoin-0.18.99-i686-linux-gnu-debug.tar.gz
    1273da1f073b8beb0169e5c12557c85944784a39e35b3252c754ea3679f41ee4  output/bitcoin-0.18.99-i686-linux-gnu.tar.gz
    7fb997e1744249c98812be8eea863c8d5b764e740d77f57b64ab06ef47317d48  output/bitcoin-0.18.99-riscv64-linux-gnu-debug.tar.gz
    8198a30d7c67bebd1a34a94d3fb2e613c2347674a2e31c8b71e7c1c95aa0e0b2  output/bitcoin-0.18.99-riscv64-linux-gnu.tar.gz
    0a0831a8204551684deb9bc1083dbb2d21a4552020e3ee939f40653151975c5f  output/bitcoin-0.18.99-x86_64-linux-gnu-debug.tar.gz
    ca982c12daa54b2f125a2b24539f572567f86ababb4262aada17cbe85c40a15c  output/bitcoin-0.18.99-x86_64-linux-gnu.tar.gz
    85904ad700577afba1ba3e21dbc4af093c4ebc05b057d3afff939c9bc997f022  output/src/bitcoin-0.18.99.tar.gz
    

    I'll try again to see if I get consistent results. @fanquake I'm not sure about the root cause for the previously reported failure: unfortunately I don't have any logs saved. Running out of disk space can be ruled out though: more than a terabyte free. I'll try to reproduce.

  81. practicalswift commented at 6:07 PM on June 23, 2019: contributor

    @dongcarl Could you fix the shellcheck issues that Travis complains about? Since these shell scripts will be very important for the project I suggest addressing all shellcheck warnings emitted by the latest version of shellcheck: not only the checks enforced in Travis.

  82. practicalswift commented at 8:53 PM on June 23, 2019: contributor

    Did another guix-build.sh and received hashes matching @dongcarl and @fanquake also for the debug builds:

    $ find output/ -type f -print0 | sort -z | xargs -r0 sha256sum
    ed24d2574d9b27cf9434cb272f8f06170e96b10fad4d4fa46b4ef5de0a18f57a  output/bitcoin-0.18.99-aarch64-linux-gnu-debug.tar.gz
    cfb6889f0588492d112cc0bc2a41ef1ccdfbeea71d8405b935af708f5a643b6b  output/bitcoin-0.18.99-aarch64-linux-gnu.tar.gz
    2e60551ef3e4cac1d2f671984da2d2c230a3e7183983e08de052cac76c983032  output/bitcoin-0.18.99-arm-linux-gnueabihf-debug.tar.gz
    6212a7c3456bd4fda1c590202018b1ce232928509a4f139c0a0c42c0fb7c2637  output/bitcoin-0.18.99-arm-linux-gnueabihf.tar.gz
    a98a6f0d7bf6bf2392fd421669c3924836f538ffe508f9a0b9bd4f7d25489dfb  output/bitcoin-0.18.99-i686-linux-gnu-debug.tar.gz
    1273da1f073b8beb0169e5c12557c85944784a39e35b3252c754ea3679f41ee4  output/bitcoin-0.18.99-i686-linux-gnu.tar.gz
    7fb997e1744249c98812be8eea863c8d5b764e740d77f57b64ab06ef47317d48  output/bitcoin-0.18.99-riscv64-linux-gnu-debug.tar.gz
    8198a30d7c67bebd1a34a94d3fb2e613c2347674a2e31c8b71e7c1c95aa0e0b2  output/bitcoin-0.18.99-riscv64-linux-gnu.tar.gz
    8adb618f108ccb2e1c1beb24b4b14aeafa8c151a60b4329d73812bbad728313f  output/bitcoin-0.18.99-x86_64-linux-gnu-debug.tar.gz
    ca982c12daa54b2f125a2b24539f572567f86ababb4262aada17cbe85c40a15c  output/bitcoin-0.18.99-x86_64-linux-gnu.tar.gz
    85904ad700577afba1ba3e21dbc4af093c4ebc05b057d3afff939c9bc997f022  output/src/bitcoin-0.18.99.tar.gz
    

    Will run multiple rounds to investigate this further.

  83. fanquake commented at 9:31 PM on June 23, 2019: member

    @TheCharlatan mentioned in the #bitcoin-builds channel that they are also seeing hashes that match mine and Carl’s. @practicalswift Thanks for following up. Where are you seeing the build output from Marco that you keep comparing against?

  84. practicalswift commented at 9:36 PM on June 23, 2019: contributor

    @practicalswift Sorry, I meant your hashes. Now corrected.

  85. practicalswift commented at 4:23 AM on June 25, 2019: contributor

    FWIW:

    After running thirteen additional Guix builds using the following:

    $ guix pull --url=https://github.com/dongcarl/guix.git --commit=aedb0cf16e82caea01f82f795e473756067a1165 --max-jobs=$(nproc)
    $ guix --version | grep ^guix
    guix (GNU Guix) aedb0cf16e82caea01f82f795e473756067a1165
    $ git clone https://github.com/bitcoin/bitcoin bitcoin-guix
    $ cd bitcoin-guix
    $ git fetch origin pull/15277/head:2019-01-guix
    $ git checkout 2019-01-guix
    $ git rev-parse HEAD
    0be753b04070cc06965dff13118beabe46a1097a
    $ contrib/guix/guix-build.sh > /dev/null 2> /dev/null
    

    I can report these generated SHA-256 hashes:

         13 1273da1f073b8beb0169e5c12557c85944784a39e35b3252c754ea3679f41ee4  output/bitcoin-0.18.99-i686-linux-gnu.tar.gz
         13 2e60551ef3e4cac1d2f671984da2d2c230a3e7183983e08de052cac76c983032  output/bitcoin-0.18.99-arm-linux-gnueabihf-debug.tar.gz
         13 6212a7c3456bd4fda1c590202018b1ce232928509a4f139c0a0c42c0fb7c2637  output/bitcoin-0.18.99-arm-linux-gnueabihf.tar.gz
         13 7fb997e1744249c98812be8eea863c8d5b764e740d77f57b64ab06ef47317d48  output/bitcoin-0.18.99-riscv64-linux-gnu-debug.tar.gz
         13 8198a30d7c67bebd1a34a94d3fb2e613c2347674a2e31c8b71e7c1c95aa0e0b2  output/bitcoin-0.18.99-riscv64-linux-gnu.tar.gz
         13 85904ad700577afba1ba3e21dbc4af093c4ebc05b057d3afff939c9bc997f022  output/src/bitcoin-0.18.99.tar.gz
         13 8adb618f108ccb2e1c1beb24b4b14aeafa8c151a60b4329d73812bbad728313f  output/bitcoin-0.18.99-x86_64-linux-gnu-debug.tar.gz
         13 a98a6f0d7bf6bf2392fd421669c3924836f538ffe508f9a0b9bd4f7d25489dfb  output/bitcoin-0.18.99-i686-linux-gnu-debug.tar.gz
         13 ca982c12daa54b2f125a2b24539f572567f86ababb4262aada17cbe85c40a15c  output/bitcoin-0.18.99-x86_64-linux-gnu.tar.gz
         13 cfb6889f0588492d112cc0bc2a41ef1ccdfbeea71d8405b935af708f5a643b6b  output/bitcoin-0.18.99-aarch64-linux-gnu.tar.gz
         13 ed24d2574d9b27cf9434cb272f8f06170e96b10fad4d4fa46b4ef5de0a18f57a  output/bitcoin-0.18.99-aarch64-linux-gnu-debug.tar.gz
    

    I'm now getting consistent results across runs (as expected) and those results are matching the hashes reported by others (as expected).

    Great work @dongcarl!

  86. in depends/packages/xtrans.mk:9 in 0be753b040 outdated
       5 | @@ -6,7 +6,7 @@ $(package)_sha256_hash=054d4ee3efd52508c753e9f7bc655ef185a29bd2850dd9e2fc2ccc335
       6 |  $(package)_dependencies=
       7 |  
       8 |  define $(package)_set_vars
       9 | -$(package)_config_opts_linux=--with-pic --disable-static
      10 | +$(package)_config_opts_linux=--with-pic --disable-shared
    


    MarcoFalke commented at 9:01 PM on June 25, 2019:

    Would be nice to do a rebase, so that changes already merged stop showing up here, no?


    fanquake commented at 4:02 AM on June 26, 2019:

    That's the plan, Carl has just been afk for the past few days afaik. See discussion in #bitcoin-builds.

    00:49 < dongcarl> I'm gunna clean up, upstream, document, then we can do last round of hashes!

  87. jamesob commented at 2:27 PM on June 26, 2019: member

    Will test this when rebased.

  88. fanquake added the label Waiting for author on Jun 26, 2019
  89. dongcarl commented at 4:09 PM on June 26, 2019: member

    Making a few improvements today, will push along with rebase.

  90. practicalswift commented at 10:58 PM on June 27, 2019: contributor

    The results are stable between runs (as expected) -- now at 31 identical builds:

         31 1273da1f073b8beb0169e5c12557c85944784a39e35b3252c754ea3679f41ee4  output/bitcoin-0.18.99-i686-linux-gnu.tar.gz
         31 2e60551ef3e4cac1d2f671984da2d2c230a3e7183983e08de052cac76c983032  output/bitcoin-0.18.99-arm-linux-gnueabihf-debug.tar.gz
         31 6212a7c3456bd4fda1c590202018b1ce232928509a4f139c0a0c42c0fb7c2637  output/bitcoin-0.18.99-arm-linux-gnueabihf.tar.gz
         31 7fb997e1744249c98812be8eea863c8d5b764e740d77f57b64ab06ef47317d48  output/bitcoin-0.18.99-riscv64-linux-gnu-debug.tar.gz
         31 8198a30d7c67bebd1a34a94d3fb2e613c2347674a2e31c8b71e7c1c95aa0e0b2  output/bitcoin-0.18.99-riscv64-linux-gnu.tar.gz
         31 85904ad700577afba1ba3e21dbc4af093c4ebc05b057d3afff939c9bc997f022  output/src/bitcoin-0.18.99.tar.gz
         31 8adb618f108ccb2e1c1beb24b4b14aeafa8c151a60b4329d73812bbad728313f  output/bitcoin-0.18.99-x86_64-linux-gnu-debug.tar.gz
         31 a98a6f0d7bf6bf2392fd421669c3924836f538ffe508f9a0b9bd4f7d25489dfb  output/bitcoin-0.18.99-i686-linux-gnu-debug.tar.gz
         31 ca982c12daa54b2f125a2b24539f572567f86ababb4262aada17cbe85c40a15c  output/bitcoin-0.18.99-x86_64-linux-gnu.tar.gz
         31 cfb6889f0588492d112cc0bc2a41ef1ccdfbeea71d8405b935af708f5a643b6b  output/bitcoin-0.18.99-aarch64-linux-gnu.tar.gz
         31 ed24d2574d9b27cf9434cb272f8f06170e96b10fad4d4fa46b4ef5de0a18f57a  output/bitcoin-0.18.99-aarch64-linux-gnu-debug.tar.gz
    
  91. dongcarl force-pushed on Jun 30, 2019
  92. hebasto commented at 3:50 PM on June 30, 2019: member

    Approach ACK e8dd4da0b287e0fe252c99bb4a7cb26c2e947b71

    Trying to test:

    $ guix --version | grep guix
    guix (GNU Guix) bf473f0ca0b218e9a93b00234a8f25ba015b8bd3
    $ git rev-parse HEAD
    f7c57d2795ddeccaf16acf069f0bc2db43fa5ba1
    $ ./contrib/guix/guix-build.sh > /dev/null 
    ++ nproc
    + make -C depends -j4 download
    + for host in ${HOSTS=i686-linux-gnu x86_64-linux-gnu arm-linux-gnueabihf aarch64-linux-gnu riscv64-linux-gnu}
    ++ git log --format=%at -1
    + guix environment --manifest=contrib/guix/manifest.scm --load-path=contrib/guix/packages --container --pure --no-cwd --share=.=/bitcoin -- env HOST=i686-linux-gnu REFERENCE_UNIX_TIMESTAMP=1561871104 bash -c 'cd /bitcoin && bash contrib/guix/build.sh'
    guix environment: error: no-cwd: unrecognized option
    

    The --no-cwd option was introduced in the latest forced push (commit 980811ebf80c45b690f388a43ddeaed716344eb0).

  93. in contrib/guix/guix-build.sh:28 in e8dd4da0b2 outdated
      14 | +    # specified by 'contrib/guix/manifest.scm'
      15 | +    guix environment --manifest=contrib/guix/manifest.scm \
      16 | +                     --load-path=contrib/guix/packages \
      17 | +                     --container \
      18 | +                     --pure \
      19 | +                     --no-cwd \
    


    hebasto commented at 4:02 PM on June 30, 2019:

    dongcarl commented at 4:53 AM on July 1, 2019:

    Hey @hebasto! I think you need a:

    guix pull --url=https://github.com/dongcarl/guix.git \
              --branch=2019-05-bitcoin-staging
    
  94. dongcarl commented at 10:54 PM on June 30, 2019: member

    Hey all! Lots of updates...

    Overview

    1. Rebased (and continually fixing Gitian failures along the way).
    2. Reproducibility across distros and kernels (tested on Alpine, Fedora, Arch, Debian, and Ubuntu).
    3. Fixed a corner case for those who were building with bitcoin cloned in a directory strictly under /bitcoin (this corner case doesn't trigger for those who cloned bitcoin exactly in /bitcoin, so those using fanquake's Docker images are fine).
    4. Work has begun (on a separate branch) on using Guix inferiors and channels to pin the effective Guix version so that we have reproducibility not only across distros, kernels, and filesystems, but also across time. A nice side-effect of this work is that we won't need the manual guix pull at the beginning of the process anymore.

    Details

    1. Specifically #16059 and #16184.

    2. For those who are interested, our problems were mostly caused by $PWD being different. Using -ffile-prefix-map=OLD=NEW as suggested doesn't work. Thankfully, guix environment knows how to map filesystems using bind mounting: https://github.com/bitcoin/bitcoin/pull/15277/commits/45f122244284e0e7dca0425050b589fe2023be9a.

    3. This was caused by the fix in <sup>1</sup>. Specifically, if you were building from a $PWD of /bitcoin/foobar, the way that guix environment bind mounts host paths to container paths (see table below) causes filesystem loops. Admittedly this affects a minority of users, but I was able to fix an old patchset that added a --no-cwd option to guix environment and apply it to my Guix tree: https://github.com/dongcarl/guix/compare/ea953d0ee3cddc0e65139e9755403d30560c37b7...2019-05-bitcoin-staging. This is also upstreamed here.

    Host path Container path Description
    /bitcoin/foobar ($PWD) /bitcoin/foobar guix environment maps host $PWD to container $PWD by default
    /bitcoin/foobar ($PWD) /bitcoin Mapped due to --share=.=/bitcoin from https://github.com/bitcoin/bitcoin/pull/15277/commits/45f122244284e0e7dca0425050b589fe2023be9a
    1. Effectively, this means that when you run the Guix build, Guix will travel back in time to a commit of the Guix repo that we specify and build everything with that specific version of Guix being the effective one. All of this is done without affecting the default version of Guix for the user. Right now this depends on a git repo as a Guix channel, which can be moved under the bitcoin-core org easily. I'm working on a separate patchset which allows specifying non-git channels so it can live under the bitcoin repository.

    Hashes

    $ guix describe
    Generation 18   Jun 30 2019 21:34:42    (current)
      guix 24e7071
        repository URL: https://github.com/dongcarl/guix.git
        branch: 2019-05-bitcoin-staging
        commit: 24e707111f34ddf3342517932830264177df40b4
    
    $ git rev-parse HEAD
    e8dd4da0b287e0fe252c99bb4a7cb26c2e947b71
    
    $ find output/ -type f -print0 | sort -z | xargs -r0 sha256sum
    22353b4a9532425c249632936896fb43972bb098e427857dae1df3b5206ddcac  output/bitcoin-0.18.99-aarch64-linux-gnu-debug.tar.gz
    d762ed4228d7ccecb1b361c0f9f9f2458d93f0f1fdc8ef402cf9c5d5f8f28055  output/bitcoin-0.18.99-aarch64-linux-gnu.tar.gz
    3af24d40cd9ae92c2b431e7fbce652f7713b929ca471427c07c5ceeaf9282af6  output/bitcoin-0.18.99-arm-linux-gnueabihf-debug.tar.gz
    9a7878e1e70394b00224cf2b611cfdf0296976a916513dc08ec596d1127db389  output/bitcoin-0.18.99-arm-linux-gnueabihf.tar.gz
    e7097cf5dcf8ee7bb90977d0062956a41f963ca22727becc64ec07d215e4bdc6  output/bitcoin-0.18.99-i686-linux-gnu-debug.tar.gz
    0dff397103b52471c4c483207b88102ddea79fdcb75c7ff01c2d10a1bff71aa9  output/bitcoin-0.18.99-i686-linux-gnu.tar.gz
    d9e89a27b1cb8debeb5c83ec153e8de9bf956e2ce8b7e70fe78906db478095fc  output/bitcoin-0.18.99-riscv64-linux-gnu-debug.tar.gz
    74d8faedbc251f8bc12588d066866493b833b3d04e6933114283b61bc349bb7d  output/bitcoin-0.18.99-riscv64-linux-gnu.tar.gz
    11b9db3e77f71a4d99c5f33a6a2e985ca817d16712a692c612ba5006f0ddf1a7  output/bitcoin-0.18.99-x86_64-linux-gnu-debug.tar.gz
    afd950b9e1d70aa0c8e765c3189328ad1f47ab66ae0ed9733914f853cabed068  output/bitcoin-0.18.99-x86_64-linux-gnu.tar.gz
    9aaad700c36273a1ac73a4465b4dc6f49085c7b329aba108585a1e37ee03d913  output/src/bitcoin-0.18.99.tar.gz
    
  95. fanquake removed the label Waiting for author on Jun 30, 2019
  96. fanquake commented at 6:32 AM on July 1, 2019: member

    Nice work. Looks like everything is matching.

    so that we have reproducibility not only across distros, kernels, and filesystems, but also across time.

    🕔🚀🕤

    so those using fanquake's Docker images are fine).

    The images and other Guix stuff is here: https://github.com/fanquake/core-review/tree/master/guix.

    bash-5.0# guix describe
    Generation 1	Jul 01 2019 01:02:16	(current)
      guix 24e7071
        repository URL: https://github.com/dongcarl/guix.git
        commit: 24e707111f34ddf3342517932830264177df40b4
    
    bash-5.0# git rev-parse HEAD
    e8dd4da0b287e0fe252c99bb4a7cb26c2e947b71
    
    find output/ -type f -print0 | sort -z | xargs -r0 sha256sum
    22353b4a9532425c249632936896fb43972bb098e427857dae1df3b5206ddcac  output/bitcoin-0.18.99-aarch64-linux-gnu-debug.tar.gz
    d762ed4228d7ccecb1b361c0f9f9f2458d93f0f1fdc8ef402cf9c5d5f8f28055  output/bitcoin-0.18.99-aarch64-linux-gnu.tar.gz
    3af24d40cd9ae92c2b431e7fbce652f7713b929ca471427c07c5ceeaf9282af6  output/bitcoin-0.18.99-arm-linux-gnueabihf-debug.tar.gz
    9a7878e1e70394b00224cf2b611cfdf0296976a916513dc08ec596d1127db389  output/bitcoin-0.18.99-arm-linux-gnueabihf.tar.gz
    e7097cf5dcf8ee7bb90977d0062956a41f963ca22727becc64ec07d215e4bdc6  output/bitcoin-0.18.99-i686-linux-gnu-debug.tar.gz
    0dff397103b52471c4c483207b88102ddea79fdcb75c7ff01c2d10a1bff71aa9  output/bitcoin-0.18.99-i686-linux-gnu.tar.gz
    d9e89a27b1cb8debeb5c83ec153e8de9bf956e2ce8b7e70fe78906db478095fc  output/bitcoin-0.18.99-riscv64-linux-gnu-debug.tar.gz
    74d8faedbc251f8bc12588d066866493b833b3d04e6933114283b61bc349bb7d  output/bitcoin-0.18.99-riscv64-linux-gnu.tar.gz
    11b9db3e77f71a4d99c5f33a6a2e985ca817d16712a692c612ba5006f0ddf1a7  output/bitcoin-0.18.99-x86_64-linux-gnu-debug.tar.gz
    afd950b9e1d70aa0c8e765c3189328ad1f47ab66ae0ed9733914f853cabed068  output/bitcoin-0.18.99-x86_64-linux-gnu.tar.gz
    9aaad700c36273a1ac73a4465b4dc6f49085c7b329aba108585a1e37ee03d913  output/src/bitcoin-0.18.99.tar.gz
    
  97. practicalswift commented at 9:25 AM on July 1, 2019: contributor

    Excellent! Thanks for yet another great update @dongcarl: very happy to see the work you're doing 💖

    As expected I'm getting matching results also when using the updated version:

    [Mon Jul  1 06:18:50 UTC 2019] $ guix --version | grep ^guix
    guix (GNU Guix) 24e707111f34ddf3342517932830264177df40b4
    [Mon Jul  1 06:19:36 UTC 2019] $ git rev-parse HEAD
    e8dd4da0b287e0fe252c99bb4a7cb26c2e947b71
    [Mon Jul  1 06:19:37 UTC 2019] $ contrib/guix/guix-build.sh > guix-build.out 2> guix-build.err
    [Mon Jul  1 09:18:29 UTC 2019] $ find output/ -type f -print0 | sort -z | xargs -r0 sha256sum
    22353b4a9532425c249632936896fb43972bb098e427857dae1df3b5206ddcac  output/bitcoin-0.18.99-aarch64-linux-gnu-debug.tar.gz
    d762ed4228d7ccecb1b361c0f9f9f2458d93f0f1fdc8ef402cf9c5d5f8f28055  output/bitcoin-0.18.99-aarch64-linux-gnu.tar.gz
    3af24d40cd9ae92c2b431e7fbce652f7713b929ca471427c07c5ceeaf9282af6  output/bitcoin-0.18.99-arm-linux-gnueabihf-debug.tar.gz
    9a7878e1e70394b00224cf2b611cfdf0296976a916513dc08ec596d1127db389  output/bitcoin-0.18.99-arm-linux-gnueabihf.tar.gz
    e7097cf5dcf8ee7bb90977d0062956a41f963ca22727becc64ec07d215e4bdc6  output/bitcoin-0.18.99-i686-linux-gnu-debug.tar.gz
    0dff397103b52471c4c483207b88102ddea79fdcb75c7ff01c2d10a1bff71aa9  output/bitcoin-0.18.99-i686-linux-gnu.tar.gz
    d9e89a27b1cb8debeb5c83ec153e8de9bf956e2ce8b7e70fe78906db478095fc  output/bitcoin-0.18.99-riscv64-linux-gnu-debug.tar.gz
    74d8faedbc251f8bc12588d066866493b833b3d04e6933114283b61bc349bb7d  output/bitcoin-0.18.99-riscv64-linux-gnu.tar.gz
    11b9db3e77f71a4d99c5f33a6a2e985ca817d16712a692c612ba5006f0ddf1a7  output/bitcoin-0.18.99-x86_64-linux-gnu-debug.tar.gz
    afd950b9e1d70aa0c8e765c3189328ad1f47ab66ae0ed9733914f853cabed068  output/bitcoin-0.18.99-x86_64-linux-gnu.tar.gz
    9aaad700c36273a1ac73a4465b4dc6f49085c7b329aba108585a1e37ee03d913  output/src/bitcoin-0.18.99.tar.gz
    

    I have a machine running Guix builds for Bitcoin Core around-the-clock: I'll report any deviations or oddities :-)

  98. dongcarl commented at 3:29 PM on July 1, 2019: member

    @practicalswift Huh... That's got me thinking... Maybe we can use the venerable reprotest to find cases of variability...

  99. hebasto commented at 8:39 AM on July 2, 2019: member

    My results are:

    $ guix --version | grep guix
    guix (GNU Guix) 24e707111f34ddf3342517932830264177df40b4
    $ git rev-parse HEAD
    e8dd4da0b287e0fe252c99bb4a7cb26c2e947b71
    $ find output/ -type f -print0 | sort -z | xargs -r0 sha256sum
    22353b4a9532425c249632936896fb43972bb098e427857dae1df3b5206ddcac  output/bitcoin-0.18.99-aarch64-linux-gnu-debug.tar.gz
    d762ed4228d7ccecb1b361c0f9f9f2458d93f0f1fdc8ef402cf9c5d5f8f28055  output/bitcoin-0.18.99-aarch64-linux-gnu.tar.gz
    3af24d40cd9ae92c2b431e7fbce652f7713b929ca471427c07c5ceeaf9282af6  output/bitcoin-0.18.99-arm-linux-gnueabihf-debug.tar.gz
    9a7878e1e70394b00224cf2b611cfdf0296976a916513dc08ec596d1127db389  output/bitcoin-0.18.99-arm-linux-gnueabihf.tar.gz
    897f59abc9ae6caa4c6a6908b25ec93dd6f361e3c09b92b150b76f890a0cba80  output/bitcoin-0.18.99-i686-linux-gnu-debug.tar.gz
    0dff397103b52471c4c483207b88102ddea79fdcb75c7ff01c2d10a1bff71aa9  output/bitcoin-0.18.99-i686-linux-gnu.tar.gz
    d9e89a27b1cb8debeb5c83ec153e8de9bf956e2ce8b7e70fe78906db478095fc  output/bitcoin-0.18.99-riscv64-linux-gnu-debug.tar.gz
    74d8faedbc251f8bc12588d066866493b833b3d04e6933114283b61bc349bb7d  output/bitcoin-0.18.99-riscv64-linux-gnu.tar.gz
    11b9db3e77f71a4d99c5f33a6a2e985ca817d16712a692c612ba5006f0ddf1a7  output/bitcoin-0.18.99-x86_64-linux-gnu-debug.tar.gz
    afd950b9e1d70aa0c8e765c3189328ad1f47ab66ae0ed9733914f853cabed068  output/bitcoin-0.18.99-x86_64-linux-gnu.tar.gz
    381927c9eb4e70a1a1258ef079a424b467337c9a9a6dd7dcbfada5cd80fdde08  output/src/bitcoin-0.18.99.tar.gz
    

    The hashs of src/bitcoin-0.18.99.tar.gz and bitcoin-0.18.99-i686-linux-gnu-debug.tar.gz differ from #15277 (comment), #15277 (comment), #15277 (comment). What could be the reason?

    EDIT: Meanwhile, trying to make another build with clean cloned bitcoin repo.

  100. practicalswift commented at 9:03 AM on July 2, 2019: contributor

    @hebasto Very interesting and thanks for reporting!

    Do you have the generated files (bitcoin-0.18.99.tar.gz, output/bitcoin-0.18.99-i686-linux-gnu-debug.tar.gz and bitcoin-0.18.99-i686-linux-gnu.tar.gz ) around? If so please make a backup copy of them :-)

    It would be very interested to see the diffoscope output between the files listed above with the "unexpected" hashes and the corresponding files with the expected hashes.

    Would you be able to do such a diffoscope? :-)

    Likely you'll get the expected hashes if you perform a fresh new build.

  101. hebasto commented at 12:28 PM on July 2, 2019: member

    Another try:

    $ git rev-parse HEAD
    e8dd4da0b287e0fe252c99bb4a7cb26c2e947b71
    $ find output/ -type f -print0 | sort -z | xargs -r0 sha256sum
    22353b4a9532425c249632936896fb43972bb098e427857dae1df3b5206ddcac  output/bitcoin-0.18.99-aarch64-linux-gnu-debug.tar.gz
    d762ed4228d7ccecb1b361c0f9f9f2458d93f0f1fdc8ef402cf9c5d5f8f28055  output/bitcoin-0.18.99-aarch64-linux-gnu.tar.gz
    3af24d40cd9ae92c2b431e7fbce652f7713b929ca471427c07c5ceeaf9282af6  output/bitcoin-0.18.99-arm-linux-gnueabihf-debug.tar.gz
    9a7878e1e70394b00224cf2b611cfdf0296976a916513dc08ec596d1127db389  output/bitcoin-0.18.99-arm-linux-gnueabihf.tar.gz
    e7097cf5dcf8ee7bb90977d0062956a41f963ca22727becc64ec07d215e4bdc6  output/bitcoin-0.18.99-i686-linux-gnu-debug.tar.gz
    0dff397103b52471c4c483207b88102ddea79fdcb75c7ff01c2d10a1bff71aa9  output/bitcoin-0.18.99-i686-linux-gnu.tar.gz
    d9e89a27b1cb8debeb5c83ec153e8de9bf956e2ce8b7e70fe78906db478095fc  output/bitcoin-0.18.99-riscv64-linux-gnu-debug.tar.gz
    74d8faedbc251f8bc12588d066866493b833b3d04e6933114283b61bc349bb7d  output/bitcoin-0.18.99-riscv64-linux-gnu.tar.gz
    11b9db3e77f71a4d99c5f33a6a2e985ca817d16712a692c612ba5006f0ddf1a7  output/bitcoin-0.18.99-x86_64-linux-gnu-debug.tar.gz
    afd950b9e1d70aa0c8e765c3189328ad1f47ab66ae0ed9733914f853cabed068  output/bitcoin-0.18.99-x86_64-linux-gnu.tar.gz
    9aaad700c36273a1ac73a4465b4dc6f49085c7b329aba108585a1e37ee03d913  output/src/bitcoin-0.18.99.tar.gz
    

    Everything is matching.

    The output of diffoscope for src/bitcoin-0.18.99.tar.gz:

    ├── bitcoin-0.18.99.tar
    │ ├── file list
    │ │ @@ -1359,14 +1359,16 @@
    │ │  drwxr-xr-x   0        0        0        0 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/
    │ │  -rw-r--r--   0        0        0       12 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/.gitignore
    │ │  -rw-r--r--   0        0        0     7446 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/README.md
    │ │  -rwxr-xr-x   0        0        0     7188 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/combine_logs.py
    │ │  -rw-r--r--   0        0        0      890 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/combined_log_template.html
    │ │  -rwxr-xr-x   0        0        0      826 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/create_cache.py
    │ │  drwxr-xr-x   0        0        0        0 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/data/
    │ │ +drwxr-xr-x   0        0        0        0 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/data/__pycache__/
    │ │ +-rw-r--r--   0        0        0     6474 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/data/__pycache__/invalid_txs.cpython-36.pyc
    │ │  -rw-r--r--   0        0        0     5878 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/data/invalid_txs.py
    │ │  -rw-r--r--   0        0        0    57899 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/data/rpc_getblockstats.json
    │ │  -rw-r--r--   0        0        0    46360 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/data/rpc_psbt.json
    │ │  -rwxr-xr-x   0        0        0     8848 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/example_test.py
    │ │  -rwxr-xr-x   0        0        0     7628 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/feature_assumevalid.py
    │ │  -rwxr-xr-x   0        0        0    18290 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/feature_bip68_sequence.py
    │ │  -rwxr-xr-x   0        0        0    64048 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/feature_block.py
    │ │ @@ -1447,14 +1449,34 @@
    │ │  -rwxr-xr-x   0        0        0     1911 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/rpc_signmessage.py
    │ │  -rwxr-xr-x   0        0        0     9570 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/rpc_signrawtransaction.py
    │ │  -rwxr-xr-x   0        0        0     6532 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/rpc_txoutproof.py
    │ │  -rwxr-xr-x   0        0        0      803 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/rpc_uptime.py
    │ │  -rwxr-xr-x   0        0        0     7885 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/rpc_users.py
    │ │  drwxr-xr-x   0        0        0        0 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/test_framework/
    │ │  -rw-r--r--   0        0        0        0 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/test_framework/__init__.py
    │ │ +drwxr-xr-x   0        0        0        0 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/test_framework/__pycache__/
    │ │ +-rw-r--r--   0        0        0      154 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/test_framework/__pycache__/__init__.cpython-36.pyc
    │ │ +-rw-r--r--   0        0        0     3126 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/test_framework/__pycache__/address.cpython-36.pyc
    │ │ +-rw-r--r--   0        0        0     6455 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/test_framework/__pycache__/authproxy.cpython-36.pyc
    │ │ +-rw-r--r--   0        0        0     1292 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/test_framework/__pycache__/bignum.cpython-36.pyc
    │ │ +-rw-r--r--   0        0        0     7081 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/test_framework/__pycache__/blocktools.cpython-36.pyc
    │ │ +-rw-r--r--   0        0        0     3362 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/test_framework/__pycache__/coverage.cpython-36.pyc
    │ │ +-rw-r--r--   0        0        0     2349 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/test_framework/__pycache__/descriptors.cpython-36.pyc
    │ │ +-rw-r--r--   0        0        0    11871 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/test_framework/__pycache__/key.cpython-36.pyc
    │ │ +-rw-r--r--   0        0        0    51239 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/test_framework/__pycache__/messages.cpython-36.pyc
    │ │ +-rw-r--r--   0        0        0    23499 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/test_framework/__pycache__/mininode.cpython-36.pyc
    │ │ +-rw-r--r--   0        0        0     4499 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/test_framework/__pycache__/netutil.cpython-36.pyc
    │ │ +-rw-r--r--   0        0        0    15956 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/test_framework/__pycache__/script.cpython-36.pyc
    │ │ +-rw-r--r--   0        0        0     4067 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/test_framework/__pycache__/segwit_addr.cpython-36.pyc
    │ │ +-rw-r--r--   0        0        0     1760 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/test_framework/__pycache__/siphash.cpython-36.pyc
    │ │ +-rw-r--r--   0        0        0     4903 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/test_framework/__pycache__/socks5.cpython-36.pyc
    │ │ +-rw-r--r--   0        0        0    19248 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/test_framework/__pycache__/test_framework.cpython-36.pyc
    │ │ +-rw-r--r--   0        0        0    19620 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/test_framework/__pycache__/test_node.cpython-36.pyc
    │ │ +-rw-r--r--   0        0        0    20244 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/test_framework/__pycache__/util.cpython-36.pyc
    │ │ +-rw-r--r--   0        0        0     3095 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/test_framework/__pycache__/wallet_util.cpython-36.pyc
    │ │  -rw-r--r--   0        0        0     2887 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/test_framework/address.py
    │ │  -rw-r--r--   0        0        0     8667 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/test_framework/authproxy.py
    │ │  -rw-r--r--   0        0        0     1230 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/test_framework/bignum.py
    │ │  -rw-r--r--   0        0        0     8201 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/test_framework/blocktools.py
    │ │  -rw-r--r--   0        0        0     3383 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/test_framework/coverage.py
    │ │  -rw-r--r--   0        0        0     2051 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/test_framework/descriptors.py
    │ │  -rw-r--r--   0        0        0    13480 2019-06-30 05:04:38.000000 bitcoin-0.18.99/test/functional/test_framework/key.py
    

    It seem the reason of hash differences was out of disk space error during my first attempt to build.

  102. dongcarl commented at 12:36 PM on July 2, 2019: member

    @hebasto Huh, it seems from your diffoscope that we're picking up __pycache__ directories... I've seen this before with other builds people have submitted over #bitcoin-builds IRC. Will investigate!

  103. practicalswift commented at 1:27 PM on July 2, 2019: contributor

    @hebasto Very good finding with the __pycache__ directories! Thanks a lot for sharing. Does diffoscope on the i686-tar.gz:s reveal the source of non-determinism also for those?

  104. hebasto commented at 1:42 PM on July 2, 2019: member

    @practicalswift

    Does diffoscope on the i686-tar.gz:s reveal the source of non-determinism also for those?

    It eats all resources (RAM and free space on SSD) of my home machine ((

  105. hebasto commented at 2:54 PM on July 2, 2019: member

    For my failed build following nothingmuch on #bitcoin-builds IRC:

    $ tar -tf bitcoin-0.18.99-i686-linux-gnu-debug.tar.gz | grep .dbg.dbg
    bitcoin-0.18.99/bin/bitcoin-cli.dbg.dbg
    bitcoin-0.18.99/bin/bitcoin-qt.dbg.dbg
    bitcoin-0.18.99/bin/bitcoin-tx.dbg.dbg
    bitcoin-0.18.99/bin/bitcoin-wallet.dbg.dbg
    bitcoin-0.18.99/bin/bitcoind.dbg.dbg
    bitcoin-0.18.99/bin/test_bitcoin.dbg.dbg
    bitcoin-0.18.99/lib/libbitcoinconsensus.so.0.0.0.dbg.dbg
    
  106. nothingmuch commented at 3:09 PM on July 2, 2019: contributor

    I've seen both .dbg.dbg binaries and .pyc files in the source tarball files before, I'm pretty confident (but not 100% certain) that in my case it was due to forgetting to git clean before retrying after a failed build, which sounds consistent @hebasto's disk space error.

    FWIW, the .dbg.dbg files are created from .dbg files when those already exist, in the following commands: https://github.com/bitcoin/bitcoin/blob/e8dd4da0b287e0fe252c99bb4a7cb26c2e947b71/contrib/guix/build.sh#L216-L219

  107. practicalswift commented at 3:45 PM on July 2, 2019: contributor

    Is there a reason to why we just don't start with clean build output directories when commencing a new Guix build? (think rm + mkdir instead of mkdir -p at the start of build: removing all leftovers from previous Guix builds)

  108. nothingmuch commented at 4:33 PM on July 2, 2019: contributor

    That sounds appropriate to me. Since the source tree is built from the tarball (as opposed to the working directory itself) it might also make sense to pass --expose (which is read only) to guix environment instead of --share, and only use --share for the depends workdir and the outputs.

  109. fanquake commented at 1:26 AM on July 5, 2019: member

    Carl mentioned that he has some WIP Guix documention available here: https://gist.github.com/dongcarl/a9f86bb11d7b55e07b592db807430a64.

  110. practicalswift commented at 3:15 PM on July 5, 2019: contributor

    FWIW, now at 28 identical builds -- results seem stable (as expected):

         28 0dff397103b52471c4c483207b88102ddea79fdcb75c7ff01c2d10a1bff71aa9  output/bitcoin-0.18.99-i686-linux-gnu.tar.gz
         28 11b9db3e77f71a4d99c5f33a6a2e985ca817d16712a692c612ba5006f0ddf1a7  output/bitcoin-0.18.99-x86_64-linux-gnu-debug.tar.gz
         28 22353b4a9532425c249632936896fb43972bb098e427857dae1df3b5206ddcac  output/bitcoin-0.18.99-aarch64-linux-gnu-debug.tar.gz
         28 3af24d40cd9ae92c2b431e7fbce652f7713b929ca471427c07c5ceeaf9282af6  output/bitcoin-0.18.99-arm-linux-gnueabihf-debug.tar.gz
         28 74d8faedbc251f8bc12588d066866493b833b3d04e6933114283b61bc349bb7d  output/bitcoin-0.18.99-riscv64-linux-gnu.tar.gz
         28 9a7878e1e70394b00224cf2b611cfdf0296976a916513dc08ec596d1127db389  output/bitcoin-0.18.99-arm-linux-gnueabihf.tar.gz
         28 9aaad700c36273a1ac73a4465b4dc6f49085c7b329aba108585a1e37ee03d913  output/src/bitcoin-0.18.99.tar.gz
         28 afd950b9e1d70aa0c8e765c3189328ad1f47ab66ae0ed9733914f853cabed068  output/bitcoin-0.18.99-x86_64-linux-gnu.tar.gz
         28 d762ed4228d7ccecb1b361c0f9f9f2458d93f0f1fdc8ef402cf9c5d5f8f28055  output/bitcoin-0.18.99-aarch64-linux-gnu.tar.gz
         28 d9e89a27b1cb8debeb5c83ec153e8de9bf956e2ce8b7e70fe78906db478095fc  output/bitcoin-0.18.99-riscv64-linux-gnu-debug.tar.gz
         28 e7097cf5dcf8ee7bb90977d0062956a41f963ca22727becc64ec07d215e4bdc6  output/bitcoin-0.18.99-i686-linux-gnu-debug.tar.gz
    

    I'll now try to see if I obtain identical results if I interrupt my Guix builds randomly and then resume them (and let them build until completion).

    Most cases of non-determinism seen so far seems to be related to interrupted builds that where then resumed.

  111. practicalswift commented at 6:48 AM on July 6, 2019: contributor

    When interrupting the Guix build and then resuming I get unexpected and previously unseen hashes for some of the builds:

          5 0dff397103b52471c4c483207b88102ddea79fdcb75c7ff01c2d10a1bff71aa9  output/bitcoin-0.18.99-i686-linux-gnu.tar.gz
          4 11b9db3e77f71a4d99c5f33a6a2e985ca817d16712a692c612ba5006f0ddf1a7  output/bitcoin-0.18.99-x86_64-linux-gnu-debug.tar.gz
          4 22353b4a9532425c249632936896fb43972bb098e427857dae1df3b5206ddcac  output/bitcoin-0.18.99-aarch64-linux-gnu-debug.tar.gz
          4 3af24d40cd9ae92c2b431e7fbce652f7713b929ca471427c07c5ceeaf9282af6  output/bitcoin-0.18.99-arm-linux-gnueabihf-debug.tar.gz
          4 74d8faedbc251f8bc12588d066866493b833b3d04e6933114283b61bc349bb7d  output/bitcoin-0.18.99-riscv64-linux-gnu.tar.gz
          1 7a3b628daceb8742443eeb108e150f8fddde033a68a857cc84c13effd7e2622d  output/bitcoin-0.18.99-i686-linux-gnu-debug.tar.gz
          4 9a7878e1e70394b00224cf2b611cfdf0296976a916513dc08ec596d1127db389  output/bitcoin-0.18.99-arm-linux-gnueabihf.tar.gz
          4 9aaad700c36273a1ac73a4465b4dc6f49085c7b329aba108585a1e37ee03d913  output/src/bitcoin-0.18.99.tar.gz
          4 afd950b9e1d70aa0c8e765c3189328ad1f47ab66ae0ed9733914f853cabed068  output/bitcoin-0.18.99-x86_64-linux-gnu.tar.gz
          1 afded9eed624080b365e49f4108445b614da7d927ec3905ae7f7907dc4ae324b  output/bitcoin-0.18.99-i686-linux-gnu-debug.tar.gz
          4 d762ed4228d7ccecb1b361c0f9f9f2458d93f0f1fdc8ef402cf9c5d5f8f28055  output/bitcoin-0.18.99-aarch64-linux-gnu.tar.gz
          4 d9e89a27b1cb8debeb5c83ec153e8de9bf956e2ce8b7e70fe78906db478095fc  output/bitcoin-0.18.99-riscv64-linux-gnu-debug.tar.gz
          3 e7097cf5dcf8ee7bb90977d0062956a41f963ca22727becc64ec07d215e4bdc6  output/bitcoin-0.18.99-i686-linux-gnu-debug.tar.gz
    

    These differ from the hashes previously seen:

          1 7a3b628daceb8742443eeb108e150f8fddde033a68a857cc84c13effd7e2622d  output/bitcoin-0.18.99-i686-linux-gnu-debug.tar.gz
          1 afded9eed624080b365e49f4108445b614da7d927ec3905ae7f7907dc4ae324b  output/bitcoin-0.18.99-i686-linux-gnu-debug.tar.gz
    

    It seems like we have an issue with non-determinism for at least bitcoin-0.18.99-i686-linux-gnu-debug.tar.gz if the Guix build is interrupted and then resumed.

    Perhaps #15277 (comment) would solve it?

  112. dongcarl commented at 4:02 PM on July 6, 2019: member

    @practicalswift That makes sense. I'm the middle of improving my script right now, and will include that as part of the changes!

  113. practicalswift commented at 9:19 AM on July 8, 2019: contributor

    @dongcarl

    Another suggestion: what about making the writing to the final output files atomic so that the files ${OUTDIR}/${DISTNAME}-${HOST}.tar.gz are only written to if we are certain that everything went well?

    That is instead of the current:

            find "${DISTNAME}" -not -name "*.dbg" -print0 \
                | sort --zero-terminated \
                | tar --create --no-recursion --mode='u+rw,go+r-w,a+X' --null --files-from=- \
                | gzip > "${OUTDIR}/${DISTNAME}-${HOST}.tar.gz"
    

    Do something along the lines of:

            TEMPORARY_OUTPUT_FILE=$(tempfile -d .)
            find "${DISTNAME}" -not -name "*.dbg" -print0 \
                | sort --zero-terminated \
                | tar --create --no-recursion --mode='u+rw,go+r-w,a+X' --null --files-from=- \
                | gzip > "${TEMPORARY_OUTPUT_FILE}"
            mv "${TEMPORARY_OUTPUT_FILE}" ""${OUTDIR}/${DISTNAME}-${HOST}.tar.gz"
    

    I think that would guard against a subset of unexpected hashes we've seen so far (for example: the no space left on device case).

    (Note that the -d . parameter to tempfile is important: we want src and dest to be on the same mounted filesystem to get mv to be able to use the rename syscall which is atomic (given some likely to be fulfilled assumptions).)

  114. dongcarl commented at 3:00 PM on July 8, 2019: member

    @practicalswift I'll try testing, but for the no space left on device case, wouldn't pipefail make sure that the exit code is non-zero?

    My current solution is just to fail early and fail hard: Non-empty $OUTDIR? Exit!

  115. laanwj commented at 3:37 PM on July 8, 2019: member

    @practicalswift I'll try testing, but for the no space left on device case, wouldn't pipefail make sure that the exit code is non-zero?

    In the case of gitian this condition was accidentally ignored because the exit code didn't 'bubble up' to the top level script (leading to #15549). If something similar could happen here, it makes sense to take precautions, given how tiring it is to dive into non-matching hash problems :sweat:

  116. dongcarl commented at 3:53 PM on July 9, 2019: member

    Working on a few improvements to readability and usability... Next push will be either the ultimate one or the penultimate one. :crossed_fingers:

  117. dongcarl commented at 3:53 AM on July 12, 2019: member

    There are many more improvements that can be made, but I believe as a subdirectory of contrib, this PR is ready.

    Highlights of this recent push:

    • Added a README
    • Fully commented all shell scripts
    • Shell scripts pass shellcheck
    • Simplified and eliminated 3 files
    • package-based Guix manifest instead of specification based
    • More robust shell scripts that traps Ctrl-C's to give the user a warning and will remove partial outputs if long, output-producing commands are interrupted

    Note to testers:

    Please pull my Guix branch again, as it has been updated:

    guix pull --url=https://github.com/dongcarl/guix.git \
              --branch=2019-05-bitcoin-staging \
              --max-jobs=4
    

    My substitute server has been loaded with the new packages, so those who use my substitute server will be able to try out the new changes faster.

    Also, please read the README.md for new features and tips and tricks. Let me know if anything is unclear.

  118. dongcarl renamed this:
    [Help Wanted] contrib: Enable building in Guix containers
    contrib: Enable building in Guix containers
    on Jul 12, 2019
  119. dongcarl force-pushed on Jul 12, 2019
  120. contrib: Add deterministic Guix builds. 3e80ec3ea9
  121. dongcarl force-pushed on Jul 12, 2019
  122. fanquake commented at 7:33 AM on July 12, 2019: member

    Nice. New build (Docker) hashes below. Will review the docs, but post nits & any fix-ups there, this should be pretty much be merge ready.

    bash-5.0# env PATH="/root/.config/guix/current/bin${PATH:+:}$PATH" guix describe
    Generation 2	Jul 12 2019 05:09:23	(current)
      guix 82c77e5
        repository URL: https://github.com/dongcarl/guix.git
        branch: 2019-05-bitcoin-staging
        commit: 82c77e52b8b46e0a3aad2cb12307c2e30547deec
    
    bash-5.0# git rev-parse HEAD
    3e80ec3ea9691c7c89173de922a113e643fe976b
    
    bash-5.0# find output/ -type f -print0 | sort -z | xargs -r0 sha256sum
    a298dea164a8c578831405c46777a53a771efada572383c4e67d447d54cac8f1  output/bitcoin-0.18.99-aarch64-linux-gnu-debug.tar.gz
    c1ed9807e1e600a1fe0cc630b76f75f81fb1ddca77e06c7df17e43b61589aaeb  output/bitcoin-0.18.99-aarch64-linux-gnu.tar.gz
    032baac7203fda78ac01a579966dcbf847c302e192e875d51c511e15bb556f79  output/bitcoin-0.18.99-arm-linux-gnueabihf-debug.tar.gz
    f7793f4ce52b4016b9c4dc9a4877cefcc770031365a59ae80597c666a52731da  output/bitcoin-0.18.99-arm-linux-gnueabihf.tar.gz
    a107a6ff800d48b4959735489e85479d68d17591e654271291691f9d40afef9e  output/bitcoin-0.18.99-i686-linux-gnu-debug.tar.gz
    d1e9619d08cbe9b853a50a5b589ce761fc333df7368254e0672339cd28e69932  output/bitcoin-0.18.99-i686-linux-gnu.tar.gz
    b8a44a228429da8b5a1b05bb7a9b96e3e18a60537f12f93add918aa307796f58  output/bitcoin-0.18.99-riscv64-linux-gnu-debug.tar.gz
    165c9ab9b09463fe15cdc76abd3bf23be813f705108c2088efd56e2f314f93b5  output/bitcoin-0.18.99-riscv64-linux-gnu.tar.gz
    b74f44ad6c94fa6a4c5a94a68646ad83d68d770623a64c0b2bc43da514471634  output/bitcoin-0.18.99-x86_64-linux-gnu-debug.tar.gz
    a80b2af288a764bd9129ebd8161df2265d9317b8c68d1b301d10ead2011c3b8f  output/bitcoin-0.18.99-x86_64-linux-gnu.tar.gz
    9aaad700c36273a1ac73a4465b4dc6f49085c7b329aba108585a1e37ee03d913  output/src/bitcoin-0.18.99.tar.gz
    
  123. in contrib/guix/guix-build.sh:22 in 3e80ec3ea9 outdated
      17 | +for host in ${HOSTS=i686-linux-gnu x86_64-linux-gnu arm-linux-gnueabihf aarch64-linux-gnu riscv64-linux-gnu}; do
      18 | +
      19 | +    # Display proper warning when the user interrupts the build
      20 | +    trap 'echo "** INT received while building ${host}, you may want to clean up the relevant output and distsrc-* directories before rebuilding"' INT
      21 | +
      22 | +    # Run the build script 'contrib/guix/build.sh' in the build container
    


    MarcoFalke commented at 11:34 AM on July 12, 2019:
        # Run the build script 'contrib/guix/libexec/build.sh' in the build container
    

    dongcarl commented at 3:47 PM on July 12, 2019:

    Fixed in cd3e947f50db7cfe05c05b368c25742193729a62

  124. in contrib/guix/README.md:18 in 3e80ec3ea9 outdated
      13 | +
      14 | +Conservatively, a x86_64 machine with:
      15 | +
      16 | +- 2 or more logical cores
      17 | +- 4GB of free disk space on the partition that /gnu/store will reside in
      18 | +- 24GB of free disk space on the partition that the bitcoin repository resides in
    


    MarcoFalke commented at 11:35 AM on July 12, 2019:
    - 24GB of free disk space on the partition that the Bitcoin Core git repository resides in
    

    dongcarl commented at 3:47 PM on July 12, 2019:

    Fixed in cd3e947f50db7cfe05c05b368c25742193729a62

  125. in contrib/guix/manifest.scm:1 in 3e80ec3ea9 outdated
       0 | @@ -0,0 +1,155 @@
       1 | +(define-module (bitcoin)
    


    MarcoFalke commented at 11:53 AM on July 12, 2019:

    Could this be called bitcoin-core for clarity?

    (define-module (bitcoin-core)
    

    dongcarl commented at 3:48 PM on July 12, 2019:

    Fixed in cd3e947f50db7cfe05c05b368c25742193729a62

  126. in contrib/guix/manifest.scm:17 in 3e80ec3ea9 outdated
      12 | +  #:use-module (gnu packages gawk)
      13 | +  #:use-module (gnu packages gcc)
      14 | +  #:use-module (gnu packages linux)
      15 | +  #:use-module (gnu packages perl)
      16 | +  #:use-module (gnu packages pkg-config)
      17 | +  #:use-module (gnu packages python)
    


    MarcoFalke commented at 11:58 AM on July 12, 2019:

    This seems to default to the "current python 3.x" version (https://git.savannah.gnu.org/cgit/guix.git/tree/gnu/packages/python.scm?id=v1.0.1-828-gf434664cc0#n365)

    We had issues in the past where dictionary keys were sorted differently in different versions of python, so I'd prefer if the versions were somehow pinned. (Same goes for the other packages in this scm)


    dongcarl commented at 3:49 PM on July 12, 2019:

    Fixed in cd3e947f50db7cfe05c05b368c25742193729a62

    Also, because we now do guix pull with a commit hash instead of a branch, that python version will never change.

  127. in contrib/guix/manifest.scm:121 in 3e80ec3ea9 outdated
     116 | +                   base-gcc))
     117 | +
     118 | +(packages->manifest
     119 | + (list ;; The Basics
     120 | +       bash
     121 | +       tcsh
    


    MarcoFalke commented at 12:02 PM on July 12, 2019:

    nit: Is this used somewhere?


    dongcarl commented at 3:48 PM on July 12, 2019:

    Fixed in cd3e947f50db7cfe05c05b368c25742193729a62

  128. in contrib/guix/manifest.scm:155 in 3e80ec3ea9 outdated
     150 | +       (make-gcc-toolchain gcc-9 glibc-2.27)
     151 | +       (make-bitcoin-cross-toolchain "riscv64-linux-gnu" gcc-8)
     152 | +       (make-bitcoin-cross-toolchain "x86_64-linux-gnu")
     153 | +       (make-bitcoin-cross-toolchain "i686-linux-gnu")
     154 | +       (make-bitcoin-cross-toolchain "aarch64-linux-gnu")
     155 | +       (make-bitcoin-cross-toolchain "arm-linux-gnueabihf" gcc-6)))
    


    MarcoFalke commented at 12:04 PM on July 12, 2019:

    Would be nice to explain why three different versions of gcc are used. Why is it not possible to use just one? Maybe the most popular version of gcc, which might be the one in the latest Ubuntu LTS release (we also use that version for gitian builds)


    dongcarl commented at 3:48 PM on July 12, 2019:

    Clarified in cd3e947f50db7cfe05c05b368c25742193729a62

  129. in depends/packages/qt.mk:164 in 3e80ec3ea9 outdated
     159 | @@ -160,7 +160,8 @@ define $(package)_preprocess_cmds
     160 |    echo "QMAKE_LINK_OBJECT_SCRIPT = object_script" >> qtbase/mkspecs/win32-g++/qmake.conf &&\
     161 |    sed -i.old "s|QMAKE_CFLAGS            = |!host_build: QMAKE_CFLAGS            = $($(package)_cflags) $($(package)_cppflags) |" qtbase/mkspecs/win32-g++/qmake.conf && \
     162 |    sed -i.old "s|QMAKE_LFLAGS            = |!host_build: QMAKE_LFLAGS            = $($(package)_ldflags) |" qtbase/mkspecs/win32-g++/qmake.conf && \
     163 | -  sed -i.old "s|QMAKE_CXXFLAGS          = |!host_build: QMAKE_CXXFLAGS            = $($(package)_cxxflags) $($(package)_cppflags) |" qtbase/mkspecs/win32-g++/qmake.conf
     164 | +  sed -i.old "s|QMAKE_CXXFLAGS          = |!host_build: QMAKE_CXXFLAGS            = $($(package)_cxxflags) $($(package)_cppflags) |" qtbase/mkspecs/win32-g++/qmake.conf && \
     165 | +  sed -i.old "s/LIBRARY_PATH/(CROSS_)?\0/g" qtbase/mkspecs/features/toolchain.prf
    


    MarcoFalke commented at 12:06 PM on July 12, 2019:

    Is this depends change supposed to be in the "guix" commit?


    dongcarl commented at 3:50 PM on July 12, 2019:

    The CROSS_LIBRARY_PATH environment variable is Guix-specific, I'm patching it in a way that doesn't break for non-Guix (notice the ?).

  130. MarcoFalke approved
  131. MarcoFalke commented at 12:06 PM on July 12, 2019: member

    ACK, code looks clean and readable. Didn't run, but I have some questions:

    • If depends has already been built outside of guix, it will fail to produce deterministic builds?
    • If depends has already been built inside of guix, will it be cached/kept for the next guix build?
    • If the --no-substitutes flag is supplied, will it compile the compiler on the first run and cache it? If yes, it seems like this is only a one-time cost and it could make sense to mention that in the Readme to encourage people building everything from scratch.
  132. contrib: guix: Clarify SOURCE_DATE_EPOCH. 8dff3e48a9
  133. contrib: guix: Various improvements.
    - Clearer and more accurate prose
    - Pin `guix pull' to commit rather than branch
    - Just use `use-module' instead of `define-module'
    - Use `bash-minimal' instead of `bash'
    - Remove unneeded `tcsh' from manifest
    - Explicitly use `python-3.7'
    - Add comments about how {native,cross}-toolchains are produced and
      why
    cd3e947f50
  134. contrib: guix: Additional clarifications re: substitutes 751549b52a
  135. dongcarl force-pushed on Jul 12, 2019
  136. dongcarl commented at 4:32 PM on July 12, 2019: member

    @MarcoFalke

    ACK, code looks clean and readable.

    Thanks for taking a look Marco! I'm glad it was readable!

    If depends has already been built outside of guix, it will fail to produce deterministic builds?

    This isn't supported at the moment, but can be added to the list of possible improvements!

    If depends has already been built inside of guix, will it be cached/kept for the next guix build?

    Yes! This works as long as depends caches work :-)

    If the --no-substitutes flag is supplied, will it compile the compiler on the first run and cache it? If yes, it seems like this is only a one-time cost and it could make sense to mention that in the Readme to encourage people building everything from scratch.

    Yes, in fact Guix's functional package system ensures that unless the effective final package definition changes, the cache will always be valid! (e.g. if someone changed (+ 2 2) to (* 2 2) in a package definition the cache will still be valid)

    The reason why I originally wanted to "highlight" substitutes is because a common complaint among first-time Guix users is that the builds are taking too long<sup>TM</sup>.

    Just pushed de8b53e97ba6fc7d6dea0fda2a9c55bc1b06283f that adds additional clarifications to the README.

  137. MarcoFalke commented at 5:07 PM on July 12, 2019: member

    Thanks for the replies. ACK 751549b52a9a4cd27389d807ae67f02bbb39cd7f

  138. laanwj commented at 5:24 PM on July 12, 2019: member

    ACK 751549b52a9a4cd27389d807ae67f02bbb39cd7f

  139. laanwj merged this on Jul 12, 2019
  140. laanwj closed this on Jul 12, 2019

  141. laanwj referenced this in commit 3453cf26db on Jul 12, 2019
  142. BrannonKing commented at 8:42 PM on July 12, 2019: none

    For compilation of LBRY (a bitcoin derivative), I've been using the "depends" stuff to handle the cross-compilation (linux, windows, darwin). I've got a Docker image that has the necessary build dependencies, which single image runs all three cross-platform builds. It has been working quite well (after a few tweaks to the depends stuff). In particular, I changed it to use the system Clang instead of downloading one as part of the build for darwin. That particular feature may help you with the guix cross-platform compilation. I've compiled the linux target with Clang from time to time as well; it works fine but you have to modify the boost.mk to have it use the clang toolset. (To support cross-compile to darwin you're buying into clang anyhow.) For some ideas, you can do a diff to bitcoin on the "depends" and "packaging" folders from here: https://github.com/lbryio/lbrycrd . You can use Clang to cross-compile to Windows as well, but it requires a stand-alone package of Windows headers & libs -- similar to what we do for the OSX SDK in the "depends" system. I haven't gone down that road.

  143. dongcarl commented at 9:00 PM on July 12, 2019: member

    @BrannonKing

    For compilation of LBRY (a bitcoin derivative), I've been using the "depends" stuff to handle the cross-compilation (linux, windows, darwin). I've got a Docker image that has the necessary build dependencies, which single image runs all three cross-platform builds. It has been working quite well (after a few tweaks to the depends stuff).

    Good to know "depends" works for others as well!

    In particular, I changed it to use the system Clang instead of downloading one as part of the build for darwin. That particular feature may help you with the guix cross-platform compilation.

    Very cool! This is a real problem that I haven't gotten around to solving, but glad you did! I will check out the diff!

    You can use Clang to cross-compile to Windows as well, but it requires a stand-alone package of Windows headers & libs -- similar to what we do for the OSX SDK in the "depends" system. I haven't gone down that road.

    Good to know! I'll definitely look into this if mingw doesn't end up working as well as I hope haha.

  144. hebasto commented at 9:08 PM on July 12, 2019: member
    $ git rev-parse HEAD
    751549b52a9a4cd27389d807ae67f02bbb39cd7f
    $ find output/ -type f -print0 | sort -z | xargs -r0 sha256sum
    66dfb1fbf949128793dac184c68dee407ae56d3cc4d4f0f92b1df2146267446e  output/bitcoin-0.18.99-aarch64-linux-gnu-debug.tar.gz
    e5f46d3548f5cb456496ad9d1c560443143b879bd92f946a286985eace99add1  output/bitcoin-0.18.99-aarch64-linux-gnu.tar.gz
    96d5f690350c5eeb27fa4f7ed6165006aea5e9039e54420f1d8dace92e2155f6  output/bitcoin-0.18.99-arm-linux-gnueabihf-debug.tar.gz
    e224ba56022f34138006ea0d1e00e83d3f44af3bb0fc886bf1f2d15d9b68cba4  output/bitcoin-0.18.99-arm-linux-gnueabihf.tar.gz
    adda0b3b4f942c7750fead6811b2e85c35a6f0da94170bcc39e529c4bbc1da6c  output/bitcoin-0.18.99-i686-linux-gnu-debug.tar.gz
    2e5a9a40bbc802c4360bb0b68675d7e63350d2ea426a71152cb158fcee13ef75  output/bitcoin-0.18.99-i686-linux-gnu.tar.gz
    d97d447c0418e5dac4f25251e72b20466e1b8ee90284c69849a5a248929dbe0c  output/bitcoin-0.18.99-riscv64-linux-gnu-debug.tar.gz
    66f5389e0038f702d2965faed6d0f88242ab66dc3f4d7ec987e3c4a1d4a9855c  output/bitcoin-0.18.99-riscv64-linux-gnu.tar.gz
    256c6ecfd58175dba8720597966dceb4b6322204098be59df289a1d641741e00  output/bitcoin-0.18.99-x86_64-linux-gnu-debug.tar.gz
    43cd87bab9b31262898c1e6fafc9f66a3aaeb7bea566316686f0c54adc19781e  output/bitcoin-0.18.99-x86_64-linux-gnu.tar.gz
    9aaad700c36273a1ac73a4465b4dc6f49085c7b329aba108585a1e37ee03d913  output/src/bitcoin-0.18.99.tar.gz
    
  145. fanquake commented at 4:21 AM on July 13, 2019: member

    Ran a final build. Seeing hashes that match @hebasto.

    bash-5.0# env PATH="/root/.config/guix/current/bin${PATH:+:}$PATH" guix describe
    Generation 2	Jul 12 2019 05:09:23	(current)
      guix 82c77e5
        repository URL: https://github.com/dongcarl/guix.git
        branch: 2019-05-bitcoin-staging
        commit: 82c77e52b8b46e0a3aad2cb12307c2e30547deec
    
    bash-5.0# git rev-parse HEAD
    751549b52a9a4cd27389d807ae67f02bbb39cd7f
    
    bash-5.0# find output/ -type f -print0 | sort -z | xargs -r0 sha256sum
    66dfb1fbf949128793dac184c68dee407ae56d3cc4d4f0f92b1df2146267446e  output/bitcoin-0.18.99-aarch64-linux-gnu-debug.tar.gz
    e5f46d3548f5cb456496ad9d1c560443143b879bd92f946a286985eace99add1  output/bitcoin-0.18.99-aarch64-linux-gnu.tar.gz
    96d5f690350c5eeb27fa4f7ed6165006aea5e9039e54420f1d8dace92e2155f6  output/bitcoin-0.18.99-arm-linux-gnueabihf-debug.tar.gz
    e224ba56022f34138006ea0d1e00e83d3f44af3bb0fc886bf1f2d15d9b68cba4  output/bitcoin-0.18.99-arm-linux-gnueabihf.tar.gz
    adda0b3b4f942c7750fead6811b2e85c35a6f0da94170bcc39e529c4bbc1da6c  output/bitcoin-0.18.99-i686-linux-gnu-debug.tar.gz
    2e5a9a40bbc802c4360bb0b68675d7e63350d2ea426a71152cb158fcee13ef75  output/bitcoin-0.18.99-i686-linux-gnu.tar.gz
    d97d447c0418e5dac4f25251e72b20466e1b8ee90284c69849a5a248929dbe0c  output/bitcoin-0.18.99-riscv64-linux-gnu-debug.tar.gz
    66f5389e0038f702d2965faed6d0f88242ab66dc3f4d7ec987e3c4a1d4a9855c  output/bitcoin-0.18.99-riscv64-linux-gnu.tar.gz
    256c6ecfd58175dba8720597966dceb4b6322204098be59df289a1d641741e00  output/bitcoin-0.18.99-x86_64-linux-gnu-debug.tar.gz
    43cd87bab9b31262898c1e6fafc9f66a3aaeb7bea566316686f0c54adc19781e  output/bitcoin-0.18.99-x86_64-linux-gnu.tar.gz
    9aaad700c36273a1ac73a4465b4dc6f49085c7b329aba108585a1e37ee03d913  output/src/bitcoin-0.18.99.tar.gz
    
  146. practicalswift commented at 10:38 AM on July 22, 2019: contributor

    Strangely I'm not getting the same hashes as @fanquake and @hebasto when running:

    $ guix pull --url=https://github.com/dongcarl/guix.git --commit=82c77e52b8b46e0a3aad2cb12307c2e30547deec --max-jobs=12
    guile: warning: failed to install locale
    Updating channel 'guix' from Git repository at 'https://github.com/dongcarl/guix.git'...
    Building from this channel:
      guix      https://github.com/dongcarl/guix.git        82c77e5
    Computing Guix derivation for 'x86_64-linux'...
    nothing to be done
    $ guix --version
    guile: warning: failed to install locale
    guix (GNU Guix) 82c77e52b8b46e0a3aad2cb12307c2e30547deec
    Copyright (C) 2019 the Guix authors
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.
    $ git clone -q https://github.com/bitcoin/bitcoin
    $ cd bitcoin
    $ git fetch origin pull/15277/head:2019-01-guix
    From https://github.com/bitcoin/bitcoin
     * [new ref]             refs/pull/15277/head -> 2019-01-guix
    $ git checkout 2019-01-guix
    Switched to branch '2019-01-guix'
    $ git rev-parse HEAD
    751549b52a9a4cd27389d807ae67f02bbb39cd7f
    $ contrib/guix/guix-build.sh
    …
    $ find output/ -type f -print0 | sort -z | xargs -r0 sha256sum
    6e26f21c48ea0acd564c5779be8ba7325f96616eaafa573c79669fc81033867b  output/bitcoin-0.18.99-aarch64-linux-gnu-debug.tar.gz
    b3b7700eaca5eb032187e9fab6e057c9afb27a0f69ac22568fbf4c3c9885ad01  output/bitcoin-0.18.99-aarch64-linux-gnu.tar.gz
    baa4f0461ed505e4993f832452659828a65a2da4247e40f3992e923c46798a29  output/bitcoin-0.18.99-arm-linux-gnueabihf-debug.tar.gz
    40eaa54b14df6c00f7451cea9418b92f84555e3094057ee76a3aa4e505461aa0  output/bitcoin-0.18.99-arm-linux-gnueabihf.tar.gz
    3407730d8ce02074c243c461a5edd86e651527a6d2b1f77f920e0c2030939d5f  output/bitcoin-0.18.99-i686-linux-gnu-debug.tar.gz
    0ab534959d6e42ed86bc0700cd3a91838b28d7a0ab04c93a984096fba0e8595c  output/bitcoin-0.18.99-i686-linux-gnu.tar.gz
    2a20b8e067d27e16e816f9c63f3f0a2ab6d31a8273bd28ec0aafe4080f9c0dd3  output/bitcoin-0.18.99-riscv64-linux-gnu-debug.tar.gz
    9c0476e9d076dd05951940626a3bc2ddae8318649aade3b10c7772e74175bbcb  output/bitcoin-0.18.99-riscv64-linux-gnu.tar.gz
    ef659978bfea35847b1c7501a5e45d26c7371349301e606a9242842593b4e5e4  output/bitcoin-0.18.99-x86_64-linux-gnu-debug.tar.gz
    e3f11e3c9f5693753708ada5950c6d681200902c2372fcff7d3894855ba3d5f8  output/bitcoin-0.18.99-x86_64-linux-gnu.tar.gz
    4fd545fcd5c321b7a93d8eac0d2b2a897d8fdd08f40ff62d4f4f9de9f9a57eb2  output/src/bitcoin-0.18.99.tar.gz
    
  147. practicalswift commented at 12:24 PM on July 22, 2019: contributor

    Sorry, I missed passing --branch=2019-05-bitcoin-staging to guix pull.

    I'll re-try building.

  148. practicalswift commented at 11:46 PM on July 22, 2019: contributor

    FWIW, specifying --branch=2019-05-bitcoin-staging did not solve the issue.

    I'm still not getting the hashes observed by @fanquake and @hebasto:

    $ guix pull --url=https://github.com/dongcarl/guix.git \
        --commit=82c77e52b8b46e0a3aad2cb12307c2e30547deec \
        --branch=2019-05-bitcoin-staging --max-jobs=12
    …
    $ guix describe
    Generation 8    Jul 22 2019 12:22:36    (current)
      guix 82c77e5
        repository URL: https://github.com/dongcarl/guix.git
        branch: 2019-05-bitcoin-staging
        commit: 82c77e52b8b46e0a3aad2cb12307c2e30547deec
    $ guix --version
    guix (GNU Guix) 82c77e52b8b46e0a3aad2cb12307c2e30547deec
    Copyright (C) 2019 the Guix authors
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.
    $ git clone -q https://github.com/bitcoin/bitcoin
    $ cd bitcoin
    $ git fetch origin pull/15277/head:2019-01-guix
    $ git checkout 2019-01-guix
    $ git rev-parse HEAD
    751549b52a9a4cd27389d807ae67f02bbb39cd7f
    $ contrib/guix/guix-build.sh
    $ find output/ -type f -print0 | sort -z | xargs -r0 sha256sum
    6e26f21c48ea0acd564c5779be8ba7325f96616eaafa573c79669fc81033867b  output/bitcoin-0.18.99-aarch64-linux-gnu-debug.tar.gz
    b3b7700eaca5eb032187e9fab6e057c9afb27a0f69ac22568fbf4c3c9885ad01  output/bitcoin-0.18.99-aarch64-linux-gnu.tar.gz
    baa4f0461ed505e4993f832452659828a65a2da4247e40f3992e923c46798a29  output/bitcoin-0.18.99-arm-linux-gnueabihf-debug.tar.gz
    40eaa54b14df6c00f7451cea9418b92f84555e3094057ee76a3aa4e505461aa0  output/bitcoin-0.18.99-arm-linux-gnueabihf.tar.gz
    3407730d8ce02074c243c461a5edd86e651527a6d2b1f77f920e0c2030939d5f  output/bitcoin-0.18.99-i686-linux-gnu-debug.tar.gz
    0ab534959d6e42ed86bc0700cd3a91838b28d7a0ab04c93a984096fba0e8595c  output/bitcoin-0.18.99-i686-linux-gnu.tar.gz
    2a20b8e067d27e16e816f9c63f3f0a2ab6d31a8273bd28ec0aafe4080f9c0dd3  output/bitcoin-0.18.99-riscv64-linux-gnu-debug.tar.gz
    9c0476e9d076dd05951940626a3bc2ddae8318649aade3b10c7772e74175bbcb  output/bitcoin-0.18.99-riscv64-linux-gnu.tar.gz
    ef659978bfea35847b1c7501a5e45d26c7371349301e606a9242842593b4e5e4  output/bitcoin-0.18.99-x86_64-linux-gnu-debug.tar.gz
    e3f11e3c9f5693753708ada5950c6d681200902c2372fcff7d3894855ba3d5f8  output/bitcoin-0.18.99-x86_64-linux-gnu.tar.gz
    4fd545fcd5c321b7a93d8eac0d2b2a897d8fdd08f40ff62d4f4f9de9f9a57eb2  output/src/bitcoin-0.18.99.tar.gz
    
  149. dongcarl commented at 7:24 PM on July 23, 2019: member

    @practicalswift Oh! That's interesting... The files are a little big, but could you at least send me output/src/bitcoin-0.18.99.tar.gz and maybe one of the other tarballs?

    A local build shows that I'm matching you... So perhaps either @fanquake or @hebasto can upload their tarballs?

  150. practicalswift commented at 7:53 AM on July 31, 2019: contributor

    Did we arrive at any conclusion regarding the expected hashes?

    FWIW I'm consistently getting:

    6e26f21c48ea0acd564c5779be8ba7325f96616eaafa573c79669fc81033867b  output/bitcoin-0.18.99-aarch64-linux-gnu-debug.tar.gz
    b3b7700eaca5eb032187e9fab6e057c9afb27a0f69ac22568fbf4c3c9885ad01  output/bitcoin-0.18.99-aarch64-linux-gnu.tar.gz
    baa4f0461ed505e4993f832452659828a65a2da4247e40f3992e923c46798a29  output/bitcoin-0.18.99-arm-linux-gnueabihf-debug.tar.gz
    40eaa54b14df6c00f7451cea9418b92f84555e3094057ee76a3aa4e505461aa0  output/bitcoin-0.18.99-arm-linux-gnueabihf.tar.gz
    3407730d8ce02074c243c461a5edd86e651527a6d2b1f77f920e0c2030939d5f  output/bitcoin-0.18.99-i686-linux-gnu-debug.tar.gz
    0ab534959d6e42ed86bc0700cd3a91838b28d7a0ab04c93a984096fba0e8595c  output/bitcoin-0.18.99-i686-linux-gnu.tar.gz
    2a20b8e067d27e16e816f9c63f3f0a2ab6d31a8273bd28ec0aafe4080f9c0dd3  output/bitcoin-0.18.99-riscv64-linux-gnu-debug.tar.gz
    9c0476e9d076dd05951940626a3bc2ddae8318649aade3b10c7772e74175bbcb  output/bitcoin-0.18.99-riscv64-linux-gnu.tar.gz
    ef659978bfea35847b1c7501a5e45d26c7371349301e606a9242842593b4e5e4  output/bitcoin-0.18.99-x86_64-linux-gnu-debug.tar.gz
    e3f11e3c9f5693753708ada5950c6d681200902c2372fcff7d3894855ba3d5f8  output/bitcoin-0.18.99-x86_64-linux-gnu.tar.gz
    4fd545fcd5c321b7a93d8eac0d2b2a897d8fdd08f40ff62d4f4f9de9f9a57eb2  output/src/bitcoin-0.18.99.tar.gz
    

    See commands in previous comment.

  151. hebasto commented at 1:30 PM on August 3, 2019: member

    @dongcarl @practicalswift

    A local build shows that I'm matching you... So perhaps either @fanquake or @hebasto can upload their tarballs?

    bitcoin-0.18.99.tar.gz

    Which way to upload up to 300 MB files is convenient?

  152. hebasto commented at 3:02 PM on August 3, 2019: member

    Strange things happened. Just made another build:

    $ guix --version
    guix (GNU Guix) 82c77e52b8b46e0a3aad2cb12307c2e30547deec
    Copyright (C) 2019 the Guix authors
    License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.
    $ guix describe
    Generation 3	Jul 12 2019 19:20:36	(current)
      guix 82c77e5
        repository URL: https://github.com/dongcarl/guix.git
        branch: 2019-05-bitcoin-staging
        commit: 82c77e52b8b46e0a3aad2cb12307c2e30547deec
    $ git rev-parse HEAD
    751549b52a9a4cd27389d807ae67f02bbb39cd7f
    $ find output/ -type f -print0 | sort -z | xargs -r0 sha256sum
    6e26f21c48ea0acd564c5779be8ba7325f96616eaafa573c79669fc81033867b  output/bitcoin-0.18.99-aarch64-linux-gnu-debug.tar.gz
    b3b7700eaca5eb032187e9fab6e057c9afb27a0f69ac22568fbf4c3c9885ad01  output/bitcoin-0.18.99-aarch64-linux-gnu.tar.gz
    baa4f0461ed505e4993f832452659828a65a2da4247e40f3992e923c46798a29  output/bitcoin-0.18.99-arm-linux-gnueabihf-debug.tar.gz
    40eaa54b14df6c00f7451cea9418b92f84555e3094057ee76a3aa4e505461aa0  output/bitcoin-0.18.99-arm-linux-gnueabihf.tar.gz
    3407730d8ce02074c243c461a5edd86e651527a6d2b1f77f920e0c2030939d5f  output/bitcoin-0.18.99-i686-linux-gnu-debug.tar.gz
    0ab534959d6e42ed86bc0700cd3a91838b28d7a0ab04c93a984096fba0e8595c  output/bitcoin-0.18.99-i686-linux-gnu.tar.gz
    2a20b8e067d27e16e816f9c63f3f0a2ab6d31a8273bd28ec0aafe4080f9c0dd3  output/bitcoin-0.18.99-riscv64-linux-gnu-debug.tar.gz
    9c0476e9d076dd05951940626a3bc2ddae8318649aade3b10c7772e74175bbcb  output/bitcoin-0.18.99-riscv64-linux-gnu.tar.gz
    ef659978bfea35847b1c7501a5e45d26c7371349301e606a9242842593b4e5e4  output/bitcoin-0.18.99-x86_64-linux-gnu-debug.tar.gz
    e3f11e3c9f5693753708ada5950c6d681200902c2372fcff7d3894855ba3d5f8  output/bitcoin-0.18.99-x86_64-linux-gnu.tar.gz
    4fd545fcd5c321b7a93d8eac0d2b2a897d8fdd08f40ff62d4f4f9de9f9a57eb2  output/src/bitcoin-0.18.99.tar.gz
    
  153. practicalswift commented at 6:37 PM on August 3, 2019: contributor

    @hebasto Thanks! Let me know if you see any non-matching hashes. @fanquake What hashes are you getting?

  154. fanquake commented at 6:19 AM on August 4, 2019: member

    Have just done another build from scratch. Seeing hashes that seem to match everyone else.

    env PATH="/root/.config/guix/current/bin${PATH:+:}$PATH" guix describe
    Generation 1	Aug 04 2019 01:17:09	(current)
      guix 82c77e5
        repository URL: https://github.com/dongcarl/guix.git
        branch: 2019-05-bitcoin-staging
        commit: 82c77e52b8b46e0a3aad2cb12307c2e30547deec
    
    git rev-parse HEAD
    751549b52a9a4cd27389d807ae67f02bbb39cd7f
    
    find output/ -type f -print0 | sort -z | xargs -r0 sha256sum
    6e26f21c48ea0acd564c5779be8ba7325f96616eaafa573c79669fc81033867b  output/bitcoin-0.18.99-aarch64-linux-gnu-debug.tar.gz
    b3b7700eaca5eb032187e9fab6e057c9afb27a0f69ac22568fbf4c3c9885ad01  output/bitcoin-0.18.99-aarch64-linux-gnu.tar.gz
    baa4f0461ed505e4993f832452659828a65a2da4247e40f3992e923c46798a29  output/bitcoin-0.18.99-arm-linux-gnueabihf-debug.tar.gz
    40eaa54b14df6c00f7451cea9418b92f84555e3094057ee76a3aa4e505461aa0  output/bitcoin-0.18.99-arm-linux-gnueabihf.tar.gz
    3407730d8ce02074c243c461a5edd86e651527a6d2b1f77f920e0c2030939d5f  output/bitcoin-0.18.99-i686-linux-gnu-debug.tar.gz
    0ab534959d6e42ed86bc0700cd3a91838b28d7a0ab04c93a984096fba0e8595c  output/bitcoin-0.18.99-i686-linux-gnu.tar.gz
    2a20b8e067d27e16e816f9c63f3f0a2ab6d31a8273bd28ec0aafe4080f9c0dd3  output/bitcoin-0.18.99-riscv64-linux-gnu-debug.tar.gz
    9c0476e9d076dd05951940626a3bc2ddae8318649aade3b10c7772e74175bbcb  output/bitcoin-0.18.99-riscv64-linux-gnu.tar.gz
    ef659978bfea35847b1c7501a5e45d26c7371349301e606a9242842593b4e5e4  output/bitcoin-0.18.99-x86_64-linux-gnu-debug.tar.gz
    e3f11e3c9f5693753708ada5950c6d681200902c2372fcff7d3894855ba3d5f8  output/bitcoin-0.18.99-x86_64-linux-gnu.tar.gz
    4fd545fcd5c321b7a93d8eac0d2b2a897d8fdd08f40ff62d4f4f9de9f9a57eb2  output/src/bitcoin-0.18.99.tar.gz
    
  155. practicalswift commented at 1:32 PM on August 4, 2019: contributor

    @fanquake Thanks!

    Good to hear that we're all getting the same hashes. I wonder what the root cause of the previously seen discrepancy was.

  156. hebasto commented at 1:40 PM on August 4, 2019: member

    @practicalswift

    I wonder what the root cause of the previously seen discrepancy was.

    It seems that despite git rev-parse HEAD returned 751549b52a9a4cd27389d807ae67f02bbb39cd7f the actual build was on top of another commit. See my previous tarball #15277 (comment).

  157. dongcarl commented at 5:13 PM on August 5, 2019: member

    Very odd, I'm thinking it might just be a discrepancy arising from the Dockerfile COPY? Not too big a deal though, if we see this crop up again we'll be able to better document what happened exactly and how to avoid.

  158. practicalswift commented at 8:04 AM on August 6, 2019: contributor

    @dongcarl FWIW I've always built outside of Docker. @hebasto and @fanquake, did you build inside Docker when you got the unexpected hashes?

  159. hebasto commented at 3:58 PM on August 6, 2019: member

    @dongcarl @practicalswift I do not use Docker.

  160. monstrobishi referenced this in commit 9c21ea00a5 on Sep 6, 2020
  161. Munkybooty referenced this in commit 94c9f22f29 on Nov 4, 2021
  162. Munkybooty referenced this in commit 67c7576970 on Nov 6, 2021
  163. Munkybooty referenced this in commit 366fa11ff1 on Nov 12, 2021
  164. Munkybooty referenced this in commit c38b1bb1b5 on Nov 16, 2021
  165. Munkybooty referenced this in commit 24e0a9bbbe on Nov 18, 2021
  166. MarcoFalke locked this on Dec 16, 2021

github-metadata-mirror

This is a metadata mirror of the GitHub repository bitcoin/bitcoin. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2026-04-24 21:15 UTC

This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me