Sådan oprettes Debian -pakke

Debian Package Creation Howto



1. Forord

At være ansvarlig for en maskine betyder, at man tager sig af hardware såvel som softwarekomponenterne. Som set i hverdagen som systemadministrator er det meget bedre at installere software som en softwarepakke frem for en masse kildefiler. Dette reducerer omkostningerne til korrekt vedligeholdelse af systemet.

Pakker, der er tilgængelige fra din foretrukne distributør, valideres og overvåges af en pakkeholder. Han testede softwaren og forsikrer, at den passer til de andre softwarepakker, der er tilgængelige i distributionen. Endvidere er pakken underskrevet med en GPG -nøgle fra pakkeholder. Dette garanterer pakkens integritet og viser dig, at pakken er fra en pålidelig kilde.







Pakkeformatet afhænger af din Linux -distribution. De udvalgte formater er følgende:



deb

Pakker brugt i: Debian GNU/Linux , Ubuntu , Armbian , Linux Mint , Knoppix



rpm

Pakker brugt i: Rød hat , Fedora , CentOS , OpenSuse





tgz and txz

Pakker brugt i: Slackware

tar.xz

Pakker brugt i: Arch Linux



Dette dokument forklarer, hvordan man kort bygger en pakke til Debian GNU/Linux. For detaljerede oplysninger om Debian -pakkeformatet og værktøjerne til at vedligeholde et `deb` -baseret Linux -system kan du kigge nærmere på Debians pakkehåndteringsbog [dpmb] For at bygge pakker til Debian GNU/Linux er disse dokumenter vigtige:

  • Debians nye vedligeholdelsesvejledning [dnmg]
  • Debians udviklerreference [DDR]
  • Debian -emballeringsvejledningen [kan]
  • Debians politikhåndbog [dpm]

Den pakke, vi vil arbejde med, hedder 'helloworld' og har versionsnummer 0.1. Af demonstrationsformål indeholder den simpelthen et enkelt Python -script, der udsender den berømte meddelelse Hej, verden !:

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

2. Krav

2.1. GPG -nøgle

Som trin 1 skal du have din GPG -nøgle til rådighed. Senere vil nøglen være nødvendig for at underskrive pakken. Husk, at usignerede pakker er upålidelige og ikke kan være en del af Debian -universet.

Hvis du ikke har en GPG -nøgle, skal du oprette en endnu. Du kan følge de tre trin herunder. Den første kommando genererer en ny nøgle, den anden eksporterer din nye nøgle til en separat fil, og den tredje tilføjer nøglen til din personlige nøglering.

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

Sørg for, at det givne navn _DIT NAVN_ er korrekt under oprettelsen. Det er almindeligt at bruge en kombination af fornavn og efternavn. Dette navn skal være nøjagtigt det samme i pakken, når du opretter 'kontrol' -filen i Debian -pakken. For mere information om GPG, se GNU Privacy Handbook [gph].

2.2. Emballage værktøjskæden

For at opbygge en Debian -pakke med kildekode kræves følgende softwarepakker på dit system:

  • bygge-væsentligt
  • autokonf
  • bilfremstilling
  • autotools-dev
  • dh-make
  • debhelper
  • devscripts
  • fakeroot
  • xutils
  • lintian
  • bygherre

Som bruger `root` kan du installere disse ved hjælp af følgende kommando:

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

2.3. Forbered softwaren, der skal pakkes

Vi skal udarbejde et bibliotek for at bygge pakken. Opret et bibliotek for at forberede det miljø, hvor vi vil bygge pakken:

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

Kopier det `tar.gz` komprimerede arkiv i biblioteket:

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

Skift til biblioteket, og udpak pakken:

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

Nu indeholder biblioteket både kildekoden i et separat bibliotek og det komprimerede arkiv:

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

3. Debianisering

På dette tidspunkt tilføjer vi de filer, der er specifikke for en Debian -pakke. Derfor hedder dette trin _Debianisering_ af softwaren. Dette gøres i flere enkelte trin.

3.1 Forbered pakkestrukturen

Skift til det bibliotek, der gemmer hele kildekoden til pakken. I vores eksempel indeholder pakken filen `helloworld.py`, kun:

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

Lad os tilføje de filer, der er specifikke for en Debian -pakke. Værktøjet `dh_make` kommer i spil. Omskifteren `-e` bruger den givne adresse som e-mailadresse i feltet` Vedligeholder` i filen `debian/control`. Byg pakken, brug din egen e -mail -adresse i stedet. Husk at bruge den samme e -mail -adresse, der svarer til din GPG -nøgle.

Omskifteren `-f` bruger den givne fil som det originale kildearkiv og springer kopieringen af ​​det aktuelle programtræ over til` program.orig`.

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

Ved prompten bliver du bedt om at vælge den type pakke, der skal oprettes. For at vælge _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 / . 

Dette resulterer i et bibliotek kaldet `debian`:

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

Denne mappe indeholder alle de pakkespecifikke filer.

3.2. Juster kontrolfilen

Filen 'debian/control' beholder de afhængigheder, der er nødvendige _for at bygge_ pakken. Ved hjælp af kommandoen 'dpkg -depcheck -d./Configure' modtager du en liste med alle de nødvendige pakker. I vores tilfælde er der ingen yderligere pakke nødvendig, fordi Python er et fortolket sprog.

Dernæst skal vi redigere filen 'debian/control' og tilføje pakkespecifikke værdier. For vores eksempel ser det således ud:

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. Juster ophavsretsfilen

Filen 'debian/copyright' indeholder licensoplysningerne til softwarepakken. Det er forberedt til frigivelse via GNU Public License 2 (GPLv2). For vores eksempel ser det således ud:

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. Juster ændringslogfilen

Efter oplysningerne om ophavsret skal filen `debian/changelog` justeres. I vores eksempel tilføjer vi oplysningerne Initial release.

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

Det er alt, hvad vi har brug for indtil videre - nu kan vi endelig bygge pakken.


4. Byg pakken

For at bygge pakken skal vi flytte et bibliotek op og køre følgende kommando:

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

Indstillingen '-rfakeroot' tillader 'dpkg-buildpackage' at køre kommandoer som en priviligeret bruger ved hjælp af kommandoen 'fakeroot'. Dette er nødvendigt for at forberede pakken og for at oprette filer og mapper.
Kommandoen ovenfor resulterer i en længere liste over outputmeddelelser (vist her i et tysk sprogmiljø):

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. Validering af pakken

Tillykke - det lykkedes dig at bygge en Debian -pakke - ja! Lad os nu se nærmere på pakken. Her spiller 'lintian' i spil. Dette værktøj validerer din pakke for at finde overtrædelser af de strenge regler, Debian -pakker skal overholde.

For at køre testene skal du indtaste følgende kommando:

lintian helloworld_0.1-1_amd64.deb 

Værktøjet finder ikke regelovertrædelser, men også stavefejl og forkerte tegn. Omskifteren `–pedantisk` beder` lintian` om at være meget mere kritisk end normalt. Som du kan se nedenfor, er 'lintian' en smule sur og har opdaget tre advarsler og en fejl.

Bortset fra den første advarsel kan vi let gøre 'lintian' glad og justere pakkeindholdet i henhold til regelsættet. Advarslen 'ny-pakke-skal-lukke-itp-fejl' betyder, at der ikke er nogen fejlrapport mod ITP-pakken (ITP betyder _intended to package_). For en almindelig Debian -pakke skal der sendes en fejlrapport til bugtrackeren for pakke -ITP for at underrette andre om, at du vil begynde at pakke denne software.

4.2. Advarsel: `readme-debian-indeholder-debmake-template

Filen `README.Debian` er beregnet til at beholde yderligere noter vedrørende denne pakke. `dh_make` oprettede denne fil til os:

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

I vores eksempel har vi ikke yderligere oplysninger, så vi kan slette filen.

4.3. Advarsel: `beskrivelse-starter-med-førende-mellemrum`

Denne advarsel rejses, fordi den længere beskrivelse af vores pakke i filen 'debian/control' starter med mere end et enkelt mellemrum. Så snart vi fjerner et enkelt mellemrum, forsvinder advarslen.

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

Hver pakke kræver både en kort og en længere beskrivelse i `debian/control`. Denne fejl opstår, fordi begge beskrivelser er identiske. Så snart vi forlængede den længere beskrivelse, er fejlen væk.


5. Links og referencer

- [ddr] Andreas Barth, Adam Di Carlo, Raphaël Hertzog, Lucas Nussbaum, Christian Schwarz, Ian Jackson: Debians udviklerreference
- [Dnmg] Josip Rodin, Osamu Aoki: Debians nye vedligeholdelsesvejledning
- [dpmb] Axel Beckert, Frank Hofmann: Debians pakkehåndteringsbog
- [dpm] Debians politikhåndbog
- [kan] Debian -emballeringsvejledningen
- [gph] GNU Privacy Handbook
- [lushpaiPakke] Alex Lushpai: Sådan oprettes debian -pakke fra kilde


6. Anerkendelser

Forfatteren vil gerne takke Axel Beckert og Gerold Rupprecht for deres støtte og kritikere under udarbejdelsen af ​​denne artikel.