Debian Package Creation PaanoMga

Debian Package Creation Howto



1. Panimula

Ang pagiging responsable para sa isang makina ay nangangahulugang alagaan ang hardware pati na rin ang mga bahagi ng software. Tulad ng nakikita sa pang-araw-araw na buhay bilang isang system administrator mas mahusay na mag-install ng software bilang isang software package kaysa sa isang bungkos ng mga file ng mapagkukunan. Binabawasan nito ang mga gastos upang mapanatili nang maayos ang system.

Ang mga pakete na magagamit mula sa iyong ginustong distributor ay napatunayan at binabantayan ng isang nagpapanatili ng package. Sinubukan niya ang software, at tiniyak na umaangkop ito sa iba pang mga pakete ng software na magagamit sa pamamahagi. Bukod dito, ang pakete ay naka-sign sa isang GPG key mula sa tagapanatili ng package. Ginagarantiyahan nito ang integridad ng pakete at ipinapakita sa iyo na ang pakete ay mula sa isang pinagkakatiwalaang mapagkukunan.







Ang format ng package ay nakasalalay sa iyong pamamahagi ng Linux. Ang mga napiling format ay ang mga sumusunod:



deb

Mga ginamit na package sa: Debian GNU / Linux , Ubuntu , Armbian , Linux Mint , Knoppix



rpm

Mga ginamit na package sa: Pulang sumbrero , Fedora , CentOS , OpenSuse





tgz and txz

Mga ginamit na package sa: Slackware

tar.xz

Mga ginamit na package sa: Arch Linux



Ipinapaliwanag ng dokumentong ito kung paano bumuo ng isang pakete para sa Debian GNU / Linux nang maikling. Para sa detalyadong impormasyon tungkol sa format ng package ng Debian at mga tool upang mapanatili ang isang `deb` based Linux system maaari kang magkaroon ng pagtingin sa Debian Package Management Book [dpmb] Upang bumuo ng mga pakete para sa Debian GNU / Linux ang mga dokumentong ito ay mahalaga:

  • Ang Patnubay sa Debian New Maintainer [dnmg]
  • Ang Sanggunian ng Developer ng Debian [GDR]
  • Ang Tutorial sa Pagbalot ng Debian [maaari]
  • Ang Manwal sa Patakaran ng Debian [dpm]

Ang pakete na makikipagtulungan sa amin ay pinangalanang `helloworld` at mayroong numero ng bersyon na 0.1. Para sa mga layunin ng demonstrasyon naglalaman lamang ito ng isang solong script ng Python na naglalabas ng sikat na mensahe Kumusta, mundo !:

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

2. Mga Kinakailangan

2.1. Susi ng GPG

Bilang hakbang 1, ipagamit ang iyong GPG key. Sa paglaon, kakailanganin ang susi upang mag-sign sa package. Tandaan na ang mga hindi naka-sign na pakete ay hindi mapagkakatiwalaan at hindi maaaring maging bahagi ng uniberso ng Debian.

Kung sakaling wala kang isang GPG key pa lumikha ng isa. Maaari mong sundin ang tatlong mga hakbang sa ibaba. Ang unang utos ay bumubuo ng isang bagong susi, ang pangalawa ay nai-export ang iyong bagong key sa isang hiwalay na file, at ang pangatlo ay nagdaragdag ng susi sa iyong personal na keyring.

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

Sa panahon ng paggawa siguraduhin na ang ibinigay na pangalan _Your NAME_ ay tama. Karaniwan na gumamit ng isang kumbinasyon ng apelyido at apelyido. Ang pangalan na ito ay dapat na eksaktong pareho sa package, kung gayon, kapag lumilikha ng `control` file ng Debian package. Para sa karagdagang impormasyon tungkol sa GPG tingnan ang GNU Privacy Handbook [gph].

2.2. Ang kadena ng tool sa packaging

Upang bumuo ng isang Debian package na may source code ang mga sumusunod na software packages ay kinakailangan sa iyong system:

  • kailangan-build
  • mag-autoconf
  • automake
  • autotools-dev
  • dh-make
  • debhelper
  • devscripts
  • fakeroot
  • xutil
  • lintian
  • tagabuo

Bilang `root` ng gumagamit maaari mong mai-install ang mga ito gamit ang sumusunod na utos:

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

2.3. Ihanda ang software na ibabalot

Kailangan naming maghanda ng isang direktoryo upang maitayo ang pakete. Lumikha ng isang direktoryo upang maihanda ang kapaligiran kung saan bubuuin namin ang package:

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

Kopyahin ang `tar.gz` compressed archive sa direktoryo:

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

Baguhin sa direktoryo, at kunin ang package:

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

Ngayon, naglalaman ang direktoryo ng parehong source code sa isang hiwalay na direktoryo, at ang naka-compress na archive:

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

3. Debianisasyon

Sa puntong ito ay idaragdag namin ang mga file na tukoy sa isang pakete ng Debian. Iyon ang dahilan kung bakit ang hakbang na ito ay pinangalanang _Debianization_ ng software. Ginagawa ito sa maraming mga solong hakbang.

3.1 Ihanda ang istraktura ng pakete

Baguhin sa direktoryo na pinapanatili ang buong source code ng package. Sa aming halimbawa ang pakete ay naglalaman ng file na `helloworld.py`, lamang:

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

Idagdag natin ang mga file na tukoy sa isang pakete ng Debian. Nag-play ang tool na `dh_make`. Ginagamit ng switch `-e` ang ibinigay na address bilang email address sa patlang na` Maintainer` ng `debian / control` file. Ang pagbuo ng package ay gumagamit ng iyong sariling email address, sa halip. Tandaan na gumamit ng parehong email address na tumutugma sa iyong GPG key.

Ginagamit ng switch `-f` ang naibigay na file bilang orihinal na mapagkukunang archive, at nilalaktawan ang pagkopya ng kasalukuyang puno ng programa sa` program.orig`.

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

Sa prompt ka hihilingin sa iyo na piliin ang uri ng pakete na dapat nilikha. Upang pumili ng _single binary_ type `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 / . 

Nagreresulta ito sa isang direktoryo na tinatawag na `debian`:

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

Naglalaman ang direktoryo na ito ng lahat ng mga file na tukoy sa package.

3.2. Ayusin ang control file

Pinapanatili ng file na `debian / control` ang mga dependency na kinakailangan _to build_ the package. Gamit ang utos na `dpkg-depcheck -d. / Configure` makakatanggap ka ng isang listahan kasama ang lahat ng kinakailangang mga pakete. Sa aming kaso wala nang kinakailangang karagdagang pakete dahil ang Python ay isang interpretadong wika.

Susunod, kailangan naming i-edit ang file na `debian / control` at magdagdag ng mga halagang partikular sa package. Para sa aming halimbawa ganito ang hitsura:

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. Ayusin ang file ng copyright

Naglalaman ang file na `debian / copyright` ng impormasyon ng lisensya para sa software package. Handa ito para sa pagpapalaya sa pamamagitan ng GNU Public License 2 (GPLv2). Para sa aming halimbawa ganito ang hitsura:

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. Ayusin ang file ng changelog

Matapos ang impormasyon sa copyright ang file na `debian / changelog` ay dapat ayusin. Sa aming halimbawa ay idinagdag namin ang impormasyon Paunang paglabas.

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

Iyon lang ang kailangan natin sa ngayon - ngayon maaari na nating buuin ang package, sa wakas.


4. Buuin ang package

Upang maitayo ang pakete kailangan nating ilipat ang isang direktoryo at patakbuhin ang sumusunod na utos:

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

Pinapayagan ng pagpipiliang `-rfakeroot`` `dpkg-buildpackage` upang magpatakbo ng mga utos bilang isang pribadong gumagamit sa tulong ng utos na` fakeroot`. Ito ay kinakailangan upang ihanda ang pakete, at upang lumikha ng mga file at direktoryo.
Ang utos sa itaas ay nagreresulta sa isang mas mahabang listahan ng mga mensahe ng output (ipinakita dito sa isang kapaligiran sa wikang Aleman):

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. Pinapatunayan ang package

Binabati kita - nagtagumpay ka sa pagbuo ng isang pakete ng Debian - oo! Ngayon, tingnan natin ang package. Dito, naglalaro ang `lintian`. Ang tool na ito ay nagpapatunay sa iyong pakete upang makahanap ng mga paglabag sa mahigpit na mga patakaran na dapat matupad ng mga pakete ng Debian.

Upang patakbuhin ang uri ng mga pagsubok sa sumusunod na utos:

lintian helloworld_0.1-1_amd64.deb 

Ang tool ay hindi nakakahanap ng mga paglabag sa panuntunan ngunit mayroon ding mga error sa pagbaybay, at maling mga character. Ang switch na '–pedantic` ay humihiling sa` lintian` na maging mas kritikal kaysa sa dati. Tulad ng nakikita mo sa ibaba ang `lintian` ay medyo masungit at natuklasan ang tatlong mga babala, at isang error.

Maliban sa unang babala madali nating mapapasaya ang `lintian` at maitaguyod ang nilalaman ng package alinsunod sa itinakdang panuntunan. Ang babalang `new-package-should-close-itp-bug` ay nangangahulugang walang ulat sa bug laban sa ITP package (nangangahulugan ang ITP na nilalayon sa package_). Para sa isang regular na pakete ng Debian isang ulat ng bug ang kailangang ipadala sa bugtracker para sa package na ITP upang abisuhan ang iba na balak mong simulang magbalot ng software na ito.

4.2. Babala: template ng `readme-debian-naglalaman-debmake-template

Ang file na 'README.Debian` ay inilaan upang mapanatili ang mga karagdagang tala tungkol sa package na ito. Ginawa ng `dh_make` ang file na ito para sa amin:

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

Sa aming halimbawa wala kaming karagdagang impormasyon, kaya maaari naming matanggal ang file.

4.3. Babala: `paglalarawan-nagsisimula-sa-nangungunang-puwang`

Itinaas ang babalang ito dahil ang mas mahabang paglalarawan ng aming pakete sa file na `debian / control` ay nagsisimula sa higit sa isang solong espasyo. Sa sandaling alisin namin ang isang solong espasyo mawawala ang babala.

4.4. Error: `description-synopsis-is-duplicated`

Ang bawat pakete ay nangangailangan ng parehong isang maikli at isang mas mahabang paglalarawan sa `debian / control`. Tinaasan ang error na ito dahil magkapareho ang parehong paglalarawan. Sa lalong madaling panahon na pinalawak namin ang mas mahabang paglalarawan nawala ang error.


5. Mga Link at Sanggunian

- [ddr] Andreas Barth, Adam Di Carlo, Raphaël Hertzog, Lucas Nussbaum, Christian Schwarz, Ian Jackson: Ang Sanggunian ng Developer ng Debian
- [Dnmg] Josip Rodin, Osamu Aoki: Ang Patnubay sa Debian New Maintainer
- [dpmb] Axel Beckert, Frank Hofmann: Ang Aklat sa Pamamahala ng Package ng Debian
- [dpm] Ang Manwal sa Patakaran ng Debian
- [maaari] Ang Tutorial sa Pagbalot ng Debian
- [gph] Ang GNU Privacy Handbook
- [lushpaiPackage] Alex Lushpai: Paano lumikha ng debian package mula sa pinagmulan


6. Mga Pagkilala

Nais pasasalamatan ng may-akda Axel Beckert at Gerold Rupprecht para sa kanilang suporta, at mga kritiko habang inihahanda ang artikulong ito.