[ 이전 ] [ 저작권 ] [ 차례 ] [ 다음 ]

데비안 새로운 관리자 안내서
4 debian/ 아래 필요한 것들


프로그램의 주 디렉토리(`gentoo-0.9.12') 아래에 `debian'이라는 새로운 서브 디렉토리가 만들어져 있다. 이 디렉토리 안에는 여러개의 파일들이 들어 있다. 이제 패키지를 제대로 조정하려면 차례로 이 파일들을 편집한다. 이 중에 가장 중요한 파일은 `control', `changelog', `copyright', 그리고 `rules'이다. 이 파일들은 모든 패키지에 필요하다.


4.1 `control' 파일

이 파일 안에는 dpkg나 dselect에서 패키지를 관리할 때 필요한 여러가지 값들이 들어 있다. 다음은 dh_make가 자동으로 만들어 주는 control 파일이다.

       1  Source: gentoo
       2  Section: unknown
       3  Priority: optional
       4  Maintainer: Josip Rodin <jrodin@jagor.srce.hr>
       5  Standards-Version: 2.4.0.0
       6 
       7  Package: gentoo
       8  Architecture: any
       9  Depends: ${shlibs:Depends}
       10 Description: Missing
       11  <긴 설명을 쓴다.  줄 앞에 공백으로 들여 쓴다>

(줄 번호를 앞에 붙였다.)

1-5줄은 소스 패키지를 위한 컨트롤 정보이다. 첫번째 줄은 소스 패키지의 이름이다.

두번째 줄은 이 패키지가 들어가야 할 배포본의 섹션이다. 이미 알고 있을지도 모르지만, 데비안은 여러개의 섹션으로 나누어져 있다: main (자유 소프트웨어), non-free (자유 소프트웨어가 아닌 것들) 그리고 contrib (자유롭지 않은 소프트웨어에 의존하는 자유 소프트웨어). 이 아래에 이 패키지가 어떤 종류인가를 간단히 설명하는 서브섹션이 있다. 관리 전용 프로그램은 `admin', 기본적인 도구는 `base', 프로그래머의 도구는 `devel', 문서는 `doc', 라이브러리는 `libs', 이메일 읽기 프로그램 및 데몬은 `mail', 네트워크 프로그램과 데몬은 `net', X11에 관계된 프로그램은 `x11', 그 외에도 많이 있다.

그러면 unknown을 x11로 바꾸면 된다.

세번째 줄은 사용자가 이 패키지를 설치하는 일이 얼마나 중요한지를 나타낸다. Section과 Priority는 패키지를 정렬하고, 기본 패키지를 선택하는 용도로 dselect에서만 사용된다. 또 Section과 Priority는 FTP 관리자에 의해 다시 정의될 수 있다 (대부분의 경우 그렇게 된다). 이 필드의 값을 결정하는 문제는 데비안 정책 매뉴얼에 쓰여 있다.

gentoo의 우선순위는 보통이므로, 그대로 optional로 남겨둔다.

네번째 줄은 관리자의 이름과 이메일 주소이다.

다섯번째 줄은 이 패키지가 따르는 데비안 정책 표준(Debian policy standard)의 버전이다 (debian-policy 패키지의 앞의 두개의 숫자가 데비안 정책 표준의 버전이다).

패키지를 빌드할 때 표준이 아닌 도구가 필요할 때, `Build-Depends' 줄을 추가하고, 거기에 필요한 패키지를 쓴다. 이에 대한 자세한 정보는, Packaging Manual(섹션 8.7)과 `build-essential' 패키지의 문서에 들어 있다.

일곱번째 줄은 이진 패키지의 버전이다.

여덟번째 줄은 이 이진 패키지가 컴파일될 수 있는 CPU 아키텍처를 쓴다. 우리는 이 필드를 any라고 남겨놓고 dpkg-gencontrol(1) 프로그램이 알아서 컴파일된 기계에 맞는 값을 집어 넣도록 한다(패키지 포팅에 대한 설명은 Developer's Reference 참고). 만약 여러분의 패키지가 아키텍처에 무관하다면 (예를 들어, 셸 스크립트나 펄 스크립트, 문서일 경우), 이 부분을 "all"로 바꾸고, 뒷 부분의 `rules' 파일, 4.4에서 "binary-arch" 대신에 "binary-indep" 룰을 이용하는 방법을 살펴본다.

아홉번째 줄은 데비안 패키징 시스템의 가장 강력한 기능들중 하나이다. 패키지는 여러가지 방법으로 또 다른 패키지들과 관계를 맺을 수 있다. Depends 말고, 패키지간의 관계를 나타내는 필드로는 Recommends:, Suggests:, Pre-Depends:, Conflicts:, Provides:, 그리고 Replaces:가 있다.

dpkg, dselect, APT(그리고 APT 프론트엔드)와 같은 패키지 관리 도구는 보통 이 패키지 관계에 따라 동일하게 동작한다. 그렇지 않은 경우가 있는데, 다음에 설명한다. (dpkg(8), dselect(8), + apt(8), console-apt(8), + gnome-apt(8) 참고)

각각의 의미는 다음과 같다:

이 필드들은 모두 통일된 문법이 있다. 이 필드에는 패키지 이름들을 쉼표로 구분해서 나열해 놓는다. 패키지 이름은 세로줄 표시 | (파이프 표시) 를 이용해서 여러개 중에 하나를 선택하는 식으로 만들 수도 있다. 각 패키지의 특정 버전을 지정할 수도 있다. 각 패키지 이름 다음에 괄호 안에 버전과 함께 그 앞에 버전번호의 관계를 나타내는 다음 관계 기호를 쓴다. 사용할 수 있는 관계는 <<, <=, =, >= 그리고 >>이다. 각각은 앞 버전, 이전 버전, 정확히 같은 버전, 이후 버전, 그리고 뒤 버전을 나타낸다.

마지막으로 알려줄 기능은 $(shlibs:Depends)이다. 이 부분은 dh_shlibdeps(1)dh_gencontrol(1)에 의해 (나중에 설명) 자동으로 libc6나 xlib6g같은 여러분의 프로그램이 사용하는 동적 라이브러리의 이름으로 바뀐다. 즉, 각 라이브러리를 직접 지정할 필요가 없다. 때문에, 아홉번째 줄은 그대로 남겨두면 된다.

열번째 줄은 제안할 패키지를 나열하는 곳이다. 여기에는 `file'밖에 없다. gentoo는 file 프로그램/패키지의 기능들을 이용한다.

열한번째 줄은 짤막한 설명이다. 대부분의 사람들은 80 컬럼 화면을 사용하므로 이 부분은 60자 이상되지 않도록 않다. 나는 이 부분을 "A fully GUI configurable GTK+ file manager"라고 바꿔 놓을 것이다.

열두번째 줄은 긴 설명이 들어간다. 이 부분은 패키지에 대해 좀 더 자세히 설명하는 한개의 문단이다. 각 줄의 첫번째 열은 공백이어야 한다. 절대로 빈 줄이 들어가서는 안 된다. 빈 줄이 들어가야 할 곳에서는 대신에 .을 쓴다. 또, 이렇게 긴 설명을 끝낸 다음에는 빈 줄을 두개 이상 넣지 않는다.

다음은 수정된 control 파일이다:

       1  Source: gentoo
       2  Section: x11
       3  Priority: optional
       4  Maintainer: Josip Rodin <jrodin@jagor.srce.hr>
       5  Standards-Version: 3.0.1
       6
       7  Package: gentoo
       8  Architecture: any
       9  Depends: ${shlibs:Depends}
       10 Suggests: file
       11 Description: A fully GUI configurable GTK+ file manager
       12 gentoo is a file manager for Linux written from scratch in pure C. It
       13 uses the GTK+ toolkit for all of its interface needs. gentoo provides
       14 100% GUI configurability; no need to edit config files by hand and re-
       15 start the program. gentoo supports identifying the type of various
       16 files (using extension, regular expressions, or the 'file' command),
       17 and can display files of different types with different colors and icons.
       18 .
       19 gentoo borrows some of its look and feel from the classic Amiga file


4.2 `copyright' 파일

이 파일에는 해당 패키지의 상위 정보, 저작권과 라이센스 정보가 들어 있다. 이 형식은 데비안 정책에서 정의되지 않았지만, 그 내용은 지정되어 있다 (섹션 6.5). dh_make가 기본적으로 만드는 파일이 있는데, 다음과 같다:

       1  This package was debianized by Josip Rodin <jrodin@jagor.srce.hr> on
       2  Wed, 11 Nov 1998 21:02:14 +0100.
       3
       4  It was downloaded from <fill in ftp site>
       5
       6  Upstream Author(s): <put author(s) name and email here>
       7
       8  Copyright:
       9
       10 <Must follow here>

(줄 번호를 앞에 붙였다)

이 파일에 써 넣어야 할 매우 중요한 것은 첫째로 이 패키지를 가져온 위치이고, 또 하나는 실제 저작권 명시와 라이센스이다. GNU GPL 혹은 LGPL, BSD, Artistic 라이센스와 같은 유명한 자유 소프트웨어 라이센스가 아니라면, 완전한 라이센스를 포함해야 한다. 이런 유명한 라이센스의 경우에는 모든 데비안 시스템에 있는 /usr/share/common-licenses/ 디렉토리 밑의 해당 파일을 참고하면 된다. Gentoo의 라이센스는 GNU General Public License이므로 copyright 파일을 다음과 같이 바꿀 것이다:

       1  This package was debianized by Josip Rodin <jrodin@jagor.srce.hr> on
       2  Wed, 11 Nov 1998 21:02:14 +0100.
       3
       4  It was downloaded from ftp://ftp.obsession.se/gentoo/
       5
       6  Upstream author: Emil Brink <emil@obsession.se>
       7
       8  This software is copyright (c) 1998-99 by Emil Brink, Obsession
       9  Development.
       10
       11 You are free to distribute this software under the terms of
       12 the GNU General Public License.
       12
       13 On Debian systems, the complete text of the GNU General Public
       14 License can be found in /usr/share/common-licenses/GPL file.


4.3 `changelog' 파일

이 파일은 꼭 필요하다. 이 파일은 Packaging Manual의 3.2.3절에서 설명한 고유의 형식으로 쓰여진다. 이 형식은 dpkg에 의해 사용되고 그 밖의 프로그램들이 버전(version), 개정(revision), 배포판 및 이 패키지의 긴급성(urgency)을 알아 내는데 사용한다.

초보자를 위해서도 이 파일은 중요하다. 수정한 모든 사실에 대해 문서화하는 것이 좋다. 여러분의 패키지를 내려받게 될 사람들이 이 파일을 통해 패키지에 해결되지 않은 문제가 있는지 즉각 알아 볼 수 있다. 이 파일은 바이너리 패키지에서 /usr/share/doc/gentoo/changelog.Debian.gz 파일로 저장된다.

다음은 dh_make가 만들어 주는 기본 changelog 파일이다:

       1  gentoo (0.9.12-1) unstable; urgency=low
       2
       3   * Initial Release.
       4
       5  -- Josip Rodin <jrodin@jagor.srce.hr> Wed, 11 Nov 1998 21:02:14 +0100
       6
       7  Local variables:
       8  mode: debian-changelog
       9  End:

(줄 번호를 앞에 추가했다.)

첫 줄은 패키지 이름, 버전, 배포판, 그리고 긴급성이다. 이름은 소스 패키지의 이름과 같아야 한다. 배포판은 unstable이나 experimental이 되어야 하고, 긴급성은 `low'보다 높은 걸로 바꾸지 않도록 한다. :-)

3-5 줄은 기록하는 부분으로, 여기에 이 패키지 개정판에 바뀐 점을 쓴다. (상위 소스코드의 변화를 쓰지 않는다 - 이 이런 목적의 파일은 상위 개발자가 만들고 /usr/doc/gentoo/changelog.gz 파일로 설치된다.) 맨 위에 별표(`*')로 시작하는 줄 앞에는 빈 줄이 들어가야 한다. 이 작업은 dch(1), emacs(1) (7-10번째 줄은 Emacs 편집기를 위한 정보이다), 혹은 이런 기능을 가진 문서 편집기를 이용해서 쉽게 할 수 있다. 이제 여러분은 다음과 같이 해서 이 파일 편집을 마치면 된다.

       1  gentoo (0.9.12-1) unstable; urgency=low
       2
       3   * Initial Release.
       4   * This is my first Debian package.
       5   * Adjusted the Makefile to fix $DESTDIR problems.
       6
       7  -- Josip Rodin <jrodin@jagor.srce.hr> Wed, 11 Nov 1998 21:02:14 +0100
       8
       9  Local variables:
       10  mode: debian-changelog
       11 End:

(줄번호를 앞에 붙였다.)

새로운 버전을 내놓을 때, 버전 번호를 증가시켜야 한다. 이 작업은 `dch -i` 혹은 직접 <version>-<revision>'를 실행해서 하고, 그 다음에 좋아하는 편집기를 이용해서 주석문을 쓴다. 팁: 필요한 날짜 형식을 쉽게 얻는 방법은? `822-date' 명령, 혹은 `date -R'을 사용한다.

새로운 버전 정보는 changelog 파일의 맨 위에 추가된다. 다음은 changelog의 미래 모습이다:

       1  gentoo (0.9.12-2) unstable; urgency=low
       2
       3   * Fixed a glitch in the menu file.
       4
       5  -- Josip Rodin <jrodin@jagor.srce.hr> Wed, 11 Nov 1998 22:15:39 +0100
       6
       7  gentoo (0.9.12-1) unstable; urgency=low
       8
       9   * Initial Release.
       10  * This is my first Debian package.
       11  * Adjusted the Makefile to fix $DESTDIR problems.
       12
       13 -- Josip Rodin <jrodin@jagor.srce.hr> Wed, 11 Nov 1998 21:02:14 +0100
       14
       15 Local variables:
       16 mode: debian-changelog
       17 End:

(줄번호를 앞에 추가했다.)

새로운 패키지 버전/개정판에 관해서는 뒤의 패키지 갱신, 6.4에서 보다 자세하게 읽을 수 있다.


4.4 `rules' 파일

이제 dpkg-buildpackage(1)가 실제로 패키지를 만들 때 사용할 규칙(rules)을 살펴볼 때다. 사실 이 파일은 `make -f'로 실행되는 또 다른 메이크파일이지만, 상위 소스에 들어 있는 메이크파일과는 다른 파일이다.

`rules' 파일은, 다른 메이크파일과 마찬가지로, 소스를 빌드하는 방법이 쓰여진 여러개의 룰(rule)로 구성되어 있다. 각 룰은 타겟 파일이름 혹은 수행할 동작의 이름(`build:'나 `install:' 따위)가 들어 있다. 실행하고 싶은 룰이 있으면 명령행 인자로 타겟을 넘겨줘야 한다 (예를 들어, `./debian/rules build'나 `./debain/rules install'). 타겟 이름 다음에, 디펜던시(dependency)를 쓴다. 디펜던시는 그 타겟이 의존하는 프로그램이나 파일이다. 그 다음에는 여러개의 명령어가 올 수 있고 (<tab>로 시작한다는 점에 주의!), 빈 줄이 발견되면 끝난다. 그 다음에 또 다른 룰이 시작된다. 빈 줄이 여러 개 나타나는 경우나, 해쉬(`#')로 시작하는 주석문은 무시된다.

지금쯤 혼란스러울 것이지만, dh_make가 기본적으로 만들어 주는 `rules' 파일을 들여다 보면 모든 것이 명확해 질 것이다. 더 자세한 사항은 info의 `make' 항목을 읽어본다.

dh_make가 만드는 rules 파일에서 중요한 점은, 이 파일은 단지 하나의 예일 뿐이라는 점이다. 간단한 패키지에서는 이 파일이 그대로 동작하겠지만 좀 더 복잡한 경우에는 그렇지 않다. 필요에 따라서 이 파일에 무언가를 추가하거나 지워야 한다. 바꾸지 말아야 할 것은 각 룰의 이름으로, 이 이름들은 Packaging Manual에 설명된 각종 빌드도구에서 이용한다.

       1  #!/usr/bin/make -f
       2  # Made with the aid of dh_make, by Craig Small
       3  # Sample debian/rules that uses debhelper. GNU copyright 1997 by Joey Hess.
       4  # Some lines taken from debmake, by Christoph Lameter.
       5
       6  # Uncomment this to turn on verbose mode.
       7  #export DH_VERBOSE=1
       8
       9  # This is the debhelper compatability version to use.
       10 export DH_COMPAT=1
       11
       12 build: build-stamp
       13 build-stamp:
       14	dh_testdir
       15
       16	# Add here commands to compile the package.
       17	$(MAKE)
       18
       19	touch build-stamp
       20
       21 clean:
       22	dh_testdir
       23	dh_testroot
       24	rm -f build-stamp
       25
       26	# Add here commands to clean up after the build process.
       27	-$(MAKE) clean
       28
       29	dh_clean
       30
       31 install: build-stamp
       32	dh_testdir
       33	dh_testroot
       34	dh_clean -k
       35	dh_installdirs
       36
       37	# Add here commands to install the package into debian/tmp.
       38	$(MAKE) install DESTDIR=`pwd`/debian/tmp
       39
       40 # Build architecture-independent files here.
       41 binary-indep: build install
       42 # We have nothing to do by default.
       43
       44 # Build architecture-dependent files here.
       45 binary-arch: build install
       46 #	dh_testversion
       47	dh_testdir
       48	dh_testroot
       49 #	dh_installdebconf
       50	dh_installdocs
       51	dh_installexamples
       52	dh_installmenu
       53 #	dh_installemacsen
       54 #	dh_installpam
       55 #	dh_installinit
       56	dh_installcron
       57	dh_installmanpages
       58	dh_installinfo
       59 #	dh_undocumented
       60	dh_installchangelogs
       61	dh_link
       62	dh_strip
       63	dh_compress
       64	dh_fixperms
       65	# You may want to make some executables suid here.
       66	dh_suidregister
       67 #	dh_makeshlibs
       68	dh_installdeb
       69 #	dh_perl
       70	dh_shlibdeps
       71	dh_gencontrol
       72	dh_md5sums
       73	dh_builddeb
       74
       75 binary: binary-indep binary-arch
       76 .PHONY: build clean binary-indep binary-arch binary install

(줄 번호를 앞에 붙였다.)

아마 셸 스크립트나 펄 스크립트를 통해 첫번째 줄과 같은 줄에 익숙해 있을 것이다. 그 줄은 해당 파일이 /usr/bin/make를 통해 실행된다는 사실을 OS에 알려 준다.

12번째 줄에서 19번째 줄은 `build' 룰(및 부수적인 build-stamp룰)로, 이 룰에서는 프로그램을 컴파일하는 프로그램을 실행시킨다.

21-29 줄에 쓰인 `clean' 룰은 필요없는 바이너리나 패키지 빌드 과정에서 자동으로 생성된 파일들을 지운다. 이 룰은 언제나 실행 가능해야 한다 (소스 트리가 이미 clean된 상태에서도!). 그러므로 강제 옵션을 (rm의 경우에는 `-f' 옵션) 이용하거나, 리턴 값을 무시한다 (명령 앞에 `-'를 붙인다).

`install' 룰의 인스톨 과정은 31번째 줄에서 시작한다. 기본적으로 프로그램 자체 Makefile의 `install' 룰을 실행하지만, `pwd`/debian/tmp 디렉토리에 추가한다 - gentoo의 Makefile에서 $(DESTDIR)를 설치 디렉토리로 지정한 이유가 바로 이것이다.

주석문이 나타내듯, 41번째 줄의 `binary-indep' 룰은 아키텍처와 무관한 패키지들을 만드는 데 사용된다. 하지만, 우리는 이렇게 빌드할 게 전혀 없기 때문에, 아무것도 쓸 필요가 없다. 여러분의 패키지가 `Architecture all'일 경우에는 이 룰에서 해당 패키지를 빌드하는 명령어를 쓰고, 대신에 다음 룰(`binary-arch')를 비워 놓아야 한다.

다음 45-73 줄의 `binary-arch' 룰에서는 debhelper 패키지에 있는 여러가지 작은 프로그램들을 실행해서 패키지를 데비안 정책에 맞도록 만든다.

이 프로그램들은 dh_로 시작하고, 그 뒤의 이름을 통해 이 작은 프로그램들이 실제로 무슨 일을 하는지 알아 챌 수 있을 것이다. 하지만 추가로 설명을 하면:

dh_* 스크립트가 무엇을 하는지, 어떤 옵션이 있는지에 대한 완전한 정보를 알고 싶으면 각각의 맨 페이지를 읽어 보면 된다. 위에 언급되지 않은 많은 dh_* 스크립트가 있고, 어떤 경우에는 그 스크립트가 필요할 수도 있다. 그 스크립트가 필요한 경우 debhelper 문서를 읽어보기 바란다.

binary-arch 부분은 필요하지 않은 기능을 주석처리하는 부분이다. gentoo의 경우 testversion, emacsen, pam, init, cron, manpages, info, undocumented, suidregister, makeshlib, 그리고 perl을 주석 처리했다. gentoo는 이 스크립트가 필요 없다. 또 60번째 줄에 `FIXES'를 추가할 것이다. `FIXES'는 상위 changelog 파일이다.

마지막 두 줄은 (설명되지 않은 줄도 마찬가지로), 패키징 매뉴얼에서 읽을 수 있는 바에 따르면 어느 정도 필요한 부분이다. 지금으로써는 특별히 알아야 할 만큼 중요하지 않다.


[ 이전 ] [ 저작권 ] [ 차례 ] [ 다음 ]
데비안 새로운 관리자 안내서
version 1.0, 25 January 2000.
Josip Rodin jrodin@jagor.srce.hr
번역: 류창우 cwryu@debian.org/