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.