====== Make a Debian binary package ======
===== Nomi dei pacchetti .deb =====
Il nome di un file .deb è costituito da:
apache-ssl_1.3.26.1+1.48-0woody3_i386.deb
\--------/ \-----------/ \-----/ \--/ \-/
| | | | |
| | | | \-- Estensione
| | | \------- Architettura
| | \--------------- Revisione Debian
| \----------------------------- Versione upstream
\---------------------------------------- Nome pacchetto
Quando si crea un pacchetto Debian si deve creare il file **DEBIAN/control**, gli attributi più importanti in esso contenuti sono **Package** (nome del pacchetto) e **Version** (versione upstream e versione Debian). La versione è fondamentale per decidere quale pacchetto deve sostituire un altro durante un upgrade.
===== File di controllo di un pacchetto Debian =====
Quella che segue è una panoramica semplificata, in alternativa c'è questo [[maintainer_scripts|approfondimento sui file di controllo Debian]].
Ogni pacchetto Debian include alcuni file di controllo che gestiscono l'installazione, la configurazione e la rimozione di un pacchetto. Sono raggruppati nella sottodirectory DEBIAN. Documentazione dovrebbe trovarsi in ''/usr/doc/packaging-manual/''. Consultare gli script di apache-ssl che sembrano ben commentati.
=== /DEBIAN/preinst ===
Viene eseguito prima dell'**installazione** o dell'**upgrade** del pacchetto. Non deve generare errore (segnalato da un exit code diverso da zero), altrimenti l'installazione viene considerata fallita. Qusti sono gli argomenti con i quali puo' essere chiamato lo script:
* //new-preinst// install\\ Il pacchetto era assolutamente assente (purged).
* //new-preinst// install //old-version//\\ Esistevano alcuni vecchi file di configurazione (il pacchetto era removed ma non purged).
* //new-preinst// upgrade //old-version//\\ Il pacchetto era gia' installato, si sta facendo l'upgrade.
* //old-preinst// abort-upgrade //new-version//
=== /DEBIAN/postinst ===
Viene eseguito dopo che il contenuto del pacchetto e' stato scompattato. Qusti sono gli argomenti con i quali puo' essere chiamato lo script:
* //postinst// configure //most-recently-configured-version//\\ E' lo script piu' importante, eseguito in seguito a un ''dpkg --install'' o un ''dpkg --configure'', provvede alla configurazione del pacchetto appena scompattato. Viene quindi eseguito anche durante l'upgrade.
* //old-postinst// abort-upgrade //new version//
* //conflictor's-postinst// abort-remove in-favour //package// //new-version//
* //deconfigured's-postinst// abort-deconfigure in-favour //failed-install-package// //version// removing //conflicting-package// //version//
=== /DEBIAN/postrm ===
Eseguito dopo la rimozione del pacchetto. Quando un pacchetto viene aggiornato viene eseguito il postrm della precedente versione con il parametro upgrade.
* //postrm// remove\\ In seguito a un ''dpkg --remove'', il pacchetto viene disinstallato, ma i file di configurazione rimangono.
* //postrm// purge\\ In seguito a un ''dpkg --purge'', il pacchetto viene disinstallato e i file di configurazione eliminati.
* //old-postrm// upgrade //new-version//
=== /DEBIAN/config ===
Eseguibile, normalmente usato per eseguire le dialogbox di configurazione se il pacchetto usa il motore debconf.
=== /DEBIAN/templates ===
Informazioni sulle dialogbox presentate durante l'installazione dal sistema debconf. Se un pacchetto usa debconf per l'installazione invece di essere interattivo durante gli script (postinst, ecc), fa tutte le domande all'inizio e poi va avanti da solo.
===== Modificare un pacchetto .deb esistente =====
Queste istruzioni riguardano la modifica di un pacchetto binario Debian. La modifica a partire dai sorgenti originali o da quelli Debian e' una procedura piu' complessa.
==== Scompattare i file ====
Non utilizzare Midnight Commander per scompattare un .deb! Prima di tutto non ripristina il timestamp dei file, ma ancora piu' grave non ricrea le directory vuote!
Creare una directory col nome del pacchetto e una sottodirectory di nome DEBIAN. Estrarre il contenuto del file .deb nella directory e i file di controllo nella sottodirectory DEBIAN:
mkdir apache-ssl
mkdir apache-ssl/DEBIAN
dpkg --extract apache-ssl_1.3.26.1+1.48-0woody3_i386.deb apache-ssl
dpkg --control apache-ssl_1.3.26.1+1.48-0woody3_i386.deb apache-ssl/DEBIAN
Un file .deb e' in realta' un file di tipo archive, compresso con gzip. Per estrarne il contenuto si puo' usare il comando ''ar xvf archive.deb'' e poi scompattare normalmente i due file ''data.tar.gz'' e ''control.tar.gz''.
==== Modificare il contenuto ====
Aggiornare il numero di versione in ''/DEBIAN/control'' in modo che il pacchetto IPBOX sia preferito all'originale Debian. Aggiungere directory e file come necessario (ad esempio i template di configurazione).
Le variazioni rispetto al pacchetto Debian dovrebbero essere documentate in ''/usr/share/doc//changelog.IPBOX''. Il formato del changelog e' descritto nel [[http://www.debian.org/doc/debian-policy/ch-source.html#s-dpkgchangelog|Debian Policy Manual]], un esempio:
phpmyadmin (2.2.3-2ipbox3) woody; urgency=high
* Removed all debconf stuff from control files
* Added code to update /etc/apache-ssl/httpd.conf.include
-- Niccolo Rigacci Thu, 25 Sep 2003 10:24:00 +0200