guix-devel
[Top][All Lists]
Advanced

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

Hash mismatch for Python 2.7.10 (x86_64-linux)


From: Ludovic Courtès
Subject: Hash mismatch for Python 2.7.10 (x86_64-linux)
Date: Mon, 21 Mar 2016 18:22:24 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux)

Leo Famulari <address@hidden> skribis:

> Can you take a look at python-2.7.10?
>
> Specifically, /gnu/store/4bs4mx6xyx0jx9827vmmbxyhjln7cmcv-python-2.7.10
>
> This is from "ifur" on #guix:
> http://paste.lisp.org/display/311051

This is an “interesting” case.  There’s indeed a hash mismatch between
that narinfo and the nar (hydra.gnu.org and mirror.guixsd.org provide
the exact same narinfo and nar though):

--8<---------------cut here---------------start------------->8---
$ wget -q -O - https://hydra.gnu.org/4bs4mx6xyx0jx9827vmmbxyhjln7cmcv.narinfo 
|grep Hash
NarHash: sha256:1ifhxz7ng64ckrsfp0cy6rcybwrdf2mgq7p9w73ynbwy1w2frhp5
$ wget -q -O - 
https://hydra.gnu.org/nar/4bs4mx6xyx0jx9827vmmbxyhjln7cmcv-python-2.7.10 | 
bunzip2 | guix hash /dev/stdin
1rb34mfv32zj6ir9nkrmw2mrc00n2gf9p2chihh1qpl9fmsxhhif
$ guix hash -r /gnu/store/4bs4mx6xyx0jx9827vmmbxyhjln7cmcv-python-2.7.10
1ifhxz7ng64ckrsfp0cy6rcybwrdf2mgq7p9w73ynbwy1w2frhp5
--8<---------------cut here---------------end--------------->8---

To spot the differences, I did:

--8<---------------cut here---------------start------------->8---
$ wget -O - 
https://mirror.guixsd.org/nar/4bs4mx6xyx0jx9827vmmbxyhjln7cmcv-python-2.7.10 | 
bunzip2 | guix archive -x /tmp/python
$ diff -ur --no-dereference /tmp/python 
/gnu/store/4bs4mx6xyx0jx9827vmmbxyhjln7cmcv-python-2.7.10
Binary files /tmp/python/lib/python2.7/_abcoll.pyc and 
/gnu/store/4bs4mx6xyx0jx9827vmmbxyhjln7cmcv-python-2.7.10/lib/python2.7/_abcoll.pyc
 differ
Binary files /tmp/python/lib/python2.7/abc.pyc and 
/gnu/store/4bs4mx6xyx0jx9827vmmbxyhjln7cmcv-python-2.7.10/lib/python2.7/abc.pyc 
differ
Binary files /tmp/python/lib/python2.7/codecs.pyc and 
/gnu/store/4bs4mx6xyx0jx9827vmmbxyhjln7cmcv-python-2.7.10/lib/python2.7/codecs.pyc
 differ
Binary files /tmp/python/lib/python2.7/copy_reg.pyc and 
/gnu/store/4bs4mx6xyx0jx9827vmmbxyhjln7cmcv-python-2.7.10/lib/python2.7/copy_reg.pyc
 differ
Binary files /tmp/python/lib/python2.7/encodings/aliases.pyc and 
/gnu/store/4bs4mx6xyx0jx9827vmmbxyhjln7cmcv-python-2.7.10/lib/python2.7/encodings/aliases.pyc
 differ
Binary files /tmp/python/lib/python2.7/encodings/__init__.pyc and 
/gnu/store/4bs4mx6xyx0jx9827vmmbxyhjln7cmcv-python-2.7.10/lib/python2.7/encodings/__init__.pyc
 differ
Binary files /tmp/python/lib/python2.7/encodings/utf_8.pyc and 
/gnu/store/4bs4mx6xyx0jx9827vmmbxyhjln7cmcv-python-2.7.10/lib/python2.7/encodings/utf_8.pyc
 differ
[...]
$ diffoscope --html t.html /tmp/python/lib/python2.7 
/gnu/store/4bs4mx6xyx0jx9827vmmbxyhjln7cmcv-python-2.7.10/lib/python2.7/
--8<---------------cut here---------------end--------------->8---

Diffoscope shows several hundred of bytes of differences in several .pyc
files (so it’s not just 32-byte timestamps as discussed in
<http://bugs.gnu.org/22010>, IIRC.)

That the differences are so important is fishy.  Could you check what
you have on your machine?  Is anyone able to make an independent build
of this thing?


For non-deterministic packages, something that could in theory happen
(although it seems unlikely) is this:

  1. nginx caches the narinfo of a first build with hash X;

  2. nobody downloads the corresponding nar, and the result is
     eventually GC’d from hydra;

  3. Hydra rebuilds the thing, obtains hash Y; the nar with hash Y is
     downloaded and cached by nginx, but, no luck, it doesn’t match the
     hash in the narinfo that was cached in step #1.

That could happen, but it seems pretty far-fetched, especially for a
package like Python.


On my machine I looked for the corresponding “derivers”:

--8<---------------cut here---------------start------------->8---
scheme@(guile-user)> ,use(guix)
scheme@(guile-user)> (define s (open-connection))
scheme@(guile-user)> (valid-derivers s 
"/gnu/store/4bs4mx6xyx0jx9827vmmbxyhjln7cmcv-python-2.7.10")
$4 = ("/gnu/store/a5s3mkl387wwkklj3ss5hw34ib9rb2p6-python-2.7.10.drv" 
"/gnu/store/pvsdsjn15rj1ciwr37vl2vqprvl57szg-python-2.7.10.drv")
--8<---------------cut here---------------end--------------->8---

And then run:

--8<---------------cut here---------------start------------->8---
$ guix build "/gnu/store/pvsdsjn15rj1ciwr37vl2vqprvl57szg-python-2.7.10.drv" 
--check  
--8<---------------cut here---------------end--------------->8---

However that’s not very helpful since it unsurprisingly fails with a
“may not be deterministic” error.

Ludo’.



reply via email to

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