Arch Linux는 이제 bit-for-bit 재현 가능한 Docker 이미지를 제공함
2 days ago
2
- bit-for-bit 재현 가능성을 갖춘 Arch Linux Docker 이미지가 제공되며, 몇 달 전 WSL 이미지에서 달성한 같은 이정표가 Docker까지 확장됨
- 이미지는 전용 repro 태그로 배포되고, 재현성을 보장하려고 pacman 키를 제거해 기본 상태에서는 pacman을 바로 사용할 수 없음
- 컨테이너 안에서 패키지를 설치하거나 업데이트하려면 keyring 재생성이 필요하며, pacman-key --init && pacman-key --populate archlinux로 초기화할 수 있음
- 재현성은 빌드 간 digest 일치와 diffoci 비교로 검증하고, rootFS 결정론적 빌드와 타임스탬프 정규화, ldconfig 보조 캐시 제거 같은 조정이 함께 적용됨
- 재현 절차는 REPRO.md에서 확인할 수 있고, 앞으로는 rebuilder 서버를 통한 자동 재빌드와 검증, 빌드 로그 및 결과 공개까지 이어질 수 있음
핵심 내용
- Arch Linux의 Docker 이미지가 이제 bit-for-bit 재현 가능한 형태로 제공되며, 몇 달 전 WSL 이미지에서 달성한 같은 이정표를 Docker 쪽으로 확장함
- 이 이미지는 전용 repro 태그로 배포되며, 재현성을 보장하려면 pacman 키를 이미지에서 제거해야 해서 pacman을 바로 사용할 수 없음
- 적절한 해결책이 마련될 때까지는 이 제약 때문에 별도 태그로 우선 제공됨
- 컨테이너 안에서 패키지 설치나 업데이트를 하려면 먼저 pacman-key --init && pacman-key --populate archlinux를 실행해 keyring 재생성이 필요함
- 처음 실행 시 대화형으로 진행하거나, 이 이미지를 베이스로 쓰는 Dockerfile의 RUN 구문에서 실행할 수 있음
- Distrobox에서는 distrobox create -n arch-repro -i docker.io/archlinux/archlinux:repro --pre-init-hooks "pacman-key --init && pacman-key --populate archlinux"처럼 pre-init hook으로 처리 가능함
- 이미지의 bit-for-bit 재현성은 빌드 간 digest 일치로 확인되며, podman inspect --format '{{.Digest}}' <image>와 diffoci 비교로 검증함
- 이 Docker 이미지를 재현하는 방법은 REPRO.md에서 확인할 수 있음
구현과 조정 사항
- Docker 이미지용 base rootFS를 결정론적으로 빌드하는 작업이 가장 큰 과제였고, rootFS 빌드 시스템을 공유하는 WSL 이미지와 같은 과정을 재사용함
- Docker 전용 조정 가운데 하나로 SOURCE_DATE_EPOCH를 설정하고, Dockerfile의 org.opencontainers.image.created LABEL도 이를 따르도록 맞춤
- 빌드된 이미지에서 비결정성을 유발하는 ldconfig 보조 캐시 파일 var/cache/ldconfig/aux-cache를 Dockerfile 단계에서 제거함
- docker build 또는 podman build 때 --source-date-epoch=$SOURCE_DATE_EPOCH와 --rewrite-timestamp 옵션을 사용해 타임스탬프 정규화를 적용함
- 예시로 etc/, etc/ld.so.cache, etc/os-release, sys/, var/cache/, var/cache/ldconfig/, proc/, dev/의 시간이 서로 다르게 찍히던 문제가 제시됨
- 관련 변경 사항 전체는 archlinux-docker 저장소의 merge request diff에서 더 자세히 확인 가능함
- 이후 단계로는 Docker 이미지와 WSL 이미지, 그리고 앞으로의 재현 가능한 이미지들을 대상으로 rebuilder를 서버에 구축해 주기적 자동 재빌드, 재현성 검증, 빌드 로그와 결과 공개까지 고려하고 있음
-
Homepage
-
Tech blog
- Arch Linux는 이제 bit-for-bit 재현 가능한 Docker 이미지를 제공함