Debianpaket skapande HowTo

Debian Package Creation Howto



1. Förord

Att vara ansvarig för en maskin innebär att ta hand om både hårdvaran och programvarukomponenterna. Som sett i det dagliga livet som systemadministratör är det mycket bättre att installera programvara som ett mjukvarupaket snarare än ett gäng källfiler. Detta minskar kostnaderna för att underhålla systemet korrekt.

Paket som är tillgängliga från din föredragna distributör valideras och övervakas av en pakethållare. Han testade programvaran och försäkrar att den passar till de andra mjukvarupaket som finns i distributionen. Dessutom är paketet signerat med en GPG -nyckel från pakethållaren. Detta garanterar paketets integritet och visar att paketet kommer från en pålitlig källa.







Paketformatet beror på din Linux -distribution. Valda format är följande:



deb

Förpackningar som används i: Debian GNU/Linux , Ubuntu , Armbian , Linux Mint , Knoppix



rpm

Förpackningar som används i: Röd hatt , Fedora , CentOS , OpenSuse





tgz and txz

Förpackningar som används i: Slackware

tar.xz

Förpackningar som används i: Arch Linux



Detta dokument förklarar hur man bygger ett paket för Debian GNU/Linux kort. För detaljerad information om Debian -paketformatet och verktygen för att underhålla ett 'deb' -baserat Linux -system kan du titta på Debians pakethanteringsbok [dpmb] För att bygga paket för Debian GNU/Linux är dessa dokument viktiga:

  • Debians nya underhållsguide [dnmg]
  • Debians utvecklarreferens [DDR]
  • Handledning för förpackningar i Debian [burk]
  • Debians policyhandbok [dpm]

Paketet vi kommer att arbeta med heter 'helloworld' och har versionsnumret 0.1. För demonstrationsändamål innehåller den helt enkelt ett enda Python -skript som skickar ut det berömda meddelandet Hej, värld !:

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

2. Krav

2.1. GPG -nyckel

Som steg 1, ha din GPG -nyckel tillgänglig. Senare kommer nyckeln att behövas för att signera paketet. Tänk på att osignerade paket är opålitliga och inte kan vara en del av Debian -universum.

Om du inte har en GPG -nyckel kan du skapa en. Du kan följa de tre stegen nedan. Det första kommandot genererar en ny nyckel, den andra exporterar din nya nyckel till en separat fil och den tredje lägger till nyckeln till din personliga nyckelring.

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

Under skapandet, se till att det angivna namnet _DITT NAMN_ är korrekt. Det är vanligt att använda en kombination av förnamn och efternamn. Det här namnet måste vara exakt detsamma i paketet när du skapar 'kontroll' -filen för Debian -paketet. För mer information om GPG, ta en titt på GNU Privacy Handbook [gph].

2.2. Förpackningsverktygskedjan

För att bygga ett Debian -paket med källkod krävs följande programpaket på ditt system:

  • bygg-viktigt
  • autokonf
  • automake
  • autotools-dev
  • dh-make
  • debhelper
  • devscripts
  • fakeroot
  • xutils
  • lintian
  • byggare

Som användarens root kan du installera dessa med följande kommando:

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

2.3. Förbered programvaran som ska förpackas

Vi måste förbereda en katalog för att bygga paketet. Skapa en katalog för att förbereda miljön där vi ska bygga paketet:

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

Kopiera det 'tar.gz' komprimerade arkivet i katalogen:

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

Byt till katalogen och extrahera paketet:

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

Nu innehåller katalogen både källkoden i en separat katalog och det komprimerade arkivet:

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

3. Debianisering

Vid denna tidpunkt lägger vi till de filer som är specifika för ett Debian -paket. Det är därför detta steg heter _Debianisering_ av programvaran. Detta görs i flera enskilda steg.

3.1 Förbered paketstrukturen

Byt till katalogen som behåller hela paketets källkod. I vårt exempel innehåller paketet filen 'helloworld.py', endast:

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

Låt oss lägga till de filer som är specifika för ett Debian -paket. Verktyget `dh_make` spelar in. Omkopplaren '-e' använder den angivna adressen som e-postadress i fältet 'Underhållare' i filen 'debian/control'. Använd paketet istället för att bygga paketet. Tänk på att använda samma e -postadress som motsvarar din GPG -nyckel.

Växeln `-f` använder den angivna filen som det ursprungliga källarkivet och hoppar över kopieringen av det aktuella programträdet till` program.orig`.

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

Vid uppmaningen uppmanas du att välja vilken typ av paket som ska skapas. För att välja _single binary_ type `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 / . 

Detta resulterar i en katalog som heter 'debian':

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

Den här katalogen innehåller alla paketspecifika filer.

3.2. Justera kontrollfilen

Filen 'debian/control' behåller de beroenden som behövs _ för att bygga_ paketet. Med kommandot 'dpkg -depcheck -d./Configure' får du en lista med alla nödvändiga paket. I vårt fall behövs inget ytterligare paket eftersom Python är ett tolkat språk.

Därefter måste vi redigera filen 'debian/control' och lägga till paketspecifika värden. För vårt exempel ser det ut så här:

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. Justera upphovsrättsfilen

Filen 'debian/copyright' innehåller licensinformationen för mjukvarupaketet. Det är förberett för släpp via GNU Public License 2 (GPLv2). För vårt exempel ser det ut så här:

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. Justera changelog -filen

Efter informationen om upphovsrätt måste filen 'debian/changelog' justeras. I vårt exempel lägger vi till informationen Initial release.

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

Det är allt vi behöver hittills - nu kan vi äntligen bygga paketet.


4. Bygg paketet

För att bygga paketet måste vi flytta upp en katalog och köra följande kommando:

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

Alternativet '-rfakeroot' tillåter 'dpkg-buildpackage' att köra kommandon som en priviligerad användare med hjälp av kommandot 'fakeroot'. Detta är nödvändigt för att förbereda paketet och för att skapa filer och kataloger.
Kommandot ovan resulterar i en längre lista över utmatningsmeddelanden (visas här i en tysk språkmiljö):

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. Validerar paketet

Grattis - du lyckades bygga ett Debian -paket - ja! Låt oss nu titta närmare på paketet. Här spelar 'lintian' in. Detta verktyg validerar ditt paket för att hitta brott mot de strikta regler som Debian -paket måste uppfylla.

För att köra testerna skriver du in följande kommando:

lintian helloworld_0.1-1_amd64.deb 

Verktyget hittar inte regelöverträdelser utan även stavfel och felaktiga tecken. Omkopplaren '–pedantisk' ber 'lintian' att vara mycket mer kritisk än vanligt. Som du kan se nedan är 'lintian' lite grinig och har upptäckt tre varningar och ett fel.

Bortsett från den första varningen kan vi enkelt göra 'lintian' glad och justera paketinnehållet enligt regeluppsättningen. Varningen 'new-package-should-close-itp-bug' innebär att det inte finns någon felrapport mot ITP-paketet (ITP betyder _intended to package_). För ett vanligt Debian -paket måste en buggrapport skickas till buggtrackern för paketets ITP för att meddela andra att du tänker börja förpacka denna programvara.

4.2. Varning: `readme-debian-innehåller-debmake-mall

Filen `README.Debian` är avsedd att hålla ytterligare anteckningar om detta paket. `dh_make` skapade den här filen åt oss:

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

I vårt exempel har vi ingen ytterligare information, så vi kan ta bort filen.

4.3. Varning: `beskrivning-börjar-med-ledande-mellanslag`

Denna varning höjs eftersom den längre beskrivningen av vårt paket i filen 'debian/control' börjar med mer än ett enda mellanslag. Så snart vi tar bort ett enda utrymme försvinner varningen.

4.4. Fel: `description-synopsis-is-duplicated`

Varje paket kräver både en kort och en längre beskrivning i 'debian/control'. Detta fel uppstår eftersom båda beskrivningarna är identiska. Så snart vi förlängde den längre beskrivningen är felet borta.


5. Länkar och referenser

- [ddr] Andreas Barth, Adam Di Carlo, Raphaël Hertzog, Lucas Nussbaum, Christian Schwarz, Ian Jackson: Debians utvecklarreferens
- [Dnmg] Josip Rodin, Osamu Aoki: Debians nya underhållsguide
- [dpmb] Axel Beckert, Frank Hofmann: Debians pakethanteringsbok
- [dpm] Debians policyhandbok
- [kan] Handledning för förpackningar i Debian
- [gph] GNU Sekretesshandbok
- [lushpaiPackage] Alex Lushpai: Hur man skapar debianpaket från källan


6. Erkännanden

Författaren vill tacka Axel Beckert och Gerold Rupprecht för deras stöd och kritiker när de förbereder denna artikel.