Reproducible builds in Debian and everywhere Lunar - - PowerPoint PPT Presentation

reproducible builds in debian and everywhere
SMART_READER_LITE
LIVE PREVIEW

Reproducible builds in Debian and everywhere Lunar - - PowerPoint PPT Presentation

Reproducible builds in Debian and everywhere Lunar lunar@debian.org Libre Software Meeting 2015-06-07 Lunar (Debian) Reproducible builds LSM2015 1 / 126 What? Lunar (Debian) Reproducible builds LSM2015 2 / 126 What are reproducible


slide-1
SLIDE 1

Reproducible builds in Debian and everywhere

Lunar lunar@debian.org Libre Software Meeting

2015-06-07

Lunar (Debian) Reproducible builds LSM2015 1 / 126

slide-2
SLIDE 2

What?

Lunar (Debian) Reproducible builds LSM2015 2 / 126

slide-3
SLIDE 3

What are reproducible builds? “reproducible builds” enable anyone to reproduce identical binary packages from a given source

Lunar (Debian) Reproducible builds LSM2015 3 / 126

slide-4
SLIDE 4

Trusting a build?

source binary

build

free software

freedom to study freedom to run

can be verified can be used

could I get a proof?

Lunar (Debian) Reproducible builds LSM2015 4 / 126

slide-5
SLIDE 5

Trusting a build?

source binary

build

free software

freedom to study freedom to run

can be verified can be used

could I get a proof?

Lunar (Debian) Reproducible builds LSM2015 4 / 126

slide-6
SLIDE 6

Trusting a build?

source binary

build

free software

freedom to study freedom to run

can be verified can be used

could I get a proof?

Lunar (Debian) Reproducible builds LSM2015 4 / 126

slide-7
SLIDE 7

Trusting a build?

source binary

build

free software

freedom to study freedom to run

can be verified can be used

could I get a proof?

Lunar (Debian) Reproducible builds LSM2015 4 / 126

slide-8
SLIDE 8

Why?

Lunar (Debian) Reproducible builds LSM2015 5 / 126

slide-9
SLIDE 9

Why?

Reproducible builds allow for independent verifications that a binary matches what the source intended to produce. … and other nice things.

Lunar (Debian) Reproducible builds LSM2015 6 / 126

slide-10
SLIDE 10

But I’m the developer!

“I know what’s in the binary because I compiled it myself!” “I’m an upstanding, careful, and responsible individual!” “Why should I have to worry about hypothetical risks about the contents of my binaries?”

Lunar (Debian) Reproducible builds LSM2015 7 / 126

slide-11
SLIDE 11

No kidding

At a CIA conference in 2012: Source : The Intercept, 2015-03-10

Lunar (Debian) Reproducible builds LSM2015 8 / 126

slide-12
SLIDE 12

Unpleasant thoughts

We think of software development as a fundamentally benign activity.

◮ “I’m not that interesting.”

Users can be targeted through developers Known successful attacks against infrastructure used by Linux (2003), FreeBSD (2013)

Lunar (Debian) Reproducible builds LSM2015 9 / 126

slide-13
SLIDE 13

Strong motivations

Compromise one computer to get:

◮ Hundreds of millions of other computers? ◮ Every bank account in the world? ◮ Every Windows computer in the world? ◮ Every Linux server in the world?

Compromise one computer is worth:

◮ $100k USD? (Market price of remote 0day) ◮ $100M USD? (Censorship budget of Iran per year) ◮ $4B USD? (Bitcoin market cap) Lunar (Debian) Reproducible builds LSM2015 10 / 126

slide-14
SLIDE 14

How small can a backdoor be?

OpenSSH 3.0.2 (CVE-2002-0083) – exploitable security bug (privilege escalation: user can get root) { Channel *c;

  • if (id < 0 || id > channels_alloc) {

+ if (id < 0 || id >= channels_alloc) { log("channel_lookup: %d: bad id", id); return; }

Lunar (Debian) Reproducible builds LSM2015 11 / 126

slide-15
SLIDE 15

Result of fixing the bug (asm)

cmpl $0x0,0x8(%ebp) cmpl $0x0,0x8(%ebp) js 16 js 16 mov 0x4,%eax mov 0x4,%eax cmp %eax,0x8(%ebp) cmp %eax,0x8(%ebp) jle 30 jl 30 mov 0x8(%ebp),%eax mov 0x8(%ebp),%eax mov %eax,0x4(%esp) mov %eax,0x4(%esp) movl $0x4c,(%esp) movl $0x4c,(%esp) call 25 call 25

Lunar (Debian) Reproducible builds LSM2015 12 / 126

slide-16
SLIDE 16

Result of fixing the bug (asm)

cmpl $0x0,0x8(%ebp) cmpl $0x0,0x8(%ebp) js 16 js 16 mov 0x4,%eax mov 0x4,%eax cmp %eax,0x8(%ebp) cmp %eax,0x8(%ebp) jle 30 jl 30 mov 0x8(%ebp),%eax mov 0x8(%ebp),%eax mov %eax,0x4(%esp) mov %eax,0x4(%esp) movl $0x4c,(%esp) movl $0x4c,(%esp) call 25 call 25

Lunar (Debian) Reproducible builds LSM2015 12 / 126

slide-17
SLIDE 17

Resulting difference in the binary

What’s the difference between if (a > b) and if (a >= b) in x86 assembly? assembly: JLE JL

  • pcode:

0x7E 0x7C binary: 01111110 01111100

A single bit!

Other corresponding opcode pairs also differ by just a single bit (JGE=0x7D, JG=0x7F)

Lunar (Debian) Reproducible builds LSM2015 13 / 126

slide-18
SLIDE 18

Result of fixing the bug (hex)

Vulnerable Fixed 55 89 e5 83 ec 28 83 7d 08 00 78 0a a1 04 00 00 00 39 45 08 7e 1a 8b 45 08 89 44 24 04 c7 04 24 4c 00 00 00 e8 fc ff ff ff b8 00 00 00 00 eb 35 55 89 e5 83 ec 28 83 7d 08 00 78 0a a1 04 00 00 00 39 45 08 7c 1a 8b 45 08 89 44 24 04 c7 04 24 4c 00 00 00 e8 fc ff ff ff b8 00 00 00 00 eb 35 Overall file size: approx. 500 kB

Lunar (Debian) Reproducible builds LSM2015 14 / 126

slide-19
SLIDE 19

Result of fixing the bug (hex)

Vulnerable Fixed 55 89 e5 83 ec 28 83 7d 08 00 78 0a a1 04 00 00 00 39 45 08 7e 1a 8b 45 08 89 44 24 04 c7 04 24 4c 00 00 00 e8 fc ff ff ff b8 00 00 00 00 eb 35 55 89 e5 83 ec 28 83 7d 08 00 78 0a a1 04 00 00 00 39 45 08 7c 1a 8b 45 08 89 44 24 04 c7 04 24 4c 00 00 00 e8 fc ff ff ff b8 00 00 00 00 eb 35 Overall file size: approx. 500 kB

Lunar (Debian) Reproducible builds LSM2015 14 / 126

slide-20
SLIDE 20

My first

Lunar (Debian) Reproducible builds LSM2015 15 / 126

slide-21
SLIDE 21

Not the first

Bitcoin’s motivation: Malicious modifications to binaries could result in irrevocable unwanted transfers of bitcoins Individual developers could be blamed for such modifications Users might not believe that a developer’s machine was hacked Reproducible builds therefore protect developers

Lunar (Debian) Reproducible builds LSM2015 16 / 126

slide-22
SLIDE 22

And nothing new, even

From: Martin Uecker <muecker@gmx.de> Cc: debian-devel@lists.debian.org Date: Sun, 23 Sep 2007 23:32:59 +0200

I think it would be really cool if the Debian policy required that packages could be rebuild bit-identical from source. At the moment, it is impossible to independly verify the integricity of binary packages.

https://lists.debian.org/debian-devel/2007/09/msg00746.html

Lunar (Debian) Reproducible builds LSM2015 17 / 126

slide-23
SLIDE 23

Why Debian?

Debian is the largest collection of free software More than 21,000 source packages “Our priorities are our users and free software”

Lunar (Debian) Reproducible builds LSM2015 18 / 126

slide-24
SLIDE 24

How?

Lunar (Debian) Reproducible builds LSM2015 19 / 126

slide-25
SLIDE 25

How to achieve reproducibility?

Determine the build environment Reproduce the build environment Eliminate unneeded variations

Lunar (Debian) Reproducible builds LSM2015 20 / 126

slide-26
SLIDE 26

How to

Handle the build environment

Lunar (Debian) Reproducible builds LSM2015 21 / 126

slide-27
SLIDE 27

Solution 1: rebuild the environment

Scripts will rebuild the environment from sources URL and checksum of source tarballs are recorded … or go crazy and check-in everything in the VCS Approach used by Coreboot, OpenWrt, Bazel

Lunar (Debian) Reproducible builds LSM2015 22 / 126

slide-28
SLIDE 28

Solution 1: rebuild the environment

Bonus: changes in the toolchain can be reviewed, merged, bisected, etc. just like other changes in the code.

Lunar (Debian) Reproducible builds LSM2015 23 / 126

slide-29
SLIDE 29

Solution 2: system images and packages

Use a virtual machine or container Base install of a common distribution Follow-up installation script Tools: Gitian (Bitcoin, Tor Browser), rbm (Tor Messenger)

Lunar (Debian) Reproducible builds LSM2015 24 / 126

slide-30
SLIDE 30

Solution 2: system images and packages

Downsides: if you use packages, you need to stick to stable distributions and hope no security fixes will affect the build. Or you do mix it with solution 1.

Lunar (Debian) Reproducible builds LSM2015 25 / 126

slide-31
SLIDE 31

Solution 3: record and replay

In Debian, a new control file *.buildinfo will record: Versions of build dependencies

◮ … and their dependencies

Checksum of the source package. Checksums of the binary packages.

Lunar (Debian) Reproducible builds LSM2015 26 / 126

slide-32
SLIDE 32

Example .buildinfo

Format: 1.9 Build-Architecture: amd64 Source: txtorcon Binary: python-txtorcon Architecture: all Version: 0.11.0-1 Build-Path: /usr/src/debian/txtorcon-0.11.0-1 Checksums-Sha256: a26549d9…7b 125910 python-txtorcon_0.11.0-1_all.deb 28f6bcbe…69 2039 txtorcon_0.11.0-1.dsc Build-Environment: base-files (= 8), base-passwd (= 3.5.37), bash (= 4.3-11+b1), …

Lunar (Debian) Reproducible builds LSM2015 27 / 126

slide-33
SLIDE 33

snapshot.debian.org

snapshot.debian.org archives every state of the Debian archive. 2015-05-25: 29 terabytes of data in 17 million files.

Lunar (Debian) Reproducible builds LSM2015 28 / 126

slide-34
SLIDE 34

srebuild

Thin wrapper around sbuild Determines the base release Installs packages listed in the *.buildinfo file Starts the build Status: proof-of-concept in #774415

Lunar (Debian) Reproducible builds LSM2015 29 / 126

slide-35
SLIDE 35

How to

Eliminate unneeded variations

Lunar (Debian) Reproducible builds LSM2015 30 / 126

slide-36
SLIDE 36

General approach

Gitian (Bitcoin, Tor Browser):

◮ Use a VM: same kernel, same user, same build path, … ◮ libfaketime

Debian:

◮ Fix the tools ◮ Fix the build systems ◮ Work-arounds as last resort Lunar (Debian) Reproducible builds LSM2015 31 / 126

slide-37
SLIDE 37

Investigating packages

diff OpenSUSE build-compare debbindiff

Lunar (Debian) Reproducible builds LSM2015 32 / 126

slide-38
SLIDE 38

debbindiff

Examines differences in depth Outputs HTML or plain text showing the differences Recursively unpack archives Seeks human readability:

◮ uncompress PDF ◮ disassemble binaries, ◮ unpack Gettext files, ◮ … easy to extend to new file formats

Falls back to binary comparison

Lunar (Debian) Reproducible builds LSM2015 33 / 126

slide-39
SLIDE 39

Test

(and test again)

Lunar (Debian) Reproducible builds LSM2015 34 / 126

slide-40
SLIDE 40

Finding variations

Build the package Rebuild the package Compare the results

Lunar (Debian) Reproducible builds LSM2015 35 / 126

slide-41
SLIDE 41

reproducible.debian.net

Continuous test system driven by Jenkins Bad ass hardware sponsored by ProfitBricks Tests about 1300 source packages each day on average Results are visible on a website Recent additions: Coreboot and OpenWrt

Lunar (Debian) Reproducible builds LSM2015 36 / 126

slide-42
SLIDE 42

Variations for Debian packages

The second build differs by: time timezone file ordering process ordering cores used for the build

Lunar (Debian) Reproducible builds LSM2015 37 / 126

slide-43
SLIDE 43

Variations for Debian packages

hostname, domainname username, uid, gid umask language (LANG) and locale (LC_ALL) kernel version (using linux64 --uname-2.6) PATH

Lunar (Debian) Reproducible builds LSM2015 38 / 126

slide-44
SLIDE 44

Still the same for now

date (but we cheat with timezone) /proc/cpuinfo rebuilds on different filesystems (currently tmpfs only) Are we forgetting something?

Lunar (Debian) Reproducible builds LSM2015 39 / 126

slide-45
SLIDE 45

Findings

Lunar (Debian) Reproducible builds LSM2015 40 / 126

slide-46
SLIDE 46

Identified issues

Timestamps (recording current time) File order (Pseudo-)randomness:

◮ Temporary file paths ◮ UUID ◮ Protection against complexity attacks Lunar (Debian) Reproducible builds LSM2015 41 / 126

slide-47
SLIDE 47

Identified issues (cont.)

CPU and memory related:

◮ Code optimizations for current CPU class ◮ Recording of memory addresses

Build-path Others, eg. locale settings

Lunar (Debian) Reproducible builds LSM2015 42 / 126

slide-48
SLIDE 48

Identified issues (cont.)

Examples

Timestamps added by build systems

Lunar (Debian) Reproducible builds LSM2015 43 / 126

slide-49
SLIDE 49

Timestamps in gzip headers

Lunar (Debian) Reproducible builds LSM2015 44 / 126

slide-50
SLIDE 50

Timestamps written by Maven

Lunar (Debian) Reproducible builds LSM2015 45 / 126

slide-51
SLIDE 51

Timestamps in generated Makefiles

Lunar (Debian) Reproducible builds LSM2015 46 / 126

slide-52
SLIDE 52

Timestamps in header files

Lunar (Debian) Reproducible builds LSM2015 47 / 126

slide-53
SLIDE 53

Timestamps written by PyQt4

Lunar (Debian) Reproducible builds LSM2015 48 / 126

slide-54
SLIDE 54

Timestamps written by Erlang compiler

Lunar (Debian) Reproducible builds LSM2015 49 / 126

slide-55
SLIDE 55

Timestamps in PE binaries

Windows, UEFI, Mono…

Lunar (Debian) Reproducible builds LSM2015 50 / 126

slide-56
SLIDE 56

Timestamps in ADA library information

Lunar (Debian) Reproducible builds LSM2015 51 / 126

slide-57
SLIDE 57

Timestamps in Ruby gemspec files

Lunar (Debian) Reproducible builds LSM2015 52 / 126

slide-58
SLIDE 58

Timestamps in PHP registry

Lunar (Debian) Reproducible builds LSM2015 53 / 126

slide-59
SLIDE 59

Timestamps by a template engine

Lunar (Debian) Reproducible builds LSM2015 54 / 126

slide-60
SLIDE 60

Timestamps in Python version

Lunar (Debian) Reproducible builds LSM2015 55 / 126

slide-61
SLIDE 61

Identified issues (cont.)

Examples

Archives

Lunar (Debian) Reproducible builds LSM2015 56 / 126

slide-62
SLIDE 62

Timestamps in static libraries

Lunar (Debian) Reproducible builds LSM2015 57 / 126

slide-63
SLIDE 63

Timestamps in static libraries (cont.)

Lunar (Debian) Reproducible builds LSM2015 58 / 126

slide-64
SLIDE 64

Timestamps in ZIP archives

Lunar (Debian) Reproducible builds LSM2015 59 / 126

slide-65
SLIDE 65

Timestamps in Java jar

They are actually ZIP archives.

Lunar (Debian) Reproducible builds LSM2015 60 / 126

slide-66
SLIDE 66

Timestamps in tarballs

Lunar (Debian) Reproducible builds LSM2015 61 / 126

slide-67
SLIDE 67

Users and groups in tarballs

Lunar (Debian) Reproducible builds LSM2015 62 / 126

slide-68
SLIDE 68

Random order in tarballs

Lunar (Debian) Reproducible builds LSM2015 63 / 126

slide-69
SLIDE 69

Identified issues (cont.)

Examples

Timestamps in documentation

Lunar (Debian) Reproducible builds LSM2015 64 / 126

slide-70
SLIDE 70

Timestamps written by Doxygen

Lunar (Debian) Reproducible builds LSM2015 65 / 126

slide-71
SLIDE 71

Timestamps written by docbook-to-man

Lunar (Debian) Reproducible builds LSM2015 66 / 126

slide-72
SLIDE 72

Timestamps written by Groovydoc

Lunar (Debian) Reproducible builds LSM2015 67 / 126

slide-73
SLIDE 73

Timestamps written by Epydoc

Lunar (Debian) Reproducible builds LSM2015 68 / 126

slide-74
SLIDE 74

Timestamps written by Sphinx

Lunar (Debian) Reproducible builds LSM2015 69 / 126

slide-75
SLIDE 75

Timestamps written by Ghostscript

Lunar (Debian) Reproducible builds LSM2015 70 / 126

slide-76
SLIDE 76

Timestamps written by LaTeX

Lunar (Debian) Reproducible builds LSM2015 71 / 126

slide-77
SLIDE 77

Timestamps written by texi2html

Lunar (Debian) Reproducible builds LSM2015 72 / 126

slide-78
SLIDE 78

Timestamps written by texi2html (cont.)

Lunar (Debian) Reproducible builds LSM2015 73 / 126

slide-79
SLIDE 79

Timestamps written by help2man

Lunar (Debian) Reproducible builds LSM2015 74 / 126

slide-80
SLIDE 80

Timestamps written by GNU groff

Lunar (Debian) Reproducible builds LSM2015 75 / 126

slide-81
SLIDE 81

Timestamps written by Javadoc

Lunar (Debian) Reproducible builds LSM2015 76 / 126

slide-82
SLIDE 82

Timestamps written by man2html

Lunar (Debian) Reproducible builds LSM2015 77 / 126

slide-83
SLIDE 83

Timestamps in TeX output (.dvi)

Lunar (Debian) Reproducible builds LSM2015 78 / 126

slide-84
SLIDE 84

Identified issues (cont.)

Examples

“Compiled at/on/by”

Lunar (Debian) Reproducible builds LSM2015 79 / 126

slide-85
SLIDE 85

Build time via C preprocessor macros

Lunar (Debian) Reproducible builds LSM2015 80 / 126

slide-86
SLIDE 86

Build time via C preprocessor macros

Lunar (Debian) Reproducible builds LSM2015 81 / 126

slide-87
SLIDE 87

Build time recorded via Makefile

Lunar (Debian) Reproducible builds LSM2015 82 / 126

slide-88
SLIDE 88

Hostname recorded via ./configure

Lunar (Debian) Reproducible builds LSM2015 83 / 126

slide-89
SLIDE 89

Build time recorded via ./configure

Lunar (Debian) Reproducible builds LSM2015 84 / 126

slide-90
SLIDE 90

m4 macros for autoconf (build time)

Lunar (Debian) Reproducible builds LSM2015 85 / 126

slide-91
SLIDE 91

m4 macros for autoconf (username)

Lunar (Debian) Reproducible builds LSM2015 86 / 126

slide-92
SLIDE 92

m4 macros for autoconf (hostname)

Lunar (Debian) Reproducible builds LSM2015 87 / 126

slide-93
SLIDE 93

Recorded kernel version

Lunar (Debian) Reproducible builds LSM2015 88 / 126

slide-94
SLIDE 94

Bonus points for programmers

Lunar (Debian) Reproducible builds LSM2015 89 / 126

slide-95
SLIDE 95

Identified issues (cont.)

Examples

File ordering

Lunar (Debian) Reproducible builds LSM2015 90 / 126

slide-96
SLIDE 96

File ordering in python-support files

Lunar (Debian) Reproducible builds LSM2015 91 / 126

slide-97
SLIDE 97

Identified issues (cont.)

Examples

Randomness

Lunar (Debian) Reproducible builds LSM2015 92 / 126

slide-98
SLIDE 98

Random Perl hash order

See Algorithmic complexity attacks in perlsec(1).

Lunar (Debian) Reproducible builds LSM2015 93 / 126

slide-99
SLIDE 99

Random serial numbers in Ogg streams

Lunar (Debian) Reproducible builds LSM2015 94 / 126

slide-100
SLIDE 100

Random import order in Python code

Lunar (Debian) Reproducible builds LSM2015 95 / 126

slide-101
SLIDE 101

Random order in Python namespace files

Lunar (Debian) Reproducible builds LSM2015 96 / 126

slide-102
SLIDE 102

Temporary filenames in Ocaml libraries

Lunar (Debian) Reproducible builds LSM2015 97 / 126

slide-103
SLIDE 103

Identified issues (cont.)

Examples

Even more timestamps!

Lunar (Debian) Reproducible builds LSM2015 98 / 126

slide-104
SLIDE 104

Timestamp-dependent rebuilds

Lunar (Debian) Reproducible builds LSM2015 99 / 126

slide-105
SLIDE 105

Timezone gets recorded

Lunar (Debian) Reproducible builds LSM2015 100 / 126

slide-106
SLIDE 106

Timestamps in EPUB files

Lunar (Debian) Reproducible builds LSM2015 101 / 126

slide-107
SLIDE 107

Timestamps in PNG

Even images!

Lunar (Debian) Reproducible builds LSM2015 102 / 126

slide-108
SLIDE 108

Timestamps in TrueType font files

And fonts!

Lunar (Debian) Reproducible builds LSM2015 103 / 126

slide-109
SLIDE 109

You think those were enough issues?

Lunar (Debian) Reproducible builds LSM2015 104 / 126

slide-110
SLIDE 110

Default changes with locale

Lunar (Debian) Reproducible builds LSM2015 105 / 126

slide-111
SLIDE 111

Not illustrated

Build path getting recorded Environment variables (e.g. PATH) File permissions inconsistency Cryptographic signatures And even more…

Lunar (Debian) Reproducible builds LSM2015 106 / 126

slide-112
SLIDE 112

Fixes

Lunar (Debian) Reproducible builds LSM2015 107 / 126

slide-113
SLIDE 113

Fixing timestamps

Replace with a precise reference to the code:

◮ Actual version number ◮ Git commit hash or other VCS reference

Or use a known date (latest modification on the code) Implement support for SOURCE_DATE_EPOCH

Lunar (Debian) Reproducible builds LSM2015 108 / 126

slide-114
SLIDE 114

Fixing timezone related issues

Use UTC!

Lunar (Debian) Reproducible builds LSM2015 109 / 126

slide-115
SLIDE 115

Fixing file order variations

Sort! Be beware of the locale!

Lunar (Debian) Reproducible builds LSM2015 110 / 126

slide-116
SLIDE 116

Example: creating tarballs

Before:

◮ tar -cf archive.tar src

After:

◮ find src -print0 | LC_ALL=C sort -z |

tar --null -T - --no-recursion -cf archive.tar

Lunar (Debian) Reproducible builds LSM2015 111 / 126

slide-117
SLIDE 117

Fixing random key ordering

Sort! for my $limit (sort keys(%{$pat})) { $Data::Dumper::Sortkeys = 1 for key in sorted(d.keys()):

Lunar (Debian) Reproducible builds LSM2015 112 / 126

slide-118
SLIDE 118

Fixing build path

Don’t record build path Workaround: perform rebuild in the same path as the

  • riginal build

Lunar (Debian) Reproducible builds LSM2015 113 / 126

slide-119
SLIDE 119

Handling cryptographic signatures

Make the signature part of your release process:

1

Do a first (reproducible) build

2

Sign it

3

Ship the signature with the source code

4

Just copy the signature on next builds Example patch: #725803

Lunar (Debian) Reproducible builds LSM2015 114 / 126

slide-120
SLIDE 120
  • Misc. fixes

Don’t record kernel, CPU type, login… No added value Privacy issue

Lunar (Debian) Reproducible builds LSM2015 115 / 126

slide-121
SLIDE 121

Cleanup via post-processing

re-dzip.sh pyc-timestamp.sh strip-nondeterminism

Lunar (Debian) Reproducible builds LSM2015 116 / 126

slide-122
SLIDE 122

strip-nondeterminism

Normalize various file formats Currently handles:

◮ ar archives (.a) ◮ gzip ◮ Java jar ◮ Javadoc HTML ◮ Maven pom.properties ◮ PNG ◮ ZIP archives

Written in Perl (like dpkg-dev)

Lunar (Debian) Reproducible builds LSM2015 117 / 126

slide-123
SLIDE 123

How are we doing in Debian?

Lunar (Debian) Reproducible builds LSM2015 118 / 126

slide-124
SLIDE 124

For those in the back

81%

More than 18,000 source packages! (in our test environment)

Lunar (Debian) Reproducible builds LSM2015 119 / 126

slide-125
SLIDE 125

For those in the back

81%

More than 18,000 source packages! (in our test environment)

Lunar (Debian) Reproducible builds LSM2015 119 / 126

slide-126
SLIDE 126

Still experimenting

It’s not yet possible to reproduce builds of official Debian packages We are refining changes to the toolchain in an experimental repository Next steps:

◮ Allow .buildinfo in the archive (#763822) ◮ Get changes to dpkg merged ◮ Ship .buildinfo to the mirrors ◮ Finish the srebuild srcript (#774415) Lunar (Debian) Reproducible builds LSM2015 120 / 126

slide-127
SLIDE 127

Other distributions

Fedora http://securityblog.redhat.com/2013/09/18/ reproducible-builds-for-fedora/ OpenSUSE build-compare https://build.opensuse.org/package/show/openSUSE: Factory/build-compare NixOS http://lists.science.uu.nl/pipermail/nix-dev/2013-June/ 011357.html FreeBSD https://wiki.freebsd.org/ReproducibleBuilds and https://wiki.freebsd.org/PortsReproducibleBuilds OpenWrt https://lists.openwrt.org/pipermail/openwrt-devel/ 2015-March/032136.html

Lunar (Debian) Reproducible builds LSM2015 121 / 126

slide-128
SLIDE 128

Reproducible Fedora?

No known activity after the initial blog post. Fedora is leading developments for key components. Can we help reproducible Fedora?

Lunar (Debian) Reproducible builds LSM2015 122 / 126

slide-129
SLIDE 129

Everywhere?

Please talk to us!

Lunar (Debian) Reproducible builds LSM2015 123 / 126

slide-130
SLIDE 130

Everywhere!

Reproducible builds need to become the norm. We can help with continuous testing. Debian wiki wants to be useful to everyone.

Lunar (Debian) Reproducible builds LSM2015 124 / 126

slide-131
SLIDE 131

Thanks

Asheesh Laroia, Holger Levsen, Reiner Herrmann, Mattia Rizzolo, Daniel Kahn Gilmor, and so many

  • thers…

Mike Perry and Seth Schoen for their 31C3 talk Linux Foundation for sponsoring Holger and myself ProfitBricks for sponsoring jenkins.debian.net Globalsign for sponsoring X.509 certificates Designers of Tango icons Everyone who helped!

Lunar (Debian) Reproducible builds LSM2015 125 / 126

slide-132
SLIDE 132

Questions? Comments?

?

https://wiki.debian.org/ReproducibleBuilds https://reproducible.debian.net/ #debian-reproducible on OFTC Lunar 0603 CCFD 9186 5C17 E88D 4C79 8382 C95C 2902 3DF9

Lunar (Debian) Reproducible builds LSM2015 126 / 126