Návod na vytvorenie balíka Debian


1. Predslov

Byť zodpovedný za stroj znamená starať sa o hardvér, ako aj o softvérové komponenty. Ako je vidieť v každodennom živote správcu systému, je oveľa lepšie inštalovať softvér ako softvérový balík, než veľa zdrojových súborov. To znižuje náklady na správnu údržbu systému.

Balíky, ktoré sú k dispozícii od vášho preferovaného distribútora, sú overené a dohliadané správcom balíkov. Otestoval softvér a ubezpečil sa, že sa hodí k ostatným softvérovým balíkom dostupným v distribúcii. Okrem toho je balík podpísaný kľúčom GPG od správcu balíka. To zaručuje integritu balíka a ukazuje vám, že balík pochádza z dôveryhodného zdroja.

Formát balíka závisí od vašej distribúcie Linuxu. Vybrané formáty sú nasledovné:

deb

Balíky používané v: Debian GNU/Linux, Ubuntu,Armbian,Linux Mint, Knoppix

ot./min.

Balíky používané v: RedHat, Fedora, CentOS, OpenSuse

tgz a txz

Balíky používané v: Slackware

tar.xz

Balíky používané v: Arch Linux

Tento dokument stručne vysvetľuje, ako vytvoriť balík pre Debian GNU/Linux. Podrobné informácie o formáte balíkov Debianu a nástrojoch na udržiavanie linuxového systému založeného na `deb` si môžete pozrieť v príručke Debian Package Management Book [dpmb] Na zostavenie balíkov pre Debian GNU/Linux sú nevyhnutné tieto dokumenty:

  • The Debian New Maintainer’s Guide [dnmg]

  • Referenčná príručka vývojára Debianu [ddr]

  • Návod na balenie Debianu [dpt]

  • Príručka zásad Debianu [dpm]

Balík, s ktorým budeme pracovať, sa volá `helloworld` a má číslo verzie 0.1. Na demonštračné účely jednoducho obsahuje jeden skript Python, ktorý vydáva známu správu „Ahoj, svet!“:

#!/usr/bin/python

print ("Hello, world!")

2. Požiadavky

2.1. GPG kľúč

V kroku 1 majte k dispozícii kľúč GPG. Neskôr bude kľúč potrebný na podpísanie balíka. Majte na pamäti, že nepodpísané balíky sú nedôveryhodné a nemôžu byť súčasťou vesmíru Debianu.

V prípade, že ešte nemáte kľúč GPG, vytvorte si ho. Môžete postupovať podľa troch krokov uvedených nižšie. Prvý príkaz vygeneruje nový kľúč, druhý exportuje váš nový kľúč do samostatného súboru a tretí pridá kľúč do vášho osobného zväzku kľúčov.

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

Počas vytvárania sa uistite, že krstné meno _VAŠE MENO_ je správne. Bežne sa používa kombinácia krstného mena a priezviska. Tento názov bude musieť byť v balíku úplne rovnaký, keď vytvoríte súbor `control` balíka Debian. Viac informácií o GPG nájdete v príručke GNU Privacy Handbook [gph].

2.2. Reťazec baliacich nástrojov

Na zostavenie balíka Debian so zdrojovým kódom sú vo vašom systéme potrebné nasledujúce softvérové balíky:

  • budovať-nevyhnutné

  • autokonf

  • automobilka

  • autotools-dev

  • dh-make

  • debhelper

  • popisy

  • falošný koreň

  • xutils

  • lintian

  • pbuilder

Ako používateľ `root` ich môžete nainštalovať pomocou nasledujúceho príkazu:

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

2.3. Pripravte softvér na zabalenie

Musíme pripraviť adresár na zostavenie balíka. Vytvorte adresár na prípravu prostredia, v ktorom budeme zostavovať balík:

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

Skopírujte komprimovaný archív `tar.gz` do adresára:

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

Prejdite do adresára a rozbaľte balík:

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

Teraz adresár obsahuje zdrojový kód v samostatnom adresári a komprimovaný archív:

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

3. Debianizácia

V tomto bode pridáme súbory, ktoré sú špecifické pre balík Debian. Preto sa tento krok nazýva _Debianizácia_ softvéru. Toto sa vykonáva v niekoľkých jednotlivých krokoch.

3.1 Pripravte štruktúru balíka

Prejdite do adresára, v ktorom je uložený celý zdrojový kód balíka. V našom príklade balík obsahuje súbor `helloworld.py`, iba:

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

Pridajme súbory, ktoré sú špecifické pre balík Debian. Do hry vstupuje nástroj `dh_make`. Prepínač `-e` používa zadanú adresu ako e-mailovú adresu v poli `Maintainer` v súbore `debian/control`. Pri vytváraní balíka použite namiesto toho svoju vlastnú e-mailovú adresu. Nezabudnite použiť rovnakú e-mailovú adresu, ktorá zodpovedá vášmu kľúču GPG.

Prepínač `-f` používa daný súbor ako pôvodný zdrojový archív a preskočí kopírovanie aktuálneho programového stromu do `program.orig`.

~/build/helloworld/0.1/helloworld-0.1$ dh_make -e frank.hofmann@efho.de -f ../helloworld-0.1.tar.gz

Po zobrazení výzvy sa zobrazí výzva na výber typu balíka, ktorý sa má vytvoriť. Ak chcete vybrať _single binárne_, zadajte `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    : frank.hofmann@efho.de
Date             : Sat, 04 Nov 2017 21:16:13 +0100
Package Name     : helloworld
Version          : 0.1
License          : blank
Type of Package  : Single
Hit <enter> 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 / .

Výsledkom je adresár s názvom `debian`:

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

Tento adresár obsahuje všetky súbory špecifické pre balík.

3.2. Upravte kontrolný súbor

Súbor `debian/control` uchováva závislosti, ktoré sú potrebné _na zostavenie_ balíka. Pomocou príkazu `dpkg-depcheck -d ./configure` dostanete zoznam so všetkými požadovanými balíkmi. V našom prípade nie je potrebný žiadny ďalší balík, pretože Python je interpretovaný jazyk.

Ďalej musíme upraviť súbor `debian/control` a pridať hodnoty špecifické pre balík. V našom príklade to vyzerá takto:

Source: helloworld
Section: python
Priority: optional
Maintainer: Frank Hofmann <frank.hofmann@efho.de>
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. Upravte súbor s autorskými právami

Súbor `debian/copyright` obsahuje licenčné informácie pre softvérový balík. Je pripravený na vydanie prostredníctvom verejnej licencie GNU 2 (GPLv2). V našom príklade to vyzerá takto:

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 <frank.hofmann@efho.de>
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 <http://www.gnu.org/licenses/>
 .
 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. Upravte súbor protokolu zmien

Po informáciách o autorských právach je potrebné upraviť súbor `debian/changelog`. V našom príklade pridávame informáciu „Prvé vydanie“.

helloworld (0.1-1) unstable; urgency=low

  * Initial release

 -- Frank Hofmann <frank.hofmann@efho.de>  Sat, 04 Nov 2017 21:16:13 +0100

To je všetko, čo zatiaľ potrebujeme – teraz môžeme konečne zostaviť balík.

4. Zostavte balík

Na zostavenie balíka sa musíme presunúť o jeden adresár vyššie a spustiť nasledujúci príkaz:

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

Voľba `-rfakeroot` umožňuje `dpkg-buildpackage` spúšťať príkazy ako privilegovaný používateľ pomocou príkazu `fakeroot`. Je to potrebné na prípravu balíka a na vytvorenie súborov a adresárov. Výsledkom vyššie uvedeného príkazu je dlhší zoznam výstupných správ (tu zobrazený v prostredí nemeckého jazyka):

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 <frank.hofmann@efho.de>
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) <frank.hofmann@efho.de>
"
4096-Bit RSA Schlüssel, ID D431AC07, erzeugt 2014-09-05

4.1. Overenie balíka

Gratulujeme – podarilo sa vám vytvoriť balík Debian – áno! Teraz sa pozrime na balík bližšie. Tu vstupuje do hry `lintian`. Tento nástroj overí váš balík, aby našiel porušenie prísnych pravidiel, ktoré musia balíky Debianu spĺňať.

Ak chcete spustiť testy, zadajte nasledujúci príkaz:

lintian helloworld_0.1-1_amd64.deb

Nástroj nenájde porušenia pravidiel, ale ani pravopisné chyby a nesprávne znaky. Prepínač `–pedantic` žiada `lintian`, aby bol oveľa kritickejší ako zvyčajne. Ako môžete vidieť nižšie, `lintian` je trochu nevrlý a objavil tri varovania a jednu chybu.

Až na prvé varovanie môžeme `lintiana` ľahko potešiť a upraviť obsah balenia podľa nastavených pravidiel. Varovanie `new-package-should-close-itp-bug` znamená, že neexistuje žiadne hlásenie o chybe v balíku ITP (ITP znamená _zamýšľaný balík_). V prípade bežného balíka Debianu musí byť hlásenie o chybe zaslané na bugtracker pre balík ITP, aby ste ostatným oznámili, že máte v úmysle začať baliť tento softvér.

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

Súbor `README.Debian` je určený na uchovávanie ďalších poznámok týkajúcich sa tohto balíka. `dh_make` pre nás vytvoril tento súbor:

helloworld for Debian
---------------------

<possible notes regarding this package - if none, delete this file>

 -- Frank Hofmann <frank.hofmann@efho.de>  Sat, 04 Nov 2017 21:16:13 +0100

V našom príklade nemáme ďalšie informácie, takže môžeme súbor odstrániť.

4.3. Upozornenie: `popis-začína-začiatočnými-medzerami`

Toto varovanie sa objavilo, pretože dlhší popis nášho balíka v súbore `debian/control` začína viac ako jednou medzerou. Akonáhle odstránime jediné miesto, varovanie zmizne.

4.4. Chyba: „súhrnný popis je duplikovaný“.

Každý balík vyžaduje krátky aj dlhší popis v `debian/control`. Táto chyba sa objavila, pretože oba popisy sú identické. Akonáhle sme predĺžili dlhší popis, chyba je preč.

5. Odkazy a referencie

– [ddr] Andreas Barth, Adam Di Carlo, Raphaël Hertzog, Lucas Nussbaum, Christian Schwarz, Ian Jackson: Referenčná príručka vývojára Debianu – [dnmg] Josip Rodin, Osamu Aoki: Príručka nového správcu Debianu – [dpmb] Axel Beckert, Frank Hofmann: The Debian Package Management Book– [dpm] The Debian Policy Manual– [dpt] The Debian Packaging Tutorial– [gph] The GNU Privacy Handbook– [lushpaiPackage] Alex Lushpai: Ako vytvoriť balík debianu zo zdroja

6. Poďakovanie

Súvisiace články: