ビルド環境を記録する(Recording the build environment)
エンドユーザーの使用するソフトウェアについて、開発者がバグを調査するときのために、ソフトウェアをビルドした方法を知る方法を提供するのが一般的になっています。
たとえば「このソフトウェアについて」のダイアログや、--version
フラグを指定して実行した場合の出力には、ビルド環境の情報が含まれているのです。
再現性のあるビルドにおいては、ビルド結果と無関係な ビルド環境 にするか、配布したソフトウェアと完全に同じ結果を生成できる内容にするか、のいずれかになります。
ビルド環境に関連する全ての情報は、開発プロセスの一部として定義したり、ビルドプロセスを実行しながら記録しなければなりません。
ファイル形式
記録した内容はルドしたソフトウェアそのものと分離したほうが、配布するときに簡単に分離できるので便利です。 ソフトウェア自体と無関係な部分を特定するのに役立ちます。
この分離したファイルを buildinfo
と呼びます。
ただし、配布用のファイル形式はエコシステムによって異なります。
Debian
Debian の builfinfo ファイルはテキストファイルです。 記述形式は control file format で、たいていの場合 OpenPGP による署名が必要です。 フィールドや設定値については、命名規則などと同じく Debian wiki の ReproducibleBuilds/BuildinfoFiles を参照してください。 具体例は buildinfo.debian.net で確認してください。
Arch Linux
Arch Linux のビルドツール makepkg
は、複数の <key> = <value>
を並べた .BUILDINFO
を生成します。
Debian と違ってこのファイル単独で署名し、配布することはありません。
しかしパッケージアーカイブには同梱されます(つまりパッケージ署名が適用されることになります)。
具体例は、最新の makepkg
でビルドした archlinux-keyring などを参照してください。
Tails
Tails は buildinfo ファイルを管理していませんが、Git リポジトリの vagrant ディレクトリ には同じバージョンの Tails を再ビルドするために必要な全ての情報が含まれています。
JVM
JVM エコシステムでは Maven レポジトリ(Maven Central や Google’s Android Repository など)でライブラリを公開、配布するのが一般的です。
Maven リポジトリに公開したアーティファクト(の公式ビルド)につて、ビルド環境を説明する buildinfo を提供することを推奨しています。 第三者評価を独立したリポジトリで共有できるからです。 具体的な方法については JVM を参照してください。
Introduction
Achieve deterministic builds
- SOURCE_DATE_EPOCH
- 確実なビルドシステム(Deterministic build systems)
- 揮発性のある入力データは消える場合がある(Volatile inputs can disappear)
- 入力データの順序を固定する(Stable order for inputs)
- 値を初期化する(Value initialization)
- バージョン情報(Version information)
- タイムスタンプ(Timestamps)
- タイムゾーン(Timezones)
- ロケール(Locales)
- アーカイブのメタデータ(Archive metadata)
- 出力データの順序を固定する(Stable order for outputs)
- 無作為性(Randomness)
- ビルド時のファイルシステムパス(Build path)
- システムイメージ(System images)
- JVM
Define a build environment
- ビルド環境に含む要素(What's in a build environment?)
- ビルド環境を記録する(Recording the build environment)
- ビルド環境の定義における戦略(Definition strategies)
- Proprietary operating systems
Distribute the environment
Verification
Specifications
Follow us on Twitter @ReproBuilds, Mastodon @reproducible_builds@fosstodon.org & Reddit and please consider making a donation. • Content licensed under CC BY-SA 4.0, style licensed under MIT. Templates and styles based on the Tor Styleguide. Logos and trademarks belong to their respective owners. • Patches welcome via our Git repository (instructions) or via our mailing list. • Full contact info