martedì 12 agosto 2008

How to - Modificare un pacchetto debian esistente


Vi sarà capitato di aver trovato o creato un pacchetto debian che non è stato realizzato perfettamente o che in qualche maniera necessita di un piccolo ritocco...
Non è assolutamente necessario ricrearlo da capo!

I pacchetti debian sono degli archivi tarball con una struttura ben definita: contengono un file di testo, debian-binary, con il tipo di pacchetto debian utilizzato e due archivi: control.tar.gz e data.tar.gz
che sono rispettivamente l'archivio in cui vengono tenuti i file di controllo (dipendenze, script di installazione, etc.) del pacchetto e l'archivio con i file veri e propri che dovranno essere copiati sul computer nelle varie directory per far funzionare il programma.

Abbiamo detto che il file .deb è un archivio in tutto e per tutto e infatti è possibile esplorare il suo contenuto semplicemente con archive manager o un qualsiasi gestore di archivi.

Ma cosa succede quando andate a modificare parte del suo contenuto? Il finimondo! Infatti gdebi o qualsiasi altro metodo di installazione del pacchetto, dopo una veloce analisi, si accorgerà della manomissione, restituendo un messaggio d'errore.

Per fortuna la soluzione è molto semplice!
Tra i mille modi possibili di realizzare un pacchetto debian, uno di quelli che usa il minor numero di aiuti possibili è la creazione manuale di tutti i file e le directory contenuti nel pacchetto e il successivo utilizzo del comando dpkg --build.

Per usare questo comando la convenzione è la seguente:

1) creare una directory di lavoro contenente una directory col nome DEBIAN (mi raccomando, il nome deve essere ESATTAMENTE quello, scritto in maiuscolo) nella quale metteremo i file di controllo.

2) creare, accanto alla directory DEBIAN, tutte le directory, sottodirectory e file che andranno copiate nel computer quando si installa il pacchetto (e.g. se il mio programma, per funzionare, ha bisogno del file pippo in /usr/local/bin, allora sarà sufficiente creare una directory usr accanto a DEBIAN, dentro a usr creare local, poi bin e infine copiarci dentro il file pippo)

Nel nostro caso, però, dobbiamo solo modificare un pacchetto già esistente e quindi i passi da compiere sono ancor più semplici!

1) creiamo una cartella di lavoro (e.g. prova)

2) usando archive manager, scompattiamo al suo interno il pacchetto deb da modificare.

3) cancelliamo il file debian-binary e scompattiamo i due archivi control.tar.gz e data.tar.gz e cancelliamo gli archivi compressi.

4) rinominiamo la directory control in DEBIAN.

5) facciamo tutte le modifiche del caso, aggiungendo e togliendo file, modificando il file control nella cartella DEBIAN secondo le nostre necessità e cancelliamo, una volta finito, tutti i file il cui nome finisce con una tilde (~) che si sono eventualmente creati durante i nostri maneggiamenti.

6) apriamo una shell e posizioniamoci nella directory contenente la nostra directory di lavoro, a questo punto lanciamo il comando:

dpkg --build nomedirectory nomepacchetto

dove nomedirectory è il nome della nostra directory di lavoro (nel nostro caso prova) e nomepacchetto è il nome del pacchetto debian da generare (sarebbe il caso che il nome seguisse la nomenclatura standard per i pacchetti debian, può essere conveniente usare lo stesso nome usato per il pacchetto originale, eventualmente con un suffisso che ricordi che l'avete modificato).

7) Fatto! L'unica cosa a cui si deve prestare attenzione, nel caso sia presente, è il file di testo md5sums accanto al file control. Esso contiene gli hash di tutti i file del pacchetto debian e potrebbe essere necessario modificarlo se aggiungete/togliete/editate dei file.
In questo caso potrebbe tornarvi utile il comando:

find ./usr/ -type f -exec md5sum '{}' \;

per ottenere tutti gli hash md5 (in questo caso dei file presenti nella cartella usr) dei file contenuti nel pacchetto. In ogni caso, prendendo spunto dal file md5sums presente, non dovrebbe essere difficile capire come crearne uno nuovo.

Se avete qualche dubbio, chiedete pure!

---
M

Nessun commento:

Posta un commento

commentando accetti implicitamente le regole del blog, leggile!