Debian paketo kūrimas HowTo

Debian Package Creation Howto



1. Pratarmė

Būti atsakingam už mašiną reiškia rūpintis aparatine ir programine įranga. Kaip matyti kasdieniame sistemos administratoriaus gyvenime, daug geriau įdiegti programinę įrangą kaip programinės įrangos paketą, o ne daugybę šaltinio failų. Tai sumažina tinkamos sistemos priežiūros išlaidas.

Paketus, kuriuos galima įsigyti iš jūsų pageidaujamo platintojo, patvirtina ir prižiūri paketų prižiūrėtojas. Jis išbandė programinę įrangą ir tikina, kad ji tinka kitiems platinimo programinės įrangos paketams. Be to, paketas pasirašytas GPG raktu iš paketo prižiūrėtojo. Tai garantuoja paketo vientisumą ir parodo, kad paketas yra iš patikimo šaltinio.







Paketo formatas priklauso nuo jūsų „Linux“ platinimo. Pasirinkti šie formatai:



deb

Paketai naudojami: Debian GNU/Linux , Ubuntu , Armbianas , „Linux Mint“ , „Knoppix“



rpm

Paketai naudojami: Raudona KEPURĖ , Fedora , „CentOS“ , „OpenSuse“





tgz and txz

Paketai naudojami: „Slackware“

tar.xz

Paketai naudojami: Arch „Linux“



Šiame dokumente paaiškinta, kaip trumpai sukurti „Debian GNU/Linux“ paketą. Norėdami gauti išsamios informacijos apie „Debian“ paketo formatą ir „deb“ pagrįstos „Linux“ sistemos palaikymo įrankius, galite pažvelgti į „Debian“ paketų valdymo knygą [dpmb] Norint sukurti „Debian GNU/Linux“ paketus, šie dokumentai yra būtini:

  • „Debian“ naujojo prižiūrėtojo vadovas [dnmg]
  • „Debian“ kūrėjo nuoroda [VDR]
  • „Debian“ pakavimo pamoka [gali]
  • „Debian“ politikos vadovas [dpm]

Paketas, su kuriuo dirbsime, pavadintas „helloworld“ ir jo versijos numeris yra 0.1. Demonstraciniais tikslais jame tiesiog yra vienas „Python“ scenarijus, iš kurio gaunamas garsusis pranešimas „Sveiki, pasaulis!“:

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

2. Reikalavimai

2.1. GPG raktas

Kaip 1 veiksmą, turėkite savo GPG raktą. Vėliau raktas bus reikalingas pasirašyti paketą. Atminkite, kad nepasirašyti paketai yra nepatikimi ir negali būti „Debian“ visatos dalis.

Jei dar neturite GPG rakto, sukurkite jį. Galite atlikti tris toliau nurodytus veiksmus. Pirmoji komanda sugeneruoja naują raktą, antroji eksportuoja naują raktą į atskirą failą, o trečioji prideda raktą prie jūsų asmeninio raktų pakabos.

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

Kurdami įsitikinkite, kad suteiktas vardas _YOUR NAME_ yra teisingas. Įprasta naudoti vardo ir pavardės derinį. Sukūrus „Debian“ paketo „control“ failą, šis paketo pavadinimas turės būti visiškai tas pats. Norėdami gauti daugiau informacijos apie GPG, peržiūrėkite GNU privatumo vadovą [gph].

2.2. Pakavimo įrankių grandinė

Norint sukurti „Debian“ paketą su šaltinio kodu, jūsų sistemoje reikalingi šie programinės įrangos paketai:

  • statyti-būtina
  • autoconf
  • automake
  • autotools-dev
  • dh-padaryti
  • padėjėjas
  • devscriptai
  • netikras
  • ksutilai
  • lintas
  • pbuilder

Kaip vartotojo „root“, galite juos įdiegti naudodami šią komandą:

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

2.3. Paruoškite supakuotą programinę įrangą

Norėdami sukurti paketą, turime paruošti katalogą. Sukurkite katalogą, kad paruoštumėte aplinką, kurioje kursime paketą:

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

Nukopijuokite „tar.gz“ suspaustą archyvą kataloge:

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

Pakeiskite katalogą ir išskleiskite paketą:

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

Dabar kataloge yra šaltinio kodas atskirame kataloge ir suspaustas archyvas:

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

3. Debianizacija

Šiuo metu pridėsime failus, būdingus „Debian“ paketui. Štai kodėl šis žingsnis pavadintas programinės įrangos _Debianizacija_. Tai atliekama keliais atskirais žingsniais.

3.1 Paruoškite pakuotės struktūrą

Pakeiskite katalogą, kuriame saugomas visas paketo šaltinio kodas. Mūsų pavyzdyje pakuotėje yra tik failas „helloworld.py“, tik:

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

Pridėkime failus, būdingus „Debian“ paketui. Įjungiamas įrankis „dh_make“. Jungiklis „-e“ naudoja nurodytą adresą kaip el. Pašto adresą failo „debian/control“ lauke „Maintainer“. Kurdami paketą naudokite savo el. Pašto adresą. Nepamirškite naudoti to paties el. Pašto adreso, kuris atitinka jūsų GPG raktą.

Jungiklis „-f“ naudoja nurodytą failą kaip pirminį šaltinio archyvą ir praleidžia esamo programos medžio kopijavimą į „program.orig“.

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

Kai būsite paraginti, jūsų bus paprašyta pasirinkti paketo tipą, kuris turėtų būti sukurtas. Norėdami pasirinkti _vieną dvejetainį_, įveskite „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 / . 

Taip gaunamas katalogas „debian“:

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

Šiame kataloge yra visi konkretaus paketo failai.

3.2. Sureguliuokite valdymo failą

Failas „debian/control“ išlaiko priklausomybes, kurių reikia paketui sukurti. Naudodami komandą `dpkg -depcheck -d./Configure` gausite sąrašą su visais reikalingais paketais. Mūsų atveju papildomo paketo nereikia, nes „Python“ yra aiškinama kalba.

Toliau turime redaguoti failą „debian/control“ ir pridėti konkretaus paketo reikšmes. Mūsų pavyzdyje tai atrodo taip:

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. Sureguliuokite autorių teisių failą

Faile „debian/copyright“ yra programinės įrangos paketo licencijos informacija. Jis yra paruoštas išleisti per GNU Public License 2 (GPLv2). Mūsų pavyzdyje tai atrodo taip:

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. Sureguliuokite pakeitimų žurnalo failą

Po autorių teisių informacijos reikia koreguoti failą „debian/changelog“. Mūsų pavyzdyje pridedame informaciją Pradinis leidimas.

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

Tai viskas, ko mums reikia iki šiol - dabar pagaliau galime sukurti paketą.


4. Sukurkite paketą

Norėdami sukurti paketą, turime perkelti vieną katalogą aukštyn ir paleisti šią komandą:

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

Pasirinkus parinktį „-rfakeroot“, „dpkg-buildpackage“ gali vykdyti komandas kaip privilegijuotas vartotojas, naudodamas komandą „fakeroot“. Tai būtina norint paruošti paketą ir sukurti failus bei katalogus.
Aukščiau pateikta komanda sukuria ilgesnį išvesties pranešimų sąrašą (rodomas čia vokiečių kalbos aplinkoje):

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. Paketo patvirtinimas

Sveikiname - jums pavyko sukurti „Debian“ paketą - taip! Dabar atidžiau pažvelkime į pakuotę. Čia įsijungia „lintian“. Šis įrankis patvirtina jūsų paketą, kad nustatytų griežtų taisyklių, kurias turi atitikti „Debian“ paketai, pažeidimus.

Norėdami paleisti testus, įveskite šią komandą:

lintian helloworld_0.1-1_amd64.deb 

Įrankis neranda taisyklių pažeidimų, bet ir rašybos klaidų bei neteisingų simbolių. Jungiklis „-pantinis“ prašo „lintian“ būti daug kritiškesniam nei įprastai. Kaip matote žemiau, „lintian“ yra šiek tiek niūrus ir aptiko tris įspėjimus bei vieną klaidą.

Išskyrus pirmąjį įspėjimą, mes galime lengvai nudžiuginti „lintianą“ ir pakoreguoti pakuotės turinį pagal nustatytas taisykles. Įspėjimas „new-package-should-close-itp-bug“ reiškia, kad nėra pranešimo apie klaidą prieš ITP paketą (ITP reiškia _tinkama į paketą_). Dėl įprasto „Debian“ paketo klaidų ataskaita turi būti išsiųsta ITP paketo klaidų stebėtojui, kad kiti praneštų, jog ketinate pradėti pakuoti šią programinę įrangą.

4.2. Įspėjimas: „readme-debian-contains-debmake-template“

Failas „README.Debian“ skirtas papildomoms pastaboms apie šį paketą saugoti. „dh_make“ mums sukūrė šį failą:

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

Mūsų pavyzdyje neturime papildomos informacijos, todėl galime ištrinti failą.

4.3. Įspėjimas: 'aprašymas-prasideda-pirmaujančiomis erdvėmis'

Šis įspėjimas iškeltas, nes ilgesnis mūsų paketo aprašymas faile „debian/control“ prasideda nuo daugiau nei vienos vietos. Kai tik pašalinsime vieną vietą, įspėjimas dings.

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

Kiekvienam paketui reikia trumpo ir ilgesnio aprašymo „debian/control“. Ši klaida iškelta, nes abu aprašymai yra identiški. Kai tik pratęsėme ilgesnį aprašymą, klaida išnyko.


5. Nuorodos ir nuorodos

- [ddr] Andreas Barth, Adam Di Carlo, Raphaël Hertzog, Lucas Nussbaum, Christian Schwarz, Ian Jackson: „Debian“ kūrėjo nuoroda
- [Dnmg] Josipas Rodinas, Osamu Aoki: „Debian“ naujojo prižiūrėtojo vadovas
- [dpmb] Axel Beckert, Frank Hofmann: Debian paketų valdymo knyga
- [dpm] „Debian“ politikos vadovas
- [gali] „Debian“ pakavimo pamoka
- [gph] GNU privatumo vadovas
- [lushpaiPackage] Alexas Lushpai: Kaip sukurti „debian“ paketą iš šaltinio


6. Padėkos

Autorius norėtų padėkoti Axelis Beckertas ir Geroldas Rupprechtas už paramą ir kritikus rengiant šį straipsnį.