ロケール(Locales)
ビルドシステムのロケールがビルド結果に影響する場合があります。 開発者にとって使用言語に応じたエラーメッセージを確認できることは重要です。 ツールが使用言語(ロケール)に応じた出力をする場合、再現性のあるビルドにとって問題になる場合があります。
ロケールにはさまざまな側面があります(詳しくは GNU libc の locale(1) を参照)。 再現性のあるビルドにとって最も重要な側面を考えてみましょう。
日時の書式
さまざまな日時の書式化関数は、ロケールに応じた出力をするようになっています。
POSIX に準拠したシステムの書式化は、環境変数 LC_CTIME
に依存しています。
これは環境変数 LC_ALL
で上書きできます。
ビルドシステムでは LC_ALL
を使うほうがいいでしょう。
システムの timezone と、環境変数 TZ
も書式化関数の出力に影響します。
文字の照合順序
一般的なソート関数は環境変数 LC_COLLATE
に依存しています。
これは環境変数 LC_ALL
で上書きできます。
ロケールによっては思いもよらない結果になるでしょう。
sort
コマンドでロケールを fr_FR
にすると、大文字小文字を無視します。
ロケールを C
にすると、文字に対応するバイト値(ASCII コード)で並び替えます(どんな環境でも使用できるロケールです)。
既定の文字エンコーディング
システムの既定の文字エンコーディングはさまざまなツールの入出力に影響します。
文字エンコーディングは環境変数 LC_CTYPE
で指定します。
これは環境変数 LC_ALL
で上書きできます。
例えば、lynx
で HTML をテキストに変換するときは次のようになります。
疑似ロケール C.UTF-8
を指定すると、出力の文字エンコーディングは常に UTF-8 になります。
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