Hi!

Some time ago, I started to look into NetBSD's success after reaching
reproducibility for at least two ports. Being both a VAX enthusiast
and somebody running CI builds for NetBSD current, I used that
infrastructure to work on reproducibility for VAX, as a cross-build
target building on a Linux host. That was extended to build all
port/arch combinations listed in src/build.sh .  After a pile of
additional patches, all buildable port/arch combinations could be
build reproducible on Linux, a few patches later also on NetBSD. These
days, I'm chasing differences between Linux- and NetBSD-built release
artifacts.  TL;DR: There are two remaining generic issues and probably
a small number of remaining port-specific differences.

  1. Building install ISOs with `makefs` doesn't result in identical
     filesystem images, as the ISOs contain a large number of files
     _not_ listed in the manifest. These files retain their host's
     user/group identity.
     https://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=58196

  2. Some ports use CTF debugging data, which is (due to n unknown
     root cause) different when created with NetBSD compared to CTF
     data generated on a Linux host. (I suspect that data is sorted
     somewhere, but that sort isn't stable for elements considered
     "equal".)
     https://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=58197

A third problem was that my local tarballs of generated release
artifacts wasn't stable, too, but an update from GNU tar 1.34 -> 1.35
seems to have solved this issue.


Here is a table of current build results (NetBSD current as of a few
days ago, plus a small number of patches that still need to be
reviewed, submitted & merged):

mostly ok:
        If checked [x], there are no differences within the release
                        files, except the ISO images.
        If checked [!], there are known differences that need to be
                        checked. (May be CTF-related, though.)
CTF:
        If checked [!], this arch (aarch64, i386, amd64, earm) uses
                        non-reproducible CTF debug infos.
        If checked [-], this arch does not use CTF debug infos.
ISO:
        If checked [!], the ISO file contain differences (due to
                        ISO9660 owner/group), but the actual content
                        files are okay.
        If checked [-], this port does not build ISO images.
        If checked [x], this ISO(s) are bit-identical!
perfect:
        If checked [x], a tarball from result artifact created on a
                        Linux build host is identical to a tarball
                        created from NetBSD-built artifacts.
                        Not tested for many ports/archs as it was
                        pointless with GNU tar 1.34.

                        mst ok  CTF     ISO     perfect
acorn32-earmv4          [!]     [!]     [!]     [ ]
algor-mips64el          [x]     [-]     [-]     [x]
algor-mipsel            [!]     [-]     [ ]     [ ]             Minimal 
differences in algor/binary/kernel/netbsd-P5064.gz / 
algor/binary/sets/kern-P5064.tgz
alpha-alpha             [x]     [-]     [!]     [ ]
amd64-x86_64            [!]     [!]     [!]     [ ]
amiga-m68k              [x]     [-]     [!]     [ ]
amigappc-powerpc        [x]     [-]     [-]     [ ]
arc-mips64el            [ ]     [ ]     [ ]     [ ]             Fails to build: 
mipsel--netbsd-gcc: not found: No such file or directory (calling 32bit GCC 
while only 64bit is configured)
arc-mipsel              [x]     [-]     [!]     [ ]
atari-m68k              [x]     [-]     [!]     [ ]
bebox-powerpc           [x]     [-]     [-]     [ ]
cats-earmv4             [!]     [!]     [!]     [ ]
cesfic-m68k             [x]     [-]     [-]     [ ]
cobalt-mips64el         [x]     [-]     [!]     [ ]
cobalt-mipsel           [x]     [-]     [!]     [ ]
dreamcast-sh3el         [!]     [-]     [!]     [ ]             Minimal 
differences in dreamcast/binary/kernel/netbsd-GENERIC_MD{.bin,}.gz (like 
algor-mipsel)
emips-mipseb            [x]     [-]     [!]     [ ]
epoc32-earmv4           [!]     [!]     [!]     [ ]
evbarm-aarch64          [!]     [!]     [-]     [ ]
evbarm-aarch64eb        [!]     [!]     [-]     [ ]
evbarm-earmv4           [!]     [!]     [-]     [ ]
evbarm-earmv4eb         [!]     [!]     [-]     [ ]
evbarm-earmv5           [ ]     [ ]     [ ]     [ ]             Fails to build
evbarm-earmv5eb         [ ]     [ ]     [ ]     [ ]             Fails to build
evbarm-earmv5hf         [ ]     [ ]     [ ]     [ ]             Fails to build
evbarm-earmv5hfeb       [ ]     [ ]     [ ]     [ ]             Fails to build
evbarm-earmv6           [!]     [!]     [-]     [ ]
evbarm-earmv6eb         [!]     [!]     [-]     [ ]
evbarm-earmv6hf         [!]     [!]     [-]     [ ]
evbarm-earmv6hfeb       [!]     [!]     [-]     [ ]
evbarm-earmv7           [!]     [!]     [-]     [ ]
evbarm-earmv7eb         [!]     [!]     [-]     [ ]
evbarm-earmv7hf         [!]     [!]     [-]     [ ]
evbarm-earmv7hfeb       [!]     [!]     [-]     [ ]
evbcf-coldfire          [ ]     [ ]     [ ]     [ ]             Fails to build: 
checking target system type... Invalid configuration `m5407--netbsdelf': 
machine `m5407-' not recognized
evbmips-mips64eb        [x]     [-]     [!]     [ ]
evbmips-mips64el        [x]     [-]     [!]     [ ]
evbmips-mipseb          [!]     [-]     [-]     [ ]
evbmips-mipsel          [!]     [-]     [-]     [ ]
evbmips-mipsn64eb       [x]     [-]     [!]     [ ]
evbmips-mipsn64el       [x]     [-]     [!]     [ ]
evbppc-powerpc          [!]     [-]     [!]     [ ]
evbppc-powerpc64        [x]     [-]     [!]     [ ]
evbsh3-sh3eb            [x]     [-]     [!]     [ ]
evbsh3-sh3el            [x]     [-]     [!]     [ ]
ews4800mips-mipseb      [x]     [-]     [!]     [ ]
hp300-m68k              [x]     [-]     [!]     [ ]
hpcarm-earmv4           [!]     [!]     [-]     [ ]
hpcmips-mipsel          [x]     [-]     [!]     [ ]
hpcsh-sh3el             [x]     [-]     [!]     [ ]
hppa-hppa               [!]     [-]     [!]     [ ]
i386-i386               [!]     [!]     [!]     [ ]
ia64-ia64               [x]     [-]     [!]     [ ]
ibmnws-powerpc          [x]     [-]     [!]     [ ]
iyonix-earm             [!]     [!]     [-]     [ ]
landisk-sh3el           [x]     [-]     [-]     [ ]
luna68k-m68k            [x]     [-]     [!]     [ ]
mac68k-m68k             [x]     [-]     [!]     [ ]
macppc-powerpc          [x]     [-]     [!]     [ ]
macppc-powerpc64        [x]     [-]     [!]     [ ]
mipsco-mipseb           [x]     [-]     [!]     [ ]
mmeye-sh3eb             [x]     [-]     [!]     [ ]
mvme68k-m68k            [x]     [-]     [!]     [ ]
mvmeppc-powerpc         [x]     [-]     [!]     [ ]
netwinder-earmv4        [!]     [!]     [!]     [ ]
news68k-m68k            [x]     [-]     [!]     [ ]
newsmips-mipseb         [x]     [-]     [!]     [ ]
next68k-m68k            [x]     [-]     [!]     [ ]
ofppc-powerpc           [x]     [-]     [!]     [ ]
ofppc-powerpc64         [ ]     [ ]     [ ]     [ ]             Failed to build 
(fails to link 32 vs 64 bit code)
or1k-or1k               [ ]     [ ]     [ ]     [ ]             Failed to build 
(No rule to make target 
`/var/lib/laminar/run/netbsd-or1k-or1k/31/NetBSD-src/tools/gcc/../../external/gpl3/gcc.old/dist/gcc/config/or1k/or1k.md')
playstation2-mipsel     [ ]     [ ]     [ ]     [ ]             Failed to build 
(/root/NetBSD-src/usr.sbin/crash/obj/mips/mutex.h:50:2: error: unknown type 
name 'ipl_cookie_t')
pmax-mips64el           [x]     [-]     [!]     [ ]
pmax-mipsel             [x]     [-]     [!]     [ ]
prep-powerpc            [x]     [-]     [!]     [ ]
riscv-riscv32           [!]     [-]     [!]     [ ]             Diff in 
[base]/lib/libc.so.12.221 (.eh_frame_hdr)
riscv-riscv64           [!]     [-]     [!]     [ ]             Diff in 
base{,32}.tgz
rs6000-powerpc          [x]     [-]     [-]     [ ]
sandpoint-powerpc       [x]     [-]     [!]     [ ]
sbmips-mips64eb         [x]     [-]     [-]     [x]
sbmips-mips64el         [x]     [-]     [-]     [x]
sbmips-mipseb           [x]     [-]     [-]     [x]
sbmips-mipsel           [!]     [-]     [-]     [ ]             Diff in 
sbmips/binary/kernel/netbsd-GENERIC.gz, sbmips/binary/sets/kern-GENERIC.tgz
sgimips-mips64eb        [ ]     [ ]     [ ]     [ ]             Failed to 
build: nbmake[4]: don't know how to make netbsd-INSTALL64_IP2x.gz. Stop
sgimips-mipseb          [x]     [-]     [!]     [ ]
shark-earmv4            [!]     [!]     [-]     [ ]
sparc-sparc             [!]     [-]     [!]     [ ]             Diff in 
sparc/installation/bootfs/instfs.tgz, rootfs.tgz
sparc64-sparc64         [x]     [-]     [!]     [ ]
sun2-m68000             [!]     [-]     [!]     [ ]             Diff in 
sun2/binary/kernel/netbsd-RAMDISK.gz
sun3-m68k               [!]     [-]     [!]     [ ]             Diff in 
sun3/binary/kernel/netbsd-RAMDISK3X.gz, netbsd-RAMDISK.gz
vax-vax                 [x]     [-]     [!]     [ ]
virt68k-m68k            [x]     [x]     [-]     [x]
x68k-m68k               [x]     [-]     [!]     [ ]
zaurus-earm             [!]     [!]     [!]     [ ]             Diff in x11 
(date in docs)

Ignoring needed fixes for ISO and CTF generation, NetBSD is on a good
track reaching reproducible build results even on quite different
build operating systems! That's a nice outcome!

Thanks,
  Jan-Benedict
PS: Special thanks to Christos and other people who had a look at my
occasional GNATS PRs!

-- 

Attachment: signature.asc
Description: PGP signature

Reply via email to