
2026/04/23 10:59
今や Arch Linux は、バイト単位の完全再現が可能な Docker イメージを導入しました。
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Arch Linux は、「repro」というタグの下で新しい Docker イメージをリリースし、WSL イメージに採用されている同じ決定論的プロセスを使用して、ビット単位の再現可能ビルドを実現しました。すべてのビルドは同一の出力を生成し、これはサプライチェーンセキュリティのための決定的なステップであり、
digest 相等性チェックおよび diffoci との比較によって検証されています。これらの結果を保証するために、開発者は特定の調整を適用しました:SOURCE_DATE_EPOCH を設定してタイムスタンプを固定する(org.opencontainers.image.created ラベルで尊重される)、--rewrite-timestamp を通じてタイムスタンプを正規化し、非決定論的な ldconfig 補助キャッシュ(var/cache/ldconfig/aux-cache)を取り除き、その他の非決定論的ビルドアートを清掃する。この作業は WSL イメージ作成に馴染みのある既存の決定論的システムの上に構築され、コミュニティメンバーの Mark の支援を受けて開発されました。これ以降、チームはサーバー上で Docker、WSL、および将来の再現可能イメージに対する自動再ビルダーを計画しており、これを定期的に実行して再現可能性を検証し、公開ログを共有します。顕著な点として、pacman キーはイメージから削除されており、パッケージを更新するには、ユーザーがキーリングを初期化して povoulate する必要があります(distrobox create -n arch-repro -i docker.io/archlinux/archlinux:repro --pre-init-hooks "pacman-key --init && pacman-key --populate archlinux" を使用しない限り)。この Docker イメージを再現するための文書は、Arch Linux Docker リポジトリで利用可能です。本文
2026 年 4 月 21 日(火)|所要時間:3 分
数ヶ月前に、当社の WSL イメージで同様の重要なマイルストーンを達成したことに続くこととして、Arch Linux のビルドが可能となり、今やビット単位での完全再現性を備えた Docker イメージを実現することができましたことを誇らしげにご報告します。
このビット単位での完全再現性保証されたイメージは、新たに追加された「repro」というタグの下で配布されています。その理由は一つあります。即ち、再現性を確保するためには pacman キーをイメージから削除する必要があり、結果としてこのイメージでは pacman をそのまま使用することはできません。この技術的な制約に対する適切な解決策が確立されるまでの間、私たちはまず最初のマイルストーンとして、専用のタグ「repro」でこの再現性保証されたイメージを提供することといたしました。
実用上の意味は以下の通りです。ユーザーはこのイメージ内でパッケージのインストールや更新を行うために、まず pacman キーリングを再作成・再生成する必要が生じます。具体的には次のコマンドを実行してください:
pacman-key --init && pacman-key --populate archlinux
(この操作は、Docker イメージを基盤として利用する場合、初回起動時にインタラクティブに実行するか、または Dockerfile の RUN 文から実行する必要があります。)
Distrobox ユーザーであれば、以下の方法で pre-init hooks として設定できます:
distrobox create -n arch-repro -i docker.io/archlinux/archlinux:repro --pre-init-hooks "pacman-key --init && pacman-key --populate archlinux"
このイメージのビット単位での完全再現性は、ビルド間でのダイジェストの一致(
podman inspect --format '{{.Digest}}' <image> を使用)、ならびに diffoci による比較によって確認されています。
さらに、この Docker イメージを再構築するための詳細な手順書は こちら でご提供いたします。
Docker イメージの基盤となるルートファイルシステム (rootFS) の確実かつ決定論的な構築が主な課題でしたが、それは当社の WSL イメージとの構築プロセスを共有しています(両者とも同じ rootFS 構築システムを採用しているため)です。主な Docker 固有の調整点は以下の通りです:
を設定し、Dockerfile のSOURCE_DATE_EPOCH
ラベルにおいてこれを尊重する処理を実装します。org.opencontainers.image.created- ビルド後のイメージから、非決定性をもたらす ldconfig サイドキャッシュファイルを除去します(Dockerfile 内での操作):
- インプット 0 のダイジェスト:
656b08db599dbbd9eb0ec663172392023285ed6598f74a55326a3d95cdd5f5d0 - インプット 1 のダイジェスト:
ffee92304701425a85c2aff3ade5668e64bf0cc381cfe0a5cd3c0f4935114195
- インプット 0 のダイジェスト:
- Docker ビルド/Podman ビルドの間、timestamps を正規化します(
および--source-date-epoch=$SOURCE_DATE_EPOCH
オプションを使用):--rewrite-timestamp
,etc/
,etc/ld.so.cache
,etc/os-release
,sys/
,var/cache/
,var/cache/ldconfig/
, およびproc/
などのファイルのタイムスタンプは、すべてdev/
に統一されます。2026-03-31 07:57:46 +0000 UTC
より詳細な情報は、archlinux-docker リポジトリ内の対応する変更セットをご参照ください。
この功績に対して、マークに深く感謝申し上げます!
これは、私たちの一般的な「再現可能なビルド」に関する取り組みにおけるさらなる意味深い成果であり、すでに次のステップを心待ちにしております!🤗
なお、私自身も将来的には、サーバー上に専用の再構築用ノード (rebuilder) を設置することを検討しております。これにより、Docker イメージならびに WSL イメージ、あるいは将来的な再現可能イメージにおいて、最新のアクセス可能なイメージを定期的に/自動的に再構築し、その再現性のステータスを検証するとともに、ビルドログや結果をどこか公開の場所にて共有することを目指したいと考えております(時間があるかどうかは別として👼)。