Hvordan lage Debian -pakke

Debian Package Creation Howto



1. Forord

Å være ansvarlig for en maskin betyr å ta vare på maskinvaren så vel som programvarekomponentene. Som sett i hverdagen som systemadministrator er det mye bedre å installere programvare som en programvarepakke i stedet for en haug med kildefiler. Dette reduserer kostnadene for riktig vedlikehold av systemet.

Pakker som er tilgjengelige fra din foretrukne distributør, valideres og overvåkes av en pakkeholder. Han testet programvaren og forsikrer at den passer til de andre programvarepakkene som er tilgjengelige i distribusjonen. Videre er pakken signert med en GPG -nøkkel fra pakkevedlikeholderen. Dette garanterer integriteten til pakken og viser deg at pakken er fra en pålitelig kilde.







Pakkeformatet avhenger av din Linux -distribusjon. Utvalgte formater er følgende:



deb

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



rpm

Pakker som brukes i: Rød hatt , Fedora , CentOS , OpenSuse





tgz and txz

Pakker som brukes i: Slackware

tar.xz

Pakker som brukes i: Arch Linux



Dette dokumentet forklarer hvordan du bygger en pakke for Debian GNU/Linux kort. For detaljert informasjon om Debian -pakkeformatet og verktøyene for å vedlikeholde et `deb` -basert Linux -system, kan du se på Debian Package Management Book [dpmb] For å bygge pakker for Debian GNU/Linux er disse dokumentene viktige:

  • Debians nye vedlikeholderguide [dnmg]
  • Debians utviklerreferanse [DDR]
  • Opplæringsopplæringen for Debian [kan]
  • Debians policyhåndbok [dpm]

Pakken vi skal jobbe med heter 'helloworld' og har versjonsnummer 0.1. For demonstrasjonsformål inneholder den ganske enkelt et enkelt Python -skript som sender ut den berømte meldingen Hei, verden !:

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

2. Krav

2.1. GPG -nøkkel

Som trinn 1 må du ha GPG -nøkkelen tilgjengelig. Senere vil nøkkelen være nødvendig for å signere pakken. Husk at usignerte pakker er upålitelige og ikke kan være en del av Debian -universet.

Hvis du ikke har en GPG -nøkkel, må du opprette en. Du kan følge de tre trinnene nedenfor. Den første kommandoen genererer en ny nøkkel, den andre eksporterer den nye nøkkelen til en egen fil, og den tredje legger nøkkelen til din personlige nøkkelring.

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

Under opprettelsen må du kontrollere at det gitte navnet _DITT NAVN_ er riktig. Det er vanlig å bruke en kombinasjon av fornavn og etternavn. Dette navnet må være nøyaktig det samme i pakken, da du lager 'kontroll' -filen til Debian -pakken. For mer informasjon om GPG, ta en titt på GNU Privacy Handbook [gph].

2.2. Emballasjeverktøykjeden

For å bygge en Debian -pakke med kildekode kreves følgende programvarepakker på systemet ditt:

  • bygge-essensielt
  • autokonf
  • automake
  • autotools-dev
  • dh-make
  • debhelper
  • devscripts
  • fakeroot
  • xutils
  • lintian
  • byggmester

Som bruker `root` kan du installere disse ved å bruke følgende kommando:

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

2.3. Forbered programvaren som skal pakkes

Vi må utarbeide en katalog for å bygge pakken. Lag en katalog for å forberede miljøet der vi skal bygge pakken:

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

Kopier det `tar.gz` komprimerte arkivet i katalogen:

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

Bytt til katalogen, og pakk ut pakken:

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

Nå inneholder katalogen både kildekoden i en egen katalog og det komprimerte arkivet:

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

3. Debianisering

På dette tidspunktet vil vi legge til filene som er spesifikke for en Debian -pakke. Derfor heter dette trinnet _Debianisering_ av programvaren. Dette gjøres i flere enkle trinn.

3.1 Forbered pakkestrukturen

Bytt til katalogen som beholder hele kildekoden til pakken. I vårt eksempel inneholder pakken filen `helloworld.py`, bare:

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

La oss legge til filene som er spesifikke for en Debian -pakke. Verktøyet `dh_make` kommer inn i bildet. Bryteren `-e` bruker den oppgitte adressen som e-postadresse i` Vedlikeholder`-feltet i `debian/control`-filen. Bruk din egen e -postadresse i stedet for å bygge pakken. Husk å bruke den samme e -postadressen som tilsvarer GPG -nøkkelen din.

Bryteren `-f` bruker den gitte filen som det opprinnelige kildearkivet, og hopper over kopieringen av det gjeldende programtreet til` program.orig`.

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

Når du blir bedt om det, blir du bedt om å velge hvilken type pakke som skal opprettes. For å velge _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 en katalog som heter `debian`:

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

Denne katalogen inneholder alle pakkespesifikke filer.

3.2. Juster kontrollfilen

Filen `debian/control` beholder avhengighetene som trengs _for å bygge_ pakken. Ved å bruke kommandoen `dpkg -depcheck -d./Configure` får du en liste med alle nødvendige pakker. I vårt tilfelle er det ingen ytterligere pakke nødvendig fordi Python er et tolket språk.

Deretter må vi redigere filen `debian/control` og legge til pakkespesifikke verdier. For vårt eksempel ser det slik ut:

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 opphavsrettsfilen

Filen 'debian/copyright' inneholder lisensinformasjonen for programvarepakken. Den er forberedt på utgivelse via GNU Public License 2 (GPLv2). For vårt eksempel ser det slik ut:

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

Etter opphavsrettsinformasjonen må filen `debian/changelog` justeres. I vårt eksempel legger vi til informasjonen 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 vi trenger så langt - nå kan vi endelig bygge pakken.


4. Bygg pakken

For å bygge pakken må vi flytte opp en katalog og kjøre følgende kommando:

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

Alternativet '-rfakeroot' lar 'dpkg-buildpackage' kjøre kommandoer som en priviligert bruker ved hjelp av kommandoen 'fakeroot'. Dette er nødvendig for å forberede pakken, og for å lage filer og kataloger.
Kommandoen ovenfor resulterer i en lengre liste over utdatameldinger (vist her i et 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. Validerer pakken

Gratulerer - du lyktes med å bygge en Debian -pakke - ja! La oss nå se nærmere på pakken. Her spiller 'lintian' inn. Dette verktøyet validerer pakken din for å finne brudd på de strenge reglene Debian -pakker må oppfylle.

For å kjøre testene, skriv inn følgende kommando:

lintian helloworld_0.1-1_amd64.deb 

Verktøyet finner ikke regelbrudd, men også stavefeil og feil tegn. Bryteren `–pedantic 'ber` `lintian' 'om å være mye mer kritisk enn vanlig. Som du kan se nedenfor er `lintian 'litt gretten og har oppdaget tre advarsler og en feil.

Bortsett fra den første advarselen kan vi enkelt gjøre `lintian` glad og justere pakkeinnholdet i henhold til regelsettet. Advarselen `ny-pakke-bør-lukke-itp-feil` betyr at det ikke er noen feilrapport mot ITP-pakken (ITP betyr _intended to package_). For en vanlig Debian -pakke må en feilrapport sendes til bugtrackeren for pakke ITP for å varsle andre om at du har tenkt å begynne å pakke denne programvaren.

4.2. Advarsel: `readme-debian-inneholder-debmake-mal

Filen `README.Debian` er ment å beholde flere notater om denne pakken. `dh_make` opprettet denne filen for oss:

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

I vårt eksempel har vi ikke tilleggsinformasjon, så vi kan slette filen.

4.3. Advarsel: `beskrivelse-starter-med-ledende-mellomrom`

Denne advarselen tas opp fordi den lengre beskrivelsen av pakken vår i filen 'debian/control' starter med mer enn ett mellomrom. Så snart vi fjerner et enkelt mellomrom, vil advarselen forsvinne.

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

Hver pakke krever både en kort og en lengre beskrivelse i `debian/control`. Denne feilen oppstår fordi begge beskrivelsene er identiske. Så snart vi utvidet den lengre beskrivelsen, er feilen borte.


5. Lenker og referanser

- [ddr] Andreas Barth, Adam Di Carlo, Raphaël Hertzog, Lucas Nussbaum, Christian Schwarz, Ian Jackson: Debians utviklerreferanse
- [Dnmg] Josip Rodin, Osamu Aoki: Debians nye vedlikeholderguide
- [dpmb] Axel Beckert, Frank Hofmann: Debians pakkehåndteringsbok
- [dpm] Debians policyhåndbok
- [kan] Opplæringsopplæringen for Debian
- [gph] GNU personvernhåndbok
- [lushpaiPakke] Alex Lushpai: Hvordan lage debianpakke fra kilde


6. Bekreftelser

Forfatteren vil takke Axel Beckert og Gerold Rupprecht for deres støtte og kritikere under utarbeidelsen av denne artikkelen.