Kako narediti Debian Package Creation

Debian Package Creation Howto



1. Predgovor

Biti odgovoren za stroj pomeni skrbeti za strojno opremo in komponente programske opreme. Kot je videti v vsakdanjem življenju kot skrbnik sistema, je veliko bolje namestiti programsko opremo kot programski paket in ne kot kup izvornih datotek. To zmanjšuje stroške za pravilno vzdrževanje sistema.

Pakete, ki so na voljo pri želenem distributerju, potrdi in nadzira vzdrževalec paketov. Preizkusil je programsko opremo in zagotavlja, da ustreza drugim programskim paketom, ki so na voljo v distribuciji. Poleg tega je paket podpisan s ključem GPG od vzdrževalca paketa. To zagotavlja celovitost paketa in vam pokaže, da je paket iz zaupanja vrednega vira.







Oblika paketa je odvisna od distribucije Linuxa. Izbrane oblike so naslednje:



deb

Paketi, ki se uporabljajo v: Debian GNU/Linux , Ubuntu , Armbijski , Linux Mint , Knoppix



rpm

Paketi, ki se uporabljajo v: Rdeč klobuk , Fedora , CentOS , OpenSuse





tgz and txz

Paketi, ki se uporabljajo v: Slackware

tar.xz

Paketi, ki se uporabljajo v: Arch Linux



Ta dokument pojasnjuje, kako na kratko zgraditi paket za Debian GNU/Linux. Za podrobnejše informacije o obliki paketa Debian in orodjih za vzdrževanje sistema Linux, ki temelji na debu, si oglejte knjigo za upravljanje paketov Debian [dpmb] Za izdelavo paketov za Debian GNU/Linux so ti dokumenti bistveni:

  • Priročnik Debian New Maintainer's Guide [dnmg]
  • Referenca razvijalca Debian [GDR]
  • Vadnica za Debian Packaging [lahko]
  • Priročnik o politiki Debiana [dpm]

Paket, s katerim bomo sodelovali, se imenuje 'helloworld' in ima različico 0,1. Za predstavitvene namene preprosto vsebuje en sam skript Python, ki oddaja znano sporočilo Pozdravljeni, svet !:

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

2. Zahteve

2.1. GPG ključ

Kot prvi korak imejte ključ GPG na voljo. Kasneje bo za podpis paketa potreben ključ. Upoštevajte, da so podpisani paketi nezanesljivi in ​​ne morejo biti del vesolja Debian.

Če ključa GPG še nimate, ga ustvarite. Lahko sledite spodnjim trem korakom. Prvi ukaz ustvari nov ključ, drugi izvozi vaš novi ključ v ločeno datoteko, tretji pa doda ključ v vaš osebni obesek ključev.

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

Med ustvarjanjem se prepričajte, da je ime _ VAŠE IME_ pravilno. Običajno se uporablja kombinacija imena in priimka. To ime bo moralo biti pri paketu popolnoma enako pri ustvarjanju datoteke `control` paketa Debian. Za več informacij o GPG si oglejte Priročnik o zasebnosti GNU [gph].

2.2. Veriga orodja za pakiranje

Za izdelavo paketa Debian z izvorno kodo so v vašem sistemu potrebni naslednji programski paketi:

  • gradnja-bistvena
  • autoconf
  • avtomobilska industrija
  • autotools-dev
  • dh-make
  • debhelper
  • devscripts
  • ponaredek
  • xutils
  • lintian
  • pbuilder

Kot uporabniški 'root' jih lahko namestite z naslednjim ukazom:

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

2.3. Pripravite programsko opremo za pakiranje

Za izdelavo paketa moramo pripraviti imenik. Ustvarite imenik za pripravo okolja, v katerem bomo zgradili paket:

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

Kopirajte stisnjen arhiv `tar.gz` v imenik:

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

Preklopite v imenik in izvlecite paket:

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

Zdaj imenik vsebuje izvorno kodo v ločenem imeniku in stisnjen arhiv:

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

3. Debianizacija

Na tej točki bomo dodali datoteke, ki so specifične za paket Debian. Zato se ta korak imenuje _Debianization_ programske opreme. To se naredi v več posameznih korakih.

3.1 Pripravite strukturo paketa

Spremenite se v imenik, ki hrani celotno izvorno kodo paketa. V našem primeru paket vsebuje samo datoteko `helloworld.py`:

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

Dodajmo datoteke, ki so specifične za paket Debian. Orodje `dh_make` pride v poštev. Stikalo `-e` uporablja dani naslov kot e-poštni naslov v polju` Maintainer` datoteke `debian/control`. Namesto tega za izdelavo paketa uporabite svoj e -poštni naslov. Upoštevajte, da uporabite isti e -poštni naslov, ki ustreza vašemu ključu GPG.

Stikalo `-f` podano datoteko uporabi kot izvirni izvorni arhiv in preskoči kopiranje trenutnega programskega drevesa v` program.orig`.

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

Ob pozivu boste morali izbrati vrsto paketa, ki ga je treba ustvariti. Če želite izbrati _samo binarno_, vnesite `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 / . 

Rezultat je imenik `debian`:

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

Ta imenik vsebuje vse datoteke, specifične za paket.

3.2. Prilagodite nadzorno datoteko

Datoteka `debian/control` ohranja odvisnosti, ki so potrebne _za izdelavo_ paketa. Z ukazom `dpkg -depcheck -d./Configure` prejmete seznam z vsemi potrebnimi paketi. V našem primeru dodatni paket ni potreben, ker je Python tolmačeni jezik.

Nato moramo urediti datoteko `debian/control` in dodati vrednosti, specifične za paket. V našem primeru je videti tako:

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. Prilagodite datoteko z avtorskimi pravicami

Datoteka `debian/copyright` vsebuje informacije o licenci za programski paket. Pripravljen je za izdajo prek GNU Public License 2 (GPLv2). V našem primeru je videti tako:

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. Prilagodite datoteko dnevnika sprememb

Po podatkih o avtorskih pravicah je treba datoteko `debian/changelog` prilagoditi. V našem primeru dodamo informacije Začetna izdaja.

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

To je vse, kar potrebujemo doslej - zdaj lahko končno sestavimo paket.


4. Zgradite paket

Za izdelavo paketa moramo premakniti en imenik navzgor in zagnati naslednji ukaz:

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

Možnost `-rfakeroot` omogoča, da` dpkg-buildpackage` izvaja ukaze kot privilegiran uporabnik s pomočjo ukaza `fakeroot`. To je potrebno za pripravo paketa ter za ustvarjanje datotek in imenikov.
Zgornji ukaz ima za posledico daljši seznam izhodnih sporočil (prikazanih tukaj v okolju nemškega jezika):

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. Potrditev paketa

Čestitamo - uspelo vam je zgraditi paket Debian - ja! Zdaj pa si podrobneje oglejmo paket. Tukaj pride v poštev `lintian`. To orodje potrjuje vaš paket, da bi odkrilo kršitve strogih pravil, ki jih morajo izpolnjevati paketi Debian.

Za zagon preskusov vnesite naslednji ukaz:

lintian helloworld_0.1-1_amd64.deb 

Orodje ne odkrije kršitev pravil, temveč tudi pravopisne napake in napačne znake. Stikalo '–pedantic' zahteva, da je 'lintian' veliko bolj kritičen kot običajno. Kot lahko vidite spodaj, je 'lintian' nekoliko mrzovoljen in je odkril tri opozorila in eno napako.

Razen prvega opozorila lahko 'lintian' preprosto razveselimo in prilagodimo vsebino paketa v skladu s postavljenim pravilom. Opozorilo 'new-package-should-close-itp-bug' pomeni, da ni poročil o hroščih proti paketu ITP (ITP pomeni _nameren za paket_). Za običajen paket Debian je treba poročilu o hroščih poslati paket ITP, da druge obvesti, da nameravate začeti s pakiranjem te programske opreme.

4.2. Opozorilo: `readme-debian-contains-debmake-template

Datoteka `README.Debian` je namenjena hranjenju dodatnih opomb v zvezi s tem paketom. `dh_make` nam je ustvaril to datoteko:

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

V našem primeru nimamo dodatnih podatkov, zato lahko datoteko izbrišemo.

4.3. Opozorilo: `opis-začne-z-vodilnimi presledki`

To opozorilo se pojavi, ker se daljši opis našega paketa v datoteki `debian/control` začne z več kot enim presledkom. Takoj, ko odstranimo en presledek, opozorilo izgine.

4.4. Napaka: `description-synopsis-is-duplicate`

Vsak paket zahteva tako kratek kot daljši opis v `debian/control`. Ta napaka se pojavi, ker sta oba opisa enaka. Takoj, ko smo podaljšali daljši opis, napake ni več.


5. Povezave in reference

- [ddr] Andreas Barth, Adam Di Carlo, Raphaël Hertzog, Lucas Nussbaum, Christian Schwarz, Ian Jackson: Referenca razvijalca Debian
- [Dnmg] Josip Rodin, Osamu Aoki: Priročnik Debian New Maintainer's Guide
- [dpmb] Axel Beckert, Frank Hofmann: Knjiga o upravljanju paketov Debian
- [dpm] Priročnik o politiki Debiana
- [lahko] Vadnica za Debian Packaging
- [gph] Priročnik o zasebnosti GNU
- [lushpaiPackage] Alex Lushpai: Kako ustvariti paket debian iz vira


6. Zahvala

Avtor se zahvaljuje Axel Beckert in Gerold Rupprecht za njihovo podporo in kritike pri pripravi tega članka.