Jak vytvořit balíček Debianu

Debian Package Creation Howto



1. Předmluva

Být zodpovědný za stroj znamená starat se o hardware i softwarové komponenty. Jak je vidět v každodenním životě jako správce systému, je mnohem lepší nainstalovat software jako softwarový balíček, nikoli jako svazek zdrojových souborů. To snižuje náklady na správnou údržbu systému.

Balíčky, které jsou k dispozici u vašeho preferovaného distributora, jsou validovány a dohlíženy správcem balíčků. Otestoval software a ujistil se, že je vhodný pro ostatní softwarové balíčky dostupné v distribuci. Kromě toho je balíček podepsán klíčem GPG od správce balíčku. To zaručuje integritu balíčku a ukazuje vám, že balíček pochází z důvěryhodného zdroje.







Formát balíčku závisí na vaší distribuci Linuxu. Vybrané formáty jsou následující:



deb

Balíčky používané v: Debian GNU/Linux , Ubuntu , Armbian , Linuxová mincovna , Knoppix



rpm

Balíčky používané v: Červená čepice , Fedora , CentOS , OpenSuse





tgz and txz

Balíčky používané v: Slackware

tar.xz

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



Tento dokument vysvětluje, jak stručně vytvořit balíček pro Debian GNU/Linux. Podrobné informace o formátu balíčku Debian a nástrojích pro údržbu systému Linux založeného na `deb 'můžete nahlédnout do Knihy pro správu balíčků Debianu [dpmb] Pro sestavení balíčků pro Debian GNU/Linux jsou tyto dokumenty zásadní:

  • Průvodce novým správcem Debianu [dnmg]
  • Reference pro vývojáře Debianu [NDR]
  • Výukový program pro balení Debianu [umět]
  • Příručka zásad Debianu [dpm]

Balíček, se kterým budeme pracovat, se jmenuje `helloworld` a má číslo verze 0,1. Pro demonstrační účely jednoduše obsahuje jeden skript Pythonu, který vydává slavnou zprávu Hello, world !:

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

2. Požadavky

2.1. GPG klíč

Jako krok 1 mějte svůj GPG klíč k dispozici. Později bude k podpisu balíčku potřeba klíč. Mějte na paměti, že nepodepsané balíčky jsou nedůvěryhodné a nemohou být součástí vesmíru Debianu.

V případě, že ještě nemáte klíč GPG, vytvořte jej. Můžete postupovat podle tří níže uvedených kroků. První příkaz vygeneruje nový klíč, druhý exportuje váš nový klíč do samostatného souboru a třetí přidá klíč do vašeho osobního klíče.

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

Během vytváření se ujistěte, že je zadané jméno _VÁŠE JMÉNO_ správné. Je běžné používat kombinaci jména a příjmení. Toto jméno bude muset být v balíčku přesně stejné, pak při vytváření souboru `control` balíčku Debianu. Další informace o GPG naleznete v příručce GNU Privacy Handbook [gph].

2.2. Řetěz balicího nástroje

K vytvoření balíčku Debian se zdrojovým kódem jsou ve vašem systému vyžadovány následující softwarové balíčky:

  • nezbytné
  • autoconf
  • automake
  • autotools-dev
  • dh-make
  • debhelper
  • popisy
  • fakeroot
  • xutils
  • lintian
  • pbuilder

Jako uživatel `root` je můžete nainstalovat pomocí následujícího příkazu:

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

2.3. Připravte software k zabalení

Musíme připravit adresář pro sestavení balíčku. Vytvořte adresář pro přípravu prostředí, ve kterém budeme balíček vytvářet:

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

Zkopírujte komprimovaný archiv `tar.gz` do adresáře:

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

Přejděte do adresáře a extrahujte balíček:

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

Nyní adresář obsahuje jak zdrojový kód v samostatném adresáři, tak komprimovaný archiv:

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

3. Debianizace

V tomto okamžiku přidáme soubory, které jsou specifické pro balíček Debian. Proto je tento krok pojmenován _Debianization_ softwaru. To se provádí v několika jednotlivých krocích.

3.1 Připravte strukturu balíčku

Přejděte do adresáře, který uchovává celý zdrojový kód balíčku. V našem příkladu balíček obsahuje soubor `helloworld.py`, pouze:

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

Pojďme přidat soubory, které jsou specifické pro balíček Debian. Do hry vstupuje nástroj `dh_make`. Přepínač `-e` používá danou adresu jako e-mailovou adresu v poli` Maintainer` v souboru `debian/control`. Při vytváření balíčku místo toho použijte svou vlastní e -mailovou adresu. Nezapomeňte použít stejnou e -mailovou adresu, která odpovídá vašemu klíči GPG.

Přepínač `-f` použije daný soubor jako původní zdrojový archiv a přeskočí kopírování aktuálního stromu programu na` program.orig`.

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

Na výzvu budete vyzváni k výběru typu balíčku, který má být vytvořen. Chcete -li zvolit _single binary_, zadejte `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 / . 

Výsledkem je adresář s názvem `debian`:

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

Tento adresář obsahuje všechny soubory specifické pro balíček.

3.2. Upravte kontrolní soubor

Soubor `debian/control` uchovává potřebné závislosti _pro sestavení_ balíčku. Pomocí příkazu `dpkg -depcheck -d./Configure` obdržíte seznam se všemi požadovanými balíčky. V našem případě není potřeba žádný další balíček, protože Python je interpretovaný jazyk.

Dále musíme upravit soubor `debian/control` a přidat hodnoty specifické pro balíček. V našem příkladu to vypadá následovně:

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. Upravte soubor autorských práv

Soubor `debian/copyright` obsahuje licenční informace pro softwarový balíček. K vydání je připraven prostřednictvím GNU Public License 2 (GPLv2). V našem příkladu to vypadá následovně:

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. Upravte soubor protokolu změn

Po informacích o autorských právech je třeba upravit soubor `debian/changelog`. V našem příkladu přidáme informace Počáteční vydání.

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

To je zatím vše, co potřebujeme - nyní můžeme balíček konečně vytvořit.


4. Sestavte balíček

K sestavení balíčku musíme přesunout o jeden adresář výše a spustit následující příkaz:

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

Volba `-rfakeroot` umožňuje programu` dpkg-buildpackage` spouštět příkazy jako privilegovaný uživatel pomocí příkazu `fakeroot`. To je nezbytné pro přípravu balíčku a pro vytváření souborů a adresářů.
Výše uvedený příkaz má za následek delší seznam výstupních zpráv (zde zobrazený v prostředí německé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 < [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. Ověření balíčku

Gratulujeme - podařilo se vám vytvořit balíček Debianu - jo! Nyní se na balíček podíváme blíže. Zde vstupuje do hry `lintian`. Tento nástroj ověří váš balíček, aby zjistil porušení přísných pravidel, která musí balíčky Debianu splňovat.

Chcete -li spustit testy, zadejte následující příkaz:

lintian helloworld_0.1-1_amd64.deb 

Nástroj nenalezne porušení pravidel, ale také pravopisné chyby a nesprávné znaky. Přepínač „–pedantický“ požaduje, aby „lintian“ byl mnohem kritičtější než obvykle. Jak vidíte níže, „lintian“ je trochu nevrlý a objevil tři varování a jednu chybu.

Až na první varování můžeme snadno udělat radost „lintianovi“ a upravit obsah balíčku podle sady pravidel. Varování `new-package-should-close-itp-bug` znamená, že neexistuje žádná zpráva o chybě proti balíčku ITP (ITP znamená _intended to package_). U běžného balíčku Debian musí být zaslána zpráva o chybě na bugtracker, aby balíček ITP upozornil ostatní, že hodláte začít balit tento software.

4.2. Varování: `readme-debian-contains-debmake-template

Soubor `README.Debian` je určen k uchování dalších poznámek týkajících se tohoto balíčku. `dh_make` pro nás vytvořil tento soubor:

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

V našem případě nemáme další informace, takže můžeme soubor smazat.

4.3. Varování: `description-začíná-s-před-mezerami`

Toto varování je vyvoláno, protože delší popis našeho balíčku v souboru `debian/control` začíná více než jedním mezerou. Jakmile odstraníme jedno místo, varování zmizí.

4.4. Chyba: `description-synopsis-is-duplication`

Každý balíček vyžaduje krátký i delší popis v `debian/control`. Tato chyba je vyvolána, protože oba popisy jsou totožné. Jakmile jsme rozšířili delší popis, chyba zmizela.


5. Odkazy a reference

- [ddr] Andreas Barth, Adam Di Carlo, Raphaël Hertzog, Lucas Nussbaum, Christian Schwarz, Ian Jackson: Reference pro vývojáře Debianu
- [Dnmg] Josip Rodin, Osamu Aoki: Průvodce novým správcem Debianu
- [dpmb] Axel Beckert, Frank Hofmann: Kniha správy balíčků Debianu
- [dpm] Příručka zásad Debianu
- [umět] Výukový program pro balení Debianu
- [gph] Příručka ochrany osobních údajů GNU
- [lushpaiPackage] Alex Lushpai: Jak vytvořit balíček debian ze zdroje


6. Poděkování

Autor by chtěl poděkovat Axel Beckert a Gerold Rupprecht za jejich podporu a kritiky při přípravě tohoto článku.