build: add buildinfo files for reproducibility
authorPaul Spooren <mail@aparcar.org>
Thu, 13 Jun 2019 00:24:04 +0000 (02:24 +0200)
committerRISCi_ATOM <bob@bobcall.me>
Fri, 13 Sep 2019 20:05:57 +0000 (16:05 -0400)
generate feeds.buildinfo and version.buildinfo in build dir after
containing the feed revisions (via ./scripts/feeds list -sf) as well as
the current revision of buildroot (via ./scripts/getver.sh).

With this information it should be possible to reproduce any build,
especially the release builds.

Usage would be to move feeds.buildinfo to feeds.conf and git checkout the
revision hash of version.buildinfo.

Content of feeds.buildinfo would look similar to this:

    src-git routing https://git.openwrt.org/feed/routing.git^bf475d6
    src-git telephony https://git.openwrt.org/feed/telephony.git^470eb8e
    ...

Content of version.buildinfo would look similar to this:

    r10203+1-c12bd3a21b

Without the exact feed revision it is not possible to determine
installed package versions.

Also rename config.seed to config.buildinfo to follow the recommended
style of https://reproducible-builds.org/docs/recording/

Signed-off-by: Paul Spooren <mail@aparcar.org>
(cherry picked from commit 454021581f630d5d04afeb8ff6581c1bda295c87)

Makefile
config/Config-build.in
package/base-files/Makefile

index f94c6664f90fa7f0ea2db3364bd6c784ce2e736c..71e70d734b7d0c65eb483e920819f94a60607959 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -89,12 +89,18 @@ prereq: $(target/stamp-prereq) tmp/.prereq_packages
 checksum: FORCE
        $(call sha256sums,$(BIN_DIR),$(CONFIG_BUILDBOT))
 
+buildversion: FORCE
+       $(SCRIPT_DIR)/getver.sh > $(BIN_DIR)/version.buildinfo
+
+feedsversion: FORCE
+       $(SCRIPT_DIR)/feeds list -fs > $(BIN_DIR)/feeds.buildinfo
+
 diffconfig: FORCE
        mkdir -p $(BIN_DIR)
-       $(SCRIPT_DIR)/diffconfig.sh > $(BIN_DIR)/config.seed
+       $(SCRIPT_DIR)/diffconfig.sh > $(BIN_DIR)/config.buildinfo
 
 prepare: .config $(tools/stamp-compile) $(toolchain/stamp-compile)
-       $(_SINGLE)$(SUBMAKE) -r diffconfig
+       $(_SINGLE)$(SUBMAKE) -r diffconfig buildversion feedsversion
 
 world: prepare $(target/stamp-compile) $(package/stamp-compile) $(package/stamp-install) $(target/stamp-install) FORCE
        $(_SINGLE)$(SUBMAKE) -r package/index
index 4cda24826f006d763110da416f355be1f793b4de..7dd3382c2ef068471934b298c19cdfeee9a593d5 100644 (file)
@@ -93,7 +93,7 @@ menu "Global build settings"
                bool "Include build configuration in firmware" if DEVEL
                default n
                help
-                 If enabled, config.seed will be stored in /etc/build.config of firmware.
+                 If enabled, config.buildinfo will be stored in /etc/build.config of firmware.
 
        config COLLECT_KERNEL_DEBUG
                bool
index 4e383f31412aad47b4c1e29bceec7c158693e498..32025ee0f54a5bb7764d8ca21c3c0884d31fb2fe 100644 (file)
@@ -198,7 +198,7 @@ define Package/base-files/install
 
        $(if $(CONFIG_INCLUDE_CONFIG), \
                echo -e "# Build configuration for board $(BOARD)/$(SUBTARGET)/$(PROFILE)\n" >$(1)/etc/build.config; \
-               cat $(BIN_DIR)/config.seed >>$(1)/etc/build.config)
+               cat $(BIN_DIR)/config.buildinfo >>$(1)/etc/build.config)
 
        $(if $(CONFIG_CLEAN_IPKG),, \
                mkdir -p $(1)/etc/opkg; \