tine: 부팅 가능한 이미지를 만드는 새 빌드 시스템
Daan De Meyer와 Martin Pitt가 Buck2 기반의 새로운 오픈소스 빌드 시스템 'tine'을 공개했습니다. 암호학적으로 검증 가능한 무결성을 가진 운영체제를 만들기 위해 밀봉형(hermetic) 재현 가능 빌드, 완전한 입력 고정(pinning), 저렴한 전체 재빌드 등을 요구사항으로 설계되었습니다. 기존 도구인 mkosi와 Open Build Service를 검토했으나 각각 이미지 중심 프레임워크라는 한계로 자체 시스템을 만들게 되었다는 내용입니다.
2026년 9월 24일, 13분 분량 읽기
공기 중에서부터 부팅 가능한 이미지까지: tine 빌드 시스템
작성: Daan De Meyer, Martin Pitt
목차
이 글은 최근 몇 달간 진행한 오픈소스 작업을 다루는 시리즈의 일부입니다. 오늘 우리는 새로운 Buck2 기반 빌드 시스템인 tine을 소개하고 공개합니다.
우리의 요구사항
암호학적으로 검증 가능한 무결성을 지닌 운영체제를 만들려면 그러한 속성을 갖춘 빌드 시스템에서 출발해야 합니다. 동시에 우리는 더 넓은 오픈소스 커뮤니티의 일원으로서 기여하고 기존 작업을 최대한 재사용하고자 합니다. 또한 빠른 사이클의 효율적인 개발을 지향합니다. 이는 대략 다음과 같은 빌드 시스템 요구사항으로 정리됩니다:
최소한의 호스트 요구사항. 자기 완결적(self-contained)이어야 하고 외부 의존성을 최소화하여 어떤 환경에서도 실행할 수 있어야 합니다.
입력에 대한 완전한 제어. 제품에 들어가는 모든 소프트웨어를 고정(pinning)할 수 있어야 합니다. 상류 배포판(Fedora, CentOS, Arch, Debian 등)을 선택할 수 있고 가능한 한 기존 패키지를 재사용하면서도, CVE에 신속히 대응하고 필요할 때 상류 패키징 결정에서 (일시적 또는 영구적으로) 벗어나기 쉬워야 합니다.
통합된 패키지 처리 기능. 가져온 패키지의 임포트, 업데이트, 병합을 위한 도구를 제공해야 합니다.
저렴한 전체 재빌드(world rebuild). 예를 들어 gcc 버전이 올라간 후 필요할 때 전체를 재빌드할 수 있어야 합니다.
밀봉형(hermetic) 재현 가능 빌드. 모든 컴포넌트와 이미지 빌드는 밀봉된 환경에서 실행되어야 하고 비트 단위로 동일하게 재현 가능한 결과물을 생성해야 합니다.
네이티브 이미지 빌드. 부팅 가능한 운영체제 이미지와 systemd sysext 이미지를 네이티브로 동시에 빌드할 수 있어야 합니다.
모노레포 기반 반복 개발. 빠른 종단간(end-to-end) 반복 작업을 위해 운영체제를 단일 최상위 모노레포로 유지할 수 있어야 합니다. 가져온 rpm이나 Go 또는 Rust 컴포넌트의 변경이 중간 커밋이나 푸시, 복잡한 버전·의존성 선언 없이도 전체 이미지 세트 전반에서 즉시 빌드 및 테스트 가능해야 합니다.
일급 커스텀 컴포넌트. 고정된 외부 저장소(예: kubernetes, varlink-http-bridge)의 Go와 Rust 프로젝트를 네이티브로 효율적으로 빌드할 수 있어야 합니다.
스캐너 호환성. 빌드된 이미지는 syft/grype 또는 trivy 같은 표준 SBOM 도구와 보안 스캐너에서 동작해야 합니다.
캐싱. 빌드가 변경되지 않은 컴포넌트를 로컬 및/또는 글로벌 캐시에서 가져올 수 있어야 합니다. 모든 것을 처음부터 빌드하면 몇 시간이 걸릴 수 있는데, 개발자는 보통 단일 컴포넌트만 작업합니다.
기존 도구
자체 빌드 도구를 만들기 전에 여러 옵션을 평가했습니다.
mkosi
우리 팀에 mkosi의 창시자이자 메인테이너가 포함되어 있기 때문에 자연스럽게 첫 번째 평가 대상이었습니다. 하지만 근본적인 한계가 있다는 결론에 빠르게 도달했습니다. 상류 패키지 기반으로 개별 이미지를 빌드하는 데는 훌륭하지만, 느슨하게 연관된 여러 이미지를 빌드하거나 이미지를 구성하는 아티팩트에 대한 더 많은 제어가 필요할 때는 제약이 됩니다. 여러 이미지 빌드는 "메인" 이미지의 일부로 배포될 이미지로 제한됩니다. 우리는 이미지뿐 아니라 다양한 종류의 아티팩트를 균일하고 견고하게 빌드할 필요가 있으며, 따라서 빌드는 범용적이고 유연한 도구로 오케스트레이션되어야 합니다. 메인 빌드 파일은 "cargo 크레이트 컴파일" 또는 "UKI 빌드" 같은 라이브러리 함수를 호출하는 언어여야 합니다. mkosi는 정반대로 프레임워크입니다. 이미지 빌드 방법을 알고 있으며, 다른 종류의 빌드에는 자유 형식의 불투명한 훅만 제공합니다. 그래서 이미지 이상을 빌드하고자 하면 좋지 않은 경험이 됩니다.
Open Build Service
Open Build Service(OBS)는 주로 SUSE와 openSUSE 프로젝트에서 패키지부터 ISO 및 기타 다양한 이미지 형식에 이르는 모든 아티팩트를 생산하는 데 사용되는 강력한 완전 통합 빌드 시스템입니다. 강력한 의존성 추적을 갖추고 있고…(원문 누락)