16

私は非常に規制された環境で働いており、製品を構築するたびに同じバイナリ入力を生成して同じソースコードを提供できる必要があります。現在、ビルドごとに変更される結果のバイナリに日付/時刻などを書き込まないようにパッチが適用された古いバージョンのg ++​​を使用していますが、g++4.7.2に更新したいと思います。誰かがパッチを知っているか、または2つの同一のソースコードを取得して同一のバイナリ出力を生成するために何を探す必要があるかについての提案がありますか?

4

3 に答える 3

16

Debian Reproducible buildsプロジェクトは、Debianパッケージをバイトごとに標準化しようとし、2016年にLinuxFoundationの助成金を受け取りました。

これにはコンパイル以上のものが含まれる場合がありますが、それを確認する必要があります。

また、@ Employedが言ったことに次の点を追加する、この記事を指摘しました。

  • ソースを固定フォルダ(例/tmp/build)に入れて処理します__FILE__
  • 、、: __DATE___ __TIME_____TIMESTAMP__
    • libfaketime:https ://github.com/wolfcw/libfaketime
    • それらのマクロをオーバーライドする-D
    • -Wdate-timeまたは: 、またはが使用されている-Werror=date-time場合は、警告または失敗します。Linuxカーネル4.4はデフォルトでそれを使用します。__TIME____DATE____TIMESTAMP__
  • Dでフラグを使用するarか、https://github.com/nh2/ar-timestamp-wiper/tree/masterを使用してスタンプをワイプします
  • -fno-guess-branch-probability古い手動バージョンは、それが非決定論の原因であると言っていますが、もはやそうではありません。これがカバーされているかどうかわから-frandom-seedない。

BuildrootBR2_REPRODUCIBLEには、パッケージレベルでいくつかのアイデアを提供するオプションがありますが、現時点では完全ではありません。

関連スレッド:

于 2015-06-24T06:36:52.247 に答える
8

また、ビット同一の再構築に依存しており、gcc-4.7.xを使用しています。

の設定PWD=/proc/self/cwdと使用に加えて、ブランチ-frandom-seed=<input-file-name>にあるパッチがいくつかあります。svn://gcc.gnu.org/svn/gcc/branches/google/gcc-4_7

于 2013-02-02T02:40:40.460 に答える
-1

' DATE 'マクロを使用すると、ビルドが非決定論的になります

于 2018-06-20T02:19:02.087 に答える