7장. 데비안 패키지 관리 시스템 기초

# 7장. 데비안 패키지 관리 시스템 기초

이 장은 저수준 내부 데비안 패키지 관리를 다룹니다. 도구 사용법에 주로 관심이 있다면 8장. 데비안 패키지 관리 도구 및 9장. 데비안 시스템 최신으로 유지하기로 건너뛰십시오.

## 7.1. 데비안 패키지는 무엇인가요?

패키지에는 일반적으로 일련의 관련 명령 또는 기능을 구현하는 데 필요한 모든 파일이 들어갑니다. 데비안 패키지에 있는 두 가지 유형:

- 바이너리 패키지는 실행 파일, 설정 파일, man/info 페이지, 저작권 정보 및 기타 문서를 포함합니다. 이 패키지들은 데비안 고유의 아카이브 형식( 7.2절. “데비안 바이너리 패키지 형식은 무엇인가요?” 참조)으로 배포되며, 보통 '.deb' 확장자를 가지는 것이 특징입니다. 바이너리 패키지는 데비안 도구인 `dpkg`(또는 apt와 같은 프런트엔드를 통해)를 사용하여 압축을 풀 수 있으며, 자세한 내용은 해당 매뉴얼 페이지에 있습니다.

- 소스 패키지는 소스 패키지를 설명하는 `.dsc` 파일(이후 언급될 파일 이름 포함), gzip으로 압축된 tar 형식의 수정되지 않은 원본 소스를 포함하는 `.orig.tar.gz` 파일, 그리고 대개 원본 소스에 대한 데비안 고유의 변경 사항이 담긴 `.debian.tar.xz` 파일로 구성됩니다. `dpkg-source` 도구는 이러한 데비안 소스 아카이브를 묶거나 푸는 역할을 하며, 자세한 내용은 해당 매뉴얼 페이지에서 제공됩니다. (apt-get 프로그램을 `dpkg-source`의 프런트엔드로 사용할 수 있습니다.)

패키지 시스템을 이용한 소프트웨어 설치는 패키지 관리자가 세심하게 설계한 "의존성"을 사용합니다. 이러한 의존성은 각 패키지와 관련된 `control` 파일에 문서화되어 있습니다. 예를 들어, GNU C 컴파일러 패키지 (`gcc`)는 링커와 어셈블러를 포함하는 `binutils` 패키지에 "의존"합니다. 만약 사용자가 `binutils` 를 먼저 설치하지 않고 `gcc` 설치를 시도하면, 패키지 관리 시스템(dpkg)은 `binutils` 가 필요하다는 오류 메시지를 보내고 `gcc` 설치를 중단합니다. (단, 사용자의 의지에 따라 이 기능을 무시할 수 있습니다. dpkg(8)를 참조하십시오.) 자세한 내용은 아래의 7.9절. “패키지 Depend, Recommend, Suggest, Conflict, Replace, Break 또는 Provide 뜻은 무엇인가요?”를 보십시오.

데비안 패키지 도구 사용:

- 패키지 또는 패키지 일부를 다루고 관리하며,

- 패키지 안의 파일 지역 무시 관리,

- 패키지 아카이브 구축에서 개발자 돕기, 그리고

- 원격 아카이브 사이트에 있는 패키지를 설치하는 사용자 돕기.

## 7.2. 데비안 바이너리 패키지 형식은 무엇인가요?

데비안 "패키지" 또는 데비안 아카이브 파일은 특정 프로그램 또는 관련 프로그램과 관련된 실행 파일, 라이브러리 및 문서를 포함합니다. 보통, 데비안 아카이브 파일의 파일 이름은 `.deb` 로 끝납니다.

데비안 바이너리 패키지 형식 내부는 deb(5) 설명서 페이지에 설명합니다. 내부 형식은 변경될 수 있으며 (Debian GNU/Linux 메이저 릴리스 사이), 그러므로 `.deb` 파일을 저수준으로 다루려면 언제나 dpkg-deb(1) 을 쓰십시오.

## 7.3. 데비안 패키지 파일 이름은 왜 그리 긴가요?

데비안 바이너리 패키지의 파일 이름은 다음과 같은 명명 규칙을 따릅니다: <데비안패키지명>_<버전번호>-<데비안리비전번호>_<데비안아키텍처>.deb

특정 데비안 아카이브 파일(.deb 파일)과 연관된 패키지 이름을 확인하는 방법은 다음 중 하나로 할 수 있습니다:

- 데비안 아카이브 사이트의 패키지가 저장된 디렉토리 내에 있는 "Packages" 파일을 검사하십시오. 이 파일에 각 패키지를 설명하는 절이 포함되어 있으며, 각 절의 첫 번째 필드가 바로 공식 패키지 이름입니다.

- `dpkg --info PPP_VVV-RRR_AAA.deb` 명령어를 사용하십시오 (여기서 PPP, VVV, RRR, AAA는 각각 해당 패키지의 이름, 버전, 개정 번호, 아키텍처). 이 명령어를 실행하면 아카이브 파일의 압축을 풀었을 때 나타날 실제 패키지 이름을 포함하여 여러 정보를 보여줍니다.

`VVV` 구성요소는 업스트림 개발자가 지정한 버전 번호입니다. 이 부분에는 정해진 표준이 없기 때문에, 버전 번호의 형식은 "19990513" 및 "1.3.8pre1" 등 매우 다양할 수 있습니다.

`RRR` 구성요소는 데비안 개정 번호로, 데비안 개발자(또는 패키지를 로컬에서 직접 다시 빌드하려는 사용자)가 지정합니다. 이 번호는 데비안 패키지의 개정 수준을 나타내며, 따라서 새로운 개정 번호는 보통 데비안 Makefile(`debian/rules`), 데비안 control 파일(`debian/control`), 설치 또는 제거 스크립트(`debian/p*`), 또는 패키지에 사용되는 설정 파일들에 변경 사항이 생겼음을 나타냅니다.

`AAA` 구성요소는 해당 패키지가 빌드된 프로세서 아키텍처를 식별합니다. 일반적으로 AMD64, Intel 64 또는 VIA Nano 칩을 뜻하는 `amd64`가 주로 쓰입니다. 그 외의 다른 가능성에 대해서는 6.7절. “데비안 아카이브에 있는 그 모든 디렉터리는 무엇인가요?”에 설명된 데비안 아카이브 디렉터리 구조를 검토하십시오. 자세한 내용은 매뉴얼 페이지 dpkg-architecture(1)의 "Debian architecture" 설명을 보십시오.

## 7.4. 데비안 control 파일은 무엇인가요?

데비안 control 파일 내용에 관한 자세한 사항은 데비안 정책 매뉴얼(Debian Policy Manual) 5장에 있습니다. 12.1절. “데비안 시스템에 다른 어떤 문서가 있나요?”를 보십시오.

데비안 패키지 hello 간단한 control 파일이 아래에:

    Package: hello
    Version: 2.9-2+deb8u1
    Architecture: amd64
    Maintainer: Santiago Vila <sanvila@debian.org>
    Installed-Size: 145
    Depends: libc6 (>= 2.14)
    Conflicts: hello-traditional
    Breaks: hello-debhelper (<< 2.9)
    Replaces: hello-debhelper (<< 2.9), hello-traditional
    Section: devel
    Priority: optional
    Homepage: https://www.gnu.org/software/hello/
    Description: example package based on GNU hello
     The GNU hello program produces a familiar, friendly greeting.  It
     allows non-programmers to use a classic computer science tool which
     would otherwise be unavailable to them.
     .
     Seriously, though: this is an example of how to do a Debian package.
     It is the Debian version of the GNU Project's "hello world" program
     (which is itself an example for the GNU Project).

Package 필드는 패키지 이름을 나타냅니다. 이것은 패키지 도구들이 패키지를 조작할 때 사용하는 이름이며, 보통 데비안 아카이브 파일 이름의 첫 번째 구성 요소 문자열과 비슷하지만 반드시 같아야 하는 것은 아닙니다.

Version 필드는 7.3절. “데비안 패키지 파일 이름은 왜 그리 긴가요?”에서 설명한 바와 같이 업스트림 개발자의 버전 번호와 (마지막 구성요소에서) 이 프로그램의 데비안 패키지 리비전 레벨을 모두 나타냅니다.

Architecture 필드는 이 특정 바이너리가 컴파일된 칩을 명시합니다.

Depends 필드는 이 패키지를 성공적으로 설치하기 위해 반드시 설치되어야 하는 패키지 목록을 나타냅니다.

Installed-Size는 설치된 패키지가 얼마나 많은 디스크 공간을 소비하는지를 나타냅니다. 이는 프로그램 설치에 사용할 수 있는 디스크 공간이 충분한지 보여주기 위해 설치 프런트엔드에서 사용하도록 고안되었습니다.

Section 줄은 이 데비안 패키지가 데비안 아카이브 사이트의 어느 "섹션"에 저장되어 있는지를 나타냅니다.

Priority는 설치 시 이 패키지가 얼마나 중요한지를 나타내며, apt 또는 aptitude 같은 반지능형(semi-intelligent) 소프트웨어가 패키지를 예를 들어 선택적으로 설치된 패키지와 같은 카테고리로 분류할 수 있게 해줍니다. 7.7절. “Essential, Required, Important, Standard, Optional, Extra 패키지는 무엇인가요?”를 참조하십시오.

Maintainer 필드는 현재 이 패키지의 유지를 책임지고 있는 사람의 이메일 주소를 나타냅니다.

Description 필드는 패키지 기능에 대한 짧은 요약을 나타냅니다.

패키지가 가질 수 있는 모든 가능한 필드에 대한 더 자세한 정보는 데비안 정책 매뉴얼(Debian Policy Manual)의 5절, "Control files and their fields" 12.1절. “데비안 시스템에 다른 어떤 문서가 있나요?” 보십시오.

## 7.5. 데비안 conffile은 무엇인가요?

Conffile은 패키지 관리 시스템이 패키지를 업그레이드할 때 덮어쓰지 않는 설정 파일(대개 `/etc` 디렉터리에 위치)의 목록입니다. 이는 해당 파일 내용에 설정된 로컬 값(사용자 설정)을 그대로 보존하도록 보장하며, 가동 중인 시스템에서 패키지를 즉시 업그레이드할 수 있게 해주는 핵심적인 기능입니다.

업그레이드 중에 정확히 어떤 파일들이 보존되는지 확인하려면 실행할 명령어:

    dpkg --status package

그리고 "Conffiles:" 아래 보십시오.

## 7.6. 데비안 preinst, postinst, prerm, 그리고 postrm script 는 무엇인가요?

이 파일은 패키지가 설치되거나 제거되기 전 또는 후에 자동으로 실행되는 실행 가능한 스크립트입니다. `control`이라는 이름의 파일과 더불어, 이 모든 파일은 데비안 아카이브 파일의 "control" 섹션에 들어갑니다.

각 파일은:

preinst

  이 스크립트는 해당 스크립트가 들어간 패키지가 데비안 아카이브(".deb") 파일에서 압축이 풀리기 전에 실행됩니다. 많은 'preinst' 스크립트는 업그레이드 중인 패키지 서비스를 정지시키며, 이 서비스는 설치 또는 업그레이드가 완료될 때까지(즉, 'postinst' 스크립트가 성공적으로 실행) 정지 상태를 유지합니다.

postinst

  이 스크립트는 일반적으로 패키지 `foo`가 데비안 아카이브(".deb") 파일로부터 압축이 풀린 후, `foo` 패키지에 필요한 모든 설정을 완료합니다. 많은 postinst 스크립트는 새 패키지의 설치 또는 업그레이드가 완료된 후, 서비스를 시작 또는 재시작하는 데 필요한 명령을 실행합니다.

prerm

  이 스크립트는 대개 패키지와 관련된 모든 데몬을 정지시킵니다. 이 스크립트는 패키지와 관련된 파일들이 제거되기 전에 실행됩니다.

postrm

  이 스크립트는 대개 `foo`와 관련된 링크나 다른 파일들을 수정하거나, 패키지가 생성했던 파일을 제거합니다. (7.8절. “가상 패키지는 무엇인가요?” 보시오.)"

현재 모든 제어 파일은 `/var/lib/dpkg/info` 디렉터리에서 찾을 수 있습니다. 패키지 `foo`와 관련된 파일들은 이름이 "foo" 로 시작하며, 용도에 따라"preinst", "postinst" 등의 확장자를 가집니다. 해당 디렉터리에 있는 `foo.list` 파일은 패키지 `foo`와 함께 설치된 모든 파일의 목록을 담고 있습니다. (단, 이 파일 위치는 dpkg의 내부적인 사항이므로, 이에 의존하여 작업을 수행하면 안 됩니다.)

## 7.7. Essential, Required, Important, Standard, Optional, Extra 패키지는 무엇인가요?

각 데비안 패키지는 배포판 관리자가 우선순위(priority)를 할당하여, 패키지 관리 시스템을 돕습니다. 그 우선순위:

- Required: 시스템 정상 동작을 위해 반드시 필요한 패키지.

  여기에는 시스템 결함을 수리하는 데 필요한 모든 도구가 들어갑니다. 이 패키지를 삭제하면 안 되며, 삭제하면 시스템이 완전히 망가져 상황을 되돌리기 위해 dpkg조차 사용할 수 없게 될 수도 있습니다. Required 패키지만 설치된 시스템은 아마 정상 사용이 불가능하겠지만, 시스템 관리자가 부팅을 하고 추가 소프트웨어를 설치할 수 있을 만큼의 기능은 갖추고 있습니다.

- Important 패키지는 모든 유닉스 비슷한 시스템에서 공통적으로 찾을 수 있는 패키지.

  시스템이 제대로 동작하지 않거나 사용하기 어려운 상황을 막으려고 그 밖의 패키지들이 여기에 들어갑니다. 여기에는 Emacs, X, TeX 또는 기타 대규모 애플리케이션은 안 들어갑니다. 이 패키지는 오직 최소한의 인프라만 구성합니다.

- Standard 패키지는 모든 리눅스 시스템의 표준이 되는 패키지들로, 상당히 작지만 너무 제약적이지는 않은 문자 모드(character-mode) 시스템이 들어있습니다. 여기에는 (mutt 사용) 이메일을 보내거나 아카이브 서버에서 파일을 다운로드할 수 있는 도구들이 들어갑니다.

  사용자가 다른 항목을 선택하지 않으면 기본적으로 설치되는 패키지입니다. 많은 커다란 애플리케이션을 포함하지는 않지만, Python 인터프리터와 (원격 관리를 위한) OpenSSH, 및 (메일 전송을 위한, 단 로컬 전송 전용으로도 설정 가능한) Exim과 같은 일부 서버 소프트웨어가 들어갑니다. 또한 대부분의 사용자에게 도움이 될 만한 일반적인 공통 문서도 들어갑니다.

- Optional 패키지는 해당 패키지가 무엇인지 잘 모르더라도 설치하는 것이 합리적인 모든 패키지, 또는 특별한 요구 사항이 없는 패키지를 포함합니다.

  여기에는 X, 전체 TeX 배포판, 그리고 수많은 애플리케이션이 들어갑니다.

- Extra: 우선순위가 더 높은 다른 패키지와 충돌하거나, 해당 패키지가 무엇인지 이미 알고 있는 경우에만 유용할 가능성이 높은 패키지, 또는 "Optional"로 분류하기에 부적절한 특수한 요구 사항이 있는 패키지.

기본값 데비안을 설치하면 우선순위가 Standard 이상인 패키지가 모두 시스템에 설치됩니다. 만약 미리 정의된 task를 선택하면 이보다 우선순위가 낮은 패키지도 함께 설치될 겁니다.

또한, 일부 패키지는 시스템의 적절한 동작에 절대적으로 필요하기 때문에 Essential로 표시됩니다. 패키지 관리 도구는 이러한 패키지를 지우는 것을 거부합니다.

## 7.8. 가상 패키지는 무엇인가요?

가상 패키지란 비슷한 기본 기능을 제공하는 패키지 그룹 전체에 적용되는 일반적인 명칭입니다. 예를 들어, `konqueror` 및 `firefox-esr` 프로그램은 모두 웹 브라우저이므로, 시스템에서 제대로 동작하거나 유용하게 쓰이기 위해 웹 브라우저를 필요로 하는 프로그램의 의존성을 충족시킬 수 있어야 합니다. 따라서 이 두 프로그램은 모두 `www-browser`라고 불리는 "가상 패키지"를 제공한다고 말합니다.

마찬가지로, `exim4`와 `sendmail` 둘 다 메일 전송 에이전트(MTA) 기능을 제공합니다. 따라서 이들은 "mail-transport-agent"라는 가상 패키지를 제공한다고 말합니다. 둘 중 하나만 설치되어 있어도, `mail-transport-agent` 설치에 의존하는 모든 프로그램은 이 가상 패키지의 존재를 통해 의존성이 충족됩니다.

데비안은 동일한 가상 패키지를 제공하는 패키지가 시스템에 여러 개 설치되어 있을 경우, 시스템 관리자가 그중 하나를 선호하는 패키지로 설정할 수 있는 메커니즘을 제공합니다. 관련 명령어는 `update-alternatives`, 이에 대한 자세한 설명은 11.11절. “어떤 사용자는 mawk를 좋아하고, 다른 사람은 gawk를 좋아합니다. 어떤 사람은 vim을 다른 사람은 elvis를 좋아합니다. 어떤 사람은 trn을 다른 사람은 tin을 좋아합니다. 데비안은 다양성을 어떻게 지원하나요?”에 있습니다.

## 7.9. 패키지 Depend, Recommend, Suggest, Conflict, Replace, Break 또는 Provide 뜻은 무엇인가요?

데비안 패키지 시스템은 특정 시스템에서 프로그램 A가 프로그램 B의 존재 여부와 상관없이 독립적으로 동작할 수 있는 수준을 (단일 플래그로) 나타내기 위해 설계된 일련의 패키지 "의존성(dependencies)" 영역을 갖고 있습니다:

- 패키지 A가 패키지 B에 의존(depend) 한다는 것은, A를 실행하기 위해 B가 반드시 설치되어 있어야 함을 뜻합니다. 어떤 경우에는 A가 단순히 B에 의존하는 것을 넘어, B의 특정 버전에 의존하기도 합니다. 이 경우 버전 의존성은 대개 하한선으로 작용하며, 이는 A가 지정된 특정 버전보다 최신 상태인 B의 모든 버전에 의존한다는 뜻입니다.

- 패키지 관리자가 판단하기에 대부분의 사용자가 패키지 B가 제공하는 기능 없이는 패키지 A를 사용하려 하지 않을 것이라고 본다면, 패키지 A는 패키지 B를 추천(recommend) 합니다.

- 패키지 A가 패키지 B를 제안(suggest)한다는 것은, B가 A의 기능과 관련이 있거나 (보통 A의 기능을) 강화하는 파일들을 포함하고 있음을 뜻합니다.

- 패키지 A가 패키지 B와 충돌(conflict)한다는 것은, 시스템에 B가 설치되어 있으면 A가 동작하지 않음을 뜻합니다. 대부분의 경우, A가 B에 있는 파일보다 개선된 버전의 파일을 포함하고 있을 때 충돌이 생깁니다. "충돌(Conflicts)"은 종종 "대체(replaces)"와 조합됩니다.

- 패키지 A가 패키지 B를 대체(replace)한다는 것은, B가 설치한 파일이 제거되고 (어떤 경우에는) A에 들어간 파일들로 덮어써지는 것을 뜻합니다.

- 패키지 A가 패키지 B를 깨뜨린다(break)는 것은, 두 패키지가 한 시스템에서 동시에 설정(configured)될 수 없음을 뜻합니다. 패키지 관리 시스템은 둘 중 하나가 이미 시스템에 설치되어 설정까지 완료된 상태라면, 나머지 하나를 설치하는 것을 거부합니다.

- 패키지 A가 패키지 B를 제공(provide)한다는 것은, B의 모든 파일과 기능이 A에 통합되어 있음을 뜻합니다. 이 메커니즘은 디스크 공간이 제한적인 사용자들이 패키지 A 중에서 실제로 필요한 부분(B의 기능)만을 취할 수 있는 방법을 제공합니다.

이러한 각 용어의 사용에 관한 더 자세한 정보는 데비안 정책 매뉴얼 7.2절 "바이너리 의존성"에서 찾을 수 있습니다(12.1절. “데비안 시스템에 다른 어떤 문서가 있나요?” 참조).

## 7.10. Pre-Depend는 무슨 뜻인가요?

"Pre-Depend"는 특별한 형태의 의존성입니다. 대부분의 패키지 경우, `dpkg`는 시스템에 해당 패키지가 의존하는 파일들이 존재하는지 여부와 상관없이 패키지 아카이브 파일(즉, `.deb` 파일)의 압축을 풉니다(unpack). 쉽게 설명하자면, 압축 풀기(unpacking)란 `dpkg`가 아카이브 파일 내에서 사용자 파일 시스템에 설치될 파일들을 추출하여 제자리에 배치하는 것을 의미합니다. 만약 해당 패키지들이 시스템 내 다른 패키지의 존재에 의존한다면, `dpkg`는 그 다른 패키지들이 설치될 때까지 (설정(configure) 작업을 실행하지 않음으로써) 설치 완료를 거부합니다.

그러나, 특정 패키지의 경우, `dpkg`는 특정 의존성이 해결될 때까지 압축을 푸는 것(unpack)조차 거부하기도 합니다. 이러한 패키지들은 다른 패키지의 존재에 "선-의존(Pre-depend)"한다고 말합니다. 데비안 프로젝트는 패키지의 압축 해제 순서가 매우 치명적이었던 `a.out` 형식에서 `ELF` 형식으로의 안전한 시스템 업그레이드를 지원하기 위해 이 메커니즘을 도입했습니다. 이 방법은 필수(required) 우선순위를 가진 패키지들과 그들의 LibC 의존성 관계처럼, 대규모 업그레이드가 필요한 다른 상황에서도 유용합니다.

전처럼, 이에 대한 자세한 내용은 정책 매뉴얼에 있습니다.

## 7.11. 패키지 상태에서 unknown, install, remove, purge 및 hold는 무슨 뜻인가요?

이 "want" 플래그는 사용자가 패키지에 대해 무엇을 하려고 했는지를 나타냅니다(사용자가 `dpkg`/`apt`/ `aptitude` 등을 직접 실행하여 지시한 내용에 따라).

그 뜻:

- unknown - 사용자가 패키지를 원하는지 여부를 지정하지 않았습니다.

- install - 패키지가 설치되거나. 업그레이드 되기를 사용자가 바람.

- remove - 사용자가 바라는 것은 패키지 제거, 그러나 설정파일을 제거하는 것을 바라지는 않음.

- purge - 사용자가 바라는 것은 패키지를 완전히 제거하는 것, 설정 파일도 포함.

- hold - 사용자는 이 패키지가 처리되지 않기를 바랍니다. 즉, 현재 상태를 유지하려는 경우입니다.

## 7.12. 패키지를 보류(hold)하려면 어떻게 하나요?

패키지를 보류하는 3가지 방법. dpkg, apt 또는 aptitude.

명령 dpkg를 사용할 경우, 다음과 같이 패키지 선택 목록을 export:

    dpkg --get-selections \* > selections.txt

그다음 생성된 파일 `selections.txt` 편집하여, hold 하려는 패키지(예: `libc6`)가 들어간 줄을 다음과 같은 내용에서 바꾸십시오:

    libc6                                           install

이렇게 :

    libc6                                           hold

파일을 저장하고, 아래 명령어로 dpkg 데이터베이스에 reload:

    dpkg --set-selections < selections.txt

명령 apt로, 패키지를 hold

    apt-mark hold 패키지명

그리고 hold를 제거하려면

    apt-mark unhold 패키지명

명령 aptitude로, 패키지를 hold 할 수 있습니다

    aptitude hold 패키지명

그리고 hold를 제거하려면

    aptitude unhold 패키지명

## 7.13. 어떻게 소스 패키지를 설치하나요?

데비안 소스 패키지는 사실 "설치"될 수 없으며, 바이너리 패키지를 만들고자 하는 디렉터리에 패키지가 풀릴 뿐입니다.

소스 패키지는 바이너리 패키지를 구할 수 있는 대부분의 똑같은 미러 사이트에서 배포됩니다. 만약 APT의 sources.list(5) 파일에 적절한 "deb-src" 줄이 들어가도록 설정했다면, 어떤 소스 패키지든 쉽게 다운로드할 수 있게 다음 명령을 실행

    apt-get source foo

소스 패키지를 실제로 빌드하는 데 도움을 주기 위해, 데비안 소스 패키지는 build-dependencies 메커니즘을 제공합니다. 이는 소스 패키지 관리자가 해당 패키지를 빌드하는 데 필요한 다른 패키지들의 목록을 관리한다는 것을 의미합니다. 이것이 얼마나 유용한지 확인해 보려면, 다음 명령을 실행

    apt-get build-dep foo

소스를 빌드 하기 전에.

## 7.14. 어떻게 바이너리 패키지를 소스 패키지에서 만드나요?

선호하는 방법은 다양한 래퍼 도구를 사용하는 것입니다. 우리는 그것이 어떻게 이루어졌는지 `devscripts` 도구를 써서 보여줄 겁니다. 아직 설치하지 않았다면 이 패키지를 설치하십시오.

이제, 먼저 소스 패키지를 얻습니다:

    apt-get source foo

그리고 소스 트리로 바꿉니다:

    cd foo-*

필요한 빌드종속 설치(있다면):

    sudo apt-get build-dep foo

그런 다음, 여러분만의 전용 빌드 버전을 생성하십시오 (나중에 데비안에서 새로운 버전을 릴리스했을 때 혼동되지 않도록 하기 위함):

    dch -l local 'Blah blah blah'

마지막으로 패키지 빌드:

    debuild -us -uc

모든 과정이 정상적으로 진행되었다면, 이제 다음 명령어를 실행하여 패키지를 설치할 수 있습니다

    sudo dpkg -i ../*.deb

만약 수동으로 작업을 처리하는 것을 선호하고, `devscripts`를 사용하고 싶지 않다면 다음 절차를 따르십시오:

소스 코드를 컴파일하려면 foo_*.dsc, foo_*.tar.gz, 그리고 foo_*.debian.tar.xz 파일이 모두 필요합니다 (참고: 데비안 네이티브 패키지 중 일부는 .debian.tar.xz 파일이 없음).

파일을 갖고 있고(7.13절. “어떻게 소스 패키지를 설치하나요?” 참조) `dpkg-dev` 패키지가 설치되어 있다면, 다음 명령어:

    dpkg-source -x foo_version-revision.dsc

`foo-version` 이름의 디렉터리에 패키지 압축을 해제합니다.

패키지를 컴파일하기만 하려는 경우, `foo-version` 디렉터리로 들어가서(cd) 다음 명령을 실행하면 됩니다.

    dpkg-buildpackage -rfakeroot -b

패키지를 빌드하려면 (이것은 `fakeroot` 패키지 필요함을 주의), 그리고

    dpkg -i ../foo_version-revision_arch.deb

새로 빌드한 패키지를 설치.

## 7.15. 데비안 패키지를 내 스스로 만들려면 어떻게 하나요?

이에 대한 자세한 설명을 보려면 New Maintainers' Guide `maint-guide` 패키지 또는 https://www.debian.org/doc/devel-manuals#maint-guide, 또는 Guide for Debian Maintainers, `debmake-doc` 패키지 https://www.debian.org/doc/devel-manuals#debmake-doc 읽으십시오.

6장. 데비안 아카이브 |  | 8장. 데비안 패키지 관리 도구