- 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.