Ora che si è ottenuta una prima impressione e si è costruito il proprio pacchetto binario, è tempo di diventare un po' più "seri" e dare uno sguardo alla qualità del pacchetto che abbiamo prodotto.
Fortunatamente per noi il progetto Debian fornisce uno strumento per verificare i pacchetti Debian. Questo strumento si chiama 'lintian'. Se non è ancora stato installato sul proprio sistema questo è il momento buono per farlo (apt-get install lintian).
Ora useremo questo piccolo prezioso strumento sul nostro nuovo pacchetto:
$ 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 |
Il pacchetto non sembra così perfetto. Mancano la pagina di manuale, il file di copyright e anche gli script 'prerm' e 'postinst'.
Questo non è il luogo adatto per dire molto riguardo la scrittura e la creazione delle pagine di manuale, ci sono molti libri che hanno uno o più capitoli relativi a questo argomento e c'è anche online The Linux MAN-PAGE-HOWTO [NdT: in italiano]. Quindi ora si assume che ci sia una pagina di manuale perfetta per il proprio script alla locazione ./man/man1/linuxstatus.1.
Lo stesso per il file 'copyright'. Si possono trovare diversi esempi nella directory /usr/share/doc con questo comando: find /usr/share/doc -name "copyright".
Ecco quindi il nostro esempio di un file 'copyright':
linuxstatus Copyright: Chr. Clemens Lee <clemens@kclee.com> 2002-12-07 La pagina principale di linuxstatus è su: http://www.kclee.com/clemens/unix/index.html#linuxstatus L'intero codice base può essere distribuito sotto i termini della GNU General Public License (GPL), che appare immediatamente sotto. In alternativa, tutto il codice sorgente come ogni codice derivato da questo codice può essere distribuito invece sotto la GNU Lesser General Public License (LGPL), a scelta del distributore. Il testo completo della LGPL appare di seguito in questo file. Si veda /usr/share/common-licenses/(GPL|LGPL) |
Per gli script 'prerm' e 'postinst' si copino uno ad uno gli esempi dal pacchetto 'parted' precedente al posto dei file aventi lo stesso nome nella propria directory del progetto. Questi file dovrebbero funzionare bene.
Si crei ora il pacchetto debian nuovamente. Nel file 'control' si aumenti il numero della versione da 1.1-1 a 1.2-1 (quando si scriverà una nuova pagina di manuale si aumenterà il proprio numero di release interno). È anche necessario copiare i nuovi file nelle loro destinazioni appropriate:
$ 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 |
Gzip è necessario perché lintian si aspetta che i file delle pagine di manuale siano compressi il più possibile.
Ora vediamo se il pacchetto è diventato un buon "cittadino" di Debian:
$ 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 |
Uff, ancora reclami. Ok, non rinunceremo. Attualmente la maggior parte degli errori sembra in realtà essere lo stesso problema. I nostri file sono tutti pacchettati per l'utente e il gruppo 'clemens', mentre si assume che la maggior parte della gente preferisca averli installati come 'root/root'. Ma questo problema è facilmente superato usando lo strumento 'fakeroot'. Quindi correggiamo e verifichiamolo velocemente (mentre si ignora il risultato del file changelog):
$ 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 |
Bene, ma si deve ancora aggiungere un altro file al pacchetto.
Lasciatemi già dire che accanto al file 'changelog' nella directory 'doc/linuxstatus' è necessario un file 'changelog.Debian'. Entrambi dovrebbero essere compressi con gzip.
Di seguito ci sono due file di esempio, 'changelog':
linuxstatus (1.2-1) * Made Debian package lintian clean. -- Chr. Clemens Lee <clemens@kclee.com> 2002-12-13 |
e 'changelog.Debian':
Il manutentore di linuxstatus di Debian e l'autore sono identici. Si veda quindi anche un file normale di changelog per i cambiamenti in Debian. |
La Debian Policy fornisce più dettagli riguardo il formato del file changelog.
Ora si spera che l'ultimo passo sia:
$ 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, non si ottengono più reclami :-). Ora, come root si può installare questo pacchetto sopra a quello precedente, ancora con il solito comando 'dpkg -i'.
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) ... |