Kako napraviti Debian paket

Debian Package Creation Howto



1. Predgovor

Biti odgovoran za stroj znači brinuti se o hardveru, kao i o softverskim komponentama. Kao što se vidi u svakodnevnom životu kao administrator sustava, mnogo je bolje instalirati softver kao programski paket, a ne hrpu izvornih datoteka. Time se smanjuju troškovi za pravilno održavanje sustava.

Pakete koji su dostupni od vašeg željenog distributera potvrđuje i nadzire voditelj paketa. Testirao je softver i uvjerava se da se uklapa u ostale softverske pakete dostupne u distribuciji. Nadalje, paket je potpisan GPG ključem od održavatelja paketa. To jamči integritet paketa i pokazuje vam da je paket iz pouzdanog izvora.







Format paketa ovisi o vašoj distribuciji Linuxa. Odabrani su sljedeći formati:



deb

Paketi koji se koriste u: Debian GNU/Linux , Ubuntu , Armbijski , Linux Mint , Knoppix



rpm

Paketi koji se koriste u: Crveni šešir , Fedora , CentOS , OpenSuse





tgz and txz

Paketi koji se koriste u: Slackware

tar.xz

Paketi koji se koriste u: Arch Linux



Ovaj dokument objašnjava kako ukratko izgraditi paket za Debian GNU/Linux. Za detaljne informacije o formatu Debian paketa i alatima za održavanje Linux sustava temeljenog na `deb` možete pogledati Debian knjigu upravljanja paketima [dpmb] Za izradu paketa za Debian GNU/Linux potrebni su ovi dokumenti:

  • Vodič za Debian New Maintainer [dnmg]
  • Referenca Debian Developera [GDR]
  • Vodič za Debian pakiranje [limenka]
  • Priručnik za Debian politiku [dpm]

Paket s kojim ćemo raditi zove se `helloworld` i ima broj verzije 0.1. U demonstracijske svrhe jednostavno sadrži jednu Python skriptu koja šalje poznatu poruku Hello, world !:

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

2. Zahtjevi

2.1. GPG ključ

Kao korak 1, neka vaš GPG ključ bude dostupan. Kasnije će ključ biti potreban za potpisivanje paketa. Imajte na umu da nepotpisani paketi nisu pouzdani i ne mogu biti dio Debian svemira.

U slučaju da još nemate GPG ključ, izradite ga. Možete slijediti tri koraka u nastavku. Prva naredba generira novi ključ, druga izvozi vaš novi ključ u zasebnu datoteku, a treća dodaje ključ u vaš osobni privjesak.

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

Tijekom stvaranja provjerite je li navedeno ime _ VAŠE IME_ ispravno. Uobičajeno je koristiti kombinaciju imena i prezimena. Taj će naziv tada morati biti potpuno isti u paketu, pri stvaranju `kontrolne` datoteke Debian paketa. Za više informacija o GPG -u pogledajte GNU priručnik o privatnosti [gph].

2.2. Lanac alata za pakiranje

Za izradu Debian paketa s izvornim kodom sljedeći softverski paketi potrebni su na vašem sustavu:

  • graditi-bitan
  • autoconf
  • autoproizvodnja
  • autotools-dev
  • dh-make
  • debhelper
  • devkripti
  • lažni
  • xutils
  • lintijanski
  • pbuilder

Kao korisnički `root` možete ih instalirati pomoću sljedeće naredbe:

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

2.3. Pripremite softver za pakiranje

Moramo pripremiti direktorij za izradu paketa. Napravite direktorij za pripremu okruženja u kojem ćemo izgraditi paket:

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

Kopirajte `tar.gz` komprimiranu arhivu u direktorij:

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

Promijenite u direktorij i raspakirajte paket:

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

Sada direktorij sadrži izvorni kod u zasebnom direktoriju i komprimiranu arhivu:

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

3. Debianizacija

Na ovom mjestu ćemo dodati datoteke koje su specifične za Debian paket. Zato je ovaj korak nazvan _Debianization_ softvera. To se radi u nekoliko koraka.

3.1 Pripremite strukturu pakiranja

Promijenite se u direktorij koji čuva cijeli izvorni kod paketa. U našem primjeru paket sadrži samo datoteku `helloworld.py`:

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

Dodajmo datoteke koje su specifične za Debian paket. Alat `dh_make` dolazi na scenu. Prekidač `-e` koristi datu adresu kao adresu e-pošte u polju` Maintainer` datoteke `debian/control`. Umjesto toga, za izradu paketa koristite vlastitu adresu e -pošte. Imajte na umu da koristite istu adresu e -pošte koja odgovara vašem GPG ključu.

Prekidač `-f` koristi datu datoteku kao izvornu arhivu izvora i preskače kopiranje trenutnog programskog stabla u` program.orig`.

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

Na upit se od vas traži da odaberete vrstu paketa koji bi trebao biti kreiran. Za odabir _jednog binarnog_ tipa `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 / . 

Ovo rezultira direktorijem pod nazivom `debian`:

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

Ovaj direktorij sadrži sve datoteke specifične za paket.

3.2. Podesite kontrolnu datoteku

Datoteka `debian/control` čuva ovisnosti koje su potrebne _za izgradnju_ paketa. Pomoću naredbe `dpkg -depcheck -d./Configure` dobivate popis sa svim potrebnim paketima. U našem slučaju nije potreban dodatni paket jer je Python interpretirani jezik.

Zatim moramo urediti datoteku `debian/control` i dodati vrijednosti specifične za paket. Za naš primjer to izgleda ovako:

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 datoteku autorskih prava

Datoteka `debian/copyright` sadrži podatke o licenci za programski paket. Pripremljen je za objavljivanje putem GNU javne licence 2 (GPLv2). Za naš primjer to izgleda ovako:

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 datoteku dnevnika promjena

Nakon informacija o autorskim pravima potrebno je prilagoditi datoteku `debian/changelog`. U našem primjeru dodajemo informacije Initial release.

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

To je sve što nam do sada treba - sada konačno možemo izgraditi paket.


4. Napravite paket

Za izradu paketa moramo se pomaknuti jedan direktorij gore i pokrenuti sljedeću naredbu:

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

Opcija `-rfakeroot` omogućuje` dpkg-buildpackage` da pokreće naredbe kao privilegirani korisnik uz pomoć naredbe `fakeroot`. To je potrebno za pripremu paketa i stvaranje datoteka i direktorija.
Gornja naredba rezultira dužim popisom izlaznih poruka (prikazanih ovdje u njemačkom jezičnom okruženju):

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

Čestitamo - uspjeli ste izgraditi Debian paket - da! Sada, pogledajmo pobliže paket. Ovdje na scenu stupa `lintian`. Ovaj alat provjerava vaš paket kako bi pronašao kršenja strogih pravila koje Debian paketi moraju ispunjavati.

Za pokretanje testova upišite sljedeću naredbu:

lintian helloworld_0.1-1_amd64.deb 

Alat ne pronalazi kršenja pravila, ali i pravopisne pogreške i pogrešne znakove. Prekidač `–pedantic` traži od` lintian` da bude mnogo kritičniji nego inače. Kao što vidite dolje, `lintian` je pomalo mrzovoljan i otkrio je tri upozorenja i jednu pogrešku.

Osim prvog upozorenja, lako možemo usrećiti `lintian` i prilagoditi sadržaj paketa prema postavljenom pravilu. Upozorenje `new-package-should-close-itp-bug` znači da nema izvješća o programskim pogreškama protiv ITP paketa (ITP znači _ namjeravan na paket_). Za uobičajeni Debian paket, izvješće o grešci mora biti poslano programu za praćenje programskih pogrešaka za paket ITP kako bi se drugi obavijestili da namjeravate početi pakirati ovaj softver.

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

Datoteka `README.Debian` ima za cilj zadržati dodatne bilješke o ovom paketu. `dh_make` nam je stvorio ovu datoteku:

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

U našem primjeru nemamo dodatne podatke pa možemo izbrisati datoteku.

4.3. Upozorenje: `opis-počinje-s-vodećim-razmacima`

Ovo se upozorenje pojavljuje jer duži opis našeg paketa u datoteci `debian/control` počinje s više od jednog razmaka. Čim uklonimo jedan razmak, upozorenje će nestati.

4.4. Pogreška: `description-synopsis-is-duplicate`

Svaki paket zahtijeva i kratak i duži opis u `debian/control`. Ova se pogreška javlja jer su oba opisa identična. Čim smo proširili duži opis, pogreška je nestala.


5. Linkovi i reference

- [ddr] Andreas Barth, Adam Di Carlo, Raphaël Hertzog, Lucas Nussbaum, Christian Schwarz, Ian Jackson: Referenca Debian Developera
- [Dnmg] Josip Rodin, Osamu Aoki: Vodič za Debian New Maintainer
- [dpmb] Axel Beckert, Frank Hofmann: Debian knjiga o upravljanju paketima
- [dpm] Priručnik za Debian politiku
- [limenka] Vodič za Debian pakiranje
- [gph] Priručnik o privatnosti GNU -a
- [lushpaiPackage] Alex Lushpai: Kako stvoriti debian paket od izvora


6. Zahvalnice

Autor se zahvaljuje Axel Beckert i Gerold Rupprecht za njihovu podršku i kritičare prilikom pripreme ovog članka.