데비안 계열 리눅스 배포판은 APT 기반 패키지 매니저 시스템을 사용합니다. 이때 APT 패키지 매니저는 .deb
파일을 사용하는데, 이번 글에서는 .deb
파일이 어떤 구조로 구성되어 있는지 자세히 알아보겠습니다.
.deb
내부 구성 요소.deb
파일은 일반적인 유닉스 ar
아카이브 형식을 따르는 구조입니다. ar
아카이브는 다수의 파일을 하나로 묶는 단순한 컨테이너 형식이며, .deb
의 경우 반드시 다음 세 가지 구성 요소를 포함합니다.
debian-binary
2.0
문자열만 들어 있습니다.control.tar
data.tar
각 구성 요소는 ar
아카이브 내에서 debian-binary
→ control.tar
→ data.tar
순서로 배치됩니다. 이를 통해 dpkg 등 패키지 도구가 .deb
파일을 해석하고 처리할 수 있습니다. 추가적으로, 패키지에 서명이 포함된 경우 추가 단계가 존재하지만, 일반적으로는 APT 저장소에 서명을 하기 때문에 이 글에서는 생략하도록 하겠습니다.
control.tar 아카이브에는 해당 패키지의 메타데이터와 유지관리 스크립트들이 포함되어 있습니다.
control
md5sums
conffiles
preinst
, postinst
, prerm
, postrm
등이 여기에 포함됩니다. dpkg/APT는 패키지를 설치할 때 필요한 정보를 위에서 설명한 control.tar 를 통해 얻습니다.
패키지의 유지관리 스크립트는 설치 및 제거 과정의 특정 시점에 자동 실행되는 스크립트로, 패키지 동작에 필요한 준비나 정리 작업을 수행합니다. Debian 패키지에서는 보통 4개의 유지관리 스크립트를 사용합니다.
preinst
(Pre-Install)postinst
(Post-Install)prerm
(Pre-Removal)prerm
이 호출됩니다.postrm
(Post-Removal)postrm
이 정리 절차를 수행합니다.postrm
은 설치 실패 시 호출되어 부분 설치 상태를 정리하는 데도 사용됩니다. 위 스크립트들은 선택적으로 적용 가능합니다. 또한, 모든 스크립트들은 멱등성(idempotency)을 가져 여러 번 실행되어도 문제가 없도록 구성되어야 합니다.
참고: 패키지 업그레이드 시에는 이전 버전과 새로운 버전의 스크립트들이 조합되어 실행됩니다. 예를 들어, 업그레이드 과정에서는 이전 버전의 prerm → 새 버전의 preinst → 새 버전 파일 언팩 → 새 버전의 postinst → 이전 버전의 postrm 순으로 호출되는 흐름입니다. (구체적인 상황에 따라 다를 수 있지만, broadly speaking, preinst는 새 패키지 언팩 전에 postinst는 언팩 후에 실행되고, prerm은 제거 전에 postrm은 제거 후에 실행됩니다.)
참고: 패키지 업그레이드 시에는 다음과 같이 스크립트들이 조합되어 사용됩니다.
이전 버전의 prerm → 새 버전의 preinst → 새 버전 파일 언팩 → 새 버전의 postinst → 이전 버전의 postrm
data.tar 아카이브는 해당 패키지가 설치될 때 실제로 시스템에 복사되는 모든 파일들을 담고 있는 데이터 섹션입니다. 이 아카이브를 풀면 많이 본듯한 ./usr/
, ./etc/
등의 디렉토리 구조가 나타나며, 패키지의 바이너리, 라이브러리, 설정 파일, 문서 등이 그 구조에 맞게 포함되어 있습니다.
예를 들어, test
라는 패키지의 data.tar.gz
를 풀었을 때 usr/bin/test
실행 파일과 usr/share/doc/test/...
문서들이 나올 수 있습니다. 이러한 경로들은 최종적으로 시스템 루트(/
)를 기준으로 설치되게 됩니다. 즉, data.tar
안의 ./usr/bin/test
파일은 패키지 설치 시 /usr/bin/test
경로에 놓이게 됩니다.
data.tar
에 포함된 파일들의 권한과 소유자 정보도 함께 저장되어 있어서 dpkg가 이를 해석하여 적절히 시스템에 적용됩니다. 예컨대, 바이너리 파일은 실행 권한이 있고 소유자가 root
인 상태로 설치되는 등 패키지 제작자가 설정한 메타데이터대로 배치됩니다.
일반적으로 data.tar
아카이브는 용량 절감을 위해 gzip
, xz
, zstd
등의 방식으로 압축되어 있습니다. (Debian 패키지 표준은 데이터 아카이브의 압축을 허용합니다.) 예전 패키지에서는 data.tar.gz
(gzip) 형식이 많았지만, 최근 Debian/Ubuntu 패키지들은 대부분 data.tar.xz
(xz) 형식을 사용하며, 일부는 data.tar.zst
(zstd)도 사용합니다. dpkg나 APT는 압축 방식에 따라 자동으로 이를 해제할 수 있습니다.
데비안 계열 리눅스 배포판의 .deb
파일 구조는 ar
아카이브 형식을 기반으로 구성되어 있습니다. 세부적으로는 debian-binary
, control.tar
, data.tar
의 세 가지 필수 요소가 순차적으로 포함되어 있으며, 이들의 결합을 통해 패키지 메타데이터 및 실제 배포 파일을 한곳에 모아 체계적으로 관리할 수 있습니다. 위 필수 요소들을 통해 설치, 업그레이드, 제거 과정에서 필요한 작업이 자동으로 수행되도록 도와줍니다.