Debian csomag létrehozása HowTo

Debian Package Creation Howto



1. Előszó

A gépért való felelősség azt jelenti, hogy vigyázni kell a hardverre és a szoftver összetevőire. A rendszergazda mindennapi életében látható, hogy sokkal jobb szoftvert csomagként telepíteni, mint egy csomó forrásfájlt. Ez csökkenti a rendszer megfelelő karbantartásának költségeit.

Az előnyben részesített forgalmazótól elérhető csomagokat a csomagok karbantartója hitelesíti és felügyeli. Tesztelte a szoftvert, és biztosítja, hogy illeszkedik a forgalmazásban elérhető többi szoftvercsomaghoz. Ezenkívül a csomagot a csomag karbantartója GPG kulccsal írja alá. Ez garantálja a csomag integritását, és megmutatja, hogy a csomag megbízható forrásból származik.







A csomag formátuma a Linux disztribúciótól függ. A kiválasztott formátumok a következők:



deb

Használt csomagok: Debian GNU/Linux , Ubuntu , Armbian , Linux Mint , Knoppix



rpm

Használt csomagok: Piros kalap , Fedora , CentOS , OpenSuse





tgz and txz

Használt csomagok: Slackware

tar.xz

Használt csomagok: Arch Linux



Ez a dokumentum röviden bemutatja, hogyan lehet csomagot készíteni a Debian GNU/Linux számára. A Debian csomagformátumról és a 'deb' alapú Linux rendszer karbantartására szolgáló eszközökről részletes információkat találhat a Debian csomagkezelő könyvében [dpmb] Csomagok készítéséhez a Debian GNU/Linux számára ezek a dokumentumok elengedhetetlenek:

  • A Debian új karbantartói útmutatója [dnmg]
  • A Debian fejlesztői referenciája [NDK]
  • A Debian csomagolási bemutatója [tud]
  • A Debian Policy Manual [dpm]

A csomag, amellyel dolgozni fogunk, a helloworld névre hallgat, és a verziószáma 0,1. Bemutató célokra egyszerűen egyetlen Python -szkriptet tartalmaz, amely a híres Hello, world! Üzenetet adja ki:

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

2. Követelmények

2.1. GPG kulcs

Első lépésként legyen elérhető a GPG kulcsa. Később a kulcsra lesz szükség a csomag aláírásához. Ne feledje, hogy az alá nem írt csomagok megbízhatatlanok, és nem lehetnek a Debian univerzum részei.

Ha még nincs GPG kulcsa, hozzon létre egyet. Kövesse az alábbi három lépést. Az első parancs új kulcsot generál, a második exportálja az új kulcsot egy külön fájlba, a harmadik pedig hozzáadja a kulcsot a személyes kulcskarikájához.

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

A létrehozás során ellenőrizze, hogy a _YOUR NAME_ név helyes -e. Gyakori a keresztnév és a vezetéknév kombinációjának használata. Ennek a névnek pontosan ugyanaznak kell lennie a csomagban, amikor a Debian csomag `control` fájlját hozza létre. A GPG -vel kapcsolatos további információkért tekintse meg a GNU adatvédelmi kézikönyvet [gph].

2.2. A csomagolóeszköz lánc

A Debian csomag forráskódból történő létrehozásához a következő szoftvercsomagokra van szükség a rendszeren:

  • épít-elengedhetetlen
  • autoconf
  • automake
  • autotools-dev
  • dh-make
  • debhelper
  • devscriptek
  • fakeroot
  • xutils
  • lintian
  • pbuilder

'Root' felhasználóként telepítheti ezeket a következő paranccsal:

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

2.3. Készítse elő a csomagolni kívánt szoftvert

Fel kell készítenünk egy könyvtárat a csomag felépítéséhez. Hozzon létre egy könyvtárat a környezet elkészítéséhez, amelyben a csomagot felépítjük:

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

Másolja a 'tar.gz' tömörített archívumot a könyvtárba:

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

Váltson a könyvtárba, és bontsa ki a csomagot:

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

Most a könyvtár tartalmazza a forráskódot egy külön könyvtárban és a tömörített archívumot:

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

3. Debianizálás

Ezen a ponton hozzáadjuk a Debian csomaghoz tartozó fájlokat. Ezért ezt a lépést a szoftver _Dianianization_ névre keresztelték. Ez több lépésben történik.

3.1 Készítse elő a csomag szerkezetét

Váltson át a könyvtárba, amely a csomag teljes forráskódját őrzi. Példánkban a csomag csak a 'helloworld.py' fájlt tartalmazza:

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

Adjuk hozzá a Debian csomaghoz tartozó fájlokat. A 'dh_make' eszköz jön szóba. A '-e' kapcsoló a megadott címet használja e-mail címként a 'debian/control' fájl 'Maintainer' mezőjében. A csomag elkészítéséhez használja a saját e -mail címét. Ne feledje, hogy ugyanazt az e -mail címet használja, amely megfelel a GPG kulcsának.

A '-f' kapcsoló az adott fájlt használja eredeti forrásarchívumként, és átugorja az aktuális programfa másolását a 'program.orig' fájlba.

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

A rendszer kéri, hogy válassza ki a létrehozandó csomag típusát. Az _egyetlen bináris_ típus kiválasztásához írja be az „s” -t.

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 / . 

Ennek eredményeként létrejön a 'debian' nevű könyvtár:

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

Ez a könyvtár tartalmazza az összes csomag-specifikus fájlt.

3.2. Állítsa be a vezérlőfájlt

A 'debian/control' fájl megtartja a csomag _építéséhez_ szükséges függőségeket. A 'dpkg -depcheck -d./Configure' paranccsal kap egy listát az összes szükséges csomaggal. Esetünkben nincs szükség további csomagra, mert a Python egy értelmezett nyelv.

Ezután szerkesztenünk kell a 'debian/control' fájlt, és hozzá kell adnunk a csomag-specifikus értékeket. Példánkban a következőképpen néz ki:

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. Állítsa be a szerzői jogi fájlt

A 'debian/copyright' fájl tartalmazza a szoftvercsomag licencadatait. A kiadásra a GNU Public License 2 (GPLv2) segítségével készül. Példánkban a következőképpen néz ki:

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. Állítsa be a változásnaplófájlt

A szerzői jogi információk után módosítani kell a 'debian/changelog' fájlt. Példánkban hozzáadjuk a kezdeti kiadás információit.

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

Eddig csak erre van szükségünk - most végre elkészíthetjük a csomagot.


4. Készítse el a csomagot

A csomag felépítéséhez egy könyvtárat felfelé kell mozgatnunk, és a következő parancsot kell futtatnunk:

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

Az '-rfakeroot' opció lehetővé teszi, hogy a 'dpkg-buildpackage' privilegizált felhasználóként futtassa a parancsokat a 'fakeroot' parancs segítségével. Ez szükséges a csomag előkészítéséhez, valamint fájlok és könyvtárak létrehozásához.
A fenti parancs a kimeneti üzenetek hosszabb listáját eredményezi (itt látható német nyelvű környezetben):

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. A csomag érvényesítése

Gratulálunk - sikerült egy Debian csomagot építeni - igen! Most nézzük meg közelebbről a csomagot. Itt a 'lintian' jön szóba. Ez az eszköz ellenőrzi a csomagot, hogy megállapítsa a Debian csomagok által teljesítendő szigorú szabályok megsértését.

A tesztek futtatásához írja be a következő parancsot:

lintian helloworld_0.1-1_amd64.deb 

Az eszköz nem talál szabálysértéseket, hanem helyesírási hibákat és rossz karaktereket is. A „–pantikus” kapcsoló arra kéri a „lintiant”, hogy legyen a szokásosnál sokkal kritikusabb. Amint alább látható, a 'lintian' kissé morcos, és három figyelmeztetést és egy hibát fedezett fel.

Az első figyelmeztetést leszámítva könnyedén boldoggá tehetjük a 'lintiant', és a szabály szerint beállíthatjuk a csomag tartalmát. Az 'new-package-should-close-itp-bug' figyelmeztetés azt jelenti, hogy nincs hibajelentés az ITP csomag ellen (az ITP azt jelenti, hogy _szánt csomaghoz_). Rendes Debian csomag esetén hibajelentést kell küldeni a csomag ITP hibakeresőjének, hogy értesítse másokat arról, hogy elkezdi csomagolni ezt a szoftvert.

4.2. Figyelmeztetés: `readme-debian-satur-debmake-template

A 'README.Debian' fájl további megjegyzéseket tartalmaz a csomaggal kapcsolatban. 'dh_make' létrehozta nekünk ezt a fájlt:

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

Példánkban nincs további információnk, így törölhetjük a fájlt.

4.3. Figyelmeztetés: 'leírás-vezető-szóközökkel kezdődik'

Ez a figyelmeztetés azért jelenik meg, mert csomagunk hosszabb leírása a `debian/control` fájlban több szóközzel kezdődik. Amint eltávolítunk egy szóközt, a figyelmeztetés eltűnik.

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

Minden csomag rövid és hosszabb leírást is igényel a `debian/control` -ban. Ez a hiba azért merül fel, mert mindkét leírás azonos. Amint kiterjesztettük a hosszabb leírást, a hiba megszűnt.


5. Hivatkozások és hivatkozások

- [ddr] Andreas Barth, Adam Di Carlo, Raphaël Hertzog, Lucas Nussbaum, Christian Schwarz, Ian Jackson: A Debian fejlesztői referenciája
- [Dnmg] Josip Rodin, Osamu Aoki: A Debian új karbantartói útmutatója
- [dpmb] Axel Beckert, Frank Hofmann: A Debian csomagkezelési könyv
- [dpm] A Debian Policy Manual
- [tud] A Debian csomagolási bemutatója
- [gph] A GNU adatvédelmi kézikönyve
- [lushpaiPackage] Alex Lushpai: Hogyan készítsünk debian csomagot a forrásból


6. Köszönetnyilvánítás

A szerző szeretné megköszönni Axel Beckert és Gerold Rupprecht támogatásukért és kritikusaikért a cikk elkészítése során.