5. Alapos ellenőrzés

Miután megszerezted az első tapasztalatokat és elkészítetted a saját bináris csomagodat, itt az idő, hogy egy kicsit komolyabban is megnézzük a dolgot. Vess egy pillantást az elkészített csomag minőségére.

5.1. lintian

Szerencsénkre a Debian projekt a "lint"-hez hasonló Debian csomag ellenőrző eszközt nyújt. Ezt az eszközt "lintian"-nak hívják. Ha még nem telepítetted a rendszeredre, akkor itt a megfelelő alkalom (apt-get install lintian).

Most használd ezt a nagyszerű eszközt a csomagod ellenőrzéséhez:

$ lintian linuxstatus_1.1-1_all.deb
E: linuxstatus: binary-without-manpage linuxstatus
E: linuxstatus: no-copyright-file
W: linuxstatus: prerm-does-not-remove-usr-doc-link
W: linuxstatus: postinst-does-not-set-usr-doc-link

Uh, ez nem néz ki valami teljesnek. Kihagytuk a kézikönyv oldalt, a copyright fájlt, meg azokat a "prerm", meg "postinst" szkripteket.

5.2. Minimális dokumentáció

Nem itt kellene leírnom a kézikönyv oldalak készítésének módját, egy csomó könyv van, ahol egy vagy több fejezet foglalkozik ezzel a témával, ezeken kívül pedig elolvashatod a Linux Man Page Howto (Linux kézikönyv oldal HOGYAN) leírást, mely az interneten elérhető. Szóval tekintsünk el ettől, és tegyük fel, hogy van egy megfelelő kézikönyv oldal a szkriptedhez a ./man/man1/linuxstatus.1 helyen.

Ugyanez a helyzet a "copyright" fájllal is. Elegendő példát találsz a /usr/share/doc könyvtárban a find /usr/share/doc -name "copyright" parancs segítségével.

Íme a saját példánk a "copyright" fájlra:

linuxstatus

Copyright: Chr. Clemens Lee <clemens@kclee.com>

2002-12-07

The home page of linuxstatus is at: 
http://www.kclee.com/clemens/unix/index.html#linuxstatus

The entire code base may be distributed under the terms of the GNU General
Public License (GPL), which appears immediately below.  Alternatively, all
of the source code as any code derived from that code may instead be
distributed under the GNU Lesser General Public License (LGPL), at the
choice of the distributor. The complete text of the LGPL appears at the
bottom of this file.

See /usr/share/common-licenses/(GPL|LGPL)

A "prerm" és "postinst" szkripteket egytől egyig másold be a példában szereplő "parted" csomagból, ugyanazzal a névvel, a saját csomagod könyvtárába. Ezeknek a fájloknak megfelelően működniük kell.

Most ismét készítsd el a debian csomagunkat, de előbb a "control" fájlban megnöveld a verziószámot 1.1-1-ről 1.2-1-re (ha írunk egy új kézikönyv oldalt, akkor növeljük a saját belső kiadási számot). Az új fájlokat is el kell helyezned a megfelelő helyen:

$ mkdir -p ./debian/usr/share/man/man1
$ mkdir -p ./debian/usr/share/doc/linuxstatus
$ find ./debian -type d | xargs chmod 755
$ cp ./man/man1/linuxstatus.1 ./debian/usr/share/man/man1
$ cp ./copyright ./debian/usr/share/doc/linuxstatus
$ cp ./prerm ./postinst ./debian/DEBIAN
$ gzip --best ./debian/usr/share/man/man1/linuxstatus.1
$
$ dpkg-deb --build debian
dpkg-deb: building package `linuxstatus' in `debian.deb'.
$ mv debian.deb linuxstatus_1.2-1_all.deb

A gzip szükséges, mert a lintian elvárja, hogy a kézikönyv oldal fájlja, amennyire csak lehet, tömörítve legyen.

5.3. fakeroot

No, akkor nézzük, hogy a csomagunk debian tulajdonságai javultak-e.

$ lintian linuxstatus_1.2-1_all.deb
E: linuxstatus: control-file-has-bad-owner prerm clemens/clemens != root/root
E: linuxstatus: control-file-has-bad-owner postinst clemens/clemens != root/root
E: linuxstatus: bad-owner-for-doc-file usr/share/doc/linuxstatus/ clemens/clemens != root/root
E: linuxstatus: bad-owner-for-doc-file usr/share/doc/linuxstatus/copyright clemens/clemens != root/root
E: linuxstatus: debian-changelog-file-missing

Hopsz, újabb gondok. OK, nem adjuk föl. Valójában úgy néz ki, hogy több hibaüzenetet kaptunk ugyanarra a problémára. Minden fájl a "clemens" felhasználói és csoport azonosítóval lett becsomagolva, míg valószínűleg a legtöbb felhasználó jobban örülne, ha "root/root" felhasználóként lennének telepítve. Ezt a problémát könnyedén orvosolhatod a "fakeroot" segédprogram használatával. Szóval javítsd ki, és gyorsan ellenőrizd le (a changelog kimenettel most ne foglalkozz):

$ fakeroot dpkg-deb --build debian
dpkg-deb: building package `linuxstatus' in `debian.deb'.
$ mv debian.deb linuxstatus_1.2-1_all.deb
$ lintian linuxstatus_1.2-1_all.deb
E: linuxstatus: debian-changelog-file-missing

Nagyszerű, de még egy fájlt hozzá kell adnunk a csomaghoz.

5.4. További dokumentáció

A "doc/linuxstatus" könyvtárban lévő "changelog" mellé még egy "changelog.Debian" fájlt is kell írni. Mindkettőt gzip-pel kell tömöríteni.

Íme egy példa a "changelog" fájlra:

linuxstatus (1.2-1)

  * A lintian által jegyzett hibák javítása.

 -- Chr. Clemens Lee <clemens@kclee.com>  2002-12-13

itt pedig egy "changelog.Debian" példa:

A linuxistatus Debian karbantartója és a fő változat szerzője megegyezik, 
ezért nézd meg a Debian valtozások changelogját is.

A changelog fájl formátumát illetően a Debian irányvonal még részletesebb.

Remélhetőleg most következik az utolsó lépés:

$ cp ./changelog ./changelog.Debian ./debian/usr/share/doc/linuxstatus
$ gzip --best ./debian/usr/share/doc/linuxstatus/changelog
$ gzip --best ./debian/usr/share/doc/linuxstatus/changelog.Debian
$ fakeroot dpkg-deb --build ./debian
dpkg-deb: building package `linuxstatus' in `debian.deb'.
$ mv debian.deb linuxstatus_1.2-1_all.deb
$ lintian linuxstatus_1.2-1_all.deb

Ah, már nem panaszkodik többé a lintian :-). Most root felhasználóként telepítheted a csomagot a régire, a megszokott "dpkg -i" paranccsal.

root# dpkg -i ./linuxstatus_1.2-1_all.deb
(Reading database ... 97124 files and directories currently installed.)
Preparing to replace linuxstatus 1.1-1 (using linuxstatus_1.2-1_all.deb) ...
Unpacking replacement linuxstatus ...
Setting up linuxstatus (1.2-1) ...