Make gzip-1.2.4 and tar-1.12 not include timestamps

There is no way for gzip 1.2.4 and tar 1.12 to disable the inclusion of
timestamps into the tarball/gzip, which creates non-reproducible
tarballs and hence packages.

While it is theoretically possible to set the timestamps to unix time 0
using touch, in reality this is not possible because mes libc does not
support utime() which sets the timestamp of a file from userspace. So we
need to ignore it rather than (re)set it.
This commit is contained in:
fosslinux 2022-01-14 16:24:39 +11:00
parent 634ec99771
commit 016b9511d2
6 changed files with 71 additions and 2 deletions

View File

@ -1 +1 @@
304cead634e6766db915155d422049269f66b2ff34a20a7f20819a0c69193d33 /usr/bin/gzip
062e34d3f2d4bcb339ce3be80a1b6bc0ff805d70c8c13d9a6ad6e7a93914a1bf /usr/bin/gzip

View File

@ -0,0 +1,30 @@
/*
* SPDX-FileCopyrightText: 2022 fosslinux <fosslinux@aussies.space>
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#include <sys/stat.h>
#include <linux/syscall.h>
#include <linux/x86/syscall.h>
int _stat(const char *path, struct stat *buf) {
int rc = stat(path, buf);
if (rc == 0) {
buf->st_atime = 0;
buf->st_mtime = 0;
}
return rc;
}
int _lstat(const char *path, struct stat *buf) {
int rc = lstat(path, buf);
if (rc == 0) {
buf->st_atime = 0;
buf->st_mtime = 0;
}
return rc;
}
#define stat(a,b) _stat(a,b)
#define lstat(a,b) _lstat(a,b)

View File

@ -11,11 +11,18 @@ set -ex
mkdir build
cd build
catm gzip.c.new ../../files/stat_override.c gzip.c
cp gzip.c.new gzip.c
# Extract
ungz ../src/${pkg}.tar.gz
untar ../src/${pkg}.tar
cd ${pkg}
# Prepare
catm gzip.c.new ../../files/stat_override.c gzip.c
cp gzip.c.new gzip.c
# Compile
tcc -c -DNO_UTIME gzip.c
tcc -c bits.c

View File

@ -1 +1 @@
d4ac49a136cb18e47fa4be447657746b3620d6e5bc15daa0b825f44734945a7c /usr/bin/tar
3d67caa46470a7c1f3b00b8301977bc1093fab333943aabfd84afaa1bd77a609 /usr/bin/tar

View File

@ -0,0 +1,30 @@
/*
* SPDX-FileCopyrightText: 2022 fosslinux <fosslinux@aussies.space>
*
* SPDX-License-Identifier: GPL-2.0-or-later
*/
#include <sys/stat.h>
#include <linux/syscall.h>
#include <linux/x86/syscall.h>
int _stat(const char *path, struct stat *buf) {
int rc = stat(path, buf);
if (rc == 0) {
buf->st_atime = 0;
buf->st_mtime = 0;
}
return rc;
}
int _lstat(const char *path, struct stat *buf) {
int rc = lstat(path, buf);
if (rc == 0) {
buf->st_atime = 0;
buf->st_mtime = 0;
}
return rc;
}
#define stat(a,b) _stat(a,b)
#define lstat(a,b) _lstat(a,b)

View File

@ -18,6 +18,8 @@ untar ../src/${pkg}.tar
cd ${pkg}
cp ../../files/getdate_stub.c lib/getdate_stub.c
catm src/create.c.new ../../files/stat_override.c src/create.c
cp src/create.c.new src/create.c
# Compile