데비안 패키지 생성 하우투

Debian Package Creation Howto



1. 서문

기계에 대한 책임은 소프트웨어 구성 요소뿐만 아니라 하드웨어도 관리하는 것을 의미합니다. 시스템 관리자의 일상 생활에서 볼 수 있듯이 많은 소스 파일보다는 소프트웨어 패키지로 소프트웨어를 설치하는 것이 훨씬 좋습니다. 이렇게 하면 시스템을 적절하게 유지 관리하는 데 드는 비용이 줄어듭니다.

선호하는 유통업체에서 제공하는 패키지는 패키지 관리자가 유효성을 검사하고 감독합니다. 그는 소프트웨어를 테스트하고 배포판에서 사용할 수 있는 다른 소프트웨어 패키지에 맞는지 확인했습니다. 또한 패키지는 패키지 관리자의 GPG 키로 서명됩니다. 이것은 패키지의 무결성을 보장하고 패키지가 신뢰할 수 있는 출처에서 온 것임을 보여줍니다.







패키지 형식은 Linux 배포판에 따라 다릅니다. 선택한 형식은 다음과 같습니다.



deb

다음에서 사용되는 패키지: 데비안 GNU/리눅스 , 우분투 , 아르비안 , 리눅스 민트 , 크노픽스



rpm

다음에서 사용되는 패키지: 빨간 모자 , 페도라 , 센트OS , 오픈수세





tgz and txz

다음에서 사용되는 패키지: 슬랙웨어

tar.xz

다음에서 사용되는 패키지: 아치 리눅스



이 문서는 데비안 GNU/리눅스용 패키지를 만드는 방법을 간략하게 설명합니다. 데비안 패키지 형식과 `deb` 기반 Linux 시스템을 유지 관리하는 도구에 대한 자세한 정보는 데비안 패키지 관리 책을 참조하십시오. [dpmb] Debian GNU/Linux용 패키지를 빌드하려면 다음 문서가 필수적입니다.

우리가 작업할 패키지의 이름은 'helloworld'이고 버전 번호는 0.1입니다. 데모 목적으로 여기에는 유명한 메시지 Hello, world!를 출력하는 단일 Python 스크립트가 포함되어 있습니다.

#!/usr/bin/python print ('Hello, world!') 

2. 요구 사항

2.1. GPG 키

1단계로 GPG 키를 사용할 수 있도록 합니다. 나중에 패키지에 서명하려면 키가 필요합니다. 서명되지 않은 패키지는 신뢰할 수 없으며 데비안 세계의 일부가 될 수 없음을 명심하십시오.

GPG 키가 아직 없는 경우 새로 만드십시오. 아래의 3단계를 따를 수 있습니다. 첫 번째 명령은 새 키를 생성하고, 두 번째 명령은 새 키를 별도의 파일로 내보내고, 세 번째 명령은 개인 키링에 키를 추가합니다.

$ gpg --gen-key $ gpg -a --output ~/.gnupg/YOUR_NAME.gpg --export 'YOUR NAME' $ gpg --import ~/.gnupg/YOUR_NAME.gpg 

생성하는 동안 _YOUR NAME_ 이름이 올바른지 확인하세요. 이름과 성을 조합하여 사용하는 것이 일반적입니다. 이 이름은 데비안 패키지의 `control` 파일을 생성할 때 패키지에서 정확히 동일해야 합니다. GPG에 대한 자세한 내용은 GNU Privacy Handbook [gph]을 참조하십시오.

2.2. 포장 도구 체인

소스 코드로 데비안 패키지를 빌드하려면 시스템에 다음 소프트웨어 패키지가 필요합니다.

  • 빌드 필수
  • autoconf
  • 자동 제조
  • autotools-dev
  • dh-메이크
  • 디버퍼
  • 개발자 스크립트
  • 가짜 루트
  • xutils
  • 린티안
  • 건축업자

사용자 `root`로 다음 명령을 사용하여 설치할 수 있습니다.

# apt-get install build-essential autoconf automake autotools-dev dh-make debhelper devscripts fakeroot xutils lintian pbuilder 

2.3. 패키징할 소프트웨어 준비

패키지를 빌드할 디렉토리를 준비해야 합니다. 패키지를 빌드할 환경을 준비할 디렉터리를 만듭니다.

$ mkdir -p ~./build/helloworld/0.1 

디렉토리에 `tar.gz` 압축 아카이브를 복사합니다.

$ cp helloworld-0.1.tar.gz ~./build/helloworld/0.1 

디렉토리로 변경하고 패키지의 압축을 풉니다.

$ cd ~./build/helloworld/0.1 ~/build/helloworld/0.1$ tar -xzf helloworld-0.1.tar.gz 

이제 디렉토리에는 별도의 디렉토리에 있는 소스 코드와 압축된 아카이브가 모두 포함되어 있습니다.

~/build/helloworld/0.1$ ls helloworld-0.1 helloworld-0.1.tar.gz 

3. 데비안화

이 시점에서 우리는 데비안 패키지에 특정한 파일을 추가할 것입니다. 이것이 이 단계의 이름이 소프트웨어의 _Debianization_인 이유입니다. 이것은 여러 단일 단계로 수행됩니다.

3.1 패키지 구조 준비

패키지의 전체 소스 코드를 보관하는 디렉토리로 변경합니다. 이 예에서 패키지에는 `helloworld.py` 파일이 포함되어 있습니다.

~$ cd build/helloworld/0.1/helloworld-0.1 ~/build/helloworld/0.1/helloworld-0.1$ ls helloworld.py 

데비안 패키지에 특정한 파일을 추가해 봅시다. 도구 `dh_make`가 작동합니다. 스위치 `-e`는 `debian/control` 파일의 `Maintainer` 필드에 지정된 주소를 이메일 주소로 사용합니다. 대신 자신의 이메일 주소를 사용하여 패키지를 빌드합니다. GPG 키에 해당하는 동일한 이메일 주소를 사용해야 합니다.

`-f` 스위치는 주어진 파일을 원본 소스 아카이브로 사용하고 현재 프로그램 트리를 `program.orig`로 복사하는 것을 건너뜁니다.

~/build/helloworld/0.1/helloworld-0.1$ dh_make -e [email protected] -f ../helloworld-0.1.tar.gz 

생성해야 하는 패키지 유형을 선택하라는 메시지가 표시됩니다. _단일 바이너리_를 선택하려면 `s`를 입력하세요.

Type of package: single binary, indep binary, multiple binary, library, kernel module, kernel patch? [s/i/m/l/k/n] s Maintainer name : Frank Hofmann Email-Address : [email protected] Date : Sat, 04 Nov 2017 21:16:13 +0100 Package Name : helloworld Version : 0.1 License : blank Type of Package : Single Hit to confirm: Currently there is no top level Makefile. This may require additional tuning. Done. Please edit the files in the debian/ subdirectory now. You should also check that the helloworld Makefiles install into $DESTDIR and not in / . 

그 결과 `debian`이라는 디렉토리가 생성됩니다.

~/build/helloworld/0.1/helloworld-0.1$ ls debian helloworld.py 

이 디렉토리에는 모든 패키지별 파일이 포함되어 있습니다.

3.2. 제어 파일 조정

`debian/control` 파일은 패키지를 빌드하는 데 필요한 종속성을 유지합니다. `dpkg-depcheck -d ./configure` 명령을 사용하면 필요한 모든 패키지가 포함된 목록을 받습니다. 우리의 경우 파이썬은 해석된 언어이기 때문에 더 이상의 패키지가 필요하지 않습니다.

다음으로 `debian/control` 파일을 편집하고 패키지별 값을 추가해야 합니다. 이 예에서는 다음과 같습니다.

Source: helloworld Section: python Priority: optional Maintainer: Frank Hofmann < [email protected] > Build-Depends: debhelper (>= 9) Standards-Version: 3.9.5 Homepage: http://www.efho.de/ #Vcs-Git: git://anonscm.debian.org/collab-maint/helloworld.git #Vcs-Browser: http://anonscm.debian.org/?p=collab-maint/helloworld.git;a=summary Package: helloworld Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, python Description: Prints Hello World in Python Prints Hello World in Python 

3.3. 저작권 파일 조정

`debian/copyright` 파일에는 소프트웨어 패키지에 대한 라이선스 정보가 들어 있습니다. GNU Public License 2(GPLv2)를 통한 출시를 위해 준비되었습니다. 이 예에서는 다음과 같습니다.

Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: helloworld Source: http://www.efho.de/ Files: debian/* Copyright: 2017 Frank Hofmann < [email protected] > License: GPL-2+ This package is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. . This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. . You should have received a copy of the GNU General Public License along with this program. If not, see . On Debian systems, the complete text of the GNU General Public License version 2 can be found in '/usr/share/common-licenses/GPL-2'. 

3.4. 변경 로그 파일 조정

저작권 정보 다음에 `debian/changelog` 파일을 조정해야 합니다. 이 예에서는 초기 릴리스 정보를 추가합니다.

helloworld (0.1-1) unstable; urgency=low * Initial release -- Frank Hofmann < [email protected] > Sat, 04 Nov 2017 21:16:13 +0100 

이것이 지금까지 우리가 필요로 하는 전부입니다. 이제 마침내 패키지를 빌드할 수 있습니다.


4. 패키지 빌드

패키지를 빌드하려면 한 디렉토리 위로 이동하고 다음 명령을 실행해야 합니다.

~/build/helloworld/0.1/helloworld-0.1$ dpkg-buildpackage -rfakeroot

`-rfakeroot` 옵션을 사용하면 `dpkg-buildpackage`가 `fakeroot` 명령의 도움으로 권한이 있는 사용자로 명령을 실행할 수 있습니다. 이것은 패키지를 준비하고 파일과 디렉터리를 만드는 데 필요합니다.
위의 명령은 더 긴 출력 메시지 목록을 생성합니다(여기에는 독일어 환경에서 표시됨).

dpkg-buildpackage: Quellpaket helloworld dpkg-buildpackage: Quellpaket helloworld dpkg-buildpackage: Quellversion 0.1-1 dpkg-buildpackage: Quelldistribution unstable dpkg-buildpackage: Quellen geändert durch Frank Hofmann < [email protected] > dpkg-buildpackage: Host-Architektur amd64 dpkg-source --before-build helloworld-0.1 fakeroot debian/rules clean dh clean dh_testdir dh_auto_clean dh_clean dpkg-source -b helloworld-0.1 dpkg-source: Information: Quellformat 3.0 (quilt) wird verwendet dpkg-source: Information: helloworld wird unter Benutzung des existierenden ./helloworld_0.1.orig.tar.gz gebaut dpkg-source: Information: helloworld wird in helloworld_0.1-1.debian.tar.xz gebaut dpkg-source: Information: helloworld wird in helloworld_0.1-1.dsc gebaut debian/rules build dh build dh_testdir dh_auto_configure dh_auto_build dh_auto_test fakeroot debian/rules binary dh binary dh_testroot dh_prep dh_auto_install dh_installdocs dh_installchangelogs dh_perl dh_link dh_compress dh_fixperms dh_strip dh_makeshlibs dh_shlibdeps dh_installdeb dh_gencontrol dpkg-gencontrol: Warnung: Feld Depends von Paket helloworld: unbekannte Substitutionsvariable ${shlibs:Depends} dh_md5sums dh_builddeb dpkg-deb: Paket helloworld wird in ../helloworld_0.1-1_amd64.deb gebaut. dpkg-genchanges <../helloworld_0.1-1_amd64.changes dpkg-genchanges: kompletter Quellcode beim Hochladen hinzufügen dpkg-source --after-build helloworld-0.1 dpkg-buildpackage: Alles hochzuladen (Originalquellen enthalten) signfile helloworld_0.1-1.dsc Sie benötigen eine Passphrase, um den geheimen Schlüssel zu entsperren. Benutzer: 'Frank Hofmann (Hofmann EDV) < [email protected] > ' 4096-Bit RSA Schlüssel, ID D431AC07, erzeugt 2014-09-05 

4.1. 패키지 유효성 검사

축하합니다 — 데비안 패키지를 구축하는 데 성공했습니다. 예! 이제 패키지를 자세히 살펴보겠습니다. 여기서 'lintian'이 작동합니다. 이 도구는 데비안 패키지가 이행해야 하는 엄격한 규칙에 대한 위반 사항을 찾기 위해 패키지를 검증합니다.

테스트를 실행하려면 다음 명령을 입력하십시오.

lintian helloworld_0.1-1_amd64.deb 

이 도구는 규칙 위반뿐만 아니라 철자 오류 및 잘못된 문자도 찾습니다. 스위치 `–pedantic`은 `lintian`에게 평소보다 훨씬 더 중요하도록 요청합니다. 아래에서 볼 수 있듯이 `lintian`은 약간 심술궂고 세 개의 경고와 한 개의 오류를 발견했습니다.

첫 번째 경고를 제외하고 우리는 쉽게 `lintian`을 행복하게 만들고 규칙 세트에 따라 패키지 내용을 조정할 수 있습니다. 'new-package-should-close-itp-bug' 경고는 ITP 패키지에 대한 버그 보고서가 없음을 의미합니다(ITP는 _패키지에 대한 의도를 의미함). 일반 데비안 패키지의 경우 버그 보고서를 패키지 ITP용 bugtracker로 보내서 이 소프트웨어 패키징을 시작할 계획임을 다른 사람들에게 알려야 합니다.

4.2. 경고: `readme-debian-contains-debmake-template

`README.Debian` 파일은 이 패키지에 대한 추가 정보를 보관하기 위한 것입니다. `dh_make`가 우리를 위해 이 파일을 생성했습니다:

helloworld for Debian --------------------- -- Frank Hofmann < [email protected] > Sat, 04 Nov 2017 21:16:13 +0100 

이 예에서는 추가 정보가 없으므로 파일을 삭제할 수 있습니다.

4.3. 경고: `description-starts-with-leading-spaces`

이 경고는 `debian/control` 파일에서 패키지에 대한 더 긴 설명이 하나 이상의 공백으로 시작하기 때문에 발생합니다. 공백 하나를 제거하면 경고가 사라집니다.

4.4. 오류: '설명-시놉시스-중복됨'

각 패키지는 `debian/control`에 짧은 설명과 긴 설명이 모두 필요합니다. 이 오류는 두 설명이 동일하기 때문에 발생합니다. 더 긴 설명을 확장하자마자 오류가 사라졌습니다.


5. 링크 및 참조

- [ddr] Andreas Barth, Adam Di Carlo, Raphaël Hertzog, Lucas Nussbaum, Christian Schwarz, Ian Jackson: 데비안 개발자 참조서
- [dnmg] Josip Rodin, Osamu Aoki : 데비안 새 관리자 안내서
- [dpmb] 악셀 베커트, 프랭크 호프만: 데비안 패키지 관리 책
- [dpm] 데비안 정책 매뉴얼
- [할 수있다] 데비안 패키징 튜토리얼
– [Gph] GNU 프라이버시 핸드북
– [lushpai 패키지] Alex Lushpai: 소스에서 데비안 패키지를 만드는 방법


6. 감사의 말

저자는 감사하고 싶다 악셀 베커트 그리고 제롤드 루프레히트 이 기사를 준비하는 동안 그들의 지원과 비평가에게 감사드립니다.