Üdvözöllek, kedves olvasó! Biztosan találkoztál már a Debian, Ubuntu vagy más Debian alapú rendszerekben a .deb fájlokkal és az apt, apt-get vagy dpkg parancsokkal. Ezek teszik lehetővé, hogy szoftvereket telepítsünk, frissítsünk és távolítsunk el a rendszerünkből egyetlen egyszerű paranccsal. De vajon elgondolkodtál már azon, hogyan készülnek ezek a csomagok? Szeretnéd, ha a saját scripteid, programjaid vagy akár egy módosított szoftververzió is ilyen elegánsan telepíthető lenne a gépedre vagy megosztható lenne másokkal? Akkor jó helyen jársz! Ebben az átfogó útmutatóban lépésről lépésre végigvezetlek azon, hogyan készítsd el a saját Debian csomagodat.
Miért készítsünk saját Debian csomagot? A rendszerezettség ereje
Miért érdemes energiát fektetni a Debian csomagkészítésbe, amikor egyszerűen másolhatunk fájlokat vagy futtathatunk telepítő scripteket? Nos, számos előnye van:
- Rendszerezettség és szabványosság: A Debian csomagok egy jól definiált struktúrát követnek, ami garantálja a konzisztenciát és a kiszámíthatóságot.
 - Függőségek kezelése: Lehetőséget biztosít arra, hogy megadd, milyen más szoftverekre van szüksége a programodnak a megfelelő működéshez. Az 
aptautomatikusan gondoskodik ezek telepítéséről. - Egyszerű telepítés és eltávolítás: Nincs többé manuális fájlmásolgatás vagy bonyolult eltávolítás. Egyetlen 
sudo apt installvagysudo apt removeparancs elegendő. - Frissítések: A verziókövetés révén a csomagfrissítések is könnyedén kezelhetők.
 - Terjesztés: Ha meg szeretnéd osztani a szoftvered másokkal, egy 
.debfájl a legprofibb és legegyszerűbb módja. Akár saját helyi tárolót (repository) is létrehozhatsz. - Tisztaság: A csomagok gondoskodnak arról, hogy a fájlok a megfelelő helyre kerüljenek a fájlrendszerben, és eltávolításkor maradéktalanul törlődjenek.
 
Láthatod, a csomagolás nem csak a nagyméretű projektek kiváltsága, hanem kisebb scriptek vagy egyedi konfigurációk menedzselésére is rendkívül hasznos lehet.
Mire lesz szükségünk? (Előkészületek)
Mielőtt belevágnánk a sűrűjébe, győződjünk meg róla, hogy minden szükséges eszköz a rendelkezésünkre áll. Ez a folyamat Debian vagy Ubuntu alapú rendszeren a legegyszerűbb.
- Alapvető Linux/terminál ismeretek: Tudnod kell, hogyan navigálj a fájlrendszerben, szerkessz fájlokat és futtass parancsokat a terminálban.
 - Fejlesztői eszközök: Telepítenünk kell néhány csomagot, amelyek nélkülözhetetlenek a csomagépítéshez. Nyiss meg egy terminált, és futtasd a következő parancsot:
sudo apt update sudo apt install build-essential devscripts debhelper lintianbuild-essential: Tartalmazza a fordításhoz szükséges alapvető eszközöket (pl.gcc,g++,make).devscripts: Számos hasznos eszközt tartalmaz a Debian fejlesztéshez, többek között adh_makeparancsot, amit használni fogunk.debhelper: Egy gyűjtemény adebhelperszkriptekből, amelyek automatizálják a gyakori csomagolási feladatokat.lintian: Egy csomagellenőrző eszköz, amely segít azonosítani a hibákat és problémákat a csomagban, még mielőtt élesben használnád. Erősen ajánlott a használata!
 
A Debian csomag felépítése: A forrásfa
Minden Debian csomag forráskódja egy jól strukturált könyvtárfában található. A legfontosabb eleme a debian/ alkönyvtár, amely az összes, a csomagépítéshez szükséges metaadatot és utasítást tartalmazza. Nézzük meg a legfontosabb fájlokat és szerepüket:
Tegyük fel, hogy van egy projektünk (pl. egy script), ami a my-awesome-app/ könyvtárban van. A szerkezet valahogy így fog kinézni:
my-awesome-app/
├── my-script.sh
└── debian/
    ├── changelog
    ├── compat
    ├── control
    ├── copyright
    ├── rules
    └── source/
        └── format
    └── my-awesome-app.install  (ez később jön létre vagy manuálisan hozzuk létre)
A legfontosabb fájlok a debian/ könyvtárban:
debian/control: Ez a csomag „személyi igazolványa”. Itt definiálod a csomag nevét, verzióját, leírását, a maintainer adatait, és ami a legfontosabb, a függőségeit. Két fő részből áll: aSource(forrás) és aPackage(bináris csomag) szekcióból.debian/changelog: A változások naplója. Minden egyes új verzióhoz vagy jelentős változtatáshoz itt kell bejegyzést írni. Nagyon fontos a verziószám frissítése! Adch -i(devscriptsrésze) parancs nagyban megkönnyíti a kezelését.debian/rules: Ez egyMakefile, amely leírja, hogyan kell a forráskódot lefordítani, majd a bináris fájlokat becsomagolni. A modern Debian csomagok túlnyomó többsége adebhelper(dh) parancsot használja, ami leegyszerűsíti a feladatot.debian/copyright: Tartalmazza a szoftver licencinformációit és a szerzői jogi nyilatkozatokat.debian/compat: Meghatározza adebhelperkompatibilitási szintet, amit adebian/rulesfájl használ. Ez általában egy szám (pl.13).debian/source/format: Meghatározza a forráscsomag formátumát. Manapság szinte kizárólag a3.0 (quilt)formátumot használják.debian/*.install: Ezek a fájlok (a csomag nevével kiegészítve, pl.debian/my-awesome-app.install) soronként tartalmazzák, hogy melyik forrásfájlt hova kell telepíteni a célrendszeren.debian/docs: Itt sorolhatók fel azok a dokumentációs fájlok, amelyeket a csomag telepítésekor a/usr/share/doc/<csomagnév>/könyvtárba kell másolni.
Lépésről lépésre: Egy egyszerű script csomagolása
Vegyünk egy nagyon egyszerű példát: egy shell scriptet, ami kiírja a „Hello, Debian csomag!” szöveget. Csomagoljuk ezt be my-awesome-app néven.
1. Előkészületek: A forráskód és a könyvtárstruktúra
Hozzuk létre a projekt könyvtárát és a scriptet:
mkdir my-awesome-app
cd my-awesome-app
echo '#!/bin/bash' > my-script.sh
echo 'echo "Hello, Debian csomag!"' >> my-script.sh
chmod +x my-script.sh
Most a my-awesome-app könyvtárban van egy futtatható my-script.sh fájlunk.
2. Forrásfa inicializálása a dh_make segítségével
A dh_make parancs (a devscripts része) automatikusan létrehozza a debian/ könyvtárat az összes szükséges sablonfájllal. Ez rendkívül megkönnyíti a kezdést. Győződj meg róla, hogy a projekt gyökérkönyvtárában vagy (my-awesome-app/):
dh_make -s
A -s kapcsolóval azt jelezzük, hogy egy „single” (egyedi) csomagról van szó, nem pedig több bináris csomagot generáló forrásról. A dh_make kérdezni fog néhány dolgot:
- Milyen típusú csomagot szeretnél létrehozni? (
s: single,m: multiple,l: library,k: kernel module). Válaszd azs-t és nyomj Entert. 
A parancs sikeres futtatása után létrejön a debian/ könyvtár, tele sablonfájlokkal. Néhány felesleges fájlt törölhetünk, amelyek a példa kedvéért nem szükségesek (pl. .ex vagy .EX kiterjesztésű fájlok).
3. A debian/control fájl szerkesztése
Nyisd meg a debian/control fájlt egy szövegszerkesztővel (pl. nano debian/control). Ez az egyik legfontosabb fájl! Két fő szekciót látsz:
Source: my-awesome-app
Section: unknown
Priority: optional
Maintainer: Your Name <[email protected]>
Build-Depends: debhelper-compat (= 13)
Standards-Version: 4.6.0
Homepage: <insert URL here - optional>
Vcs-Browser: <insert URL here - optional>
Vcs-Git: <insert URL here - optional>
# <for the package to be uploaded to Debian>
Package: my-awesome-app
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: <insert up to 60 chars description>
 <insert long description, indented with space>
Módosítanod kell a következőket:
Maintainer:Írd be a neved és az e-mail címed.Homepage:Ha van weboldala a projektnek, add meg itt.Section:Ezt valószínűlegutils-ra vagymisc-re módosíthatod egy ilyen egyszerű script esetén.Architecture:Ha a programod architektúra-független (pl. shell script, Python script), akkor írd átall-ra. Ha fordítást igényel (C, C++), hagydany-n. A mi esetünkbenall.Depends:Itt sorolhatod fel azokat a csomagokat, amelyekre a szoftverednek szüksége van a működéshez, vesszővel elválasztva. Az alapértelmezett${shlibs:Depends}, ${misc:Depends}változók adebhelperáltal felderített alapvető függőségeket adják hozzá. Mivel egy egyszerű shell scriptről van szó, valószínűleg nincs szükséged extra függőségre.Description:Az első sorba egy rövid (max. 60 karakteres) leírást írj. A következő sorokba, amelyek egy szóközzel (vagy tabulátorral) vannak bekezdve, írj egy hosszabb, részletesebb leírást. Ez látható lesz azapt showparancs kimenetében.
Példa a módosított control fájlra:
Source: my-awesome-app
Section: utils
Priority: optional
Maintainer: Your Name <[email protected]>
Build-Depends: debhelper-compat (= 13)
Standards-Version: 4.6.0
Package: my-awesome-app
Architecture: all
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: A sample script for Debian packaging tutorial
 This is a simple shell script created to demonstrate the process
 of creating a Debian package. It just prints a greeting message.
4. A debian/changelog frissítése
A dh_make létrehozott egy alap changelog fájlt. Frissítsük az első bejegyzést a dch paranccsal, ami automatikusan hozzáadja az aktuális verziószámot és dátumot:
dch -i
Ez megnyitja a szerkesztődet, ahol egy rövid üzenetet adhatsz hozzá a változásokról. Hagyhatod az alapértelmezett „Initial release” üzenetet. Mentsd el és zárd be a szerkesztőt.
5. A debian/rules fájl testreszabása
Ez a fájl felelős a fordításért és a fájlok becsomagolásáért. A dh_make által generált sablon általában így néz ki:
#!/usr/bin/make -f
%:
dh $@ --with=debhelper-compat
Ez a legegyszerűbb, debhelper alapú rules fájl. A dh $@ parancs futtatja az összes releváns debhelper szkriptet a megfelelő sorrendben (tisztítás, fordítás, telepítés, stb.). Mivel a mi programunk egy egyszerű script, amit nem kell fordítani, csak telepíteni, gyakran elég ez az alapértelmezett beállítás. A --with=debhelper-compat paraméter biztosítja a kompatibilitást a megadott debhelper verzióval (ami a debian/compat fájlban van).
Azonban tudatnunk kell a debhelper-rel, hogy hol van a scriptünk, és hova szeretnénk telepíteni. Erre a debian/*.install fájlok szolgálnak. Alternatívaként a debian/rules fájlban is felülírhatunk debhelper fázisokat. Mivel a mi scriptünk nem igényel fordítást, csak telepítést, a legegyszerűbb, ha létrehozunk egy debian/my-awesome-app.install fájlt.
6. A debian/copyright és debian/compat beállítása
debian/copyright: Nyisd meg ezt a fájlt, és töltsd ki a licencinformációkat. Választhatsz az előre definiált licencsablonok közül, vagy beillesztheted a sajátodat. Fontos, hogy ez pontos legyen. Egy egyszerű script esetén elegendő lehet egy rövid BSD vagy MIT licenc.debian/compat: Adh_makeáltalában a legújabbdebhelperkompatibilitási szintet állítja be (pl.13). Ezt általában nem kell módosítani.
7. Fájlok telepítése (debian/*.install)
A debhelper alapértelmezetten a debian/tmp/ könyvtárba gyűjti össze a csomagolandó fájlokat, majd onnan másolja őket a célhelyekre. A dh_install nevű debhelper segédszkript használja a debian/*.install fájlokat, hogy tudja, melyik fájlt hova kell másolni.
Hozzuk létre a debian/my-awesome-app.install fájlt:
my-script.sh /usr/bin/
Ez az egyetlen sor azt mondja meg a dh_install-nak, hogy a my-script.sh fájlt másolja be a /usr/bin/ könyvtárba a csomag telepítésekor. Ha további fájljaid lennének (pl. konfigurációs fájlok, dokumentáció), azokat is itt sorolhatnád fel, külön sorban.
8. A csomag építése
Ha minden fájlt megfelelően beállítottunk, készen állunk a Debian csomag megépítésére. Győződj meg róla, hogy a projekt gyökérkönyvtárában vagy (my-awesome-app/), és futtasd a következő parancsot:
dpkg-buildpackage -us -uc
dpkg-buildpackage: Ez a fő parancs a Debian csomagok építésére.-us: Ne írja alá a forráscsomagot (unsigned source).-uc: Ne írja alá a.changesfájlt (unsigned changes).
Ezek a kapcsolók szükségesek, hacsak nem konfiguráltál GPG kulcsot a digitális aláíráshoz (ami nem szükséges a helyi csomagokhoz).
A parancs futása során sok kimenetet fogsz látni. Ha minden rendben megy, a folyamat végén a my-awesome-app könyvtár felett (azaz a szülőkönyvtárban) létrejönnek a .deb, .dsc, .tar.gz és .changes fájlok. A legfontosabb számunkra most a .deb fájl.
Például:
../my-awesome-app_1.0-1_all.deb
Ez a fájl a kész bináris Debian csomagunk!
9. Ellenőrzés és tesztelés
Mielőtt telepítenéd, erősen ajánlott a lintian futtatása. Ez egy statikus elemző eszköz, amely ellenőrzi a Debian csomagot a Debian Policy irányelvei szerint, és figyelmeztetéseket vagy hibákat jelez, ha valami nincs rendben.
Futtasd a következőt (a szülőkönyvtárban, ahol a .deb fájl van):
lintian my-awesome-app_1.0-1_all.deb
Ne ijedj meg, ha sok figyelmeztetést (W:) látsz, különösen az első csomagodnál. A hibákat (E:) viszont javítani kell! A lintian kimenete nagyon hasznos tippeket ad a problémák elhárításához.
Most pedig telepítsük és teszteljük a csomagot:
sudo dpkg -i my-awesome-app_1.0-1_all.deb
Ha nincs hibaüzenet, a csomag sikeresen települt! Most próbáld ki a scriptet:
my-script.sh
Ha látod a „Hello, Debian csomag!” üzenetet, gratulálok! Sikeresen elkészítetted és telepítetted az első saját Debian csomagodat!
Eltávolításhoz:
sudo apt remove my-awesome-app
Haladó tippek és jógyakorlatok
- Verziózás: A Debian verziószámok formátuma: 
[upstream_version]-[debian_revision]. Pl.1.2.3-1. Az upstream_version a program saját verziószáma, a debian_revision pedig a Debian csomag revíziószáma (növeld, ha a csomagoláson változtatsz, de a program kódján nem). - Függőségek: Légy pontos a 
Dependsmezőben. Használhatsz verziószámokat is (pl.python3 (>= 3.8)). - Patch-ek: Ha egy meglévő programot szeretnél csomagolni, de kisebb módosításokat kell rajta végezni (pl. hibajavítás, Debian-specifikus változtatások), akkor a 
debian/patches/könyvtárban tárolhatod a patch fájlokat, és adebhelperautomatikusan alkalmazza őket a fordítás előtt. - Digitális aláírás: Komolyabb, megosztásra szánt csomagokhoz érdemes GPG kulccsal aláírni a csomagot a hitelesség érdekében. Ez már egy komplexebb téma, de érdemes utánaolvasni.
 - Git és VCS: Ha a projekted Git-ben van, a 
gbp(git-buildpackage) eszköz nagyban megkönnyítheti a verziókövetést és a csomagolást. - Tesztelés: Mindig teszteld a csomagodat egy tiszta környezetben (pl. virtuális gépben vagy Docker konténerben), hogy meggyőződj róla, nincsenek hiányzó függőségek vagy váratlan viselkedés.
 
Gyakori hibák és azok elhárítása
- Hiányzó fájlok: A 
dpkg -ihibaüzenetet ad, ha a csomag nem tartalmazza a működéshez szükséges fájlokat, vagy rossz helyre vannak telepítve. Ellenőrizd adebian/*.installfájlt és adebian/rulestartalmát. - Függőségi problémák: Ha a 
Dependsmezőben hiányzik egy függőség, adpkg -ivagy azapt installhibaüzenettel leáll. Futasd le a programot egy tiszta rendszeren, és figyeld meg, milyen függőségeket igényel. - Engedélyek: A csomagolt fájloknak megfelelő engedélyekkel kell rendelkezniük. Futtatható fájlok legyenek futtathatóak (
chmod +x). - Lintian figyelmeztetések: Ne hagyd figyelmen kívül a 
lintianfigyelmeztetéseit! Bár nem feltétlenül akadályozzák meg a csomag építését, jó gyakorlatokat és potenciális problémákat jeleznek. Olvasd el a javaslatokat, és próbáld meg javítani a csomagodat a Debian Policy szerint. - Verziókonfliktus: Ügyelj a verziószámokra. A túl régi vagy túl új függőségi verzió megadhatása problémát okozhat.
 
Hová tovább? (Terjesztés és megosztás)
Miután elkészítetted a Debian csomagodat, felmerül a kérdés: hogyan tovább?
- Helyi repository: Kisebb felhasználói kör számára (pl. cégen belül, saját gépek között) létrehozhatsz egy egyszerű helyi 
aptrepository-t adpkg-scanpackagesés aapt-ftparchiveparancsokkal. - PPA-k (Personal Package Archives): Az Ubuntu Launchpad szolgáltatása lehetővé teszi, hogy bárki saját PPA-t hozzon létre, és Debian/Ubuntu csomagokat töltsön fel rá, amelyeket mások is könnyedén hozzáadhatnak az 
aptforráslistájukhoz. - Debian hivatalos csomagok: Ha a szoftvered nyílt forrású, és úgy gondolod, széles körben hasznos lenne, megpróbálhatod felvenni a kapcsolatot a Debian projekt maintainereivel, és a szoftvert hivatalos Debian csomaggá tenni. Ez egy hosszú és szigorú folyamat, de a legmagasabb szintű terjesztési mód.
 
Összefoglalás
A saját Debian csomag készítése elsőre talán ijesztőnek tűnhet, de amint láthatod, a folyamat logikus lépésekből áll, és a dh_make és debhelper eszközök nagyban leegyszerűsítik. Ez a tudás kulcsfontosságú lehet a szoftverek hatékony terjesztéséhez és menedzseléséhez a Debian alapú rendszereken. Gyakorlással egyre magabiztosabbá válsz, és hamarosan képes leszel bármilyen szoftvert profi módon becsomagolni. Sok sikert a Debian csomagolás izgalmas világában!
Leave a Reply