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!“:
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 -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:
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:
Skopírujte komprimovaný archív `tar.gz` do adresára:
Prejdite do adresára a rozbaľte balík:
~/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:
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:
~/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`.
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`.
[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`:
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:
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:
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“.
* 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:
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: 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:
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:
---------------------
<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