와탭랩스 블로그 오픈 이벤트 😃
자세히 보기
테크
2025-04-16
데비안(Debian) 배포판에서 사용하는 DEB 파일 구조 알아보기

데비안 계열 리눅스 배포판은 APT 기반 패키지 매니저 시스템을 사용합니다. 이때 APT 패키지 매니저는 .deb 파일을 사용하는데, 이번 글에서는 .deb 파일이 어떤 구조로 구성되어 있는지 자세히 알아보겠습니다.

.deb 내부 구성 요소

.deb 파일은 일반적인 유닉스 ar 아카이브 형식을 따르는 구조입니다. ar 아카이브는 다수의 파일을 하나로 묶는 단순한 컨테이너 형식이며, .deb의 경우 반드시 다음 세 가지 구성 요소를 포함합니다.

  • debian-binary
    • 패키지 포맷 버전을 기록한 텍스트 파일입니다.
    • 현재 Debian 패키지 포맷 버전인 2.0 문자열만 들어 있습니다.
  • control.tar
    • 제어 아카이브로 패키지의 메타데이터와 유지관리 스크립트가 포함되어 있습니다. ​
    • 이 아카이브는 패키지 이름, 버전, 의존성 정보 등을 비롯한 제어 파일들과 설치/제거 시 실행될 스크립트가 들어 있습니다.
  • data.tar
    • 데이터 아카이브로, 패키지 설치 시 실제 시스템에 풀어놓을 파일들이 들어 있습니다.
    • 프로그램 바이너리, 라이브러리, 문서, 설정 파일 등이 이 아카이브에 포함됩니다.

각 구성 요소는 ar 아카이브 내에서 debian-binarycontrol.tardata.tar 순서로 배치됩니다. 이를 통해 dpkg 등 패키지 도구가 .deb 파일을 해석하고 처리할 수 있습니다. 추가적으로, 패키지에 서명이 포함된 경우 추가 단계가 존재하지만, 일반적으로는 APT 저장소에 서명을 하기 때문에 이 글에서는 생략하도록 하겠습니다.

key
이미지 출처: wikipedia

control.tar 아카이브와 주요 메타데이터 파일

control.tar 아카이브에는 해당 패키지의 메타데이터와 유지관리 스크립트들이 포함되어 있습니다.

  • control
    • 패키지의 기본 정보를 담은 제어 파일입니다.
    • 패키지의 이름, 설명, 버전, 의존성 목록, 유지관리자 정보 등이 이 파일에 기록되게 됩니다.​
    • 이 정보는 패키지 설치 전 의존성 확인이나 설명 표시 등에 활용됩니다.
  • md5sums
    • 패키지에 포함된 모든 파일의 MD5 체크섬 목록입니다.
    • 설치 후 파일의 무결성을 검증하거나 손상을 감지하는 데 사용됩니다.
  • conffiles
    • 설정 파일로 취급해야 할 파일 목록을 담고 있습니다.
    • 여기 지정된 파일들은 패키지 업그레이드 시 새 버전으로 덮어쓰지 않고 유지됩니다.
  • 유지관리 스크립트
    • preinst, postinst, prerm, postrm 등이 여기에 포함됩니다.
    • 이는 패키지 설치 및 제거 과정에서 자동으로 실행되는 스크립트들입니다. (아래에서 더 자세하게 다룰 예정입니다.)

dpkg/APT는 패키지를 설치할 때 필요한 정보를 위에서 설명한 control.tar 를 통해 얻습니다.

유지관리 스크립트의 역할과 실행 흐름

패키지의 유지관리 스크립트는 설치 및 제거 과정의 특정 시점에 자동 실행되는 스크립트로, 패키지 동작에 필요한 준비나 정리 작업을 수행합니다. Debian 패키지에서는 보통 4개의 유지관리 스크립트를 사용합니다.

  • preinst (Pre-Install)
    • 패키지 설치 또는 업그레이드 직전에 실행되는 스크립트입니다.
    • 새 버전의 파일을 풀기 전에 필요한 작업에 사용합니다.
  • postinst (Post-Install)
    • 패키지 설치 또는 업그레이드 직후에 실행됩니다.
    • 설정 완료, 서비스 시작/재시작, 캐시 갱신 등의 작업을 처리할 수 있습니다.
  • prerm (Pre-Removal)
    • 패키지 제거 또는 업그레이드로 교체되기 직전에 실행됩니다.
    • 서비스 데몬을 중지하거나(cron 정지 등) 패키지 사용 자원 해제를 처리할 때 활용됩니다.
    • 업그레이드의 경우 오래된 버전의 제거 단계에서 prerm이 호출됩니다.
  • postrm (Post-Removal)
    • 패키지 제거 또는 업그레이드 완료 후에 실행되는 스크립트입니다.
    • 패키지 삭제 후 잔여 작업을 처리하거나 실패한 설치를 정리하는 역할을 합니다. 예를 들어, 패키지를 완전히 제거(purge)하는 경우 관련 캐시나 임시 파일을 삭제하고, 업그레이드 과정에서 문제가 생겼다면 postrm이 정리 절차를 수행합니다.
    • 또한, postrm은 설치 실패 시 호출되어 부분 설치 상태를 정리하는 데도 사용됩니다.

위 스크립트들은 선택적으로 적용 가능합니다. 또한, 모든 스크립트들은 멱등성(idempotency)을 가져 여러 번 실행되어도 문제가 없도록 구성되어야 합니다.

참고: 패키지 업그레이드 시에는 이전 버전과 새로운 버전의 스크립트들이 조합되어 실행됩니다. 예를 들어, 업그레이드 과정에서는 이전 버전의 prerm → 새 버전의 preinst → 새 버전 파일 언팩 → 새 버전의 postinst → 이전 버전의 postrm 순으로 호출되는 흐름입니다. (구체적인 상황에 따라 다를 수 있지만, broadly speaking, preinst는 새 패키지 언팩 전에 postinst는 언팩 후에 실행되고, prerm은 제거 전에 postrm은 제거 후에 실행됩니다.)

참고: 패키지 업그레이드 시에는 다음과 같이 스크립트들이 조합되어 사용됩니다.
이전 버전의 prerm → 새 버전의 preinst → 새 버전 파일 언팩 → 새 버전의 postinst → 이전 버전의 postrm

data.tar 아카이브의 역할과 파일 배치

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의 세 가지 필수 요소가 순차적으로 포함되어 있으며, 이들의 결합을 통해 패키지 메타데이터 및 실제 배포 파일을 한곳에 모아 체계적으로 관리할 수 있습니다. 위 필수 요소들을 통해 설치, 업그레이드, 제거 과정에서 필요한 작업이 자동으로 수행되도록 도와줍니다.

와탭 모니터링을 무료로 체험해보세요!