Debian Pakketaanmaak HowTo

Debian Package Creation Howto



1. Voorwoord

Verantwoordelijk zijn voor een machine betekent zorgen voor zowel de hardware als de softwarecomponenten. Zoals je in het dagelijks leven als systeembeheerder ziet, is het veel beter om software als een softwarepakket te installeren in plaats van een heleboel bronbestanden. Dit reduceert de kosten om het systeem goed te onderhouden.

Pakketten die verkrijgbaar zijn bij uw voorkeursdistributeur worden gevalideerd en gecontroleerd door een pakketbeheerder. Hij testte de software en verzekert dat deze past bij de andere softwarepakketten die beschikbaar zijn in de distributie. Verder is het pakket ondertekend met een GPG-sleutel van de pakketbeheerder. Dit garandeert de integriteit van het pakket en laat zien dat het pakket afkomstig is van een vertrouwde bron.







Het pakketformaat is afhankelijk van uw Linux-distributie. Geselecteerde formaten zijn de volgende:



deb

Pakketten gebruikt in: Debian GNU/Linux , Ubuntu , Armbian , Linux Mint , Knoppix



rpm

Pakketten gebruikt in: Rode Hoed , Fedora , CentOS , OpenSuse





tgz and txz

Pakketten gebruikt in: Slackware

tar.xz

Pakketten gebruikt in: Arch Linux



Dit document legt kort uit hoe u een pakket voor Debian GNU/Linux kunt bouwen. Voor gedetailleerde informatie over het Debian-pakketformaat en de tools om een ​​op `deb` gebaseerd Linux-systeem te onderhouden, kunt u een kijkje nemen in het Debian Package Management Book [dpm] Om pakketten voor Debian GNU/Linux te bouwen, zijn deze documenten essentieel:

  • De Debian Nieuwe Onderhoudshandleiding [dnmg]
  • De Debian-handleiding voor ontwikkelaars [DDR]
  • De Debian Verpakkingszelfstudie [kan]
  • De Beleidshandleiding van Debian [dpm]

Het pakket waarmee we gaan werken heet `helloworld` en heeft versienummer 0.1. Voor demonstratiedoeleinden bevat het gewoon een enkel Python-script dat het beroemde bericht Hello, world! uitvoert:

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

2. Vereisten

2.1. GPG-sleutel

Houd als stap 1 uw GPG-sleutel bij de hand. Later is de sleutel nodig om het pakket te ondertekenen. Houd er rekening mee dat niet-ondertekende pakketten onbetrouwbaar zijn en geen deel kunnen uitmaken van het Debian-universum.

Als je nog geen GPG-sleutel hebt, maak er dan een aan. U kunt de onderstaande drie stappen volgen. De eerste opdracht genereert een nieuwe sleutel, de tweede exporteert uw nieuwe sleutel naar een apart bestand en de derde voegt de sleutel toe aan uw persoonlijke sleutelhanger.

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

Zorg er tijdens het maken voor dat de opgegeven naam _YOUR NAME_ correct is. Het is gebruikelijk om een ​​combinatie van voornaam en achternaam te gebruiken. Deze naam zal dan exact hetzelfde moeten zijn in het pakket bij het aanmaken van het `control`-bestand van het Debian-pakket. Kijk voor meer informatie over GPG in het GNU Privacy Handbook [gph].

2.2. De verpakkingsgereedschapsketen

Om een ​​Debian-pakket met broncode te bouwen, zijn de volgende softwarepakketten vereist op uw systeem:

  • bouwen-essentieel
  • autoconf
  • automerk
  • autotools-dev
  • dh-make
  • debhelper
  • devscripts
  • nepwortel
  • xutils
  • lintiaans
  • pbuilder

Als gebruiker `root` kunt u deze installeren met het volgende commando:

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

2.3. Bereid de te verpakken software voor

We moeten een map voorbereiden om het pakket te bouwen. Maak een map om de omgeving voor te bereiden waarin we het pakket zullen bouwen:

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

Kopieer het `tar.gz` gecomprimeerde archief in de directory:

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

Ga naar de directory en pak het pakket uit:

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

Nu bevat de map zowel de broncode in een aparte map als het gecomprimeerde archief:

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

3. Debianisatie

Op dit punt zullen we de bestanden toevoegen die specifiek zijn voor een Debian-pakket. Daarom heet deze stap _Debianization_ van de software. Dit gebeurt in een aantal afzonderlijke stappen.

3.1 Bereid de pakketstructuur voor

Ga naar de map die de volledige broncode van het pakket bevat. In ons voorbeeld bevat het pakket het bestand `helloworld.py`, alleen:

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

Laten we de bestanden toevoegen die specifiek zijn voor een Debian-pakket. De tool `dh_make` komt in het spel. De schakelaar `-e` gebruikt het opgegeven adres als het e-mailadres in het veld `Maintainer` van het `debian/control`-bestand. Gebruik in plaats daarvan uw eigen e-mailadres om het pakket samen te stellen. Houd er rekening mee dat u hetzelfde e-mailadres gebruikt dat overeenkomt met uw GPG-sleutel.

De schakelaar `-f` gebruikt het gegeven bestand als het originele bronarchief en slaat het kopiëren van de huidige programmaboom over naar `program.orig`.

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

Bij de prompt wordt u gevraagd om het type pakket te selecteren dat moet worden gemaakt. Om _enkel binair_ te kiezen typ `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 / . 

Dit resulteert in een map met de naam `debian`:

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

Deze map bevat alle pakketspecifieke bestanden.

3.2. Pas het controlebestand aan

Het bestand `debian/control` bewaart de afhankelijkheden die nodig zijn om het pakket te bouwen. Met het commando `dpkg-depcheck -d ./configure` krijg je een lijst met alle benodigde pakketten. In ons geval is er geen verder pakket nodig omdat Python een geïnterpreteerde taal is.

Vervolgens moeten we het bestand `debian/control` bewerken en pakketspecifieke waarden toevoegen. Voor ons voorbeeld ziet het er als volgt uit:

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. Pas het copyrightbestand aan

Het bestand `debian/copyright` bevat de licentie-informatie voor het softwarepakket. Het is voorbereid op de release via GNU Public License 2 (GPLv2). Voor ons voorbeeld ziet het er als volgt uit:

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. Pas het changelog-bestand aan

Na de copyright-informatie moet het bestand `debian/changelog` worden aangepast. In ons voorbeeld voegen we de informatie Initial release toe.

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

Dat is alles wat we tot nu toe nodig hebben - nu kunnen we eindelijk het pakket bouwen.


4. Bouw het pakket

Om het pakket te bouwen, moeten we één map omhoog gaan en de volgende opdracht uitvoeren:

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

De optie `-rfakeroot` laat `dpkg-buildpackage` commando's uitvoeren als een bevoorrechte gebruiker met behulp van het commando `fakeroot`. Dit is nodig om het pakket voor te bereiden en om bestanden en mappen te maken.
Het bovenstaande commando resulteert in een langere lijst met uitvoerberichten (hier weergegeven in een Duitstalige omgeving):

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. Het pakket valideren

Gefeliciteerd - je bent erin geslaagd een Debian-pakket te bouwen - ja! Laten we het pakket nu eens nader bekijken. Hier komt `lintian` om de hoek kijken. Deze tool valideert uw pakket om overtredingen op te sporen tegen de strikte regels waaraan Debian-pakketten moeten voldoen.

Typ de volgende opdracht om de tests uit te voeren:

lintian helloworld_0.1-1_amd64.deb 

De tool vindt geen regelovertredingen, maar ook spelfouten en verkeerde tekens. De schakelaar `–pedant` vraagt ​​`lintian` om veel kritischer te zijn dan normaal. Zoals je hieronder kunt zien is `lintian` een beetje chagrijnig en heeft drie waarschuwingen en één fout ontdekt.

Behalve de eerste waarschuwing kunnen we `lintian` gemakkelijk blij maken en de inhoud van het pakket aanpassen volgens de regelset. De waarschuwing `new-package-should-close-itp-bug` betekent dat er geen bugrapport is tegen het ITP-pakket (ITP betekent _intended to package_). Voor een regulier Debian-pakket moet een bugrapport worden verzonden naar de bugtracker voor pakket ITP om anderen te informeren dat u van plan bent deze software te gaan verpakken.

4.2. Waarschuwing: `leesmij-debian-bevat-debmake-sjabloon

Het bestand `README.Debian` is bedoeld om aanvullende opmerkingen over dit pakket te bewaren. `dh_make` heeft dit bestand voor ons gemaakt:

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

In ons voorbeeld hebben we geen aanvullende informatie, dus we kunnen het bestand verwijderen.

4.3. Waarschuwing: `beschrijving-begint-met-voorloopspaties`

Deze waarschuwing wordt gegeven omdat de langere beschrijving van ons pakket in het bestand `debian/control` begint met meer dan een enkele spatie. Zodra we een enkele spatie verwijderen, verdwijnt de waarschuwing.

4.4. Fout: `beschrijving-synopsis-is-gedupliceerd`

Elk pakket vereist zowel een korte als een langere beschrijving in `debian/control`. Deze fout treedt op omdat beide beschrijvingen identiek zijn. Zodra we de langere beschrijving hebben uitgebreid, is de fout verdwenen.


5. Links en verwijzingen

- [ddr] Andreas Barth, Adam Di Carlo, Raphaël Hertzog, Lucas Nussbaum, Christian Schwarz, Ian Jackson: De Debian-handleiding voor ontwikkelaars
– [Dnmg] Josip Rodin, Osamu Aoki: De Debian Nieuwe Onderhoudshandleiding
- [dpmb] Axel Beckert, Frank Hofmann: Het Debian Pakketbeheerboek
- [dpm] De Beleidshandleiding van Debian
- [kan] De Debian Verpakkingszelfstudie
– [gph] Het GNU-privacyhandboek
– [lushpaiPakket] Alex Lushpai: Hoe een debian-pakket van de bron te maken


6. Dankbetuigingen

De auteur wil graag bedanken Axel Beckert en Gerold Rupprecht voor hun steun en critici bij het opstellen van dit artikel.