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.