Debian pakotnes izveide HowTo

Debian Package Creation Howto



1. Priekšvārds

Atbildība par mašīnu nozīmē rūpēties par aparatūru, kā arī programmatūras komponentiem. Kā redzams ikdienas dzīvē kā sistēmas administratoram, ir daudz labāk instalēt programmatūru kā programmatūras pakotni, nevis virkni avota failu. Tas samazina sistēmas pareizas uzturēšanas izmaksas.

Paketes, kuras ir pieejamas no jūsu vēlamā izplatītāja, pārbauda un pārrauga iepakojuma uzturētājs. Viņš pārbaudīja programmatūru un apliecina, ka tā atbilst citām izplatīšanai pieejamajām programmatūras pakotnēm. Turklāt pakete ir parakstīta ar GPG atslēgu no paketes uzturētāja. Tas garantē paketes integritāti un parāda, ka pakete ir no uzticama avota.







Pakotnes formāts ir atkarīgs no jūsu Linux izplatīšanas. Atlasītie formāti ir šādi:



deb

Iepakojumi, ko izmanto: Debian GNU/Linux , Ubuntu , Armbian , Linux Mint , Knoppix



rpm

Iepakojumi, ko izmanto: Sarkana cepure , Fedora , CentOS , OpenSuse





tgz and txz

Iepakojumi, ko izmanto: Slackware

tar.xz

Iepakojumi, ko izmanto: Arch Linux



Šajā dokumentā ir īsi izskaidrots, kā izveidot pakotni Debian GNU/Linux. Lai iegūtu detalizētu informāciju par Debian pakotnes formātu un instrumentiem Linux sistēmas uzturēšanai uz deb, jūs varat ieskatīties Debian pakotņu pārvaldības grāmatā [dpmb] Lai izveidotu paketes Debian GNU/Linux, šie dokumenti ir būtiski:

  • Debian jaunā uzturētāja ceļvedis [dnmg]
  • Debian izstrādātāja atsauce [VDR]
  • Debian iepakošanas apmācība [var]
  • Debian politikas rokasgrāmata [dpm]

Pakete, ar kuru mēs strādāsim, ir nosaukta par 'helloworld', un tās versijas numurs ir 0.1. Demonstrēšanas nolūkos tas vienkārši satur vienu Python skriptu, kas izvada slaveno ziņojumu Hello, world !:

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

2. Prasības

2.1. GPG atslēga

Kā 1. darbību, nodrošiniet savu GPG atslēgu. Vēlāk atslēga būs nepieciešama, lai parakstītu paketi. Paturiet prātā, ka neparakstīti iepakojumi ir neuzticami un nevar būt daļa no Debian Visuma.

Ja jums vēl nav GPG atslēgas, izveidojiet to. Varat veikt trīs tālāk norādītās darbības. Pirmā komanda ģenerē jaunu atslēgu, otrā eksportē jauno atslēgu atsevišķā failā, bet trešā pievieno atslēgu jūsu personīgajai atslēgu piekariņai.

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

Izveidošanas laikā pārliecinieties, vai vārds _JŪSU VĀRDS_ ir pareizs. Parasti tiek izmantots vārda un uzvārda kombinācija. Šim nosaukumam paketē būs jābūt tieši tādam pašam, veidojot Debian pakotnes failu 'control'. Lai iegūtu plašāku informāciju par GPG, skatiet GNU konfidencialitātes rokasgrāmatu [gph].

2.2. Iepakojuma instrumentu ķēde

Lai izveidotu Debian pakotni ar avota kodu, jūsu sistēmā ir nepieciešamas šādas programmatūras pakotnes:

  • būvēt-būtiski
  • autoconf
  • automake
  • autotools-dev
  • dh-make
  • palīgs
  • devscripts
  • fakeroot
  • ksutils
  • litija
  • pbuilder

Kā lietotāja root varat tos instalēt, izmantojot šādu komandu:

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

2.3. Sagatavojiet programmatūru iepakošanai

Mums ir jāsagatavo direktorijs, lai izveidotu paketi. Izveidojiet direktoriju, lai sagatavotu vidi, kurā mēs veidosim paketi:

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

Nokopējiet saspiesto arhīvu 'tar.gz' direktorijā:

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

Pārejiet uz direktoriju un izvelciet paketi:

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

Tagad direktorijā ir gan avota kods atsevišķā direktorijā, gan saspiests arhīvs:

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

3. Debianizācija

Šajā brīdī mēs pievienosim failus, kas ir specifiski Debian pakotnei. Tāpēc šo soli sauc par programmatūras _Debianization_. Tas tiek darīts vairākos atsevišķos soļos.

3.1 Sagatavojiet iepakojuma struktūru

Pārejiet uz direktoriju, kurā glabājas viss pakotnes avota kods. Mūsu piemērā iepakojumā ir tikai fails 'helloworld.py', tikai:

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

Pievienosim failus, kas ir specifiski Debian pakotnei. Spēlē rīks `dh_make`. Slēdzis '-e' izmanto šo adresi kā e-pasta adresi faila 'debian/control' laukā 'Uzturētājs'. Veidojot paketi, izmantojiet savu e -pasta adresi. Ņemiet vērā, ka izmantojiet to pašu e -pasta adresi, kas atbilst jūsu GPG atslēgai.

Slēdzis '-f' izmanto šo failu kā sākotnējo avota arhīvu un izlaiž pašreizējā programmas koka kopēšanu uz 'program.orig'.

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

Uzvednē tiek piedāvāts izvēlēties izveidotās pakotnes veidu. Lai izvēlētos _vienu bināru_, ierakstiet “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 / . 

Rezultātā tiek izveidots direktorijs ar nosaukumu 'debian':

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

Šajā direktorijā ir visi pakotnei raksturīgie faili.

3.2. Pielāgojiet vadības failu

Failā 'debian/control' tiek saglabātas atkarības, kas nepieciešamas _pakotnes izveidošanai. Izmantojot komandu `dpkg -depcheck -d./Configure`, jūs saņemat sarakstu ar visām nepieciešamajām pakotnēm. Mūsu gadījumā papildu pakete nav nepieciešama, jo Python ir tulkota valoda.

Tālāk mums ir jārediģē fails 'debian/control' un jāpievieno pakotnei raksturīgās vērtības. Mūsu piemērā tas izskatās šādi:

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. Pielāgojiet autortiesību failu

Fails 'debian/copyright' satur programmatūras pakotnes licences informāciju. Tas ir sagatavots izlaišanai, izmantojot GNU Public License 2 (GPLv2). Mūsu piemērā tas izskatās šādi:

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. Pielāgojiet izmaiņu žurnāla failu

Pēc autortiesību informācijas fails 'debian/changelog' ir jāpielāgo. Mūsu piemērā mēs pievienojam informāciju Sākotnējais laidiens.

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

Tas ir viss, kas mums līdz šim ir vajadzīgs - tagad mēs beidzot varam izveidot paketi.


4. Izveidojiet paketi

Lai izveidotu paketi, mums jāpārvietojas par vienu direktoriju uz augšu un jāizpilda šāda komanda:

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

Opcija '-rfakeroot' ļauj komandai 'dpkg-buildpackage' izpildīt komandas kā priviliģēts lietotājs, izmantojot komandu 'fakeroot'. Tas ir nepieciešams, lai sagatavotu paketi, kā arī izveidotu failus un direktorijus.
Iepriekš minētās komandas rezultātā tiek izveidots garāks izvades ziņojumu saraksts (redzams šeit vācu valodas vidē):

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. Iepakojuma apstiprināšana

Apsveicam - jums izdevās izveidot Debian pakotni - jā! Tagad aplūkosim iepakojumu tuvāk. Šeit spēlē 'lintian'. Šis rīks apstiprina jūsu pakotni, lai atrastu pārkāpumus, kas ir stingri jāievēro Debian pakotnēm.

Lai palaistu testus, ierakstiet šādu komandu:

lintian helloworld_0.1-1_amd64.deb 

Rīks neatklāj noteikumu pārkāpumus, bet arī pareizrakstības kļūdas un nepareizas rakstzīmes. Slēdzis '-pantic' lūdz 'lintian' būt daudz kritiskākam nekā parasti. Kā redzat zemāk, 'lintian' ir nedaudz kašķīgs un ir atklājis trīs brīdinājumus un vienu kļūdu.

Izņemot pirmo brīdinājumu, mēs varam viegli iepriecināt 'lintian' un pielāgot iepakojuma saturu saskaņā ar noteikto noteikumu. Brīdinājums 'new-package-should-close-itp-bug' nozīmē, ka nav ziņojumu par kļūdu pret ITP pakotni (ITP nozīmē _ paredzēts paketē_). Parastajai Debian pakotnei kļūdas ziņojums ir jānosūta bugtracker, lai saņemtu paketes ITP, lai paziņotu citiem, ka plānojat sākt šīs programmatūras iesaiņošanu.

4.2. Brīdinājums: `readme-debian-satur-debmake-veidne

Fails 'README.Debian' ir paredzēts, lai saglabātu papildu piezīmes par šo paketi. 'dh_make' mums izveidoja šo failu:

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

Mūsu piemērā mums nav papildu informācijas, tāpēc mēs varam izdzēst failu.

4.3. Brīdinājums: 'apraksts sākas ar atstarpēm'

Šis brīdinājums tiek parādīts, jo garāks mūsu paketes apraksts failā 'debian/control' sākas ar vairāk nekā vienu atstarpi. Tiklīdz mēs noņemsim vienu atstarpi, brīdinājums pazudīs.

4.4. Kļūda: 'description-synopsis-is-duplicated'

Katrai pakotnei ir nepieciešams gan īss, gan garāks apraksts sadaļā 'debian/control'. Šī kļūda tiek parādīta, jo abi apraksti ir identiski. Tiklīdz pagarinājām garāko aprakstu, kļūda vairs nav.


5. Saites un atsauces

- [ddr] Andreass Barts, Ādams Di Karlo, Rafaels Hercogs, Lūkass Nusbaums, Kristians Švarcs, Īans Džeksons: Debian izstrādātāja atsauce
- [Dnmg] Josip Rodin, Osamu Aoki: Debian jaunā uzturētāja ceļvedis
- [dpmb] Aksels Bekerts, Frenks Hofmans: Debian pakotņu pārvaldības grāmata
- [dpm] Debian politikas rokasgrāmata
- [var] Debian iepakošanas apmācība
- [gph] GNU privātuma rokasgrāmata
- [lushpaiPackage] Alekss Lushpai: Kā izveidot debian pakotni no avota


6. Pateicības

Autore vēlas pateikties Aksels Bekerts un Gerolds Rupprehts par atbalstu un kritiķiem, gatavojot šo rakstu.