패키지는 일반적으로 관련된 명령이나 기능을 실행하는데 필요한 모든 파일을 가지고 있다. 두종류의 패키지가 있다 :
패키지 시스템으로 소프트웨어를 설치할때는 패키지 관리자가 주의깊게 설계한
"의존성"을 쓴다. 이 의존성이 각 패키지에 연관된
control파일에 문서화되어 있다. 예를 들면 GNU C 컴파일러
(gcc) 는 링커와 어셈블러가 들어있는 binutils 패키지에
"의존한다". binutils을 먼저 설치하지 않고 사용자가
gcc를 설치하고자 하면 데비안 패키지 관리 시스템(dpkg)은
binutils이 또한 필요하다는 오류 표시를 보내고 사용자가 먼저
binutils을 설치하는데 동의하면 gcc를 설치할 것이다.
(그러나 이런 기능은 사용자의 요구에 의해 무시될 수 있다.dpkg(8)을
참조) 좀더 자세한 사항은 아래의 한
파일이 다른 패키지에 Depends/Recommends/Suggests/Conflicts/Replaces/Provides
한다라고 말하는 것은?, Section 6.9을 살펴보라.
데비안 패키지 도구는 다음과 같이 쓸수 있다:
데비안 "패키지" 또는 데비안 보관파일은 실행파일, 라이브러리, 특정 풀그림이나 관계된 풀그림에 연관된 문서가 들어 있다. 일반적으로 데비안 보관파일은 파일 끝이 .deb이다.
데비안 이진 패키지 형식의 내부는 deb(5) 설명서에 기술되어 있다.
내부 형태는 바뀔 수 있어서 (Debian GNU/Linux의 배포본 사이에서)
.deb 다룰때는 항상 dpkg-deb(8)을 사용하라.
데비안 이진 패키지 파일 이름은 다음과 같은 이점을 준다: <foo>_<버젼번호>-<데비안수정번호>.deb
foo는 패키지 이름으로 가정한다. 한번에, 이와같은 방법으로 만들어진 패키지 이름과 연관있는 특정 데비안의 기록파일 (.deb 파일)을 배울 수 있다:
VVV부분은 개발자가 지정한 버전번호다. 이 부분은 표준이 없다. 따라서 버전번호는 "19990513"와 "1.3.8pre1"와 같이 다양한 형태를 갖는다.
RRR데비안 수정번호다. 개발자 (또는 패키지를 직접 만드는 사용자)가 지정한다. 이 번호는 데비안 패키지의 수정상태를 알려주며 새로운 수정상태는 데비안 Makefile� (debian/rules), 데비안 제어파일(debian/control), 설치 및 제거 스크립트 (debian/p*), 또는 패키지에 사용된 설정파일의 변화를 나타낸다.
데비안 제어 파일의 내용에 관한 특징은 4장의 데비안 시스템에 있는 다른 문서와 데비안 시스템에 대한 문서는 어떤 것이 있나?, Section 11.1에 나와있다.
간단히 데비안 패키지 hello에 대한 제어 파일 보기는 아래를 보라:
Package: hello
Priority: optional
Section: devel
Installed-Size: 45
Maintainer: Adam Heath <doogie@debian.org>
Architecture: i386
Version: 1.3-16
Depends: libc6 (>= 2.1)
Description: The classic greeting, and a good example
The GNU hello program produces a familiar, friendly greeting. It
allows nonprogrammers 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 부분은 개발자의 버전번호와 (마지막 부분) 왜 데비안 패키지의 이름이 길까?, Section 6.3부분에서 설명했던 이 풀그림 패키지의 수정 단계를 나타낸다.
Architecture 부분은 이 이진파일이 컴파일된 특정 칩을 지정한다.
Depends 부분은 이 패키지를 성공적으로 설치하기 위해 설치되어 있어야 할 패키지의 목록을 보여준다.
Installed-Size는 패키지를 인스톨 했을때 디스크를 차지하는 공간을 지시한다. 이것은 설치 전면부에서 풀그림 설치에 필요한 공간이 남아 있나를 표시하기 위해 사용된다.
데비안 FTP 사이트에 저장된 데비안 패키지가 있는 "섹션"은 하나의 주 디렉토리안에 있는 하부 디렉토리의 이름이다. (데비안 FTP 배포본에는 어떤 디렉토리가 있나?, Section 5.1참조)
우선순위는 패키지설치시 얼마나 중요한가를 나타내는 척도인데 dselect나 console-apt와 같은 프로그램은 패키지를 카테고리 별로 정리하여 선택적으로 설치하게 해준다. Required/Important/Standard/Optional/Extra 패키지란?, Section 6.7를 참조하라.
Maintainer 부분은 현재 이 패키지의 관리를 맡고 있는 사람의 전자우편 주소를 보여준다.
Description 부분은 패키지 기능을 요약해서 간단히 보여준다.
패키지가 갖는 모든 가능한 정보는 데비안 패키징 매뉴얼의 제 4 장 "제어 파일과 분야들"을 참조하면 된다.
Conffile들은 보통 /etc에 있는 설정 파일의 목록들로 패키지 관리 시스템은 패키지가 판올림되도 겹쳐쓰지 않는다. 이것은 이 파일들의 지역값을 유지함으로 해서 시스템을 사용중에도 패키지를 판올림할 수 있는 중요한 기능을 지원하는 것을 가능케하고 있다.
판올림 중에도 파일들이 보존되는 가를 정확히 판단하기 위해서는
dpkg --status package
를 실행시켜보라. "Conffiles:"의 내용을 살펴보라.
이 파일들은 패키지 설치 전후에 자동으로 실행되는 스크립트다. control파일과 함께 이런 모든 파일은 데비안 보관파일의 "제어"부분이다.
개별 파일들은
현재 모든 제어 파일은 /var/lib/dpkg/info에 있다. foo 패키지와 관련된 파일은 이름이 "foo"로 시작하고 "preinst", "postinst", 등과 같이 적절한 확장자를 갖는다. foo.list 파일은foo패키지가 설치할 모든 파일의 목록이 들어 있다. (이 파일들의 위치가 dpkg 안에 있다는 것을 주의하라; 이것에 전적으로 의존해서는 안된다.
각 데비안 패키지는 배포본 관리자가 패키지 관리 시스템을 돕기 위해 우선순위를 매긴다. 우선순위는 다음과 같다:
시스템을 잘 사용케 하거나 없으면 불편해지는 것들이 여기에 속한다. 여기는 Emacs, X11, Tex 또는 다른 큰 응용 풀그림이 포함되지 않는다. 이 패키지는 순수 기반 구조를 구성한다.
이것은 사용자가 선택하지 않아도 설치한다. 많은 커다란 응용 풀그림은 포함하지 않지만 Emacs (응용 풀그림 보다는기반구조쪽에 가깝다)와 TeX 과 LaTeX (X 없이 쓸수 있으면)의 합리적인 일부분을 포함한다.
X11, 전체 TeX 배포본, 그리고 많은 응용 풀그림을 포함한다.
가상 패키지는 모두 비슷하고 기본적인 기능을 제공하는 패키지 모임에 적용하는 일반적인 이름이다. 예를 들면 tin과 trn은 모두 뉴스 읽기 풀그림으로 시스템에서 사용하려면 뉴스 읽기 풀그림이 필요로 하는 의존성을 만족해야한다. 그래서 둘다 news-reader라 부르는 기능을 제공하는 "가상 패키지"라 부른다.
비슷하게, smail과 sendmail 모두 편지 전달 대리인의 기능을 제공한다. 그래서 "편지 전달 대리인"이라고 하는 가상 패키지의 기능을 제공한다고 말한다. 둘중의 하나라도 설치되면 mail-transport-agent설치에 의존하는 어떤 풀그림도 가상 패키지의 존재로 조건은 만족되게 된다.
데비안은 같은 가상 패키지의 기능을 제공하는 한개이상의 패키지가 시스템에 설치됐을 경우 시스템관리자가 그중 하나를 우선적으로 사용하도록 하게하는 기능을 제공한다. 관계된 명령은 update-alternatives이고 어떤이는 mawk, 다른이는 gawk; 어떤이는 vim, 다른이는 elvis; 어떤이는 trn, 다른 이는 tin을 좋아한다; 데비안은 어떻게 다양성을 지원한다?, Section 10.10부분에 더 설명되어 있다.
데비안 패키지 시스템은 주어진 시스템에서 풀그림 ㄱ 이 풀그림 ㄴ과 독립적으로 동작할 수 있는 단계 (단일 표시)로 나타내도록 설계한 패키지 "의존성" 범위를 가지고 있다:
이에관한 더 많은 정보는 패키징 매뉴얼이나 정책 매뉴얼을 참고하라.
"선의존"은 특별한 의존관계다. 대부분의 패키지의 경우 dpkg는 그 압축 파일(즉, .deb 파일)을 시스템에 의존파일이 있거나 없던지 독립적으로 풀 수 있다. 단순하게 푼다는 의미는 dpkg가 파일 시스템에 설치하고자 했던 압축 파일에서 파일들을 풀어서 자리를 잡게 하는 것이다. 그 패키지들이 시스템의 다를 패키지에 의존하고 있다면 dpkg 는 "설정"을 다른 패키가 설치될때 까지 실행하지 않음으로써 설치를 끝내는 것을 거부한다.
그러나 어떤 패키지에서는 dpkg가 특정한 의존이 풀릴때까지 패키지를 푸는것 조차 거부한다. 그런 패키지는 다른 패키지에 "선의존"한다. 데비안 프로젝트가 이런 방법을 제공하는 것은 a.out 시스템에서 ELF형식 시스템으로 판올림을 지원하기 위해서이고 여기서는 패키지가 풀리는 순서가 굉장히 중요하다. 이러한 경우가 아주 유용한 경우가 있는데 아주 많은 업그레이드를 하는 경우 요구되는 우선순위와 LibC 의존성을 갖는 패키지의 경우 이러한 선의존을 숙지할 필요가 있다.
이에 관한 자세한 정보는 패키징 매뉴얼을 참조하면 된다.
이 "요구" 표시는 패키지에 대해서 사용자가 하기 원하는 일을 말해준다. (dselect의 "Select"부분에서 사용자의 행동이나 dpkg에서 사용자의 직접 호출중에 하나로서 나타나지는)
이것들의 의미는:
dpkg나 dselect로 패키지를 hold 시키는 방법은 두가지가 있다.
dpkg를 이용하는 경우 패키지 선택의 목록을 수출만하면 된다:
dpkg --get-selections > selections.txt
그리고 나서 다음의 결과 파일selections.txt을 편집하고 여러분이
hold 시키고자 하는 패키지를 포함한 라인을 변경한다. 예를 들어
libc6의 경우:
libc6 install
를 다음과 같이 변경한다:
libc6 hold
이 파일을 저장하고 dpkg 데이타 베이스를 다시 재가동한다:
dpkg --set-selections < selections.txt
dselect를 이용하는 경우 [S]elect 부분으로 들어가 여러분이 현재상태로 hold 하고 싶다면 `=' 를 누르거나 `H'를 이용하면 hold 상태가 된다.
데비안 소스 패키지는 "설치"되지 않고 패키지를 만들기 위한 디렉토리내에 풀린다. 소스 패키지는 source디렉토리에 들어 있으며 직접 설치해야 한다. 그리고 나서 직접 소스를 다음과 같은 방법으로 받는다.
apt-get source foo
(apt-get(8)를 참조하여 apt 설정을 살펴보면 된다).
소스를 컴파일 하기 위해서는 foo_*.dsc, foo_*.tar.gz와 foo_*.diff.gz 파일들이 필요하다 (데비안에는 diff.gz파일이 없다).
소스 패키지가 준비되었고 dpkg-dev패키지가 설치되었다면, 다음의
명령을 통해서:
dpkg-source -x foo_version-revision.dsc
명령으로 foo-version 디렉토리로 팩키지를 풀어 놓을 수 있다.
단지 패키지를 컴파일하고 싶다면, foo-version디렉토리로 들어가서
debian/rules build
와 같이 프로그램을 빌드하고,
debian/rules binary
루트로서 실행시키고
dpkg -i ../foo_version-revision_arch.deb
를 실행하면 새롭게 만들어진 패키지를 설치할 수 있다.
이에관한 자세한 정보는 새로운 관리자 지침서를 참고하면 된다.
maint-guide 패키지나 ftp://ftp.debian.org/debian/doc/package-developer/maint-guide.html.tar.gz.
에서 확인할 수 있다.
Debian GNU/Linux FAQ
version 2.1.2.1, 15 August 2002