aboutsummaryrefslogtreecommitdiff
path: root/gnu/packages/patches/psm-repro.patch
blob: 543092900c015f7c27a1aa0c54efc71102ce4dda (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
From <https://github.com/bmwiedemann/psm/commit/98acae1a6f2c9b2e6014eac4070a817c9d0fd8a2>.

From 98acae1a6f2c9b2e6014eac4070a817c9d0fd8a2 Mon Sep 17 00:00:00 2001
From: "Bernhard M. Wiedemann" <bwiedemann@suse.de>
Date: Sun, 23 Jul 2017 07:02:28 +0200
Subject: [PATCH] Allow to override build date

in order to make builds reproducible.
See https://reproducible-builds.org/ for why this is good
and https://reproducible-builds.org/specs/source-date-epoch/
for the definition of this variable.

Also uses UTC to be independent of timezone settings.
---
 Makefile       | 2 +-
 ipath/Makefile | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/Makefile b/Makefile
index d79c4bd..99406ef 100644
--- a/Makefile
+++ b/Makefile
@@ -270,7 +270,7 @@ ${TARGLIB}.so.${MAJOR}: ${TARGLIB}.so.${MAJOR}.${MINOR}
 # file around.  Generate it such that the ident command can find it
 # and strings -a | grep InfiniPath does a reasonable job as well.
 ${TARGLIB}.so.${MAJOR}.${MINOR}: ${${TARGLIB}-objs}
-	date +'char psmi_infinipath_revision[] ="$$""Date: %F %R ${rpm_extra_description}InfiniPath $$";' > ${lib_build_dir}/_revision.c
+	date -u -d@$${SOURCE_DATE_EPOCH:-$$(date +%s)} +'char psmi_infinipath_revision[] ="$$""Date: %F %R ${rpm_extra_description}InfiniPath $$";' > ${lib_build_dir}/_revision.c
 	$(CC) -c $(BASECFLAGS) $(INCLUDES) _revision.c -o _revision.o
 	$(CC) $(LDFLAGS) -o $@ -Wl,-soname=${TARGLIB}.so.${MAJOR} -shared -Wl,--unique='*fastpath*' \
 		${${TARGLIB}-objs} _revision.o -L$(build_dir)/ipath $(LDLIBS)
diff --git a/ipath/Makefile b/ipath/Makefile
index 8c2cc6e..73abd6f 100644
--- a/ipath/Makefile
+++ b/ipath/Makefile
@@ -70,7 +70,7 @@ ${TARGLIB}.so.${MAJOR}: ${TARGLIB}.so.${MAJOR}.${MINOR}
 # file around.  Generate it such that the ident command can find it
 # and strings -a | grep InfiniPath does a reasonable job as well.
 ${TARGLIB}.so.${MAJOR}.${MINOR}: ${${TARGLIB}-objs}
-	date +'static __attribute__ ((unused)) char __psc_infinipath_revision[] ="$$""Date: %F %R ${rpm_extra_description}InfiniPath $$";' > _revision.c
+	date -u -d@$${SOURCE_DATE_EPOCH:-$$(date +%s)} +'static __attribute__ ((unused)) char __psc_infinipath_revision[] ="$$""Date: %F %R ${rpm_extra_description}InfiniPath $$";' > _revision.c
 	$(CC) -c $(BASECFLAGS) $(INCLUDES) _revision.c -o _revision.o
 	$(CC) -o $@ -Wl,-soname=${TARGLIB}.so.${MAJOR} -shared \
 		-Wl,--unique='*fastpath*' \
pe "linux-gnu") (passive-translator-xattr? file-name) (passive-translator-installed? file-name))) (define* (set-translator file-name command #:optional (mode #o600)) "Setup translator COMMAND on FILE-NAME." (unless (translated? file-name) (let ((dir (dirname file-name))) (unless (directory-exists? dir) (mkdir-p dir)) (unless (file-exists? file-name) (call-with-output-file file-name (lambda (port) (display file-name port) ;avoid hard-linking (chmod port mode))))) (catch 'system-error (lambda _ (setxattr file-name "gnu.translator" (string-join command "\0" 'suffix))) (lambda (key . args) (let ((errno (system-error-errno (cons key args)))) (format (current-error-port) "~a: ~a\n" (strerror errno) file-name) (format (current-error-port) "Ignoring...Good Luck!\n")))))) (define-syntax-rule (false-if-EEXIST exp) "Evaluate EXP but return #f if it raises to 'system-error with EEXIST." (catch 'system-error (lambda () exp) (lambda args (if (= EEXIST (system-error-errno args)) #f (apply throw args))))) (define* (set-hurd-device-translators #:optional (root "/")) "Make some of the device nodes needed on GNU/Hurd." (define (scope dir) (string-append root (if (string-suffix? "/" root) "" "/") dir)) (define scope-set-translator (match-lambda ((file-name command) (scope-set-translator (list file-name command #o600))) ((file-name command mode) (let ((mount-point (scope file-name))) (set-translator mount-point command mode))))) (define (mkdir* dir) (let ((dir (scope dir))) (unless (file-exists? dir) (mkdir-p dir)))) (define servers '(("servers/bus/pci" ("/hurd/pci-arbiter")) ("servers/crash-dump-core" ("/hurd/crash" "--dump-core")) ("servers/crash-kill" ("/hurd/crash" "--kill")) ("servers/crash-suspend" ("/hurd/crash" "--suspend")) ("servers/password" ("/hurd/password")) ("servers/socket/1" ("/hurd/pflocal")) ;; /servers/socket/2 and /26 are created by 'static-networking-service'. ;; XXX: Spawn pfinet without arguments on these nodes so that a DHCP ;; client has someone to talk to? ("proc" ("/hurd/procfs" "--stat-mode=444")))) (define devices `(("dev/full" ("/hurd/null" "--full") #o666) ("dev/null" ("/hurd/null") #o666) ("dev/random" ("/hurd/random" "--seed-file" "/var/lib/random-seed") #o644) ("dev/zero" ("/hurd/storeio" "--store-type=zero") #o666) ("dev/console" ("/hurd/term" "/dev/console" "device" "console")) ("dev/klog" ("/hurd/streamio" "kmsg")) ("dev/mem" ("/hurd/storeio" "--no-cache" "mem") #o660) ("dev/shm" ("/hurd/tmpfs" "--mode=1777" "50%") #o644) ("dev/time" ("/hurd/storeio" "--no-cache" "time") #o644) ("dev/vcs" ("/hurd/console")) ("dev/tty" ("/hurd/magic" "tty") #o666) ;; 'fd_to_filename' in libc expects it. ("dev/fd" ("/hurd/magic" "--directory" "fd") #o555) ("dev/rumpdisk" ("/hurd/rumpdisk") #o660) ("dev/netdde" ("/hurd/netdde") #o660) ("dev/eth0" ("/hurd/devnode" "--master-device=/dev/net" "eth0") #o660) ("dev/eth1" ("/hurd/devnode" "--master-device=/dev/net" "eth1") #o660) ;; Create a number of ttys; syslogd writes to tty12 by default. ;; FIXME: Creating /dev/tty12 leads the console client to switch to ;; tty12 when syslogd starts, which is confusing for users. Thus, do ;; not create tty12. ,@(map (lambda (n) (let ((n (number->string n))) `(,(string-append "dev/tty" n) ("/hurd/term" ,(string-append "/dev/tty" n) "hurdio" ,(string-append "/dev/vcs/" n "/console")) #o666))) (iota 11 1)) ,@(append-map (lambda (n) (let ((n (number->string n))) `((,(string-append "dev/ptyp" n) ("/hurd/term" ,(string-append "/dev/ptyp" n) "pty-master" ,(string-append "/dev/ttyp" n)) #o666) (,(string-append "dev/ttyp" n) ("/hurd/term" ,(string-append "/dev/ttyp" n) "pty-slave" ,(string-append "/dev/ptyp" n)) #o666)))) (iota 10 0)) ,@(append-map (lambda (n) (let* ((n (number->string n)) (disk (string-append "hd" n)) (drive (string-append "dev/" disk))) `((,drive ("/hurd/storeio" ,disk) #o600) ,@(map (lambda (p) (let ((p (number->string p))) `(,(string-append drive "s" p) ("/hurd/storeio" ,(string-append disk "s" p)) #o660))) (iota 4 1))))) (iota 4 0)) ,@(append-map (lambda (n) (let* ((n (number->string n)) (drive (string-append "dev/wd" n)) (disk (string-append "@/dev/disk:wd" n))) `((,drive ("/hurd/storeio" ,disk) #o600) ,@(map (lambda (p) (let ((p (number->string p))) `(,(string-append drive "s" p) ("/hurd/storeio" "--store-type=typed" ,(string-append "part:" p ":device:" disk)) #o660))) (iota 4 1))))) (iota 4 0)))) (for-each scope-set-translator servers) (mkdir* "dev/vcs/1") (mkdir* "dev/vcs/2") (when (file-exists? (scope "dev/console")) (rename-file (scope "dev/console") (scope "dev/console-"))) (for-each scope-set-translator devices) (false-if-EEXIST (symlink "/dev/random" (scope "dev/urandom"))) (false-if-EEXIST (symlink "/dev/fd/0" (scope "dev/stdin"))) (false-if-EEXIST (symlink "/dev/fd/1" (scope "dev/stdout"))) (false-if-EEXIST (symlink "/dev/fd/2" (scope "dev/stderr"))) (false-if-EEXIST (symlink "crash-dump-core" (scope "servers/crash"))) (false-if-EEXIST (symlink "/dev/rumpdisk" (scope "dev/disk"))) (false-if-EEXIST (symlink "/dev/netdde" (scope "dev/net"))) (false-if-EEXIST (symlink "/servers/socket/2" (scope "servers/socket/inet"))) (false-if-EEXIST (symlink "/servers/socket/26" (scope "servers/socket/inet6"))) ;; Make sure /etc/mtab is a symlink to /proc/mounts. (false-if-exception (delete-file (scope "etc/mtab"))) (mkdir* (scope "etc")) (symlink "/proc/mounts" (scope "etc/mtab"))) (define* (boot-hurd-system #:key (on-error 'debug)) "This procedure is meant to be called from an early RC script. Install the relevant passive translators on the first boot. Then, run system activation by using the kernel command-line options 'gnu.system' and 'gnu.load'; starting the Shepherd. XXX TODO: see linux-boot.scm:boot-system. XXX TODO: add proper file-system checking, mounting XXX TODO: move bits to (new?) (hurd?) (activation?) services XXX TODO: use Linux xattr/setxattr to remove (settrans in) /libexec/RUNSYSTEM " (display "Welcome, this is GNU's early boot Guile.\n") (display "Use 'gnu.repl' for an initrd REPL.\n\n") (call-with-error-handling (lambda () (let* ((args (command-line)) (system (find-long-option "gnu.system" args)) (to-load (find-long-option "gnu.load" args)) (profile (string-append system "/profile")) (bin (string-append profile "/bin")) (sbin (string-append profile "/bin"))) (setenv "PATH" (string-append bin ":" sbin)) (when (file-exists? "/var/run/shepherd/socket") (format #t "Removing stale shepherd socket...\n") (delete-file "/var/run/shepherd/socket")) (unless (file-exists? "/servers/startup") (format #t "Creating essential device nodes...\n") (make-hurd-device-nodes)) (let ((profile/hurd (readlink* (string-append profile "/hurd")))) (when (file-exists? "/hurd") (format #t "Removing stale /hurd link\n") (delete-file "/hurd")) (format #t "Linking /hurd from ~a...\n" profile/hurd) (symlink profile/hurd "/hurd")) (format #t "Setting-up essential translators...\n") (set-hurd-device-translators) (format #t "Starting pager...\n") (unless (zero? (system* "/hurd/mach-defpager")) (format #t "FAILED...Good luck!\n")) (cond ((member "gnu.repl" args) (format #t "Starting repl...\n") (start-repl)) (to-load (format #t "loading '~a'...\n" to-load) (primitive-load to-load) (format (current-error-port) "boot program '~a' terminated, rebooting~%" to-load) (sleep 2) (reboot)) (else (display "no boot file passed via 'gnu.load'\n") (display "entering a warm and cozy REPL\n") (start-repl))))) #:on-error on-error)) ;;; hurd-boot.scm ends here