Comments (5)
Are these results with or without the recently-added YAWS_DETERMINISTIC_BUILD
environment variable set?
from yaws.
I see that with YAWS_DETERMINISTIC_BUILD
set we get diffoscope
hits like this in the yaws
script:
-yawsdir="/tmp/yrb1/lib/yaws"
-vardir="/tmp/yrb1/var"
+yawsdir="/tmp/yrb2/lib/yaws"
+vardir="/tmp/yrb2/var"
But are these, and other similar diffs in yaws.conf
and config files, really violations of reproducible builds? I see on the Reproducible Builds website that
By promising identical results are always generated from a given source, this allows multiple third parties to come to a consensus on a โcorrectโ result, highlighting any deviations as suspect and worthy of scrutiny.
Focusing on the "from a given source" part of the above sentence: IMO configuring two builds each with a different install prefix means you have two different sources. A better check IMO would be to see the differences between two builds from the same configuration. There, I think the only differences we'd see are the datetimes embedded in the yaws.pdf
and yaws.dvi
files, for example:
-CreationDate: "D:20220107104252-05'00'"
+CreationDate: "D:20220107105033-05'00'"
Creator: 'LaTeX with hyperref'
Keywords: ''
-ModDate: "D:20220107104252-05'00'"
+ModDate: "D:20220107105033-05'00'"
from yaws.
Are these results with or without the recently-added
YAWS_DETERMINISTIC_BUILD
environment variable set?
These are the results without it set. I missed that this was pushed recently,
even though it is current HEAD on master. Sorry.
Focusing on the "from a given source" part of the above sentence: IMO configuring two builds each with a different install prefix means you have two different sources. A better check IMO would be to see the differences between two builds from the same configuration.
I can agree with this. Using DESTDIR this will not be an issue.
I think the only differences we'd see are the datetimes embedded in the yaws.pdf (...)
The PR #447 documents reproducible builds for YAWS and also makes
yaws.ps generation deterministic if SOURCE_DATE_EPOCH is set.
Generating yaws.pdf is done with pdflatex which already uses
SOURCE_DATE_EPOCH.
from yaws.
After further investigation this needs to be reopened.
Building in separate source directories uncovered some issues
that breaks reproducible builds.
The following build method was used, copy a pristine yaws repo
to another path, build, and install, like so:
$ export YAWS_DETERMINISTIC_BUILD=true
$ export SOURCE_DATE_EPOCH=$(date +%s)
$ cd yaws
$ git clean -fdxq
$ cd ..
$ cp -a yaws yaws2
# first build
$ cd yaws
$ autoreconf -fi
$ ./configure --prefix=/usr
$ make all doc apps
$ make DESTDIR=/tmp/yaws1 install
# second build
$ cd ../yaws2
$ autoreconf -fi
$ ./configure --prefix=/usr
$ make all doc apps
$ make DESTDIR=/tmp/yaws2 install
Running diffoscope /tmp/yaws1 /tmp/yaws2
uncovered
that several things were not built deterministically:
- Build environment paths included in BEAM files
- SHELL taken from build environment and used in Makefiles
- Build environment paths included in Makefiles
- mime_types.erl used build environment path in include
The PR #448 solves these things.
However more work is needed.
The following files are not built deterministically, and I don't
quite understand why not.
examples/ebin/advanced_echo_callback.beam
examples/ebin/authmod_gssapi.beam
examples/ebin/basic_echo_callback_extended.beam
examples/ebin/server_sent_events.beam
It might be something in the LocT
, Local Functions, section
of the BEAM file. More investigation is needed.
For details and status of reproducible builds of the yaws Debian
package see the reproducible builds CI page. [0]
[0] https://tests.reproducible-builds.org/debian/rb-pkg/unstable/amd64/yaws.html
from yaws.
The following files are not built deterministically, and I don't quite understand why not.
examples/ebin/advanced_echo_callback.beam examples/ebin/authmod_gssapi.beam examples/ebin/basic_echo_callback_extended.beam examples/ebin/server_sent_events.beam
These files differ because +debug_info is used.
Removing +debug_info when building the examples
if YAWS_DETERMINISTIC_BUILD is set resolves it.
from yaws.
Related Issues (20)
- tlsv1.3 cipher selection HOT 3
- Yaws assumes `error_logger` process always exists and it is a gen_event HOT 7
- JSON-RPC payloads don't need urldecode step HOT 1
- Failed to compile 2.1.1 with Erl22, but 2.1.0 worked HOT 1
- Error on launch application Yaws HOT 4
- Crash Yaws after running HOT 2
- when reconfiguring, no check for changed appmods is done HOT 3
- yaws in NixOS 22.05 for aarch64 gives error during system build HOT 2
- Fail when make install and deterministic build is enabled HOT 3
- build breaks with OTP 27 HOT 2
- Error on building Yaws on Manjaro Linux on Erlang OTP-27 HOT 1
- failed to install qt5
- Do not make fatal inaccessible log file HOT 9
- Can't start Yaws web server on Ubuntu 22 HOT 2
- yaws_config.erl:3563:20: file:pid2name/1 is deprecated and will be removed in OTP 27 HOT 2
- Check that Basic authentication user doesn't contain control characters HOT 1
- Add CI tests for OTP master and maint branches
- yaws_compile_SUITE compile_www_scripts case fails on OTP 27.0-rc1
- Create GitHub pages site for e.g. docs
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. ๐๐๐
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google โค๏ธ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from yaws.