Debiani paketi loomine Kuidas

Debian Package Creation Howto



1. Eessõna

Masina eest vastutamine tähendab hoolitsust nii riistvara kui ka tarkvara komponentide eest. Nagu igapäevases süsteemiadministraatorina näha, on palju parem installida tarkvara tarkvarapaketina, mitte hulga lähtefailidena. See vähendab süsteemi nõuetekohase hooldamise kulusid.

Paketid, mis on saadaval teie eelistatud edasimüüjalt, kontrollib ja jälgib pakettide hooldaja. Ta testis tarkvara ja kinnitab, et see sobib teiste levitatavates tarkvarapakettides. Lisaks on pakett allkirjastatud paketi haldaja GPG -võtmega. See tagab paketi terviklikkuse ja näitab teile, et pakett on pärit usaldusväärsest allikast.







Paketi formaat sõltub teie Linuxi levitamisest. Valitud vormingud on järgmised:



deb

Paketid, mida kasutatakse: Debian GNU/Linux , Ubuntu , Armbian , Linux Mint , Knoppix



rpm

Paketid, mida kasutatakse: Punane müts , Fedora , CentOS , OpenSuse





tgz and txz

Paketid, mida kasutatakse: Slackware

tar.xz

Paketid, mida kasutatakse: Arch Linux



Selles dokumendis selgitatakse lühidalt Debian GNU/Linuxi jaoks paketi koostamist. Üksikasjalikku teavet Debiani paketivormingu ja 'deb' -põhise Linuxi süsteemi hooldamise tööriistade kohta leiate Debiani paketihalduse raamatust [dpmb] Debian GNU/Linuxi jaoks pakettide koostamiseks on need dokumendid hädavajalikud:

  • Debiani uus hooldusjuhend [dnmg]
  • Debiani arendaja viide [GDR]
  • Debiani pakendamise õpetus [saab]
  • Debiani poliitika käsiraamat [dpm]

Pakett, millega me töötame, kannab nime 'helloworld' ja selle versiooninumber on 0.1. Demonstreerimise eesmärgil sisaldab see lihtsalt ühte Pythoni skripti, mis väljastab kuulsa sõnumi Hello, world !:

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

2. Nõuded

2.1. GPG võti

Esimese sammuna hoidke oma GPG -võti saadaval. Hiljem läheb paketi allkirjastamiseks vaja võtit. Pidage meeles, et allkirjastamata paketid on ebausaldusväärsed ega saa kuuluda Debiani universumi.

Kui teil pole veel GPG -võtit, looge see. Võite järgida kolme alltoodud sammu. Esimene käsk genereerib uue võtme, teine ​​ekspordib teie uue võtme eraldi faili ja kolmas lisab võtme teie isiklikule võtmehoidjale.

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

Loomise ajal veenduge, et eesnimi _YOUR NAME_ on õige. Tavaliselt kasutatakse ees- ja perekonnanime kombinatsioone. See nimi peab olema paketis täpselt sama, kui loome Debiani paketi faili 'control'. GPG kohta lisateabe saamiseks vaadake GNU privaatsuse käsiraamatut [gph].

2.2. Pakenditööriistade kett

Lähtekoodiga Debiani paketi loomiseks on teie süsteemis vajalikud järgmised tarkvarapaketid:

  • ehitamine-hädavajalik
  • autoconf
  • automake
  • autotools-dev
  • dh-teha
  • abistaja
  • devscripts
  • fakeroot
  • ksutilid
  • lintian
  • pbuilder

Kasutajana 'root' saate need installida järgmise käsu abil:

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

2.3. Valmistage tarkvara pakendamiseks ette

Paketi koostamiseks peame kataloogi ette valmistama. Looge kataloog, et valmistada ette keskkond, milles me paketi koostame:

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

Kopeerige tihendatud arhiiv 'tar.gz' kataloogist:

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

Muutke kataloogiks ja ekstraktige pakett:

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

Nüüd sisaldab kataloog nii lähtekoodi eraldi kataloogis kui ka tihendatud arhiivi:

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

3. Debianiseerimine

Siinkohal lisame Debiani paketile spetsiifilised failid. Sellepärast nimetatakse seda sammu tarkvara _Debianization_. Seda tehakse mitme sammuga.

3.1 Valmistage ette pakendi struktuur

Muutke kataloogiks, mis säilitab kogu paketi lähtekoodi. Meie näites sisaldab pakett faili 'helloworld.py', ainult:

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

Lisame Debiani paketile spetsiifilised failid. Mängu tuleb tööriist `dh_make`. Lüliti '-e' kasutab antud aadressi e-posti aadressina faili 'debian/control' väljal 'Maintainer'. Paketi koostamisel kasutage selle asemel oma e -posti aadressi. Pidage meeles, et kasutage sama e -posti aadressi, mis vastab teie GPG -võtmele.

Lüliti '-f' kasutab antud faili algse lähtearhiivina ja jätab vahele praeguse programmipuu kopeerimise kausta 'program.orig'.

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

Viipal palutakse teil valida loodud paketi tüüp. _Ühe binaar_ valimiseks sisestage „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 / . 

Selle tulemuseks on kataloog nimega 'debian':

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

See kataloog sisaldab kõiki paketipõhiseid faile.

3.2. Reguleerige juhtfaili

Fail 'debian/control' säilitab paketi koostamiseks vajalikud sõltuvused. Kasutades käsku 'dpkg -depcheck -d./Configure', saate nimekirja kõigi vajalike pakettidega. Meie puhul pole täiendavat paketti vaja, kuna Python on tõlgitud keel.

Järgmisena peame redigeerima faili 'debian/control' ja lisama paketipõhised väärtused. Meie näites näeb see välja järgmine:

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. Autoriõiguste faili kohandamine

Fail 'debian/copyright' sisaldab tarkvarapaketi litsentsiteavet. See on ette nähtud väljaandmiseks GNU avaliku litsentsi 2 (GPLv2) kaudu. Meie näites näeb see välja järgmine:

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. Muutke muudatuste logi faili

Pärast autoriõiguste teavet tuleb faili 'debian/changelog' kohandada. Meie näites lisame teabe Esialgne versioon.

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

See on kõik, mida me seni vajame - nüüd saame paketi lõpuks üles ehitada.


4. Ehitage pakett

Paketi koostamiseks peame liikuma ühe kataloogi võrra üles ja käivitama järgmise käsu:

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

Valik '-rfakeroot' võimaldab 'dpkg-buildpackage' käitada käske privaatse kasutajana käsu 'fakeroot' abil. See on vajalik paketi ettevalmistamiseks ning failide ja kataloogide loomiseks.
Ülaltoodud käsu tulemuseks on pikem väljundsõnumite loend (näidatud siin saksa keeles):

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. Paketi valideerimine

Palju õnne - teil õnnestus luua Debiani pakett - jah! Nüüd vaatame paketti lähemalt. Siin tuleb mängu 'lintian'. See tööriist kinnitab teie paketi, et leida rikkumisi, mida Debiani paketid peavad täitma.

Testide käivitamiseks tippige järgmine käsk:

lintian helloworld_0.1-1_amd64.deb 

Tööriist ei leia reeglite rikkumisi, vaid ka õigekirjavigu ja valesid märke. Lüliti '-pantiline' palub 'lintianil' olla tavapärasest palju kriitilisem. Nagu näete allpool, on 'lintian' natuke pahur ja avastanud kolm hoiatust ja ühe vea.

Välja arvatud esimene hoiatus, saame 'lintian' kergesti rõõmustada ja kohandada pakendi sisu vastavalt reeglitele. Hoiatus 'new-package-should-close-itp-bug' tähendab, et ITP paketi vastu ei ole veateatist (ITP tähendab _ kavatsetud paketile_). Tavalise Debiani paketi puhul tuleb paketi ITP jaoks veateade saata veaotsijale, et teavitada teisi, et kavatsete seda tarkvara pakkima hakata.

4.2. Hoiatus: `readme-debian-sisaldab-debmake-malli

Fail README.Debian on mõeldud selle paketi kohta lisamärkuste säilitamiseks. 'dh_make' lõi meile selle faili:

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

Meie näites pole meil lisateavet, nii et saame faili kustutada.

4.3. Hoiatus: 'kirjeldus-algab-juhtivate tühikutega'

See hoiatus ilmneb seetõttu, et meie paketi pikem kirjeldus failis 'debian/control' algab rohkem kui ühe tühikuga. Niipea kui eemaldame ühe tühiku, kaob hoiatus.

4.4. Viga: 'description-synopsis-is-duplicated'

Iga pakett nõuab jaotises 'debian/control' nii lühikest kui ka pikemat kirjeldust. See tõrge ilmneb, kuna mõlemad kirjeldused on identsed. Niipea kui pikemat kirjeldust laiendasime, on viga kadunud.


5. Lingid ja viited

- [ddr] Andreas Barth, Adam Di Carlo, Raphaël Hertzog, Lucas Nussbaum, Christian Schwarz, Ian Jackson: Debiani arendaja viide
- [Dnmg] Josip Rodin, Osamu Aoki: Debiani uus hooldusjuhend
- [dpmb] Axel Beckert, Frank Hofmann: Debiani paketihalduse raamat
- [dpm] Debiani poliitika käsiraamat
- [saab] Debiani pakendamise õpetus
- [gph] GNU privaatsuse käsiraamat
- [lushpaiPackage] Alex Lushpai: Kuidas luua debiani pakett allikast


6. Tänuavaldused

Autor soovib tänada Axel Beckert ja Gerold Rupprecht nende toetuse ja kriitikute eest selle artikli ettevalmistamisel.