| 1 |
<!DOCTYPE debiandoc PUBLIC "-//DebianDoc//DTD DebianDoc//EN" [
|
| 2 |
|
| 3 |
<!-- textual data entities -->
|
| 4 |
<!-- first definition wins in SGML -->
|
| 5 |
<!ENTITY % default SYSTEM "default.ent"> %default;
|
| 6 |
|
| 7 |
]>
|
| 8 |
<!-- CVS revision of this document "$Revision: 1.13 $" -->
|
| 9 |
<!-- CVS revision of original english document "*.**" -->
|
| 10 |
|
| 11 |
|
| 12 |
<debiandoc>
|
| 13 |
|
| 14 |
<book>
|
| 15 |
|
| 16 |
<titlepag>
|
| 17 |
|
| 18 |
<!-- Debian New Maintainer's Guide -->
|
| 19 |
<title>데비안 새로운 관리자 안내서</title>
|
| 20 |
|
| 21 |
<author>Josip Rodin <email/jrodin@jagor.srce.hr/
|
| 22 |
</author>
|
| 23 |
|
| 24 |
<author>번역: 류창우 <email>cwryu@debian.org/
|
| 25 |
</author>
|
| 26 |
<author>번역: 양유성 <email>yooseong@debian.org/
|
| 27 |
</author>
|
| 28 |
|
| 29 |
<version>version 1.2, 6 April 2002.</version>
|
| 30 |
|
| 31 |
<copyright>
|
| 32 |
<copyrightsummary>Copyright © 1998-2000 Josip Rodin.</copyrightsummary>
|
| 33 |
|
| 34 |
<p>이 문서는 GNU General Public License 버전 2 이하에 따라 만들었다.
|
| 35 |
|
| 36 |
<p>이 문서는 다음 두 문서를 기본으로 만들었다:
|
| 37 |
|
| 38 |
<p>Making a Debian Package (AKA the Debmake Manual), copyright ©
|
| 39 |
1997 Jaldhar Vyas <email>jaldhar@debian.org</email>.
|
| 40 |
|
| 41 |
<p>The New-Maintainer's Debian Packaging Howto, copyright © 1997
|
| 42 |
Will Lowe <email>lowe@debian.org</email>.
|
| 43 |
|
| 44 |
<p>이 문서는 Josip Rodin의 Debian New Maintainer's Guide
|
| 45 |
1.0(2000/1/25)를 류창우<email>cwryu@debian.org</email>가 번역한
|
| 46 |
문서입니다(2000/8/20). 이를 1.2(2002/4/6)에 맞춰 양유성<email>
|
| 47 |
yooseong@debian.org</email>이 다시 수정하고 더해서 번역한 문서
|
| 48 |
입니다(2004/10/3).
|
| 49 |
</copyright>
|
| 50 |
|
| 51 |
</titlepag>
|
| 52 |
|
| 53 |
<toc sect>
|
| 54 |
|
| 55 |
<chapt id="start">"제대로 된 방법으로" 시작하기
|
| 56 |
|
| 57 |
<p>이 문서는 평범한 데비안 사용자에게 평범한 용어로 데비안 GNU/Linux
|
| 58 |
패키지를 만드는 방법을 (개발자가 되고 싶어하는) 설명하며, 실제
|
| 59 |
예제를 이용해 이 방법을 설명할 것이다. 옛날에 한 로마사람이 이렇게
|
| 60 |
말하길, <em>Longum iter est per preaecepta, breve et efficax per
|
| 61 |
exempla!</em> (규칙은 멀고 험한 길이지만, 예제와 함께 있으면 짧고
|
| 62 |
효율적이다!).
|
| 63 |
|
| 64 |
<p>데비안을 이렇게 최상의 위치를 차지하는 리눅스 배포판으로 만든 한
|
| 65 |
가지 이유는 데비안의 패키징 시스템이다. 이미 엄청나게 많은 양의
|
| 66 |
소프트웨어가 이미 데비안 형식으로 만들어져 있긴 하지만, 어떤
|
| 67 |
경우에는 이렇게 데비안 패키지로 만들어 있지 않은 소프트웨어를
|
| 68 |
설치해야 할 경우도 있다. 이런 경우 직접 패키지를 만드는 방법을 알고
|
| 69 |
싶어할 것이고 어쩌면 이 작업이 매우 어려운 일이라고 생각할 지도
|
| 70 |
모르겠다. 음, 당신이 리눅스에 진짜 초보자라면 이 일은 어렵다.
|
| 71 |
하지만 당신이 정말 그렇게 풋내기라면, 지금 이 문서를 읽고 있지는
|
| 72 |
않을 것이다. :-) 유닉스 프로그래밍에 대해 약간 알아야 하지만, 절대
|
| 73 |
유닉스 프로그래밍의 도사일 필요는 없다.
|
| 74 |
|
| 75 |
<p>확실한 것은: 여러분이 필요한 패키지를 적절히 만들고 관리하는 일이다.
|
| 76 |
작업을 할 우리 시스템을 위해서 실수를 하지 말아야하고 그러기 위해
|
| 77 |
관리자들은 기술적으로 뛰어나고 부지런해야 한다.
|
| 78 |
|
| 79 |
<p>이 문서는 약간 관계없을 수 있지만 하나 하나 차근차근 설명해 나가면서
|
| 80 |
여러분이 첫 패키지를 만드는데 도움을 주고 패키지를 계속 관리해 나가면서
|
| 81 |
나중에 하게될 다른 패키지를 만들고 관리하는데 도움을 줄 것이다.
|
| 82 |
|
| 83 |
<p>이 문서의 최신 버전은
|
| 84 |
<url name="http://www.debian.org/doc/maint-guide"
|
| 85 |
id="http://www.debian.org/doc/maint-guide">에서 온라인으로 읽을 수
|
| 86 |
있고, '<package/maint-guide-ko/' 패키지에 들어 있다.
|
| 87 |
|
| 88 |
<sect id="needprogs">개발작업에 필요한 프로그램
|
| 89 |
|
| 90 |
<p>시작하기 전에, 데비안 패키지 개발에 필요한 패키지들이 설치되어
|
| 91 |
있어야 한다. 다음의 패키지 목록에는 `essential'이나 `required'라고
|
| 92 |
되어 있는 패키지는 포함하지 않았다 (`essential'이나 `required'
|
| 93 |
패키지는 이미 설치되어 있다고 가정한다).
|
| 94 |
|
| 95 |
<p>이 문서의 수정본은 데비안 2.2 ('potato')와 3.0 ('woody')에 있는
|
| 96 |
패키지에 알맞게 업데이트 되었다.
|
| 97 |
|
| 98 |
<p>다음 패키지들은 데비안을 표준으로 설치했을 때 포함되어 있을
|
| 99 |
테니, 아마도 이미 설치되어 있을 것이다. 어쨌든 `dpkg -s 패키지'로
|
| 100 |
패키지가 설치되어 있는지 확인해 보자
|
| 101 |
|
| 102 |
<list>
|
| 103 |
<item><package/dpkg-dev/ - 이 패키지는 패키지를 풀고 빌드하며 데비안
|
| 104 |
소스패키지를 업로드하는데 필요하다.
|
| 105 |
(<manref name="dpkg-source" section="1"> 참고)
|
| 106 |
|
| 107 |
<item><package/file/ - 이 손쉬운 프로그램은 이 파일이 어떤형태 파일인지
|
| 108 |
알려준다. (<manref name="file" section="1"> 참고)
|
| 109 |
|
| 110 |
<item><em>binutils</em> - 오브젝트 파일을 어셈블하고 링크할 때
|
| 111 |
쓰이는 프로그램 - 프로그램을 만드는 도구들이다. (`info binutil'
|
| 112 |
참고)
|
| 113 |
|
| 114 |
<item><em>cpp</em> - C 전처리기. (<manref name="cpp" section="1">
|
| 115 |
참고)
|
| 116 |
|
| 117 |
<item><em>cpio</em> - tar나 zip과 같은 압축 프로그램이다. (<manref
|
| 118 |
name="cpio" section="1"> 참고)
|
| 119 |
|
| 120 |
<item><em>gcc</em> - GNU C 컴파일러. 대부분의 리눅스 프로그램은 C로
|
| 121 |
만들어졌다. (<manref name="gcc" section="1"> 참고)
|
| 122 |
이 패키지는 오브젝트 파일을 모으고 링크시키는 <package/binutils/
|
| 123 |
과 같은 몇몇 프로그램을 "끌어 온다"(<package/binutils-doc/ 패키지
|
| 124 |
에 있는 `info binutils'를 참고). 그리고 C 전처리기인 <package/cpp/
|
| 125 |
도 "가지고 온다"(<manref name="cpp" section="1">) 참고)
|
| 126 |
|
| 127 |
<item><package/g++/ - GNU C++ 컴파일러로 C++로 만든 프로그램이면
|
| 128 |
필요하다.(<manref name="g++" section="1"> 참고)
|
| 129 |
|
| 130 |
<item><em>libc6-dev</em> - gcc가 링크할 때 필요한 C 라이브러리와
|
| 131 |
오브젝트 파일을 만들 때 필요한 헤더 파일. 몇몇 프로그램은 libc5를
|
| 132 |
추천/사용할 수도 있지만, 새로운 버전(libc6)을 사용하는 사용하는 것이
|
| 133 |
좋다. ( <package/glibc-doc/ 패키지에 들어있는 `info libc' 참고)
|
| 134 |
|
| 135 |
<item><em>make</em> - 프로그램을 만드는 작업은 보통 여러 단계가
|
| 136 |
필요하다. 같은 명령어를 계속해서 다시 타이프하는 대신에,
|
| 137 |
`메이크파일'을 만들어서 make를 사용하면 이 과정을 자동화할 수 있다.
|
| 138 |
(`info make' 참고)
|
| 139 |
|
| 140 |
<item><em>patch</em> - 매우 유용한 프로그램으로, 원 파일과 패치된
|
| 141 |
파일의 차이점들이 열거되어 있는 파일(diff 프로그램으로 만든다)을
|
| 142 |
입력으로 받아들여 원 파일에 적용하면 패치된 버전을 만들어 낸다.
|
| 143 |
(<manref name="patch" section="1"> 참고)
|
| 144 |
|
| 145 |
<item><em>perl5</em> - 오늘날 유닉스 계열의 시스템에서 가장 많이
|
| 146 |
사용되는 인터프리터 스크립트 언어의 하나로, "유닉스의 스위스
|
| 147 |
군용칼"로 불리우기도 한다. (<manref name="perl" section="1"> 참고)
|
| 148 |
</list>
|
| 149 |
|
| 150 |
<p>다음 패키지도 설치해야할 것이다:
|
| 151 |
|
| 152 |
<list>
|
| 153 |
<item><package/autoconf/와 <package/automake/ - 많은 새로운 프로그램들은
|
| 154 |
설정 스크립트와 Makefiles을 쓰게 되는데 autoconf와 automake를 통해서
|
| 155 |
미리 도움을 받을 수 있다.(`info autoconf`, `info automake` 참고)
|
| 156 |
|
| 157 |
<item><em>dh-make</em>와 <em>debhelper</em> - dh-make는 뒤에서 나올
|
| 158 |
예제 패키지를 만들 때 처음 그 골격을 만들 때 필요하다. 이
|
| 159 |
프로그램이 패키지를 만들 때 debhelper에 있는 도구들을 쓴다.
|
| 160 |
debhelper 프로그램들은 패키지를 만들 때 꼭 필요한 프로그램은 아니지만,
|
| 161 |
새로운 관리자들에게는 <strong>강력하게</strong> 추천한다. 이 도구를
|
| 162 |
쓰는 편이 쓰지 않는 편보다 훨씬 시작하기도 쉽고, 나중에 관리하기도
|
| 163 |
쉽다. (<manref name="dh_make" section="1">, <manref
|
| 164 |
name="debhelper" section="1">, /usr/share/doc/debhelper/README 참고)
|
| 165 |
|
| 166 |
<item><em>devscripts</em> - 이 패키지에는 관리자들에게 쓸모있는 멋진
|
| 167 |
스크립트들이 들어 있다. 하지만, 이것도 패키지를 만드는 데 꼭
|
| 168 |
필요한 것은 아니다. (/usr/share/doc/devscripts/README.debian.gz 참고)
|
| 169 |
|
| 170 |
<item><em>fakeroot</em> - 빌드과정에서 필요한 `root가 되는' 일을
|
| 171 |
가상적으로 해 준다. (<manref name="fakeroot" section="1"> 참고)
|
| 172 |
|
| 173 |
<item><package/gnupg/ - 여러분이 전자 <em>서명</em>을 도와주는 패키지이다.
|
| 174 |
다른 사람에게 패키지를 배포할 때 꼭 필요하며 데비안 배포본에 패키지 작업
|
| 175 |
을 할 때 반드시 이 패키지를 써야한다.(<manref name="gpg" section="1"> 참고)
|
| 176 |
|
| 177 |
<item><package/g77/ - GNU 포트란 77 컴파일러인데 포트란으로 프로그램을
|
| 178 |
만들었다면 필요하다.(<manref name="g77" section="1">)
|
| 179 |
|
| 180 |
<item><package/gpc/ - GNU 파스칼 컴파일러인데 파스칼로 프로그램을 짰다면
|
| 181 |
필요하다. 파스칼 컴파일 작업에 유용한 Free 파스칼 컴파일러
|
| 182 |
<package/fp-compiler/도 있다.
|
| 183 |
(<manref name="gpc" section="1">, <manref name="ppc386" section="1">)
|
| 184 |
|
| 185 |
<item><package/xutils/ - 몇몇 프로그램은 X11용으로 나와서
|
| 186 |
이 프로그램을 써서 매크로 함수모음에서 Makefiles를 만들 수 있게 해준다.
|
| 187 |
(<manref name="imake" section="1">, <manref name="xmkmf" section="1">)
|
| 188 |
|
| 189 |
<item><em>lintian</em> - 패키지를 만든 다음에 흔히 범하는 실수가
|
| 190 |
있으면 알려주고 문제점을 설명해 준다. (<manref name="lintian"
|
| 191 |
section="1">, /usr/share/doc/lintian/lintian.html/index.html 참고)
|
| 192 |
</list>
|
| 193 |
|
| 194 |
|
| 195 |
<p>마지막으로, doc 섹션에 다음의 <em>매우 중요한</em> 패키지들이 있다:
|
| 196 |
|
| 197 |
<list>
|
| 198 |
<item><em>debian-policy</em> - 이 안에는 아카이브의 구조와 내용,
|
| 199 |
몇몇 운영체제 설계 이슈, 파일시스템 구조 표준(Filesystem Hierachy
|
| 200 |
Standard)이 들어 있고 무엇보다 (여러분에게) 가장 중요한 점은
|
| 201 |
배포판에 포함될 각 패키지가 지켜야 할 필수 조건들에 대해 설명한다는
|
| 202 |
것이다. (/usr/share/doc/debian-policy/policy.html/index.html 참고)
|
| 203 |
|
| 204 |
<item><em>developers-reference</em> - 패키징의 기술적인 점을 제외한
|
| 205 |
모든 문제를 다룬다. 아카이브의 구조, 어떻게 이름을 바꾸고, 주인없는
|
| 206 |
패키지로 만들고, 패키지를 떠맡고, 어떻게 NMU를 하고, 어떻게 버그를
|
| 207 |
관리하고, 언제 어디에 업로드를 해야 한다는 것 등이다.
|
| 208 |
(/usr/share/doc/developers-reference/developers-reference.html/index.html
|
| 209 |
참고)
|
| 210 |
</list>
|
| 211 |
|
| 212 |
<p>위에 주어진 짤막짤막한 설명은 각 패키지가 하는 일이 무엇이지
|
| 213 |
소개하는 것 뿐이다. 계속 나아가기 전에 각 프로그램의 문서를,
|
| 214 |
최소한 기본적인 사용법이라도 읽어보기 바란다. 지금은 문서를 읽는
|
| 215 |
일이 매우 부담스럽겠지만, 나중에 가면 문서를 읽어 보았다는 사실에
|
| 216 |
<em>매우</em> 다행스럽게 여길 것이다.
|
| 217 |
|
| 218 |
<p>주: <em>debmake</em> 패키지에는 dh-make와 비슷한 기능을 하는 프로그램이
|
| 219 |
들어 있다. 하지만 debmake의 사용법은 이 문서에서 설명되지
|
| 220 |
<strong>않는다</strong>. 자세한 정보는 <url name="Debmake 매뉴얼"
|
| 221 |
id="http://www.debian.org/~jaldhar/"> 참고.
|
| 222 |
|
| 223 |
<sect id="otherinfo">그 외의 정보
|
| 224 |
|
| 225 |
<p>두 가지 종류의 패키지를 만들 수 있다. 한가지는 소스 패키지이고,
|
| 226 |
다른 하나는 이진 패키지이다. 소스 패키지에는 프로그램으로 컴파일할
|
| 227 |
수 있는 코드가 들어 있다. 이진 패키지에는 최종 프로그램이
|
| 228 |
들어간다. 프로그램의 소스와 프로그램의 소스 패키지라는 식으로
|
| 229 |
용어를 섞어 쓰지 말아야 한다! 이 용어에 대해 자세한 사항을 알고
|
| 230 |
싶으면 다른 매뉴얼을 읽어 보기 바란다.
|
| 231 |
|
| 232 |
<p>데비안에서는 `관리자(maintainer)'라는 용어가 패키지를 만드는
|
| 233 |
사람을 가리킨다. 그리고 `상위 개발자(upstream author)'라는 말이
|
| 234 |
해당 프로그램을 만든 사람을 가리키고, `상위 관리자(upstream
|
| 235 |
maintainer)'가 데비안과 관계없이 프로그램을 현재 관리하고 있는
|
| 236 |
사람을 가리킨다. 보통 개발자와 상위 관리자는 같은 사람이다 - 어떤
|
| 237 |
경우에는 관리자까지 같은 사람일 수도 있다. 만약 여러분이 프로그램을
|
| 238 |
만들고, 그 프로그램을 데비안에 포함시키려고 한다면 주저하지 말고
|
| 239 |
관리자가 되기 위한 신청을 하기 바란다.
|
| 240 |
|
| 241 |
<p>패키지를 만든 다음에 (혹은 만드는 중에), 프로그램을 다음 배포본에
|
| 242 |
집어 넣고 싶을 경우에 (또 프로그램이 쓸모있는 경우, 물론 쓸모 있을
|
| 243 |
것이다) 공식 데비안 관리자가 되어야 한다. 그 과정은 Developer's
|
| 244 |
Reference에 설명되어 있다. 이 문서를 읽기 바란다.
|
| 245 |
|
| 246 |
<chapt id="first">첫 단계
|
| 247 |
|
| 248 |
<p><url name="개발자 코너" id="http://www.debian.org/devel/">
|
| 249 |
웹페이지에 들어 있는 문서는, 새로운 관리자가 확실히 어디서부터
|
| 250 |
어떻게 작업을 시작할지 알려주지 않는다. 하지만 이 문서에서는
|
| 251 |
(처음에는 별 상관없는) 매 단계 하나하나를 설명할 것이고, 독자가
|
| 252 |
첫번째 패키지를 만들 수 있도록 도와주고, 독자는 그 패키지의 다음
|
| 253 |
릴리즈를 만들고 나중에 다른 패키지를 만들 면서 경험을 얻을 수 있을
|
| 254 |
것이다.
|
| 255 |
|
| 256 |
<sect id="choose">프로그램 고르기
|
| 257 |
|
| 258 |
<p>아마도 여러분은 만들고자 하는 패키지를 벌써 골랐을 것이지만,
|
| 259 |
초보자를 위해 몇가지 짚고 넘어갈 사실을 써 놓았다:
|
| 260 |
|
| 261 |
<list>
|
| 262 |
<item>그 패키지가 이미 배포판 안에 있는지 확인한다. `stable'
|
| 263 |
배포판을 사용한다면, <url name="package search page"
|
| 264 |
id="http://www.debian.org/distrib/packages.html">에 가 보는 것이
|
| 265 |
가장 좋다. <strong>현재의</strong> `unstable' 배포판을 사용한다면
|
| 266 |
다음 명령어로 확인한다:
|
| 267 |
<example>
|
| 268 |
dpkg -s program
|
| 269 |
dpkg -l '*program*'
|
| 270 |
</example>
|
| 271 |
|
| 272 |
<p>이미 패키지가 있다면 그냥 설치해라! :-) 만일 그 패키지가 고아가 됐다면
|
| 273 |
-- 그 패키지 메인테이너가 "데비안 QA 모임"이라면 그 패키지를 가져올 수
|
| 274 |
있다. <url name="고아 패키지목록" id="http://www.debian.org/devel/wnpp/orphaned">
|
| 275 |
을 살표보고 <url name="입양할 패키지목록" id="http://www.debian.org/devel/wnpp/rfa_bypackage">
|
| 276 |
을 잘 살펴서 패키지가 도움이 필요한지 안한지 확인해야한다.
|
| 277 |
|
| 278 |
<p>만일 패키지를 입양할 수 있다면 <tt/apt-get source packagename/)를 해서
|
| 279 |
소스를 받고 테스트를 해봐라. 이 문서는 불행히 패키지 입양까지 친절하게
|
| 280 |
설명해주고 있지 않다. 고맙게도 이 패키지 안에는 이미 설정파일들이 잘
|
| 281 |
되어 있기 때문에 그리 어럽지 않게 패키지가 잘 돌아가게 할 수 있을 것이다.
|
| 282 |
그래도 아래에 나와있는 내용을 꼼꼼이 읽어두면 많은 도움을 받을 것이다.
|
| 283 |
|
| 284 |
<p>패키지가 새롭다면 데비안에 있는지 우선 찾아봐야한다. 다음 과정을
|
| 285 |
따라하면 된다:
|
| 286 |
</list>
|
| 287 |
|
| 288 |
<list>
|
| 289 |
<item>다른 누군가가 이미 패키지를 만들고 있는지
|
| 290 |
<url name="the list of packages being worked on" id="http://www.de.debian.org/devel/wnpp/being_packaged">.
|
| 291 |
에서 확인하라. 이미 다른 누군가가 만들고 있으면 그들에게 이야기를 해보고
|
| 292 |
그게 안된다면 누구도 관리하지 않는 새로운 패키지를 찾아본다.
|
| 293 |
</item>
|
| 294 |
|
| 295 |
<item>프로그램은 <strong>반드시</strong> 라이센스가 있어야 한다.
|
| 296 |
가능하다면 <url name="Debian Free Software Guidelines"
|
| 297 |
id="http://www.debian.org/social_contract.html#guidelines">에 맞는
|
| 298 |
자유로운 라이센스여야 한다. DFSG에 맞지 않는다고 해도 데비안의
|
| 299 |
`contrib'이나 `non-free' 섹션에 포함될 수 있다. 어느 섹션에
|
| 300 |
들어갈지 불확실하다면,
|
| 301 |
<email>debian-legal@lists.debian.org</email>에 물어본다. </item>
|
| 302 |
|
| 303 |
<item>프로그램은 절대 setuid root, 혹은 그 이상으로 실행되어서는
|
| 304 |
<strong>안 된다</strong>. setuid나 setgid인 프로그램이 없어야
|
| 305 |
한다.</item>
|
| 306 |
|
| 307 |
<item>프로그램은 데몬이어서는 안되고, */sbin 디렉토리에 들어가는
|
| 308 |
프로그램이어서도 안 된다.</item>
|
| 309 |
|
| 310 |
<item>프로그램은 이진 실행 프로그램이다. 아직 라이브러리는 시도해
|
| 311 |
보지 않는다.</item>
|
| 312 |
|
| 313 |
<item>잘 문서화되어 있어야 한다. 최소한 (모든 사람이) 이해할 수
|
| 314 |
있어야 한다.</item>
|
| 315 |
|
| 316 |
<item>프로그램의 개발자와 연락해서 개발자가 패키징에 동의하는지
|
| 317 |
확인한다. 프로그램에 관계된 문제가 발생했을 경우에 개발자와
|
| 318 |
연락할 수 있도록 하는 건 매우 중요한 일이므로, 관리되고 있지 않은
|
| 319 |
소프트웨어를 패키징하려고 노력하지 말라.</item>
|
| 320 |
|
| 321 |
<item>그리고 마지막이지만 중요한 것으로 그 프로그램이 제대로
|
| 322 |
동작하는지 알아야 하고, 어느정도 그 프로그램을 사용해 봤어야
|
| 323 |
한다.</item>
|
| 324 |
</list>
|
| 325 |
|
| 326 |
<p>물론 위의 사항들은 안전을 위한 조치일 뿐이며, setuid
|
| 327 |
데몬에서 뭘 잘못했을 경우, 분노한 사용자들로부터 여러분을 보호하기
|
| 328 |
위한 조치이다... 패키징에 좀 더 많은 경험을 쌓으면, 그러한 패키지도
|
| 329 |
만들 수 있을 것이다. 하지만, 가장 경험많은 개발자라 할지라도
|
| 330 |
의심스러울 경우에는 debian-devel 메일링 리스트에 물어본다. 그리고
|
| 331 |
그 곳의 사람들이 기쁜 마음으로 도움을 줄 것이다.
|
| 332 |
|
| 333 |
<p>여기에 대한 더 많이 알고 싶으면, Developer's Reference를 참고하기
|
| 334 |
바란다.
|
| 335 |
|
| 336 |
<sect id="getit">프로그램 가져와서 써 보기
|
| 337 |
|
| 338 |
<p>이제 첫번째로 할 일은 원 패키지를 찾아서 내려받는 일이다.
|
| 339 |
여러분은 이미 개발자의 홈페이지에서 가져온 소스 파일이 있다고
|
| 340 |
가정한다. 자유 리눅스 프로그램의 소스는 보통 tar/gzip 형식이고, .tar.gz이나 .tgz
|
| 341 |
확장자가 붙어 있고, 그 안에 `프로그램-버전'이라는 서브 디렉토리가
|
| 342 |
있어서 그 안에 모든 소스가 들어 있다. 여러분의 프로그램 소스가 다른
|
| 343 |
종류의 압축으로 되어 있다면 (예를 들어, 파일이름이 <TT>.Z</TT>나
|
| 344 |
<TT>.zip</TT>으로 끝난다면), 적당한 도구로 그 파일을 푼다. 올바르게
|
| 345 |
푸는 방법을 모르겠으면 debian-mentors에 물어본다 (힌트: `file
|
| 346 |
아카이브명.확장자'을 실행한다).
|
| 347 |
|
| 348 |
<p>예제로 나는 `gentoo'라는 이름의 프로그램을 사용할 것이다.
|
| 349 |
gentoo는 GTK+를 사용하는 X11용 파일 관리자이다. 이 프로그램은 이미
|
| 350 |
패키징되어 있고, 현재 이 패키지는 이 문서를 처음 작성할 당시의
|
| 351 |
버전과 비교하면 많은 부분이 달라져 있음에 유의한다.
|
| 352 |
|
| 353 |
<p>홈 디렉토리 밑에 `debian'이나 `deb' 등 적당한 이름의 디렉토리를
|
| 354 |
만든다 (이 경우에는 ~/gentoo/ 가 좋을 것이다). 그 안에 내려 받은
|
| 355 |
압축 파일을 놓고, 압축을 푼다 (`tar xzf gentoo-0.9.12.tar.gz'으로).
|
| 356 |
여기서 애러가 없어야 한다. 무시할 수 있는 애러라도 다른 사람들의
|
| 357 |
시스템에서 압축을 풀 때 문제가 발생할 수 있다. 그 사람들의
|
| 358 |
시스템에서는 그 애러가 무시할 수 없을 수 있기 때문이다.
|
| 359 |
|
| 360 |
<p>이제 새로운 `gentoo-0.9.12'라는 서브 디렉토리가 생긴다. 그
|
| 361 |
디렉토리로 들어가서 거기에 주어진 문서를 <strong>완전히</strong>
|
| 362 |
읽는다. 그 문서는 보통 README*, INSTALL*, *.lsm, 혹은 *.html이라는
|
| 363 |
파일 안에 들어 있다. 그 파일 안에 어떻게 프로그램을 컴파일하고
|
| 364 |
설치할 것인지에 관한 안내가 들어 있을 것이다. (보통 /usr/local/bin
|
| 365 |
디렉토리에 설치한다고 가정할 것이다; 패키징시에는 그렇게 하지 않는다.
|
| 366 |
자세한 것은 뒤의 <ref id="destdir">참고.)
|
| 367 |
|
| 368 |
<p>프로그램을 컴파일하고 설치하는 과정은 프로그램마다 다르지만,
|
| 369 |
최근의 프로그램은 대부분 `configure' 스크립트가 있어서 여러분의
|
| 370 |
시스템에 맞게 소스를 설정하고, 시스템이 소스를 컴파일할 수 있는 지를
|
| 371 |
검사해 준다. (`./configure'로) 설정을 한 후에, 프로그램은 보통
|
| 372 |
`make'로 컴파일된다. 어떤 경우엔 `make check'가 지원되고, 이
|
| 373 |
명령어는 거기에 포함된 자체 검사를 실행하게 된다. 목표 디렉토리로
|
| 374 |
설치하는 명령은 보통 `make install'이다.
|
| 375 |
|
| 376 |
<p>이제 프로그램을 컴파일하고 실행해 보면서, 이 프로그램이 문제 없이
|
| 377 |
동작하고 설치나 실행 과정에서 충돌이 생기지 않는지 확인한다.
|
| 378 |
|
| 379 |
<p>또 설치된 파일들을 지우려면 보통 `make uninstall'을 타이프한다.
|
| 380 |
그리고 빌드 디렉토리를 지우고 새롭게 빌드하려면 `make clean'(혹은 더
|
| 381 |
좋은 `make distclean')을 타이프한다.
|
| 382 |
|
| 383 |
<sect id="namever"> 패키지 이름과 버전
|
| 384 |
|
| 385 |
<p>완전히 깨끗한 (빌드하기 전 원래 모습의) 소스 디렉토리에서
|
| 386 |
시작해야 한다. 간단히 새로 압축을 푼 소스에서 시작할 수도 있다.
|
| 387 |
|
| 388 |
<p>프로그램이 제대로 빌드되었다면, 프로그램의 원래 이름을 소문자로
|
| 389 |
바꾼다 (이미 소문자가 아니라면). 그리고 소스 디렉토리의 이름을
|
| 390 |
<패키지명>-<버전>로 바꾼다.
|
| 391 |
|
| 392 |
<p>프로그램 이름이 한 단어 이상으로 구성되어 있다면, 한 단어로
|
| 393 |
바꾸거나 줄임말을 쓴다. 예를 들어, "John's little editor for X"
|
| 394 |
패키지는 johnledx, jle4x 등의 이름으로 바뀐다. 이름은 여러분이
|
| 395 |
결정하기 나름으로 어느 정도 적당한 (20자 정도) 길이보다 짧으면 된다.
|
| 396 |
|
| 397 |
<p>또 프로그램의 정확한 버전을 확인한다. 이 버전은 패키지 버전에
|
| 398 |
포함된다. 해당 소프트웨어가 X.Y.Z같이 버전이 매겨져 있지 않고,
|
| 399 |
릴리즈 날짜만 매겨져 있는 경우에는 그 날짜를 버전으로 사용하되,
|
| 400 |
"0.0."을 앞에 붙인다 (어느 날 갑자기 상위 관리자가 버전을 1.0과 같이
|
| 401 |
붙일 경우를 대비해서). 날짜가 1998년 12월 19일이라면
|
| 402 |
0.0.19981219라고 버전을 쓰면 될 것이다.
|
| 403 |
|
| 404 |
<p>어떤 프로그램은 아예 버전이 없는 경우도 있는데, 이 경우는 상위
|
| 405 |
관리자에게 연락해서 각 버전을 구분하는 어떤 방법이 있는지 확인한다.
|
| 406 |
|
| 407 |
<sect id="dh_make">"데비안 패키징" 시작하기
|
| 408 |
|
| 409 |
<p>프로그램 소스 디렉토리 안에 들어간 다음, 다음을 실행한다:
|
| 410 |
|
| 411 |
<p><example>
|
| 412 |
dh_make -e 여러분의.관리자@주소 -f ../gentoo-0.9.12.tar.gz
|
| 413 |
</example>
|
| 414 |
|
| 415 |
<p>당연히 "여러분의.관리자@주소"는 여러분의 전자우편 주소를 쓴다.
|
| 416 |
이 주소는 changelog와 그 밖의 파일들에 포함된다. 그 다음은 원 소스
|
| 417 |
압축 파일의 이름이다. 자세한 것은 <manref name="dh_make"
|
| 418 |
section="1"> 참고.
|
| 419 |
|
| 420 |
<p>몇가지 정보가 나타날 것이다. dh_make는 만들고자 하는 패키지가
|
| 421 |
어떤 종류인지 물어볼 것이다. gentoo는 한개의 이진 패키지이다 - 이
|
| 422 |
패키지 안에는 한개의 바이너리만 들어 있으므로, 한개의 .deb 파일만
|
| 423 |
필요하다 - 그러므로 우리는 첫번째 `s' 키를 누르고 화면의 저보를
|
| 424 |
확인한 다음 <엔터>를 누른다. 새로운 관리자인 여러분은 앞에서
|
| 425 |
설명한 대로, 여러개의 바이너리 패키지나, 라이브러리 패키지를 만들지
|
| 426 |
않는 것이 좋다. 사실 이러한 패키지를 만드는 것도 그리 어려운 것은
|
| 427 |
아니지만, 좀 더 지식이 필요하므로 여기서는 설명하지 않는다.
|
| 428 |
|
| 429 |
<p>dh_make를 <strong>오직 한번만</strong> 실행해야 한다는 것에
|
| 430 |
주의하자. dh_make는 이미 "데비안화 되어 있는(debianized)"
|
| 431 |
디렉토리에서 똑같이 여러번 실행할 경우 제대로 동작하지 않을 것이다.
|
| 432 |
여기서 앞으로 새로운 버전의 패키지 개정판을 릴리즈할 때는 dh_make가
|
| 433 |
아닌 다른 방법을 사용할 것이라는 사실을 알아 챌 수 있다. 이 방법에
|
| 434 |
관해서는 이 문서의 뒷 부분의 <ref id="update"> 참고.
|
| 435 |
|
| 436 |
<chapt id="modify">소스 코드 수정하기
|
| 437 |
|
| 438 |
<p>보통의 경우, 프로그램은 /usr/local 디렉토리 밑에 프로그램을
|
| 439 |
설치하게 된다. 하지만, 데비안 패키지는 이 디렉토리를 사용하면 안
|
| 440 |
된다. /usr/local 디렉토리은 시스템 관리자의 (혹은 사용자의) 개인적인
|
| 441 |
용도로 쓰이기 때문이다. 즉, 메이크파일부터 시작해서 프로그램의 빌드
|
| 442 |
시스템 내부를 살펴봐야 한다. 메이크파일은 <manref name="make"
|
| 443 |
section="1">가 프로그램을 빌드하는 과정을 자동화할 때 쓰이는
|
| 444 |
스크립트이다. 메이크파일에 관해 자세한 사항은 <ref id="rules">를
|
| 445 |
참고한다. 메이크파일에 대한 자세한 정보는 <ref id="rules"> 참고.
|
| 446 |
|
| 447 |
<p>여러분의 프로그램이 GNU <manref name="automake" section="1">나
|
| 448 |
<manref name="autoconf" section="1">를 쓰는지 확인한다. automake의
|
| 449 |
경우 소스 안에 Makefile.am 파일이 들어 있고, autoconf의 경우
|
| 450 |
Makefile.in 파일이 들어 있다. 이 경우에 이들 Makefile.am 혹은
|
| 451 |
Makefile.in 파일을 수정해야 할 수도 있다. automake는 Makefile.am
|
| 452 |
파일의 정보를 이용해 Makefile.in 파일을 만들고, 마찬가지로
|
| 453 |
./configure를 실행할 때마다 Makefile.in의 정보를 읽어서 Makefile을
|
| 454 |
만들어 내기 때문이다. Makefile.am 파일을 수정하려면 automake에 관한
|
| 455 |
지식이 필요한데, 여기에 관해서는 automake info 매뉴얼에서 읽을 수
|
| 456 |
있다. 반면, Makefile.in 파일 수정은 Makefile 수정과 거의 동일하다.
|
| 457 |
단지 변수에만 유의한다. @CFLAGS@나 @LN_S@와 같이 `@'로 둘러쌓인
|
| 458 |
문자열이 변수이고, 이 부분은 ./configure를 실행할 때마다 해당 변수의
|
| 459 |
값으로 바뀐다.
|
| 460 |
|
| 461 |
<p>이 문서의 지면상 사람들이 종종 맞닥드리는 문제점들에 대해 어떻게
|
| 462 |
수정해야 하는지 <em>전부</em> 안내하지는 못한다는 점을 기억해 둔다.
|
| 463 |
|
| 464 |
|
| 465 |
<sect id="destdir">서브 디렉토리에 설치
|
| 466 |
|
| 467 |
<p>대부분의 프로그램들은 여러분의 시스템 구조에 맞게 설치하는 방법이
|
| 468 |
있어서, 해당 실행 파일을 $PATH에 포함시킬 수 있다. 여기에 관해서는
|
| 469 |
해당 문서와 매뉴얼을 살펴본다. 해당 프로그램이 제대로 이 기능을
|
| 470 |
하는 지 확인한다. 이렇게 되면 이미 설치한 다른 것들과 같이 설치 될
|
| 471 |
것이고 이렇게 되면 패키지 도구가 어떤 파일이 여러분이 패키지에 들어
|
| 472 |
있는지 아닌지 확인하지 못한다.
|
| 473 |
|
| 474 |
<p>따라서 이 일을 할 필요가 있다: 패키징해주는 도구가 .deb을 만드는
|
| 475 |
임시 서브디렉토리에 프로그램을 설지한다. 이 디렉토리에 있는 모든
|
| 476 |
것은 패키지를 설치했을 때, 사용자 시스템에 설치될 것이고 단지 다른
|
| 477 |
점은 dpkg가 루트 디렉토리에 파일들을 설치한다는 점이다.
|
| 478 |
|
| 479 |
<p>이 임시파일은 debian 디렉토리 안에 생기고 이는
|
| 480 |
<file>debian/packagename</file>이다.
|
| 481 |
|
| 482 |
<p>기본적으로, 프로그램이 debian/tmp에 설치되긴 하지만, 루트
|
| 483 |
디렉토리에 설치되었을 때 제대로 동작하도록 설치해야 한다. 즉, .deb
|
| 484 |
패키지로 설치했을 때 제대로 동작해야 한다. GNU autoconf를 이용하는
|
| 485 |
프로그램의 경우에는 dh_make가 자동으로 여기에 필요한 해당 명령어들을
|
| 486 |
만들어 주기 때문에 매우 쉽다. 그러므로 이 `gentoo' 예제의 경우에는
|
| 487 |
이 부분을 읽지 않고 넘어가도 좋다. 그러나 그 외의 프로그램은 경우에
|
| 488 |
따라 Makefile을 수정해야 한다.
|
| 489 |
|
| 490 |
<p>다음은 gentoo의 Makefile에서 관련된 부분이다.
|
| 491 |
|
| 492 |
|
| 493 |
<p><example>
|
| 494 |
# Where to put binary on 'make install'?
|
| 495 |
BIN = /usr/bin
|
| 496 |
|
| 497 |
# Where to put icons on 'make install'?
|
| 498 |
ICONS = /usr/share/gentoo
|
| 499 |
</example>
|
| 500 |
|
| 501 |
|
| 502 |
<p>그런데 왜 하필이면 다른 디렉토리도 아니고, 이 디렉토리인가? 데비안
|
| 503 |
패키지는 <file>/usr/local</file>에 설치되지 않고 여기는 단지 시스템
|
| 504 |
관리자만 쓸 수 있다. 데비안에 있는 이러한 파일들은 모두
|
| 505 |
<file>/usr</file>에 있다.
|
| 506 |
|
| 507 |
<p>바이너리와 아이콘, 문서가 있는 위치는 파일시스템 구조
|
| 508 |
표준(/usr/share/doc/debian-policy/fhs/)에 지정되어 있다. 이 문서를
|
| 509 |
잘보고 어디에 여러분 패키지가 있어야할지 확인하기 바란다.
|
| 510 |
|
| 511 |
<p>자 이제 여러분은 바이너리를 /usr/local/bin이 아닌 /usr/bin에 설치
|
| 512 |
해야한다. 그리고 맨페이지는 /usr/local/man/man1가 아닌 /usr/share/man/man1
|
| 513 |
에 나와야한다. gentoo에 대한 매뉴얼 페이지가 있는지 확인하고 만일 없다면
|
| 514 |
만들고나서 /usr/share/man/man1에 설치하면 된다.
|
| 515 |
|
| 516 |
<p>몇몇 프로그램들은 이런 경로를 정의하는 makefile 변수를 쓰지 않는 경우
|
| 517 |
가 있다. 결국 C 소스를 수정해서 이를 수정하고 제대로 작동하게 만들어야
|
| 518 |
한다. 그럼 어떻게 찾아야하나? 다음과 같은 명령을 쓸 수 있다:
|
| 519 |
|
| 520 |
<p><example>
|
| 521 |
grep -nr -e 'usr/local/lib' --include='*.[c|h]' .
|
| 522 |
</example>
|
| 523 |
|
| 524 |
<p>grep 프로그램은 usr/local/lib이 나타난 파일의 이름과 그 파일의 몇번째
|
| 525 |
줄에서 usr/local/lib이 나타났는지 알려준다.
|
| 526 |
|
| 527 |
<p>여기를 편집하고 /usr/local/*를 usr/*로 바꾼다. 코드 나머지 부분에도
|
| 528 |
이 부분이 헷갈리지 않게 조심한다.
|
| 529 |
|
| 530 |
<p>이렇게 한 후에 install 타겟을 찾고 (`install:'으로 시작하는 줄을
|
| 531 |
찾는다), 위에서 수정한 변수 이외에 /usr/local/... 디렉토리의 이름을
|
| 532 |
직접 언급하는 부분이 있으면 바꾼다. gentoo의 경우에는 그런 경우가
|
| 533 |
있었고, 좀 보기 좋게 고쳐줘야 했다. 고치기 전의 gentoo의 install
|
| 534 |
타겟은 다음과 같았다:
|
| 535 |
|
| 536 |
<p><example>
|
| 537 |
# ----------------------------------------- Installation
|
| 538 |
|
| 539 |
# You're going to have to be root to do this!
|
| 540 |
install: gentoo
|
| 541 |
install ./gentoo $(BIN)
|
| 542 |
install icons $(ICONS)
|
| 543 |
install gentoorc-example $(HOME)/.gentoorc
|
| 544 |
</example>
|
| 545 |
|
| 546 |
<p>고친 후에는 다음과 같다:
|
| 547 |
<example>
|
| 548 |
# ----------------------------------------- Installation
|
| 549 |
|
| 550 |
# You're going to have to be root to do this!
|
| 551 |
install: gentoo-target
|
| 552 |
install -d $(BIN) $(ICONS) $(DESTDIR)/etc
|
| 553 |
install ./gentoo $(BIN)
|
| 554 |
install -m644 icons/* $(ICONS)
|
| 555 |
install -m644 gentoorc-example $(DESTDIR)/etc/gentoorc
|
| 556 |
</example>
|
| 557 |
|
| 558 |
<p>여기서 모든 규칙앞에 <tt>install -d</tt>이 있다는 것을 확인할 수 있다.
|
| 559 |
보통 /usr/local/bin과 다른 디렉토리가 이미 있어서 거기에서 `make install'
|
| 560 |
이 돌아가기 때문에 원래 Makefile에는 이 부분이 없다. 없는 디렉토리에 설
|
| 561 |
치하려고 하기 때문에 이런 디렉토리를 하나 하나 만들어야한다.
|
| 562 |
|
| 563 |
<p>추가 문서에 대한 정보는 여기서 할 수 있다:
|
| 564 |
|
| 565 |
<p><example>
|
| 566 |
install -d $(DESTDIR)/usr/share/doc/gentoo/html
|
| 567 |
cp -a docs/* $(DESTDIR)/usr/share/doc/gentoo/html
|
| 568 |
</example>
|
| 569 |
|
| 570 |
<p>주의 깊게 보면 `install:'줄에서 `gentoo'를 `gentoo-target'으로
|
| 571 |
바꾸었다는 사실을 알아 챌 것이다. 이런 걸 버그 수정이라고 한다 :-)
|
| 572 |
|
| 573 |
<p>이렇게 데비안과는 특별히 관계없는 문제점을 고쳤을 경우에는, 다음
|
| 574 |
프로그램 버전에 포함될 수 있도록 상위 관리자에게 꼭 알려주도록 한다.
|
| 575 |
debian/* 파일들은 보낼 필요 없고, 그 외의 패치를 보내야 한다.
|
| 576 |
패치를 보내기 전에 그리고 그 패치가 데비안 혹은 리눅스(심지어는
|
| 577 |
유닉스!)에만 특별히 관계된 사항이 아니라는 걸 확인하고 상위
|
| 578 |
관리자에게 보낸다.
|
| 579 |
|
| 580 |
<sect id="difflibs">라이브러리의 차이
|
| 581 |
|
| 582 |
<p>또 한가지 흔히 만나는 문제가 있다: 라이브러리는 각 플랫폼마다
|
| 583 |
다르다. 예를 들어 메이크파일에서 데비안에 없는, 심지어는 리눅스에
|
| 584 |
없는 라이브러리와 링크하려고 하는 경우도 있다. 이 경우에 데비안에
|
| 585 |
들어 있는, 같은 기능을 하는 라이브러리로 바꿔야 한다. 가장 좋은
|
| 586 |
방법은 그 줄을 주석처리하는 것이다. 지우지 않는 건 다른 플랫폼에서
|
| 587 |
컴파일하는 사람도 있을 것이고, 그 사람에게 문제의 원인을 알려주는
|
| 588 |
힌트를 남겨주기 위해서이다.
|
| 589 |
|
| 590 |
<p>예를 들어, 프로그램의 Makefile(혹은 Makfile.in)에 다음과 같이
|
| 591 |
쓰여 있으면 (그리고 프로그램이 컴파일되지 않으면):
|
| 592 |
|
| 593 |
<p><example>
|
| 594 |
LIBS = -lcurses -lsomething -lsomethingelse
|
| 595 |
</example>
|
| 596 |
|
| 597 |
<p>다음과 같이 바꾼다. 이제 컴파일이 될 것이다:
|
| 598 |
<p><example>
|
| 599 |
LIBS = -lncurses -lsomething -lsomethingelse
|
| 600 |
</example>
|
| 601 |
|
| 602 |
<p>(이 예가 가장 좋은 예가 아니다. libncurses 패키지가 현재는 libncurses.so에
|
| 603 |
심볼릭 링크가 걸려있지만 저자는 나쁘다고 생각하지 않을 것이다. 좋은 제안
|
| 604 |
있으면 알려주기 바란다. :-)
|
| 605 |
|
| 606 |
<chapt id="dreq">debian/ 아래 필요한 것들
|
| 607 |
|
| 608 |
<p>프로그램의 주 디렉토리 아래에 `debian'이라는
|
| 609 |
새로운 서브 디렉토리가 만들어져 있다. 이 디렉토리 안에는 여러개의
|
| 610 |
파일들이 들어 있다. 이제 패키지를 제대로 조정하려면 차례로 이
|
| 611 |
파일들을 편집한다. 이 중에 가장 중요한 파일은 `control',
|
| 612 |
`changelog', `copyright', 그리고 `rules'이다. 이 파일들은 모든
|
| 613 |
패키지에 필요하다.
|
| 614 |
|
| 615 |
<sect id="control">`control' 파일
|
| 616 |
|
| 617 |
<p>이 파일 안에는 dpkg나 dselect에서 패키지를 관리할 때 필요한
|
| 618 |
여러가지 값들이 들어 있다.
|
| 619 |
|
| 620 |
<p>다음은 dh_make가 자동으로 만들어 주는 control 파일이다:
|
| 621 |
|
| 622 |
<p><example>
|
| 623 |
1 Source: gentoo
|
| 624 |
2. Section: unknown
|
| 625 |
3 Priority: optional
|
| 626 |
4 Maintainer: Josip Rodin <joy-mg@debian.org>
|
| 627 |
5 Build-Depends: debhelper (>> 3.0.0)
|
| 628 |
6 Standards-Version: 3.5.2
|
| 629 |
7
|
| 630 |
8 Package: gentoo
|
| 631 |
9 Architecture: any
|
| 632 |
10 Depends: ${shlibs:Depends}
|
| 633 |
11 Description: <최대 60글자의 설명을 쓴다>
|
| 634 |
12 <긴 설명을 쓴다. 줄 앞에 공백으로 들여 쓴다>
|
| 635 |
</example>
|
| 636 |
(줄 번호를 앞에 붙였다.)
|
| 637 |
|
| 638 |
<p>1-6줄은 소스 패키지를 위한 컨트롤 정보이다. 첫번째 줄은 소스
|
| 639 |
패키지의 이름이다.
|
| 640 |
|
| 641 |
<p>첫번째 줄은 소스패키지 이름이다.
|
| 642 |
|
| 643 |
<p>두번째 줄은 소스패키지가 들어갈 배포본 섹션을 뜻한다.
|
| 644 |
|
| 645 |
<p>이미 알고 있을지도 모르지만, 데비안은 여러개의 섹션으로
|
| 646 |
나누어져 있다: main (자유 소프트웨어), non-free (자유 소프트웨어가
|
| 647 |
아닌 것들) 그리고 contrib (자유롭지 않은 소프트웨어에 의존하는
|
| 648 |
자유 소프트웨어). 이 아래에 이 패키지가 어떤 종류인가를 간단히
|
| 649 |
설명하는 서브섹션이 있다.
|
| 650 |
관리 전용 프로그램은 `admin', 기본적인 도구는 `base', 프로그래머의
|
| 651 |
도구는 `devel', 문서는 `doc', 라이브러리는 `libs', 이메일 읽기
|
| 652 |
프로그램 및 데몬은 `mail', 네트워크 프로그램과 데몬은 `net', X11에
|
| 653 |
관계된 프로그램은 `x11', 그 외에도 많이 있다.
|
| 654 |
|
| 655 |
<p>그러면 unknown을 x11로 바꾸면 된다.("main/" 이란 부분은 생략할
|
| 656 |
수 있다.)
|
| 657 |
|
| 658 |
<p>세번째 줄은 사용자가 이 패키지를 설치하는 일이 얼마나 중요한지를
|
| 659 |
나타낸다.
|
| 660 |
|
| 661 |
<p>Section과 Priority는 패키지를 정렬하고, 기본 패키지를
|
| 662 |
선택하는 용도로 <prgn/dselect/에서만 사용된다. 한번 패키지를
|
| 663 |
업로드하게 되면 아카이브 메인테이너가 이 두 부분을 덮어 쓰게
|
| 664 |
되고 이 사실은 이메일을 통해서 알려준다.
|
| 665 |
|
| 666 |
<p>gentoo의 우선순위는 보통이므로, 그대로 "optional"로 남겨둔다.
|
| 667 |
|
| 668 |
<p>네번째 줄은 관리자의 이름과 이메일 주소이다. 이 부분은 이메일에
|
| 669 |
필요한 "To: " 헤더를 포함하는 것을 뜻한다. 왜냐하면 패키지를 업로
|
| 670 |
드하면 버그 추적 시스템은 버그 이메일을 여러분에게 보낼 것이다.
|
| 671 |
쉼표와 &, 소괄호 사용을 하지마라.
|
| 672 |
|
| 673 |
<p>다섯번째 줄은 패키지를 빌드할 때 필요한 목록을 보여준다. gcc와
|
| 674 |
make같은 패키지를 뜻하게 되고 자세한 내용은 <package/build-essential/
|
| 675 |
를 보면 된다. 몇몇 비표준 컴파일러나 도구가 패키지를 빌드하는데
|
| 676 |
필요하면 이를 `Build-Depends'
|
| 677 |
줄을 추가하고, 거기에 필요한 패키지를 쓴다. 다양한 내용을 쉼표로
|
| 678 |
구별하고 바이너리 호환에 대한 설명을 잘 읽고 이부분에 넣으면
|
| 679 |
된다.
|
| 680 |
|
| 681 |
<p>이 부분에 Build-Depends-Indep, Build-Conflicts와 같은 것이 들어갈 수
|
| 682 |
있다. 다른 컴퓨터 플랫폼에서도 돌아가게 바이너리 패키지를 빌드하기
|
| 683 |
위해 소프트웨어를 자동으로 빌드하는데 이 부분을 쓸 수 있다.
|
| 684 |
빌드 의존에 대해서 자세한 내용을 알고 싶으면 정책 매뉴얼를 보고
|
| 685 |
다른 플랫폼과 포팅에 대해서는 데비안 개발 참고서를 보면된다.
|
| 686 |
|
| 687 |
<p>여기에 여러분 패키지를 빌드할때 어떤 패키지가 필요한지 할려주는
|
| 688 |
코드가 있다:
|
| 689 |
|
| 690 |
<example>
|
| 691 |
strace -f -o /tmp/log ./configure
|
| 692 |
# or make instead of ./configure, if the package doesn't use autoconf
|
| 693 |
for x in `dpkg -S $(grep open /tmp/log|\
|
| 694 |
perl -pe 's!.* open\(\"([^\"]*).*!$1!' |\
|
| 695 |
grep "^/"| sort | uniq|\
|
| 696 |
grep -v "^\(/tmp\|/dev\|/proc\)" ) 2>/dev/null|\
|
| 697 |
cut -f1 -d":"| sort | uniq`; \
|
| 698 |
do \
|
| 699 |
echo -n "$x (>=" `dpkg -s $x|grep ^Version|cut -f2 -d":"` "), "; \
|
| 700 |
done
|
| 701 |
</example>
|
| 702 |
|
| 703 |
<p> 여섯번째 줄은 이 패키지가 따라야할 데비안 정책 표준이고 패키지를
|
| 704 |
만들기 전에 반드시 읽어보길 바란다.
|
| 705 |
|
| 706 |
<p>여덟번째 줄은 바이너리 패키지 이름이고 이는 보통 소스 패키지와
|
| 707 |
같다. 아지만 꼭 그럴 이유는 없다.
|
| 708 |
|
| 709 |
<p>아홉번째 줄은 이 이진 패키지가 컴파일될 수 있는 CPU 아키텍처를
|
| 710 |
쓴다. 우리는 이 필드를 any라고 남겨놓고 <manref
|
| 711 |
name="dpkg-gencontrol" section="1"> 프로그램이 알아서 컴파일된
|
| 712 |
기계에 맞는 값을 집어 넣도록 한다(패키지 포팅에 대한 설명은
|
| 713 |
Developer's Reference 참고).
|
| 714 |
|
| 715 |
<p>만약 여러분의 패키지가 아키텍처에
|
| 716 |
무관하다면 (예를 들어, 셸 스크립트나 펄 스크립트, 문서일 경우), 이
|
| 717 |
부분을 "all"로 바꾸고, 뒷 부분의 <ref id="rules">에서 "binary-arch"
|
| 718 |
대신에 "binary-indep" 룰을 이용하는 방법을 살펴본다.
|
| 719 |
|
| 720 |
<p>열번째 줄은 데비안 패키징 시스템의 가장 강력한 기능들중
|
| 721 |
하나이다. 패키지는 여러가지 방법으로 또 다른 패키지들과 관계를 맺을
|
| 722 |
수 있다. Depends 말고, 패키지간의 관계를 나타내는 필드로는
|
| 723 |
Recommends:, Suggests:, Pre-Depends:, Conflicts:, Provides:, 그리고
|
| 724 |
Replaces:가 있다.
|
| 725 |
|
| 726 |
<p>dpkg, dselect, APT(그리고 APT 프론트엔드)와 같은 패키지 관리
|
| 727 |
도구는 보통 이 패키지 관계에 따라 동일하게 동작한다. 그렇지 않은
|
| 728 |
경우가 있는데, 다음에 설명한다. (<manref name="dpkg" section="8">,
|
| 729 |
<manref name="dselect" section="8">, + <manref name="apt"
|
| 730 |
section="8">, <manref name="aptitude" section="1">)
|
| 731 |
|
| 732 |
<p>각각의 의미는 다음과 같다:
|
| 733 |
|
| 734 |
<p><list>
|
| 735 |
<item>Depends:
|
| 736 |
<p>의존하는(depends) 패키지가 설치되어 있지 않으면 프로그램을
|
| 737 |
설치하지 않는다. 어떤 패키지가 없을 경우 이 프로그램이 절대
|
| 738 |
동작하지 않을 때만 (혹은 심각한 문제를 발생할 경우) Depends를
|
| 739 |
사용한다.
|
| 740 |
</item>
|
| 741 |
|
| 742 |
<item>Recommends:
|
| 743 |
<p>dselect는 추천하는(recommends) 패키지가 설치되어 있지 않으면 이
|
| 744 |
패키지를 설치하지 않는다. 하지만 dpkg와 apt-get은 추천하는 패키지가
|
| 745 |
설치되어 있지 않은 경우에도 설치한다. 여러분의 프로그램이 꼭 필요로
|
| 746 |
하지는 않지만, 대부분의 경우에 필요한 패키지인 경우에만 Recommends를
|
| 747 |
사용한다.</item>
|
| 748 |
|
| 749 |
<item>Suggests:
|
| 750 |
<p>사용자가 이 프로그램을 설치할 때, dselect는 제안하는(suggests)
|
| 751 |
패키지를 설치하도록 안내한다. Dpkg와 apt-get는 아무 신경쓰지 않고
|
| 752 |
설치한다. 꼭 필요한 패키지는 아니지만, 여러분의 프로그램과 함께
|
| 753 |
멋지게 동작하는 패키지에 대해서 Suggests를 사용한다.
|
| 754 |
</item>
|
| 755 |
|
| 756 |
<item>Pre-Depends:
|
| 757 |
<p>Depends보다 더 강력하다. 미리 의존하는(pre-depends) 패키지가
|
| 758 |
설치되고, <em>또 제대로 설정되었을 경우에만</em> 이 패키지를 설치할
|
| 759 |
수 있다. Pre-Depends는 삼가해서 사용하고, 꼭 debian-devel 메일링
|
| 760 |
리스트에서 토의한 다음에 사용한다. 즉: 아예 사용하지
|
| 761 |
않는다. :-)</item>
|
| 762 |
|
| 763 |
<item>Conflicts:
|
| 764 |
|
| 765 |
<p>충돌하는(conflicts) 패키지가 삭제되지 않는 한 패키지는 설치되지
|
| 766 |
않는다. 여러분의 프로그램이 어떤 패키지가 존재할 때 동작하지 않을
|
| 767 |
경우 (혹은 심각한 문제를 발생시키는 경우) Conflicts를 사용한다.
|
| 768 |
</item>
|
| 769 |
|
| 770 |
<item>Provides:
|
| 771 |
<p>여러개 중에 하나를 선택할 수 있는 패키지를 위해 가상
|
| 772 |
패키지(virtual package)가 정의되어 있다. 가상 패키지의 리스트는
|
| 773 |
/usr/share/doc/debian-policy/virtual-package-names-list.text.gz에서 구할
|
| 774 |
수 있다. Provides는 여러분의 프로그램이 가상 패키지를
|
| 775 |
제공(provides)하는 경우에 사용한다.</item>
|
| 776 |
|
| 777 |
<item>Replaces:
|
| 778 |
|
| 779 |
<p>당신의 프로그램이 다른 패키지의 파일들을 대체(replaces)하는 경우,
|
| 780 |
혹은 그 패키지 전체를 대체(replaces)하는 경우(이 경우에는
|
| 781 |
COnflicts:와 함께 사용한다)에 사용한다. 여기서 지정된 패키지의
|
| 782 |
파일들은 여러분의 패키지를 설치하기 전에 삭제된다.</item>
|
| 783 |
</list>
|
| 784 |
|
| 785 |
<p>이 필드들은 모두 통일된 문법이 있다. 이 필드에는 패키지 이름들을
|
| 786 |
쉼표로 구분해서 나열해 놓는다. 패키지 이름은 세로줄 표시 <tt>|</tt>
|
| 787 |
(파이프 표시) 를 이용해서 여러개 중에 하나를 선택하는 식으로 만들
|
| 788 |
수도 있다.
|
| 789 |
|
| 790 |
<p>각 패키지의 특정 버전을 지정할 수도 있다. 각 패키지
|
| 791 |
이름 다음에 괄호 안에 버전과 함께 그 앞에 버전번호의 관계를 나타내는
|
| 792 |
다음 관계 기호를 쓴다. 사용할 수 있는 관계는 <tt><<</tt>,
|
| 793 |
<tt><=</tt>, <tt>=</tt>, <tt>>=</tt> 그리고
|
| 794 |
<tt>>></tt>이다. 각각은 앞 버전, 이전 버전, 정확히 같은 버전,
|
| 795 |
이후 버전, 그리고 뒤 버전을 나타낸다.
|
| 796 |
|
| 797 |
<p><example>
|
| 798 |
Depends: foo (>= 1.2), libbar1 (= 1.3.4)
|
| 799 |
Conflicts: baz
|
| 800 |
Recommends: libbaz4 (>> 4.0.7)
|
| 801 |
Suggests: quux
|
| 802 |
Replaces: quux (<< 5), quux-foo (<= 7.6)
|
| 803 |
</example>
|
| 804 |
|
| 805 |
<p>마지막으로 알려줄 기능은 $(shlibs:Depends)이다. 이 부분은
|
| 806 |
<manref name="dh_shlibdeps" section="1">와 <manref
|
| 807 |
name="dh_gencontrol" section="1">에 의해 (나중에 설명) 자동으로
|
| 808 |
libc6나 xlib6g같은 여러분의 프로그램이 사용하는 동적 라이브러리의
|
| 809 |
이름으로 바뀐다. 즉, 각 라이브러리를 직접 지정할 필요가 없다.
|
| 810 |
|
| 811 |
<p>여기서 Depends: 부분은 그대로 놓아둔다. 그리고 여기에 다른 필요한
|
| 812 |
<tt>Suggests: file</tt>을 넣어서 gentoo가 file 프로그램/패키지가
|
| 813 |
주는 기능을 쓸 수 있다.
|
| 814 |
|
| 815 |
<p>열한번째 줄은 짤막한 설명이다. 대부분의 사람들은 80 컬럼 화면을
|
| 816 |
사용하므로 이 부분은 60자 이상되지 않도록 않다. 나는 이 부분을
|
| 817 |
"fully GUI configurable GTK+ file manager"라고 바꿔 놓을 것이다.
|
| 818 |
|
| 819 |
<p>열두번째 줄은 긴 설명이 들어간다. 이 부분은 패키지에 대해 좀 더
|
| 820 |
자세히 설명하는 한개의 문단이다. 각 줄의 첫번째 열은 공백이어야
|
| 821 |
한다. 절대로 빈 줄이 들어가서는 안 된다. 빈 줄이 들어가야 할
|
| 822 |
곳에서는 대신에 .을 쓴다. 또, 이렇게 긴 설명을 끝낸 다음에는 빈
|
| 823 |
줄을 두개 이상 넣지 않는다.
|
| 824 |
|
| 825 |
<p>다음은 수정된 control 파일이다:
|
| 826 |
<p><example>
|
| 827 |
1 Source: gentoo
|
| 828 |
2 Section: x11
|
| 829 |
3 Priority: optional
|
| 830 |
4 Maintainer: Josip Rodin <joy-mg@debian.org>
|
| 831 |
5 Build-Depends: debhelper (>> 3.0.0), xlibs-dev, libgtk1.2-dev, libglib1.2-dev
|
| 832 |
6 Standards-Version: 3.5.2
|
| 833 |
7
|
| 834 |
8 Package: gentoo
|
| 835 |
9 Architecture: any
|
| 836 |
10 Depends: ${shlibs:Depends}
|
| 837 |
11 Suggests: file
|
| 838 |
12 Description: fully GUI configurable X file manager using GTK+
|
| 839 |
13 gentoo is a file manager for Linux written from scratch in pure C. It
|
| 840 |
14 uses the GTK+ toolkit for all of its interface needs. gentoo provides
|
| 841 |
15 100% GUI configurability; no need to edit config files by hand and re-
|
| 842 |
16 start the program. gentoo supports identifying the type of various
|
| 843 |
17 files (using extension, regular expressions, or the 'file' command),
|
| 844 |
18 and can display files of different types with different colors and icons.
|
| 845 |
19 .
|
| 846 |
20 gentoo borrows some of its look and feel from the classic Amiga file
|
| 847 |
21 manager "Directory OPUS" (written by Jonathan Potter).
|
| 848 |
</example>
|
| 849 |
(줄번호는 여기서 넣은 것이다.)
|
| 850 |
|
| 851 |
<sect id="copyright">`copyright' 파일
|
| 852 |
|
| 853 |
<p>이 파일에는 해당 패키지의 상위 정보, 저작권과 라이센스 정보가
|
| 854 |
들어 있다. 이 형식은 데비안 정책에서 정의되지 않았지만, 그 내용은
|
| 855 |
지정되어 있다 (섹션 12.5).
|
| 856 |
|
| 857 |
<p>dh_make가 기본적으로 만드는 파일이 있는데, 다음과 같다:
|
| 858 |
|
| 859 |
<p><example>
|
| 860 |
1 This package was debianized by Josip Rodin <jrodin@jagor.srce.hr> on
|
| 861 |
2 Wed, 11 Nov 1998 21:02:14 +0100.
|
| 862 |
3
|
| 863 |
4 It was downloaded from <fill in ftp site>
|
| 864 |
5
|
| 865 |
6 Upstream Author(s): <put author(s) name and email here>
|
| 866 |
7
|
| 867 |
8 Copyright:
|
| 868 |
9
|
| 869 |
10 <Must follow here>
|
| 870 |
</example>
|
| 871 |
(줄 번호를 앞에 붙였다)
|
| 872 |
|
| 873 |
<p>이 파일에 써 넣어야 할 매우 중요한 것은 첫째로 이 패키지를 가져온
|
| 874 |
위치이고, 또 하나는 실제 저작권 명시와 라이센스이다. GNU GPL 혹은
|
| 875 |
LGPL, BSD, Artistic 라이센스와 같은 유명한 자유 소프트웨어
|
| 876 |
라이센스가 아니라면, 완전한 라이센스를 포함해야 한다. 이런 유명한
|
| 877 |
라이센스의 경우에는 모든 데비안 시스템에 있는
|
| 878 |
/usr/share/common-licenses/ 디렉토리 밑의 해당 파일을 참고하면
|
| 879 |
된다. Gentoo의 라이센스는 GNU General Public License이므로
|
| 880 |
copyright 파일을 다음과 같이 바꿀 것이다:
|
| 881 |
|
| 882 |
<p><example>
|
| 883 |
1 This package was debianized by Josip Rodin <jrodin@jagor.srce.hr> on
|
| 884 |
2 Wed, 11 Nov 1998 21:02:14 +0100.
|
| 885 |
3
|
| 886 |
4 It was downloaded from ftp://ftp.obsession.se/gentoo/
|
| 887 |
5
|
| 888 |
6 Upstream author: Emil Brink <emil@obsession.se>
|
| 889 |
7
|
| 890 |
8 This software is copyright (c) 1998-99 by Emil Brink, Obsession
|
| 891 |
9 Development.
|
| 892 |
10
|
| 893 |
11 You are free to distribute this software under the terms of
|
| 894 |
12 the GNU General Public License.
|
| 895 |
12
|
| 896 |
13 On Debian systems, the complete text of the GNU General Public
|
| 897 |
14 License can be found in /usr/share/common-licenses/GPL file.
|
| 898 |
</example>
|
| 899 |
|
| 900 |
<sect id="changelog">`changelog' 파일
|
| 901 |
|
| 902 |
<p>이 파일은 꼭 필요하다. 이 파일은 정책 문서 4.4j8 "debian/changelog"
|
| 903 |
에 잘 나와있다. 이 형식은 dpkg에 의해 사용되고 그
|
| 904 |
밖의 프로그램들이 버전(version), 개정(revision), 배포판 및 이
|
| 905 |
패키지의 긴급성(urgency)을 알아 내는데 사용한다.
|
| 906 |
|
| 907 |
<p>초보자를 위해서도 이 파일은 중요하다. 수정한 모든 사실에 대해
|
| 908 |
문서화하는 것이 좋다. 여러분의 패키지를 내려받게 될 사람들이 이
|
| 909 |
파일을 통해 패키지에 해결되지 않은 문제가 있는지 즉각 알아 볼 수
|
| 910 |
있다. 이 파일은 바이너리 패키지에서
|
| 911 |
/usr/share/doc/gentoo/changelog.Debian.gz 파일로 저장된다.
|
| 912 |
|
| 913 |
<p>다음은 dh_make가 만들어 주는 기본 changelog 파일이다:
|
| 914 |
|
| 915 |
<p>
|
| 916 |
<example>
|
| 917 |
1 gentoo (0.9.12-1) unstable; urgency=low
|
| 918 |
2
|
| 919 |
3 * Initial Release.
|
| 920 |
4
|
| 921 |
5 -- Josip Rodin <jrodin@jagor.srce.hr> Wed, 11 Nov 1998 21:02:14 +0100
|
| 922 |
6
|
| 923 |
</example>
|
| 924 |
(줄 번호를 앞에 추가했다.)
|
| 925 |
|
| 926 |
<p>첫 줄은 패키지 이름, 버전, 배포판, 그리고 긴급성이다. 이름은
|
| 927 |
소스 패키지의 이름과 같아야 한다. 배포판은 unstable이나
|
| 928 |
experimental이 되어야 하고, 긴급성은 `low'보다 높은 걸로 바꾸지
|
| 929 |
않도록 한다. :-)
|
| 930 |
|
| 931 |
<p>3-5 줄은 기록하는 부분으로, 여기에 이 패키지 개정판에 바뀐 점을
|
| 932 |
쓴다. (상위 소스코드의 변화를 쓰지 않는다 - 이 이런 목적의 파일은
|
| 933 |
상위 개발자가 만들고 /usr/doc/gentoo/changelog.gz 파일로 설치된다.)
|
| 934 |
맨 위에 별표(`*')로 시작하는 줄 앞에는 빈 줄이 들어가야 한다. 이
|
| 935 |
작업은 <manref name="dch" section="1">로 하거나 텍스트 편집기를
|
| 936 |
쓸 수 있다.
|
| 937 |
|
| 938 |
<p>다음과 같이 해서 이 파일 편집을 마치면 된다.
|
| 939 |
|
| 940 |
<p><example>
|
| 941 |
1 gentoo (0.9.12-1) unstable; urgency=low
|
| 942 |
2
|
| 943 |
3 * Initial Release.
|
| 944 |
4 * This is my first Debian package.
|
| 945 |
5 * Adjusted the Makefile to fix $DESTDIR problems.
|
| 946 |
6
|
| 947 |
7 -- Josip Rodin <jrodin@jagor.srce.hr> Wed, 11 Nov 1998 21:02:14 +0100
|
| 948 |
8
|
| 949 |
</example>
|
| 950 |
(줄번호를 앞에 붙였다.)
|
| 951 |
|
| 952 |
<p><ref id="update">에 있는 changelog 파일 업데이트 방법을 자세히 읽어볼
|
| 953 |
필요가 있다.
|
| 954 |
|
| 955 |
<sect id="rules">`rules' 파일
|
| 956 |
|
| 957 |
<p>이제 <manref name="dpkg-buildpackage" section="1">가 실제로
|
| 958 |
패키지를 만들 때 사용할 규칙(rules)을 살펴볼 때다. 사실 이 파일은
|
| 959 |
또 다른 메이크파일이지만, 상위 소스에 들어 있는 메이크파일과는 다른
|
| 960 |
파일이다. debian/ 안에 들어 있는 다른 파일들과 달리 이 파일은 실행
|
| 961 |
가능한 파일이다.
|
| 962 |
|
| 963 |
<p>`rules' 파일은, 다른 메이크파일과 마찬가지로, 소스를 빌드하는
|
| 964 |
방법이 쓰여진 여러개의 룰(rule)로 구성되어 있다. 각 룰은 타겟
|
| 965 |
파일이름 혹은 수행할 동작의 이름(`build:'나 `install:' 따위)가 들어
|
| 966 |
있다. 실행하고 싶은 룰이 있으면 명령행 인자로 타겟을 넘겨줘야 한다
|
| 967 |
(예를 들어, `./debian/rules build'나 `./debian/rules install').
|
| 968 |
타겟 이름 다음에, 디펜던시(dependency)를 쓴다. 디펜던시는 그 타겟이
|
| 969 |
의존하는 프로그램이나 파일이다. 그 다음에는 여러개의 명령어가 올 수
|
| 970 |
있고 (<tab>로 시작한다는 점에 주의!), 빈 줄이 발견되면 끝난다.
|
| 971 |
그 다음에 또 다른 룰이 시작된다. 빈 줄이 여러 개 나타나는 경우나,
|
| 972 |
해쉬(`#')로 시작하는 주석문은 무시된다.
|
| 973 |
|
| 974 |
<p>지금쯤 혼란스러울 것이지만, dh_make가 기본적으로 만들어 주는
|
| 975 |
`rules' 파일을 들여다 보면 모든 것이 명확해 질 것이다. 더 자세한
|
| 976 |
사항은 info의 `make' 항목을 읽어본다.
|
| 977 |
|
| 978 |
<p>dh_make가 만드는 rules 파일에서 중요한 점은, 이 파일은 단지
|
| 979 |
하나의 예일 뿐이라는 점이다. 간단한 패키지에서는 이 파일이 그대로
|
| 980 |
동작하겠지만 좀 더 복잡한 경우에는 그렇지 않다. 필요에 따라서 이
|
| 981 |
파일에 무언가를 추가하거나 지워야 한다. 바꾸지 말아야 할 것은 각
|
| 982 |
룰의 이름으로, 이 이름들은 정책 문서에에 설명된 각종
|
| 983 |
빌드도구에서 이용한다.
|
| 984 |
|
| 985 |
<p>dh_make가 만든 기본으로 나오는 debian/rules 파일이 예이다:
|
| 986 |
|
| 987 |
<p><example>
|
| 988 |
&makefile;
|
| 989 |
</example>
|
| 990 |
(줄 번호를 앞에 붙였다.)
|
| 991 |
|
| 992 |
<p>아마 셸 스크립트나 펄 스크립트를 통해 첫번째 줄과 같은 줄에
|
| 993 |
익숙해 있을 것이다. 그 줄은 해당 파일이 /usr/bin/make를 통해 실행된다는
|
| 994 |
사실을 OS에 알려 준다.
|
| 995 |
|
| 996 |
<p>12번째 줄에서 19번째 줄은 `build' 룰(및 부수적인 build-stamp룰)로,
|
| 997 |
이 룰에서는 프로그램을 컴파일하는 프로그램을 실행시킨다.
|
| 998 |
|
| 999 |
<p>21-29 줄에 쓰인 `clean' 룰은 필요없는 바이너리나 패키지 빌드
|
| 1000 |
과정에서 자동으로 생성된 파일들을 지운다. 이 룰은 언제나 실행
|
| 1001 |
가능해야 한다 (소스 트리가 이미 clean된 상태에서도!). 그러므로 강제
|
| 1002 |
옵션을 (rm의 경우에는 `-f' 옵션) 이용하거나, 리턴 값을 무시한다
|
| 1003 |
(명령 앞에 `-'를 붙인다).
|
| 1004 |
|
| 1005 |
<p>`install' 룰의 인스톨 과정은 31번째 줄에서 시작한다. 기본적으로
|
| 1006 |
프로그램 자체 Makefile의 `install' 룰을 실행하지만, `pwd`/debian/tmp
|
| 1007 |
디렉토리에 추가한다 - gentoo의 Makefile에서 $(DESTDIR)를 설치
|
| 1008 |
디렉토리로 지정한 이유가 바로 이것이다.
|
| 1009 |
|
| 1010 |
<p>주석문이 나타내듯, 41번째 줄의 `binary-indep' 룰은 아키텍처와
|
| 1011 |
무관한 패키지들을 만드는 데 사용된다. 하지만, 우리는 이렇게 빌드할
|
| 1012 |
게 전혀 없기 때문에, 아무것도 쓸 필요가 없다. 여러분의 패키지가
|
| 1013 |
`Architecture all'일 경우에는 이 룰에서 해당 패키지를 빌드하는
|
| 1014 |
명령어를 쓰고, 대신에 다음 룰(`binary-arch')를 비워 놓아야 한다.
|
| 1015 |
|
| 1016 |
<p>다음 45-73 줄의 `binary-arch' 룰에서는 debhelper 패키지에 있는
|
| 1017 |
여러가지 작은 프로그램들을 실행해서 패키지를 데비안 정책에 맞도록
|
| 1018 |
만든다.
|
| 1019 |
|
| 1020 |
<p>이 프로그램들은 dh_로 시작하고, 그 뒤의 이름을 통해 이 작은
|
| 1021 |
프로그램들이 실제로 무슨 일을 하는지 알아 챌 수 있을 것이다. 하지만
|
| 1022 |
추가로 설명을 하면:
|
| 1023 |
|
| 1024 |
<list>
|
| 1025 |
<item><manref name="dh_testdir" section="1">는 올바른 디렉토리(소스
|
| 1026 |
디렉토리 맨 위)에서 빌드하는 지 확인한다.
|
| 1027 |
<item><manref name="dh_testroot" section="1">는 root 권한이 있는지
|
| 1028 |
검사한다. root 권한은 binary*, clean 타겟에서 필요하다.
|
| 1029 |
<item><manref name="dh_installmanpages" section="1">는 소스 트리에서
|
| 1030 |
찾을 수 있는 모든 맨 페이지를 설치 위치로 복사한다. (조심,
|
| 1031 |
맨페이지가 아닌 것도 복사할 수 있음.)
|
| 1032 |
<item><manref name="dh_strip" section="1">은 실행 파일과
|
| 1033 |
라이브러리에서 디버깅 헤더를 제거해서 크기를 작게 만든다.
|
| 1034 |
<item><manref name="dh_compress" section="1">는 4 킬로바이트보다 큰 맨
|
| 1035 |
페이지와 문서를 gzip으로 압축한다.
|
| 1036 |
<item><manref name="dh_installdeb" section="1">은 패키지와 관련된
|
| 1037 |
파일들을 debian/tmp 디렉토리로 복사한다.
|
| 1038 |
<item><manref name="dh_shlibdeps" section="1">는 라이브러리와 실행
|
| 1039 |
파일의 동적 라이브러리에 대한 의존성을 검사한다.
|
| 1040 |
<item><manref name="dh_gencontrol" section="1">은 control 파일에
|
| 1041 |
내용을 추가하고 control 파일을 설치한다.
|
| 1042 |
<item><manref name="dh_md5sums" section="1">는 패키지 내의 모든
|
| 1043 |
파일에 대하여 MD5 checksum을 만든다.
|
| 1044 |
</list>
|
| 1045 |
|
| 1046 |
<p>dh_* 스크립트가 무엇을 하는지, 어떤 옵션이 있는지에 대한 완전한
|
| 1047 |
정보를 알고 싶으면 각각의 맨 페이지를 읽어 보면 된다. 위에 언급되지
|
| 1048 |
않은 많은 dh_* 스크립트가 있고, 어떤 경우에는 그 스크립트가 필요할
|
| 1049 |
수도 있다. 그 스크립트가 필요한 경우 debhelper 문서를 읽어보기
|
| 1050 |
바란다.
|
| 1051 |
|
| 1052 |
<p>binary-arch 부분은 필요하지 않은 기능을 주석처리하는 부분이다.
|
| 1053 |
gentoo의 경우 testversion, emacsen, pam, init, cron, manpages, info,
|
| 1054 |
undocumented, suidregister, makeshlib, 그리고 perl을 주석 처리했다.
|
| 1055 |
gentoo는 이 스크립트가 필요 없다. 또 60번째 줄에 `FIXES'를 추가할
|
| 1056 |
것이다. `FIXES'는 상위 changelog 파일이다.
|
| 1057 |
|
| 1058 |
<p>마지막 두 줄은 (설명되지 않은 줄도 마찬가지로), 패키징 매뉴얼에서
|
| 1059 |
읽을 수 있는 바에 따르면 어느 정도 필요한 부분이다. 지금으로써는
|
| 1060 |
특별히 알아야 할 만큼 중요하지 않다.
|
| 1061 |
|
| 1062 |
<chapt id="dother">debian/ 디렉토리에 있는 그 밖의 파일
|
| 1063 |
|
| 1064 |
<p>debian/ 서브 디렉토리 안에 몇 개의 파일이 더 있다. 대부분은
|
| 1065 |
`.ex'가 뒤에 붙어 있는데, 예제 파일이라는 뜻이다. 그들의 기능을
|
| 1066 |
쓰고 싶으면 관련된 문서를 (정책 매뉴얼) 참조해서, 그 파일이름에서
|
| 1067 |
`.ex'를 뺀 다음 편집하고, `rules' 파일을 수정해서 이용하면 된다. 이
|
| 1068 |
파일 중에서 자주 이용되는 것들은 다음에서 설명한다.
|
| 1069 |
|
| 1070 |
<sect id="readdeb">README.debian
|
| 1071 |
|
| 1072 |
<p>그 외에 세부적인 사항이나, 원 패키지와 여러분의 데비안화 된
|
| 1073 |
버전간의 차이점이 이 파일에 쓰여져야 한다. 다음은 dh_make가 만들어
|
| 1074 |
주는 README.debian이다:
|
| 1075 |
|
| 1076 |
<example>
|
| 1077 |
gentoo for Debian
|
| 1078 |
----------------------
|
| 1079 |
|
| 1080 |
<possible notes regarding this package - if none, delete this file>
|
| 1081 |
|
| 1082 |
Josip Rodin <jrodin@jagor.srce.hr>, Wed, 11 Nov 1998 21:02:14 +0100
|
| 1083 |
</example>
|
| 1084 |
|
| 1085 |
<p>여기에 쓸만한 것이 아무것도 없으므로 - 이 파일을 지워도 좋다.
|
| 1086 |
아니면, 이 파일을 README.Debian으로 바꿔도 된다 :-)
|
| 1087 |
|
| 1088 |
<sect id="conffiles">conffiles
|
| 1089 |
|
| 1090 |
<p>소프트웨어에 관련하여 가장 황당한 일중 하나는, 업그레이드하면서
|
| 1091 |
전에 있던 파일들이 지워지면서 다시 오랜 시간과 노력을 들여
|
| 1092 |
프로그램을 커스터마이즈해야 하는 경우이다. 데비안에서는 설정
|
| 1093 |
파일들이 무엇인지 표시해 놓고 패키지를 업그레이드할 때 옛날 설정
|
| 1094 |
파일을 유지할 것인가 아닌가를 물어보도록 함으로써 이런 문제를
|
| 1095 |
해결한다. 여러분은 conffiles라는 파일 안에 각 (보통 /etc에 있는)
|
| 1096 |
설정 파일들을 한 줄에 하나씩 완전한 경로를 적어 놓으면 된다.
|
| 1097 |
gentoo도 /etc/gentoorc라는 한개의 conffile이 있어서, 이 파일을
|
| 1098 |
conffile에 써 넣는다.
|
| 1099 |
|
| 1100 |
<sect id="dirs">dirs
|
| 1101 |
|
| 1102 |
<p>이 파일은 꼭 필요한 디렉토리이지만, 보통의 설치 과정(make
|
| 1103 |
install)에서는 만들어지지 않는 디렉토리를 지정한다.
|
| 1104 |
|
| 1105 |
기본적으로, 이 파일은 다음과 같이 만들어 진다:
|
| 1106 |
<p><example>
|
| 1107 |
usr/bin
|
| 1108 |
usr/sbin
|
| 1109 |
</example>
|
| 1110 |
|
| 1111 |
<p>맨 앞에 있는 슬래쉬는 포함되지 않는다는 것에 주의ㅎ나다. 우리는
|
| 1112 |
이 파일을 다음과 같이 바꿀 것이다:
|
| 1113 |
<p><example>
|
| 1114 |
usr/X11R6/bin
|
| 1115 |
usr/X11R6/man/man1
|
| 1116 |
</example>
|
| 1117 |
|
| 1118 |
하지만, 이 디렉토리는 메이크파일에서 이미 만들어진다. 때문에 우리는
|
| 1119 |
dirs 파일이 필요가 없고, dirs 파일은 지워도 된다.
|
| 1120 |
|
| 1121 |
<sect id="manpage">manpage.1.ex
|
| 1122 |
|
| 1123 |
<p>*.ex로 끝나는 파일들은 각 기능들을 패키지에 포함하는 방법을
|
| 1124 |
알려주는 예제이다. 이 기능들을 사용하려면, 이 파일을 편집하고 .ex
|
| 1125 |
확장자를 없앤다. 필요하지 않으면 .ex 로 끝나는 파일을 지운다.
|
| 1126 |
|
| 1127 |
<p>프로그램에는 맨페이지가 있어야 한다. 맨페이지가 없다면 내용을
|
| 1128 |
채워 넣을 수 있는 뼈대가 여기에 마련되어 있다. 맨페이지를 만드는
|
| 1129 |
방법에 대한 설명은 <manref name="man" section="7">에 간단히 나와
|
| 1130 |
있다. 이 파일을 프로그램의 이름으로 고치고 그 맨페이지가 가야 할
|
| 1131 |
매뉴얼 섹션으로 확장자를 고친다. 다음은 매뉴얼 섹션의 리스트이다:
|
| 1132 |
|
| 1133 |
<p><example>
|
| 1134 |
섹션 | 설명 | 보충
|
| 1135 |
1 사용자 명령 실행할 수 있는 명령어나 스크립트
|
| 1136 |
2 시스템 콜 커널에서 제공하는 함수
|
| 1137 |
3 라이브러리 콜 시스템 라이브러리에서 제공하는 함수
|
| 1138 |
4 특수 파일 보통 /dev에 있는 파일
|
| 1139 |
5 파일 형식 예를 들어, /etc/passwd의 형식
|
| 1140 |
6 게임 혹은 그 외 시시한 프로그램
|
| 1141 |
7 매크로 패키지 맨페이지 매크로와 같은 것들
|
| 1142 |
8 시스템 관리 보통 root만 실행하는 프로그램
|
| 1143 |
9 커널 루틴 비표준 함수 및 내부 구조
|
| 1144 |
</example>
|
| 1145 |
|
| 1146 |
<p>즉, gentoo의 맨페이지는 gentoo.1이나.
|
| 1147 |
원 소스에는 gentoo.1 맨페이지가
|
| 1148 |
없었으므로 예제와 상위소스에 들어 있는 문서들을 이용해서 직접
|
| 1149 |
작성했다.
|
| 1150 |
|
| 1151 |
<sect id="menu">menu.ex
|
| 1152 |
|
| 1153 |
<p>X 윈도우 사용자가 사용하고 있는 윈도우 관리자는 보통 프로그램을 실행할
|
| 1154 |
수 있도록 커스터마이즈할 수 있는 메뉴가 있다. 데비안 menu 패키지를
|
| 1155 |
설치했다면, 시스템의 각 프로그램이 필요로 하는 메뉴가 자동으로
|
| 1156 |
만들어 질 것이다. 데비안 정책상 필요한 것은 아니지만, 메뉴를 만드는
|
| 1157 |
편이 사용자에게 편리할 것이다. 이 파일을 편집해서 gentoo를 메뉴에
|
| 1158 |
추가할 수 있다. 다음은 dh_make가 기본으로 만들어 주는 파일이다:
|
| 1159 |
|
| 1160 |
<p><example>
|
| 1161 |
?package(gentoo):needs=X11|text|vc|wm section=Apps/see-menu-manual\
|
| 1162 |
title="gentoo" command="/usr/bin/gentoo"
|
| 1163 |
</example>
|
| 1164 |
|
| 1165 |
<p>첫번째 필드는 프로그램에서 필요한 인터페이스의 종류이다
|
| 1166 |
(예, 텍스트냐 X11이냐). 그 다음은 gentoo 나타날 메뉴와
|
| 1167 |
서브메뉴이다. 현재 섹션의 리스트는:
|
| 1168 |
/usr/share/doc/debian-policy/menu-policy.html/ch2.html#s2.1
|
| 1169 |
세 번째 필드는 프로그램의
|
| 1170 |
이름이다. 네 번째는 프로그램의 아이콘 이름인데, 아이콘이 없다면
|
| 1171 |
none으로 한다. 다섯 번째는 메뉴에 나타나게 될 실제 문장이다. 여섯
|
| 1172 |
번째는 프로그램을 실행할 명령어이다.
|
| 1173 |
|
| 1174 |
<p>이제 우리는 메뉴 항목을 다음과 같이 바꾼다:
|
| 1175 |
<p><example>
|
| 1176 |
?package(gentoo):needs=X11 section=Apps/Misc \
|
| 1177 |
title="Gentoo" command="/usr/X11R6/bin/gentoo"
|
| 1178 |
</example>
|
| 1179 |
|
| 1180 |
<p>더 자세한 정보는 <manref name="menufile" section="5">,
|
| 1181 |
<manref name="update-menus" section="1"> 참고.
|
| 1182 |
|
| 1183 |
<sect id="watch">watch.ex
|
| 1184 |
|
| 1185 |
<p><manref name="uscan" section="1">과 <manref name="uupdate"
|
| 1186 |
section="1"> 프로그램과 함께 이 파일을 사용한다 (이 프로그램들은
|
| 1187 |
devscripts 패키지 안에 있다). 이 기능을 이용해 원 소스를 가져온
|
| 1188 |
사이트를 살펴볼 수 있다. 나는 다음과 같이 했다:
|
| 1189 |
|
| 1190 |
<p><example>
|
| 1191 |
# watch control file for uscan
|
| 1192 |
# Site Directory Pattern Version Script
|
| 1193 |
ftp.obsession.se /gentoo gentoo-(.*)\.tar\.gz debian uupdate
|
| 1194 |
</example>
|
| 1195 |
|
| 1196 |
<p>힌트: 인터넷에 연결된 상태에서, 이 파일을 만든 다음 프로그램
|
| 1197 |
디렉토리에서 "uscan"을 실행해 본다. 그리고 해당 맨 페이지를 읽는다.
|
| 1198 |
|
| 1199 |
<sect id="doc-base">ex.doc-base
|
| 1200 |
|
| 1201 |
<p>여러분의 패키지에 HTML이나 그 외 문서가 들어 있다면 (맨 페이지와
|
| 1202 |
info 문서를 제외하고), `doc-base' 파일로 그 문서를 등록해야 한다.
|
| 1203 |
사용자는 <manref name="dhelp" section="1">이나 <manref name="dwww"
|
| 1204 |
section="1">로 그 문서를 찾을 수 있다.
|
| 1205 |
|
| 1206 |
<p>gentoo의 doc-base 파일은 다음과 같다:
|
| 1207 |
|
| 1208 |
<p><example>
|
| 1209 |
Document: gentoo
|
| 1210 |
Title: Gentoo Manual
|
| 1211 |
Author: Emil Brink
|
| 1212 |
Abstract: This manual describes what Gentoo is, and how it can be used.
|
| 1213 |
Section: Apps/Tools
|
| 1214 |
|
| 1215 |
Format: HTML
|
| 1216 |
Index: /usr/share/doc/gentoo/html/index.html
|
| 1217 |
Files: /usr/share/doc/gentoo/html/*.html
|
| 1218 |
</example>
|
| 1219 |
|
| 1220 |
<p>이 파일 형식에 대한 정보는 <manref name="install-docs"
|
| 1221 |
section="8">과 doc-base 매뉴얼,
|
| 1222 |
/usr/doc/doc-base/doc-base.html/index.html에 있다.
|
| 1223 |
|
| 1224 |
<sect id="maintscripts">postinst.ex, preinst.ex, postrm.ex, prerm.ex
|
| 1225 |
|
| 1226 |
<p>이 파일들은 관리자 스크립트라고 한다. 이 스크립트는 패키지
|
| 1227 |
콘트롤 정보로 저장되고 패키지가 설치, 업그레이드, 삭제될 때
|
| 1228 |
실행된다.
|
| 1229 |
|
| 1230 |
<p>지금으로서는 관리자 스크립트를 직접 편집하지 않도록 한다. 물론
|
| 1231 |
할 수도 있겠지만 비교적 복잡하기 때문이다. 좀 더 자세한 정보는
|
| 1232 |
Packaging Manual 섹션 6에 있으며, dh_make가 만들어 주는 예제 파일을
|
| 1233 |
살펴본다.
|
| 1234 |
|
| 1235 |
|
| 1236 |
<chapt id="build">패키지 빌드
|
| 1237 |
|
| 1238 |
<p>이제 패키지를 빌드할 준비가 완료되었다.
|
| 1239 |
|
| 1240 |
<sect id="completebuild">패키지 빌드
|
| 1241 |
|
| 1242 |
<p>해당 프로그램의의 주요 디렉토리로 들어가서 다음을 실행한다:
|
| 1243 |
|
| 1244 |
<p><example>
|
| 1245 |
dpkg-buildpackage -rfakeroot
|
| 1246 |
</example>
|
| 1247 |
|
| 1248 |
<p>이 명령어는 모든 작업을 해 줄 것이다. 여러분이 할 일은 PGP 비밀
|
| 1249 |
키를 두번 입력하는 것 뿐이다. 다 끝났으면, 4개의 파일들이 위의
|
| 1250 |
디렉토리(~/debian/)에 새로 만들어 진다:
|
| 1251 |
|
| 1252 |
<p><list>
|
| 1253 |
<item><em>gentoo_0.9.12-1_i386.deb</em>
|
| 1254 |
|
| 1255 |
<p>완전한 이진 패키지이다. 다른 패키지와 마찬가지로 dpkg나
|
| 1256 |
dselect를 사용해 이 패키지를 설치할 수 있다.
|
| 1257 |
|
| 1258 |
<item><em>gentoo_0.9.12.orig.tar.gz</em>
|
| 1259 |
|
| 1260 |
<p>이 파일은 원래 소스코드를 묶어 놓은 것이고, 다른 누군가가
|
| 1261 |
패키지를 처음부터 다시 만드려고 할 때 사용한다. 혹은 데비안 패키징
|
| 1262 |
시스템을 사용하지 않는 사람들의 경우에는 이 소스를 받아서 컴파일해야
|
| 1263 |
한다.
|
| 1264 |
|
| 1265 |
<item><em>gentoo_0.9.12-1.dsc</em>
|
| 1266 |
|
| 1267 |
<p>이 파일은 소스 패키지 내용의 요약이다. 이 파일은
|
| 1268 |
gentoo-0.9.12/debian/control 파일에서부터 만들어 지고, <manref
|
| 1269 |
name="dpkg-source" section="1"> 프로그램을 이용해서 소스 패키지를 풀
|
| 1270 |
때 사용된다. 이 파일은 PGP로 사인되어 있으므로 사람들은 이 파일을
|
| 1271 |
여러분이 썼다는 걸 확신할 수 있다.
|
| 1272 |
|
| 1273 |
<item><em>gentoo_0.9.12-1.diff.tar.gz</em>
|
| 1274 |
|
| 1275 |
<p>이 압축 파일은 원 소스파일에서 추가한 부분이 "unified diff"라는
|
| 1276 |
형태로 들어 있다. 이 파일은 <manref name="dpkg-source"
|
| 1277 |
section="1">에서 쓰인다.
|
| 1278 |
|
| 1279 |
<item><em>gentoo_0.9.12-1_i386.changes</em>
|
| 1280 |
|
| 1281 |
<p>이 파일은 현재 패키지 개정판에서 바뀐 모든 것을 기술한다. 그리고
|
| 1282 |
이 정보는 데비안 FTP 아카이브 관리 프로그램에게 넘어가서 적절한 위치로
|
| 1283 |
바이너리와 소스 패키지를 설치하는 데 이용된다. 이 파일의 일부분은
|
| 1284 |
gentoo-0.9.12/debian/changelog 파일과 .dsc 파일에서부터 만들어 진다.
|
| 1285 |
|
| 1286 |
<p>이 패키지에서 작업할 때, 프로그램의 동작 방식은 매번 변할 것이고
|
| 1287 |
새로운 기능들이 계속 추가될 것이다. 여러분의 패키지를 내려받는
|
| 1288 |
사람들은 이 파일을 들여다 보고 무엇이 바뀌었는지를 알 수 있다.
|
| 1289 |
길다란 숫자는 해당 파일의 MD5 체크섬이다. 여러분의 파일을 내려받는
|
| 1290 |
사람은 그 파일들을 <manref name="md5sum" section="1">으로 검사해
|
| 1291 |
보고, 그 숫자가 맞지 않았을 때 그 파일이 훼손되었거나 악의에 의해
|
| 1292 |
함부로 고쳐졌다는 걸 알 수 있다. 이 파일은 PGP로 사인되어 있으므로,
|
| 1293 |
사람들은 이 파일을 여러분이 썼다는 사실도 확신할 수 있다.
|
| 1294 |
</list>
|
| 1295 |
|
| 1296 |
<p>큰 패키지의 경우, debian/rules를 바꿀 때마다 처음부터 패키지를
|
| 1297 |
빌드하고 싶지는 않을 것이다. 테스트 목적으로, 상위 소스를 다시
|
| 1298 |
빌드하지 않고 다음과 같이 빌드할 수 있다.
|
| 1299 |
|
| 1300 |
<p><example>
|
| 1301 |
fakeroot debian/rules binary
|
| 1302 |
</example>
|
| 1303 |
|
| 1304 |
<p>`install' 룰에 `install-stamp' 디펜던시가 <strong>없다</strong>는
|
| 1305 |
점을 확인한다 (현재 기본적으로 그렇다). 그래야 `dh_clean -k`가 매번
|
| 1306 |
실행된다. 모든 작업이 끝나면 제대로 업로드할 수 있도록 올바른
|
| 1307 |
과정을 통해 꼭 빌드를 다시 해야 한다.
|
| 1308 |
|
| 1309 |
<chapt id="checkit">패키지에 오류가 있는지 검사하기
|
| 1310 |
|
| 1311 |
<p>.changes 파일에 대해 <manref name="lintian" section="1">을
|
| 1312 |
실행한다; 이 프로그램은 자주 범하는 패키징 실수를 검사해 준다.
|
| 1313 |
명령어는:
|
| 1314 |
|
| 1315 |
<p><example>
|
| 1316 |
lintian -i gentoo_0.9.12-1_i386.changes
|
| 1317 |
</example>
|
| 1318 |
|
| 1319 |
<p>물론 여러분의 패키지에서 만들어 지는 changes 파일의 이름을 쓴다.
|
| 1320 |
무슨 애러가 있으면 (E:로 시작하는 줄), 거기에 대한 설명을 (N: 줄)
|
| 1321 |
읽어보고, 실수를 수정하고, <ref id="build">에서 설명된 대로 다시
|
| 1322 |
빌드한다. W:로 시작하는 줄이 있으면, 경고 메세지일 뿐이므로
|
| 1323 |
패키지에 문제가 없다고 해도 좋다 (하지만, 물론 약간 조정할 필요는
|
| 1324 |
있다).
|
| 1325 |
|
| 1326 |
<p>dpkg-buildpackage로 빌드하고 lintian으로 검사하는 과정을 <manref
|
| 1327 |
name="debuild" section="1"> 명령 한 번에 할 수 있다.
|
| 1328 |
|
| 1329 |
<p>패키지 내부를 <manref name="mc" section="1">와 같은 파일 관리자로
|
| 1330 |
들여다 보거나 <manref name="dpkg-deb" section="1">을 이용해 임시
|
| 1331 |
위치에 압축을 풀어 본다. 바이너리 및 소스 패키지에 필요 없는 파일이
|
| 1332 |
들어가 있지 않는지 검사한다. 그 경우에 무언가 잘못이 있는 것이고
|
| 1333 |
필요없는 파일이 지워지지 않은 것이다. 팁: `zgrep ^+++
|
| 1334 |
../gentoo_0.9.12-1.diff.gz`을 실행하면 소스 파일에서 바뀌거나/추가된
|
| 1335 |
파일을 알 수 있다. 또 `dpkg-deb -c gentoo_0.9.12-1_i386.deb`으로
|
| 1336 |
패키지의 파일 목록을 볼 수 있다.
|
| 1337 |
|
| 1338 |
<p>테스트를 위해 직접 패키지를 설치해 본다 (<manref name="debi"
|
| 1339 |
section="1"> 명령으로). 할 수 있으면 여러분 컴퓨터 이외의
|
| 1340 |
시스템에도 설치해 보고, 무슨 문제가 있는지 살펴 본다.
|
| 1341 |
|
| 1342 |
<p>나중에, 새로운 버전을 빌드하는 일이 있으면, 패키지를 제대로
|
| 1343 |
업그레이드할 수 있도록 다음을 확인해야 한다:
|
| 1344 |
|
| 1345 |
<chapt id="upload">패키지 업로드하기
|
| 1346 |
|
| 1347 |
<p>여러분이 만든 새로운 패키지를 완전히 테스트 했으면
|
| 1348 |
<url id="http://www.debian.org/devel/join/newmaint">에 있는 내용처럼
|
| 1349 |
데비안 새로운 개발자 지원 과정을 시작해도 될 것이다.
|
| 1350 |
|
| 1351 |
<p>이미 공식 개발자라고 한다면 데비안 패키지를 데비안 아카이브에 업로드
|
| 1352 |
해도 된다. 하나 하나 손으로 해야하지만 자동으로 해주는 도구인
|
| 1353 |
<manref name="dupload" section="1">나 <manref name="dput" section="1">를
|
| 1354 |
쓰면 된다. 여기서는 <prgn/dupload/에 대해서만 설명한다.
|
| 1355 |
|
| 1356 |
<p>여기서 처음 시작해야할 일은 dupload 설정파일을 편집하는 일이고
|
| 1357 |
시스템 전체에서 쓰려면 <file>/etc/dupload.conf</file>을 수정하고
|
| 1358 |
자신만 쓰려면 <file>~/.dupload.conf</file> 라고 쓰면 된다. 우선 여기
|
| 1359 |
에 넣을 수정사항을 보면:
|
| 1360 |
|
| 1361 |
<p><example>
|
| 1362 |
package config;
|
| 1363 |
|
| 1364 |
$default_host = "ftp-master";
|
| 1365 |
|
| 1366 |
$cfg{"ftp-master"}{"login"} = "yourdebianusername";
|
| 1367 |
|
| 1368 |
$cfg{"non-us"}{"login"} = "yourdebianusername";
|
| 1369 |
|
| 1370 |
1;
|
| 1371 |
</example>
|
| 1372 |
|
| 1373 |
<p>물론 자신에 맞게 수정하면 되고 각 옵션이 무슨 뜻인지 알려면
|
| 1374 |
<manref name="dupload.conf" section="5">를 읽어보면 된다.
|
| 1375 |
|
| 1376 |
<p> $default_host 옵션은 속기 쉬운 부분인데 여기서 기본으로
|
| 1377 |
어떤 곳으로 업로드 큐를 선택할건지 정해준다. 기본은 "ftp-master"
|
| 1378 |
이지만 여러분이 다른 곳으로 해도 되고 더 빠른 곳으로 해도 된다.
|
| 1379 |
더 자세한 내용은 개발자 참고서에 있는
|
| 1380 |
<file>/usr/share/doc/developers-reference/developers-reference.html/ch-upload.en.html#s-uploading</file>
|
| 1381 |
을 보면 알 수 있다.
|
| 1382 |
|
| 1383 |
<p>인터넷을 연결하고 다음 명령을 실행한다:
|
| 1384 |
|
| 1385 |
<p><example>
|
| 1386 |
dupload --to master gentoo_0.9.12-1_i386.changes
|
| 1387 |
</example>
|
| 1388 |
|
| 1389 |
<p><prgn/dupload/는 파일의 .changes 파일에 들어 있는 파일에 대해 MD5
|
| 1390 |
체크섬이 맞는지를 확인하고, 맞지 않을 경우 경고를 낸다. 이 경우
|
| 1391 |
<ref id="completebuild">에 설명된 대로 다시 빌드해서 제대로 업로드하도록
|
| 1392 |
한다.
|
| 1393 |
|
| 1394 |
<p><prgn/dupload/는 ftp-master의 암호를 물어보고, 패키지를
|
| 1395 |
업로드하고, 필요한 경우 업로드에 대한 공지사항을
|
| 1396 |
<email>debian-devel-changes@lists.debian.org</email>에 보낸다.
|
| 1397 |
|
| 1398 |
<chapt id="update">패키지 갱신
|
| 1399 |
|
| 1400 |
<sect id="newrevision">새로운 데비안 리비전
|
| 1401 |
|
| 1402 |
<p>해당 패키지에 버그 #54321이 보고되었다고 하자. 그리고 그 버그는
|
| 1403 |
여러분이 고칠 수 있는 버그이다. 새로운 패키지 개정판을 내기 위해 할
|
| 1404 |
일은:
|
| 1405 |
|
| 1406 |
<list>
|
| 1407 |
<item>(물론)패키지 소스의 문제를 고친다.
|
| 1408 |
|
| 1409 |
<item>`dch -v <version>-<revision>`처럼
|
| 1410 |
`dch -i`로 데비안 changelog 파일에 새로운 개정판을 추가하고,
|
| 1411 |
|
| 1412 |
<p>팁: 날짜는 어떻게 업데이트하죠?
|
| 1413 |
`822-date`나 `date -R`을 이용한다.
|
| 1414 |
|
| 1415 |
<p>해당 버그에 대한 짧은 설명과 해결책을 기술한다.
|
| 1416 |
"Closes: #54321"이라고 쓴다. 이렇게 하면, 아카이브 관리
|
| 1417 |
소프트웨어가 이 패키지를 받는 순간에 자동으로 해당 버그 보고를
|
| 1418 |
종료시킨다.
|
| 1419 |
|
| 1420 |
<item><ref id="completebuild">, <ref id="checkit">, <ref id="upload">에서 한
|
| 1421 |
일을 반복한다. 이번의 차이점은 원 소스가 포함되지 않는다는 점이다.
|
| 1422 |
원 소스는 변경되지 않았고 이미 데비안 아카이브에 있다.
|
| 1423 |
</list>
|
| 1424 |
|
| 1425 |
<sect id="newupstream">새로운 상위소스 릴리즈
|
| 1426 |
|
| 1427 |
<p>그러면 이번에는 좀 다른, 약간 더 복잡한 상황을 생각해 보자 -
|
| 1428 |
새로운 상위 버전이 릴리즈되었고, 이 버전을 패키징하려고 한다.
|
| 1429 |
이 때 할 일은:
|
| 1430 |
|
| 1431 |
<list>
|
| 1432 |
<item>새로운 소스를 내려 받아서 그 파일(예를 들어
|
| 1433 |
gentoo-0.9.13.tar.gz)을 위의 소스 트리에 놓는다 (~/debian/).
|
| 1434 |
|
| 1435 |
<item>과거의 소스 디렉토리로 이동해서 다음을 실행한다:
|
| 1436 |
|
| 1437 |
<example>
|
| 1438 |
uupdate -u gentoo-0.9.13.tar.gz
|
| 1439 |
</example>
|
| 1440 |
|
| 1441 |
<p>물론 파일 이름은 여러분의 프로그램의 소스 아카이브 파일 이름으로
|
| 1442 |
쓴다. <manref name="uupdate" section="1">은 해당 파일의 이름을
|
| 1443 |
적절히 바꾸고, 과거의 .diff.gz 파일에서 바꾼 점들을 모두 적용하려고
|
| 1444 |
시도할 것이다. 그리고 새로운 debian/changelog 파일을 만든다.
|
| 1445 |
|
| 1446 |
<item>`../gentoo-0.9.13' 디렉토리로 이동한다. 이 디렉토리가 새로운
|
| 1447 |
패키지 소스트리이고, <ref id="completebuild">, <ref id="checkit">, <ref
|
| 1448 |
id="upload">에서 한 일을 반복한다.
|
| 1449 |
</list>
|
| 1450 |
|
| 1451 |
<p>`debian/watch' 파일을 <ref id="watch">에서 설명한 대로 설정한
|
| 1452 |
경우, <manref name="uscan" section="1">을 실행하면 자동으로 원
|
| 1453 |
소스가 바뀌었는지 확인하고, 소스를 내려받고, <prgn/uupdate/를 실행한다.
|
| 1454 |
|
| 1455 |
<sect id="upgrading">패키지 업그레이드 확인하기
|
| 1456 |
|
| 1457 |
<p>새버전을 빌드했을 때, 반드시 패키지가 안전하게 업그레이드 됐는지
|
| 1458 |
확인해야한다:
|
| 1459 |
|
| 1460 |
<list>
|
| 1461 |
<item>이전 버전에서 업그레이드 하고
|
| 1462 |
<item>다시 다운그레이드 하고 없애보고,
|
| 1463 |
<item>새로운 패키지 설치하고
|
| 1464 |
<item>다시 없애보고 재설치 해보고,
|
| 1465 |
<item>완전 삭제까지 해본다.
|
| 1466 |
</list>
|
| 1467 |
|
| 1468 |
<p>데비안에서 여러분 패키지가 이전에 릴리즈 됐다면, 사람들은 지난번 버전에서
|
| 1469 |
업그레이드 하리라 생각하고 이전버전에서 업그레이드 테스트도 해보라.
|
| 1470 |
|
| 1471 |
<chapt id="helpme">도움을 얻을 수 있는 곳
|
| 1472 |
|
| 1473 |
<p>널리 알려진 장소에 질문을 하기 전에, 부디 RTFM한다. 읽어 볼
|
| 1474 |
문서는 /usr/share/doc/dpkg, /usr/share/doc/debian,
|
| 1475 |
/usr/share/doc/package/* 파일들과 이 글에 포함된 각
|
| 1476 |
프로그램들의 맨페이지, info 페이지이다. 버그 보고를 받는다면 (진짜
|
| 1477 |
버그 보고!) 여러분은 이제 <url name="Debian Bug Tracking System"
|
| 1478 |
id="http://www.debian.org/Bugs/">에 들어섰고, 거기에 있는 문서를
|
| 1479 |
읽어야 한다. 그래야 버그 보고들을 효과적으로 이용할 수 있다.
|
| 1480 |
|
| 1481 |
<p><email>debian-mentors@lists.debian.org</email>에 있는 데비안
|
| 1482 |
조언자의 (Debian Mentors') 메일링 리스트에 가입하면, 경험있는 데비안
|
| 1483 |
개발자가 여러분의 의문을 풀어 줄 것이다. 이 리스트는
|
| 1484 |
<email>debian-mentors-request@lists.debian.org</email> 주소로 제목에
|
| 1485 |
`subscribe'를 써서 이메일을 보내면 가입된다.
|
| 1486 |
|
| 1487 |
<p>아직도 의문이 있다면, <email>debian-devel@lists.debian.org</email>에
|
| 1488 |
있는 데비안 개발자의 메일링 리스트에 물어본다. 이 리스트는
|
| 1489 |
<email>debian-devel-request@lists.debian.org</email> 주소로 제목에
|
| 1490 |
`subscribe'라고 써서 이메일을 보내면 가입된다. 여러분이 이미 데비안
|
| 1491 |
개발자라면 어쨌든 이 리스트에 가입해야 한다.
|
| 1492 |
|
| 1493 |
<p>설령 잘 동작하더라도, 이제부터 기도를 시작해야 한다. 왜 그럴까?
|
| 1494 |
이제 몇 시간 (혹은 며칠) 후면 전세계의 사용자들이 당신의 패키지들을
|
| 1495 |
쓰기 시작할 것이기 때문이다. 또 중대한 오류를 범한 경우에, 분노한
|
| 1496 |
수많은 데비안 사용자들로부터 메일폭탄이 날아올 것이다... 농담. :-)
|
| 1497 |
|
| 1498 |
<p>마음 놓고 버그 보고에 대비한다. 패키지가 완전히 데비안 정책에
|
| 1499 |
들어맞으려면 이보다 훨씬 많은 작업이 필요하다 (다시 한번 말하지만,
|
| 1500 |
자세한 내용을 알려면 <em>실제 문서</em>를 읽기 바란다). 행운을
|
| 1501 |
빈다!
|
| 1502 |
|
| 1503 |
</book>
|
| 1504 |
|
| 1505 |
</debiandoc>
|