mirror of
https://github.com/veracrypt/VeraCrypt.git
synced 2026-06-10 06:46:59 -05:00
Build: extend reproducible packaging to RPM
Run the install(SCRIPT) mtime/mode clamp for every CPack generator instead of only the DEB branch, so the RPM payload staging tree is normalised the same way before rpmbuild sees it. Payload file timestamps and permissions are therefore reproducible on any rpm version. For the RPM header, set the spec %defines that pin BuildTime to SOURCE_DATE_EPOCH (use_source_date_epoch_as_buildtime, which consumes the exported environment variable) and BuildHost to a fixed value (_buildhost), and clamp payload mtimes through both the legacy clamp_mtime_to_source_date_epoch macro and its modern build_mtime_policy replacement. source_date_epoch_from_changelog is disabled so CPack's placeholder changelog date cannot hijack the epoch. These macros only exist on rpm >= 4.14 (buildtime/mtime) and >= 4.18 (buildhost). To make the two header fields reproducible on older rpm as well (CentOS/RHEL 7, rpm < 4.14), add a small libc-interposition shim (Build/Tools/repro_buildstamp.c) that pins time() and the build hostname, LD_PRELOAD'ed onto cpack's rpmbuild child by the RPM packaging wrappers. The shim calls the real uname() and overwrites only nodename, leaving architecture detection intact, never overrides monotonic clocks, and defers to the real time() when SOURCE_DATE_EPOCH is unset so a missing epoch is a no-op rather than a frozen 1970 clock. It is enabled only after it compiles and loads cleanly; otherwise packaging proceeds without it, because a preload that fails to load would emit an ld.so error that rpm's check-buildroot script turns into a fatal %install error. Derive and export SOURCE_DATE_EPOCH in the rpm and openSUSE wrappers the same way the deb wrapper already does, mark both wrappers executable, and note in the README that .deb and .rpm packages are reproducible including on older rpm.
This commit is contained in:
@@ -127,6 +127,8 @@ reproduce official release artifacts from a git checkout, set
|
||||
VeraCrypt sources tracked in another git checkout are treated the same way and
|
||||
use that checkout's HEAD timestamp.
|
||||
|
||||
Both the generated `.deb` and `.rpm` packages are reproducible, including on older rpm (e.g. CentOS/RHEL 7) that lacks the `SOURCE_DATE_EPOCH`/`_buildhost` build macros.
|
||||
|
||||
By default, a universal executable supporting both graphical and text user
|
||||
interface (through the switch --text) is built.
|
||||
On Linux, a console-only executable, which requires no GUI library, can be
|
||||
|
||||
Reference in New Issue
Block a user