1 poin oleh GN⁺ 3 jam lalu | Belum ada komentar. | Bagikan ke WhatsApp
  • Image Docker Arch Linux dengan reproducibility bit-for-bit kini tersedia, memperluas tonggak yang sama yang dicapai pada image WSL beberapa bulan lalu ke Docker
  • Image didistribusikan dengan tag repro khusus, dan untuk menjamin reproducibility, kunci pacman dihapus sehingga pacman tidak bisa langsung digunakan dalam keadaan default
  • Untuk memasang atau memperbarui paket di dalam container, diperlukan pembuatan ulang keyring, yang dapat diinisialisasi dengan pacman-key --init && pacman-key --populate archlinux
  • Reproducibility diverifikasi melalui kecocokan digest antar-build dan perbandingan dengan diffoci, bersama penyesuaian seperti build rootFS yang deterministik, normalisasi timestamp, dan penghapusan cache bantuan ldconfig
  • Prosedur reproduksi dapat dilihat di REPRO.md, dan ke depannya ini bisa berlanjut ke rebuild serta verifikasi otomatis melalui server rebuilder, termasuk publikasi log build dan hasilnya

Poin utama

  • Image Docker Arch Linux kini tersedia dalam bentuk dapat direproduksi bit-for-bit, memperluas tonggak yang sama yang dicapai pada image WSL beberapa bulan lalu ke sisi Docker
  • Image ini didistribusikan dengan tag repro khusus, dan untuk menjamin reproducibility, kunci pacman harus dihapus dari image sehingga pacman tidak bisa langsung digunakan
    • Sampai solusi yang tepat tersedia, pembatasan ini membuatnya sementara disediakan terlebih dahulu sebagai tag terpisah
  • Untuk memasang atau memperbarui paket di dalam container, Anda harus lebih dulu menjalankan pacman-key --init && pacman-key --populate archlinux untuk membuat ulang keyring
    • Pada eksekusi pertama, ini bisa dijalankan secara interaktif, atau dijalankan dalam pernyataan RUN pada Dockerfile yang menggunakan image ini sebagai basis
    • Di Distrobox, ini bisa ditangani melalui pre-init hook seperti distrobox create -n arch-repro -i docker.io/archlinux/archlinux:repro --pre-init-hooks "pacman-key --init && pacman-key --populate archlinux"
  • Reproducibility bit-for-bit dari image ini dikonfirmasi melalui kecocokan digest antar-build, dan diverifikasi dengan podman inspect --format '{{.Digest}}' <image> serta perbandingan menggunakan diffoci
  • Cara mereproduksi image Docker ini dapat dilihat di REPRO.md

Implementasi dan penyesuaian

  • Tantangan terbesar adalah membangun rootFS dasar untuk image Docker secara deterministik, dan proses yang sama dengan image WSL yang berbagi sistem build rootFS digunakan kembali
    • Commit WSL terkait dapat dilihat di sini
  • Salah satu penyesuaian khusus Docker adalah menetapkan SOURCE_DATE_EPOCH dan menyesuaikan LABEL org.opencontainers.image.created pada Dockerfile agar mengikutinya
  • File cache bantuan ldconfig var/cache/ldconfig/aux-cache, yang memicu non-determinisme pada image hasil build, dihapus pada tahap Dockerfile
  • Saat docker build atau podman build, opsi --source-date-epoch=$SOURCE_DATE_EPOCH dan --rewrite-timestamp digunakan untuk menerapkan normalisasi timestamp
    • Sebagai contoh, ditunjukkan adanya masalah ketika waktu pada etc/, etc/ld.so.cache, etc/os-release, sys/, var/cache/, var/cache/ldconfig/, proc/, dev/ tercatat berbeda-beda
  • Seluruh perubahan terkait dapat dilihat lebih detail di merge request diff repositori archlinux-docker
  • Langkah berikutnya mencakup kemungkinan membangun rebuilder di server untuk image Docker, image WSL, dan image reproducible berikutnya, guna rebuild otomatis berkala, verifikasi reproducibility, serta publikasi log build dan hasil

Belum ada komentar.

Belum ada komentar.