Debian -paketin luominen HowTo

Debian Package Creation Howto



1. Esipuhe

Vastuu koneesta tarkoittaa huolehtimista laitteistosta ja ohjelmistokomponenteista. Kuten jokapäiväisessä elämässä järjestelmänvalvojana, on paljon parempi asentaa ohjelmisto ohjelmistopakettina kuin joukko lähdetiedostoja. Tämä vähentää järjestelmän asianmukaisen ylläpidon kustannuksia.

Paketin ylläpitäjä validoi ja valvoo valitsemasi jakelijan saatavilla olevat paketit. Hän testasi ohjelmiston ja vakuuttaa, että se sopii muihin jakelussa saatavilla oleviin ohjelmistopaketteihin. Lisäksi paketti on allekirjoitettu paketin ylläpitäjän GPG -avaimella. Tämä takaa paketin eheyden ja osoittaa, että paketti on peräisin luotettavasta lähteestä.







Paketin muoto riippuu Linux -jakelustasi. Valitut muodot ovat seuraavat:



deb

Pakkauksia käytetään: Debian GNU/Linux , Ubuntu , Armbian , Linux Mint , Knoppix



rpm

Pakkauksia käytetään: Punainen hattu , Fedora , CentOS , OpenSuse





tgz and txz

Pakkauksia käytetään: Slackware

tar.xz

Pakkauksia käytetään: Arch Linux



Tässä asiakirjassa kerrotaan lyhyesti paketin rakentamisesta Debian GNU/Linuxille. Lisätietoja Debian -paketin muodosta ja työkaluista 'deb' -pohjaisen Linux -järjestelmän ylläpitämiseksi saat tutustumalla Debian -paketinhallintakirjaan [dpmb] Pakettien luomiseksi Debian GNU/Linuxille nämä asiakirjat ovat välttämättömiä:

  • Debianin uusi ylläpitäjän opas [dnmg]
  • Debianin kehittäjän viite [GDR]
  • Debianin pakkausopetusohjelma [voi]
  • Debianin käyttöopas [dpm]

Paketti, jonka kanssa työskentelemme, on nimeltään 'helloworld' ja sen versionumero on 0.1. Esittelyä varten se sisältää vain yhden Python -komentosarjan, joka antaa kuuluisan viestin Hei, maailma !:

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

2. Vaatimukset

2.1. GPG -avain

Pidä GPG -avaimesi saatavilla vaiheessa 1. Myöhemmin avainta tarvitaan paketin allekirjoittamiseen. Muista, että allekirjoittamattomat paketit ovat epäluotettavia eivätkä voi olla osa Debian -universumia.

Jos sinulla ei vielä ole GPG -avainta, luo se. Voit seurata alla olevia kolmea vaihetta. Ensimmäinen komento luo uuden avaimen, toinen vie uuden avaimesi erilliseen tiedostoon ja kolmas lisää avaimen henkilökohtaiseen avaimenperääsi.

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

Varmista luomisen aikana, että etunimi _YOUR NAME_ on oikea. On tavallista käyttää etu- ja sukunimen yhdistelmää. Tämän nimen on oltava täsmälleen sama paketissa, kun luot Debian -paketin 'control' -tiedostoa. Lisätietoja GPG: stä on GNU: n tietosuojakäsikirjassa [gph].

2.2. Pakkaustyökaluketju

Lähdekoodilla varustetun Debian -paketin luomiseksi järjestelmässäsi tarvitaan seuraavat ohjelmistopaketit:

  • rakentaa välttämätöntä
  • autoconf
  • automake
  • autotools-dev
  • dh-tehdä
  • avustaja
  • skriptit
  • fakeroot
  • xutils
  • lintian
  • pbuilder

Käyttäjänä 'root' voit asentaa nämä käyttämällä seuraavaa komentoa:

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

2.3. Valmistele ohjelmisto pakattavaksi

Meidän on valmisteltava hakemisto paketin rakentamiseksi. Luo hakemisto ympäristön valmistamiseksi, johon paketti rakennetaan:

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

Kopioi 'tar.gz' pakattu arkisto hakemistoon:

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

Vaihda hakemistoon ja pura paketti:

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

Nyt hakemisto sisältää sekä lähdekoodin erillisessä hakemistossa että pakatun arkiston:

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

3. Debianisointi

Tässä vaiheessa lisäämme Debian -pakettiin liittyvät tiedostot. Siksi tämän vaiheen nimi on ohjelmiston _Debianization_. Tämä tehdään useissa yksittäisissä vaiheissa.

3.1 Valmistele paketin rakenne

Vaihda hakemistoon, joka säilyttää paketin koko lähdekoodin. Esimerkissämme paketti sisältää tiedoston 'helloworld.py', vain:

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

Lisätään Debian -pakettiin liittyvät tiedostot. Työkalu `dh_make` tulee peliin. Kytkin '-e' käyttää annettua osoitetta sähköpostiosoitteena 'debian/control' -tiedoston Maintainer-kentässä. Paketin rakentamisessa käytä sen sijaan omaa sähköpostiosoitettasi. Muista käyttää samaa sähköpostiosoitetta, joka vastaa GPG -avaintasi.

Kytkin '-f' käyttää annettua tiedostoa alkuperäisenä lähdearkistona ja ohittaa nykyisen ohjelmapuun kopioinnin kohtaan 'program.orig'.

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

Pyydettäessä sinua pyydetään valitsemaan luotavan paketin tyyppi. Valitse _yksi binaari_ kirjoittamalla `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 / . 

Tämä johtaa hakemistoon nimeltä 'debian':

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

Tämä hakemisto sisältää kaikki pakettikohtaiset tiedostot.

3.2. Säädä ohjaustiedostoa

Tiedosto 'debian/control' säilyttää paketin luomiseen tarvittavat riippuvuudet. Käyttämällä komentoa 'dpkg -depcheck -d./Configure' saat luettelon kaikista pakollisista paketeista. Meidän tapauksessamme ei tarvita lisäpakettia, koska Python on tulkittu kieli.

Seuraavaksi meidän on muokattava tiedostoa 'debian/control' ja lisättävä paketikohtaiset arvot. Esimerkissämme se näyttää seuraavalta:

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. Säädä tekijänoikeustiedostoa

Tiedosto 'debian/copyright' sisältää ohjelmistopaketin lisenssitiedot. Se on valmis julkaisuun GNU Public License 2: n (GPLv2) kautta. Esimerkissämme se näyttää seuraavalta:

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. Säädä muutoslokitiedostoa

Tekijänoikeustietojen jälkeen tiedostoa 'debian/changelog' on muutettava. Esimerkissämme lisätään tiedot Alkuperäinen julkaisu.

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

Se on kaikki mitä tarvitsemme toistaiseksi - nyt voimme rakentaa paketin vihdoin.


4. Rakenna paketti

Paketin rakentamiseksi meidän on siirrettävä yksi hakemisto ylös ja suoritettava seuraava komento:

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

Vaihtoehdon '-rfakeroot' avulla 'dpkg-buildpackage' voi suorittaa komentoja etuoikeutettuna käyttäjänä komennon 'fakeroot' avulla. Tämä on välttämätöntä paketin valmistelemiseksi sekä tiedostojen ja hakemistojen luomiseksi.
Yllä oleva komento johtaa pidempään lähtöviestien luetteloon (näkyy tässä saksankielisessä ympäristössä):

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. Paketin vahvistaminen

Onnittelut - onnistuit rakentamaan Debian -paketin - joo! Katsotaan nyt tarkemmin pakettia. Tässä 'lintian' tulee peliin. Tämä työkalu vahvistaa paketin löytääkseen rikkomukset, joita Debian -pakettien on noudatettava.

Suorita testit kirjoittamalla seuraava komento:

lintian helloworld_0.1-1_amd64.deb 

Työkalu ei löydä sääntöjen rikkomuksia, mutta myös kirjoitusvirheitä ja vääriä merkkejä. Kytkin '-pantic' pyytää 'lintiania' olemaan paljon kriittisempi kuin tavallisesti. Kuten alla näet, `` lintian '' on hieman röyhkeä ja havainnut kolme varoitusta ja yhden virheen.

Ensimmäistä varoitusta lukuun ottamatta voimme helposti tehdä 'lintian' onnelliseksi ja säätää paketin sisällön sääntöjen mukaisesti. Varoitus 'new-package-should-close-itp-bug' tarkoittaa, että ITP-pakettia vastaan ​​ei ole virheraporttia (ITP tarkoittaa _tarkoitettu pakettiin_). Tavallista Debian -pakettia varten paketin ITP: n vikailmoitukseen on lähetettävä vikailmoitus, joka ilmoittaa muille, että aiot aloittaa tämän ohjelmiston pakkaamisen.

4.2. Varoitus: `readme-debian-sisältää-debmake-malli

Tiedosto 'README.Debian' on tarkoitettu tähän pakettiin liittyvien lisähuomautusten säilyttämiseen. `dh_make` loi meille tämän tiedoston:

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

Esimerkissämme ei ole lisätietoja, joten voimme poistaa tiedoston.

4.3. Varoitus: 'kuvaus-alkaa-johtavilla välilyönneillä'

Tämä varoitus ilmaantuu, koska paketin pidempi kuvaus tiedostossa 'debian/control' alkaa useammalla kuin yhdellä välilyönnillä. Heti kun poistamme yhden välilyönnin, varoitus häviää.

4.4. Virhe: 'description-synopsis-is-duplicated'

Jokainen paketti vaatii sekä lyhyen että pidemmän kuvauksen kohdassa 'debian/control'. Tämä virhe ilmenee, koska molemmat kuvaukset ovat identtisiä. Heti kun laajensimme pidempää kuvausta, virhe poistui.


5. Linkit ja viitteet

- [ddr] Andreas Barth, Adam Di Carlo, Raphaël Hertzog, Lucas Nussbaum, Christian Schwarz, Ian Jackson: Debianin kehittäjän viite
- [Dnmg] Josip Rodin, Osamu Aoki: Debianin uusi ylläpitäjän opas
- [dpmb] Axel Beckert, Frank Hofmann: Debianin paketinhallinnan kirja
- [dpm] Debianin käyttöopas
- [voi] Debianin pakkausopetusohjelma
- [gph] GNU: n tietosuojakäsikirja
- [lushpaiPackage] Alex Lushpai: Kuinka luoda debian -paketti lähteestä


6. Kiitokset

Kirjoittaja haluaa kiittää Axel Beckert ja Gerold Rupprecht tuesta ja kriitikoista tämän artikkelin valmistelun aikana.