Cum să creați pachetul Debian

Debian Package Creation Howto



1. Prefață

A fi responsabil pentru o mașină înseamnă a avea grijă de hardware, precum și de componentele software. După cum se vede în viața de zi cu zi ca administrator de sistem, este mult mai bine să instalați software-ul ca pachet software, mai degrabă decât o grămadă de fișiere sursă. Acest lucru reduce costurile pentru întreținerea corespunzătoare a sistemului.

Pachetele disponibile de la distribuitorul dvs. preferat sunt validate și supravegheate de către un agent de întreținere a pachetelor. El a testat software-ul și se asigură că acesta se potrivește cu celelalte pachete software disponibile în distribuție. Mai mult, pachetul este semnat cu o cheie GPG de la întreținătorul pachetului. Acest lucru garantează integritatea pachetului și vă arată că pachetul provine dintr-o sursă de încredere.







Formatul pachetului depinde de distribuția Linux. Formatele selectate sunt următoarele:



deb

Pachete utilizate în: Debian GNU / Linux , Ubuntu , Armbian , Linux Mint , Knoppix



rpm

Pachete utilizate în: Palarie rosie , Fedora , CentOS , OpenSuse





tgz and txz

Pachete utilizate în: Slackware

tar.xz

Pachete utilizate în: Arch Linux



Acest document explică modul de construire a unui pachet pentru Debian GNU / Linux pe scurt. Pentru informații detaliate despre formatul pachetului Debian și instrumentele de menținere a unui sistem Linux bazat pe „deb”, puteți consulta o carte de gestionare a pachetelor Debian [dpmb] Pentru a construi pachete pentru Debian GNU / Linux, aceste documente sunt esențiale:

  • Ghidul Debian New Maintainer [dnmg]
  • Referința pentru dezvoltatorul Debian [GDR]
  • Tutorialul de ambalare Debian [poate sa]
  • Manualul de politici Debian [dpm]

Pachetul cu care vom lucra se numește „helloworld” și are numărul de versiune 0.1. În scop demonstrativ, acesta conține pur și simplu un singur script Python care afișează celebrul mesaj Hello, world !:

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

2. Cerințe

2.1. Cheia GPG

Ca pasul 1, aveți cheia GPG disponibilă. Mai târziu, cheia va fi necesară pentru a semna pachetul. Rețineți că pachetele nesemnate nu sunt de încredere și nu pot face parte din universul Debian.

În cazul în care nu aveți încă o cheie GPG, creați-o. Puteți urma cei trei pași de mai jos. Prima comandă generează o nouă cheie, a doua exportă noua cheie într-un fișier separat, iar a treia adaugă cheia la cheia personală.

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

În timpul creației, asigurați-vă că numele dat _NOMUL TĂU_ este corect. Este obișnuit să folosiți o combinație de prenume și prenume. Acest nume va trebui să fie exact același în pachet, atunci când creați fișierul `control` al pachetului Debian. Pentru mai multe informații despre GPG, aruncați o privire la Manualul de confidențialitate GNU [gph].

2.2. Lanțul de instrumente de ambalare

Pentru a construi un pachet Debian cu cod sursă sunt necesare următoarele pachete software pe sistemul dumneavoastră:

  • construirea-esențială
  • autoconf
  • automake
  • autotools-dev
  • dh-make
  • debhelper
  • devscripturi
  • fakeroot
  • xutils
  • lintian
  • pbuilder

Ca utilizator „root” le puteți instala folosind următoarea comandă:

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

2.3. Pregătiți software-ul pentru a fi ambalat

Trebuie să pregătim un director pentru a construi pachetul. Creați un director pentru a pregăti mediul în care vom construi pachetul:

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

Copiați arhiva comprimată `tar.gz` în director:

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

Treceți în director și extrageți pachetul:

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

Acum, directorul conține atât codul sursă într-un director separat, cât și arhiva comprimată:

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

3. Debianizare

În acest moment vom adăuga fișierele specifice unui pachet Debian. De aceea acest pas este denumit _Debianizarea_ software-ului. Acest lucru se face în mai mulți pași simpli.

3.1 Pregătiți structura pachetului

Treceți la directorul care păstrează întregul cod sursă al pachetului. În exemplul nostru pachetul conține fișierul `helloworld.py`, numai:

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

Să adăugăm fișierele specifice unui pachet Debian. Instrumentul `dh_make` intră în joc. Comutatorul `-e` utilizează adresa dată ca adresă de e-mail în câmpul` Maintainer` al fișierului `debian / control`. În construcția pachetului, folosiți-vă propria adresă de e-mail. Rețineți că utilizați aceeași adresă de e-mail care corespunde cheii GPG.

Comutatorul `-f` folosește fișierul dat ca arhivă sursă originală și ignoră copierea arborelui curent al programului în„ program.orig ”.

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

La prompt, vi se cere să selectați tipul de pachet care ar trebui creat. Pentru a alege _un binar_ tastați `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 / . 

Acest lucru are ca rezultat un director numit `debian`:

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

Acest director conține toate fișierele specifice pachetului.

3.2. Reglați fișierul de control

Fișierul `debian / control` păstrează dependențele necesare _pentru a construi_ pachetul. Utilizând comanda `dpkg-depcheck -d. / Configure` primiți o listă cu toate pachetele necesare. În cazul nostru, nu mai este necesar niciun pachet, deoarece Python este un limbaj interpretat.

Apoi, trebuie să edităm fișierul `debian / control` și să adăugăm valori specifice pachetului. Pentru exemplul nostru, arată după cum urmează:

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. Ajustați fișierul drepturilor de autor

Fișierul `debian / copyright` conține informații despre licență pentru pachetul software. Este pregătit pentru lansare prin GNU Public License 2 (GPLv2). Pentru exemplul nostru, arată după cum urmează:

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. Ajustați fișierul jurnal de schimbări

După informațiile privind drepturile de autor, fișierul „debian / changelog” trebuie ajustat. În exemplul nostru adăugăm informațiile Versiunea inițială.

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

Asta este tot ce ne trebuie până acum - acum putem construi pachetul, în cele din urmă.


4. Construiți pachetul

Pentru a construi pachetul, trebuie să mutăm un director în sus și să executăm următoarea comandă:

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

Opțiunea `-rfakeroot` permite` dpkg-buildpackage` să ruleze comenzi ca utilizator privilegiat cu ajutorul comenzii `fakeroot`. Acest lucru este necesar pentru a pregăti pachetul și pentru a crea fișiere și directoare.
Comanda de mai sus are ca rezultat o listă mai lungă de mesaje de ieșire (prezentate aici într-un mediu în limba germană):

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. Validarea pachetului

Felicitări - ați reușit să creați un pachet Debian - da! Acum, să aruncăm o privire mai atentă asupra pachetului. Aici, „lintian” intră în joc. Acest instrument vă validează pachetul pentru a găsi încălcări împotriva regulilor stricte pe care trebuie să le îndeplinească pachetele Debian.

Pentru a rula testele, tastați următoarea comandă:

lintian helloworld_0.1-1_amd64.deb 

Instrumentul nu găsește încălcări ale regulilor, dar și erori de ortografie și caractere greșite. Comutatorul „–pantic” cere lui „lintian” să fie mult mai critic decât de obicei. După cum puteți vedea mai jos, „lintian” este un pic morocănos și a descoperit trei avertismente și o eroare.

Cu excepția primului avertisment, putem face cu ușurință „lintian” fericit și ajustăm conținutul pachetului în conformitate cu setul de reguli. Avertismentul „new-package-should-close-itp-bug” înseamnă că nu există un raport de eroare împotriva pachetului ITP (ITP înseamnă _intentioned to package_). Pentru un pachet Debian obișnuit, un raport de erori trebuie trimis către bugtracker pentru pachetul ITP pentru a anunța pe alții că intenționați să începeți ambalarea acestui software.

4.2. Avertisment: `readme-debian-contains-debmake-template

Fișierul „README.Debian” este destinat să păstreze note suplimentare cu privire la acest pachet. `dh_make` a creat acest fișier pentru noi:

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

În exemplul nostru, nu avem informații suplimentare, astfel încât să putem șterge fișierul.

4.3. Avertisment: „descriere-începe-cu-spații-de-conducere”

Acest avertisment este declanșat deoarece descrierea mai lungă a pachetului nostru în fișierul `debian / control` începe cu mai mult decât un singur spațiu. De îndată ce eliminăm un singur spațiu, avertismentul va dispărea.

4.4. Eroare: „description-synopsis-is-duplicated”

Fiecare pachet necesită atât o descriere scurtă, cât și o descriere mai lungă în `debian / control`. Această eroare este ridicată deoarece ambele descrieri sunt identice. De îndată ce am extins descrierea mai lungă, eroarea a dispărut.


5. Linkuri și referințe

- [ddr] Andreas Barth, Adam Di Carlo, Raphaël Hertzog, Lucas Nussbaum, Christian Schwarz, Ian Jackson: Referința pentru dezvoltatorul Debian
- [Dnmg] Josip Rodin, Osamu Aoki: Ghidul Debian New Maintainer
- [dpmb] Axel Beckert, Frank Hofmann: Cartea de gestionare a pachetelor Debian
- [dpm] Manualul de politici Debian
- [poate sa] Tutorialul de ambalare Debian
- [gph] Manualul de confidențialitate GNU
- [lushpaiPackage] Alex Lushpai: Cum se creează pachetul debian din sursă


6. Mulțumiri

Autorul ar dori să mulțumească Axel Beckert și Gerold Rupprecht pentru sprijin și critici în timpul pregătirii acestui articol.