-
Notifications
You must be signed in to change notification settings - Fork 37.7k
Gitian fixes for 0.9.0rc1 build #3620
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
# This is good in general but qrc shouldn't be doing a traversal over a randomized container. | ||
# The thorough solution would be to use QMap instead of QHash, but this requires patching Qt. | ||
# For now luckily there is a test mode that forces a fixed seed. | ||
export QT_RCC_TEST=1 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why do you add this here? What exactly does it do, if you say rebuilding isn't necessary?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hmm yes maybe it is necessary.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Okay -- in that case, don't forget to increment the dependency version.
At least rebuild Qt after this. I'm not 100% sure that it is needed, but there is a large chance that Qt itself is also using the resource compiler somewhere. |
ACK |
- Add 'g++' package (virtualbox images don't have this by default) - Workaround for determinism in Qt5 resources - Pass --disable-maintainer-mode --disable-dependency-tracking to configure for libqrencode to avoid random errors about missing m4 directory - Fix typo -with-pic -> --with-pic It is not necessary to rebuild dependencies after this commit. Fixes bitcoin#3610 and bitcoin#3612.
Automatic sanity-testing: PASSED, see http://jenkins.bluematt.me/pull-tester/65615a3a784c01128b408a915ab375c35640fb0a for binaries and test log. |
This seems to fix at least all the determinism issues on KVM. I built the entire chain (including all dependencies) twice and ended up with the same result:
Edit: now going to try with LXC and see if it different (and if so, why). |
I've written down the steps I had to follow to get the LXC build to work on Ubuntu 12.04: |
@laanwj Hm, what's wrong with doing it the way @devrandom suggests in his README, with these commands:
? Other than that, I don't see anything different in your gist relating to the build itself. Any idea what the difference might be? |
I've rebuilt the entire dependency chain in LXC and got the same result as above. So, seems deterministic. Edit: nothing is wrong with @devrandom's way, but I wanted to use the lxcbr0 device provided by Ubuntu itself instead of creating a new one. This will not make a difference to the executable. |
65615a3 Gitian fixes for 0.9.0rc1 build (Wladimir J. van der Laan)
@gavinandresen I've merged this, but I'm not sure how to do proceed. Can/should we re-tag rc1 to make sure that people build with these gitian descriptors? |
Best to just consider rc1 dead, bump version numbers, and jump to rc2. |
Hm, let's wait a bit. I'm not getting deterministic builds for Linux. |
OK on waiting a bit; we should make sure we can cobble together builds that match before bumping version numbers. FYI: I'll be out Wed-Fri this week, headed down to Princeton and DC. |
Let's try to get it ready today then. I figured out the cause of non-determinism (OpenSSL embeds a timestamp, should use faketime during OpenSSL build). |
…rminism c799a19 build, qt: No longer need to set QT_RCC_TEST=1 for determinism (Hennadii Stepanov) Pull request description: The Qt Resource Compiler (rcc) output order relies on [`QHash`](https://doc.qt.io/qt-5/qhash.html): > This randomization of `QHash` is enabled by default. Even though programs should never depend on a particular `QHash` ordering, there may be situations where you temporarily need deterministic behavior, for example for debugging or regression testing. To disable the randomization, define the environment variable `QT_HASH_SEED` to have the value 0. Since #3620 we use `QT_RCC_TEST=1` to achieve a deterministic output. Since Qt 5.3.1 hash seeding is disabled for all of the bootstrapped tools, including rcc. Therefore, `QT_RCC_TEST=1` is no longer needed. See commit [5283a6c87beac5a43f612786fefd6e43f2c70bf6](qt/qtbase@5283a6c). ACKs for top commit: fanquake: ACK c799a19 Tree-SHA512: 9d116ac1e8c605ee3e8ed7f618586f0de85d8b06bbbb70fe8c298939ce203d2a7e97264a9afac037179993ab54c5f69a65ebb9ab27ca7f45acb963011bd45743
…or determinism c799a19 build, qt: No longer need to set QT_RCC_TEST=1 for determinism (Hennadii Stepanov) Pull request description: The Qt Resource Compiler (rcc) output order relies on [`QHash`](https://doc.qt.io/qt-5/qhash.html): > This randomization of `QHash` is enabled by default. Even though programs should never depend on a particular `QHash` ordering, there may be situations where you temporarily need deterministic behavior, for example for debugging or regression testing. To disable the randomization, define the environment variable `QT_HASH_SEED` to have the value 0. Since bitcoin#3620 we use `QT_RCC_TEST=1` to achieve a deterministic output. Since Qt 5.3.1 hash seeding is disabled for all of the bootstrapped tools, including rcc. Therefore, `QT_RCC_TEST=1` is no longer needed. See commit [5283a6c87beac5a43f612786fefd6e43f2c70bf6](qt/qtbase@5283a6c). ACKs for top commit: fanquake: ACK c799a19 Tree-SHA512: 9d116ac1e8c605ee3e8ed7f618586f0de85d8b06bbbb70fe8c298939ce203d2a7e97264a9afac037179993ab54c5f69a65ebb9ab27ca7f45acb963011bd45743
configure for libqrencode to avoid random errors about missing m4
directory
It is
notnecessary to rebuild dependencies after this commit.Fixes #3610 and #3612.