1 điểm bởi GN⁺ 1 giờ trước | Chưa có bình luận nào. | Chia sẻ qua WhatsApp
  • Docker image Arch Linux với khả năng tái tạo bit-for-bit nay đã được cung cấp, mở rộng cột mốc tương tự từng đạt được với image WSL vài tháng trước sang Docker
  • Image được phát hành bằng thẻ repro chuyên dụng, và để đảm bảo tính tái tạo thì khóa pacman đã bị loại bỏ nên ở trạng thái mặc định không thể dùng pacman ngay
  • Để cài đặt hoặc cập nhật gói trong container, cần tạo lại keyring bằng pacman-key --init && pacman-key --populate archlinux
  • Tính tái tạo được xác minh bằng sự trùng khớp digest giữa các bản build và so sánh với diffoci, đồng thời áp dụng thêm các điều chỉnh như build rootFS theo cách quyết định, chuẩn hóa timestamp và loại bỏ bộ nhớ đệm phụ của ldconfig
  • Có thể xem quy trình tái tạo trong REPRO.md, và trong tương lai có thể tiến tới máy chủ rebuilder để tự động build lại và xác minh, cũng như công khai log build và kết quả

Nội dung chính

  • Docker image của Arch Linux nay được cung cấp ở dạng có thể tái tạo bit-for-bit, mở rộng cột mốc tương tự từng đạt được với image WSL vài tháng trước sang phía Docker
  • Image này được phát hành bằng thẻ repro chuyên dụng, và để đảm bảo tính tái tạo thì khóa pacman phải bị loại bỏ khỏi image nên không thể dùng pacman ngay
    • Cho đến khi có giải pháp phù hợp hơn, do hạn chế này nên hiện trước mắt được cung cấp dưới dạng một thẻ riêng
  • Để cài đặt hoặc cập nhật gói trong container, trước tiên cần chạy pacman-key --init && pacman-key --populate archlinux để tạo lại keyring
    • Ở lần chạy đầu tiên có thể thực hiện theo chế độ tương tác, hoặc chạy trong câu lệnh RUN của Dockerfile dùng image này làm base
    • Với Distrobox, có thể xử lý bằng pre-init hook như distrobox create -n arch-repro -i docker.io/archlinux/archlinux:repro --pre-init-hooks "pacman-key --init && pacman-key --populate archlinux"
  • Tính tái tạo bit-for-bit của image được kiểm tra bằng sự trùng khớp digest giữa các lần build, và xác minh bằng podman inspect --format '{{.Digest}}' <image> cùng so sánh với diffoci
  • Có thể xem cách tái tạo Docker image này trong REPRO.md

Triển khai và các điều chỉnh

  • Thách thức lớn nhất là build rootFS base cho Docker image theo cách quyết định, và đã tái sử dụng cùng quy trình với image WSL vốn dùng chung hệ thống build rootFS
    • Có thể xem commit WSL liên quan tại đây
  • Một trong các điều chỉnh dành riêng cho Docker là thiết lập SOURCE_DATE_EPOCH, đồng thời để LABEL org.opencontainers.image.created trong Dockerfile cũng tuân theo giá trị này
  • Trong image đã build, tệp bộ nhớ đệm phụ var/cache/ldconfig/aux-cache của ldconfig, vốn gây ra tính không quyết định, đã được xóa ở bước Dockerfile
  • Khi dùng docker build hoặc podman build, áp dụng chuẩn hóa timestamp bằng các tùy chọn --source-date-epoch=$SOURCE_DATE_EPOCH--rewrite-timestamp
    • Ví dụ được nêu là thời gian của etc/, etc/ld.so.cache, etc/os-release, sys/, var/cache/, var/cache/ldconfig/, proc/, dev/ từng bị ghi khác nhau
  • Có thể xem chi tiết hơn toàn bộ thay đổi liên quan trong merge request diff của kho archlinux-docker
  • Ở bước tiếp theo, nhóm đang cân nhắc xây dựng rebuilder trên máy chủ cho Docker image, image WSL, và các image có thể tái tạo trong tương lai, để tự động build lại định kỳ, xác minh tính tái tạo, và công khai log build cùng kết quả

Chưa có bình luận nào.

Chưa có bình luận nào.