Dpkg-repack: Ripacchettiziamo da filesystem

Ven, 03/08/2007 - 23:48

Dpkg-repack: Ripacchettiziamo da filesystem

Inviato da paolo 5 commenti
Introduzione

Dpkg-repack è uno dei tanti e potenti strumenti Debian, che ci permette in pochi secondi di ricostruire un pacchetto .deb (gia installato) di cui appunto non abbiamo più l'archivio binario.

Ora, le motivazioni possono essere molte, ad esempio:

* Migrazione di applicazioni o dell'intero sistema operativo
* Ricostruire pacchetti ad-hoc di applicativi che stiamo utilizzando
* Recupero di un pacchetto di cui non esiste più un archivio binario

Io personalmente l'ho utilizzato per creare un piccolo repository di alcune applicazioni server (mysql,apache2,postfix..) di cui ho bisogno molto frequentemente e grazie a dpkg-repack sono riuscito a crearli con le configurazioni personalizzate.

Infatti dpkg-repack, ricostruisce il pacchetto utilizzando le configurazioni in /etc che stiamo utilizzando e che molto probabilmente abbiamo modificato.

Installazione

L'installazione è standard:

root@paolo-laptop:/home/paolo# apt-get install dpkg-repack
Lettura della lista dei pacchetti in corso... Fatto
Generazione dell'albero delle dipendenze in corso
Reading state information... Fatto
I seguenti pacchetti NUOVI (NEW) saranno installati:
dpkg-repack
0 aggiornati, 1 installati, 0 da rimuovere e 104 non aggiornati.
È necessario prendere 0B/11,6kB di archivi.
Dopo l'estrazione, verranno occupati 69,6kB di spazio su disco.
Selezionato il pacchetto dpkg-repack, che non lo era.
(Lettura del database ... S175529 file e directory attualmente installati.)
Spacchetto dpkg-repack (da .../dpkg-repack_1.27_all.deb) ...
Configuro dpkg-repack (1.27) ...

Per testare l'applicazione, ricostruirò da file system tutti i pacchetti di Mysql, modificando il file di configurazione in /etc/mysql/my.cnf.

Test

Apportiamo dunque una modifica al file /etc/mysql/my.cnf

...
####test

Ho semplicemente aggiunto alla fine di my.cnf questa stringa, ovviamente le modifiche possono essere di qualsiasi natura.

Ora, vediamo quali pacchetti di mysql abbiamo nel sistema (senza calcolarne le dipendenze):

root@paolo-laptop:/home/paolo# <b>dpkg -l | awk '{print $2}' | grep '^mysql'
mysql-client-5.0
mysql-common
mysql-server-5.0

Bene, ora possiamo darli in pasto a dpkg-repack, sempre con un po di scripting (ovviamente i pacchetti possono essere dati in pasto al comando anche singolarmente):

root@paolo-laptop:/home/paolo# dpkg-repack `dpkg -l | awk '{print $2}' | grep '^mysql'` 
warning, `./dpkg-repack-7916/DEBIAN/control' contains user-defined field `Original-Maintainer'<br />dpkg-deb: building package `mysql-client-5.0' in `./mysql-client-5.0_5.0.45-1ubuntu1_i386.deb'.
dpkg-deb: ignoring 1 warnings about the control file(s)
warning, `./dpkg-repack-7916/DEBIAN/control' contains user-defined field `Original-Maintainer'
dpkg-deb: building package `mysql-common' in `./mysql-common_5.0.45-1ubuntu1_i386.deb'.
dpkg-deb: ignoring 1 warnings about the control file(s)
dpkg-repack: File not found: /var/lib/mysql-upgrade
warning, `./dpkg-repack-7916/DEBIAN/control' contains user-defined field `Original-Maintainer'
dpkg-deb: building package `mysql-server-5.0' in `./mysql-server-5.0_5.0.45-1ubuntu1_i386.deb'.
dpkg-deb: ignoring 1 warnings about the control file(s)
root@paolo-laptop:/home/paolo#

Controlliamo i pacchetti creati:

root@paolo-laptop:/home/paolo# ls -al *.deb
-rw-r--r-- 1 root root  7501892 2007-08-03 23:45 mysql-client-5.0_5.0.45-1ubuntu1_i386.deb
-rw-r--r-- 1 root root    56610 2007-08-03 23:45 mysql-common_5.0.45-1ubuntu1_i386.deb
-rw-r--r-- 1 root root 26906566 2007-08-03 23:46 mysql-server-5.0_5.0.45-1ubuntu1_i386.deb

Ok ci sono tutti, controlliamo se le nostre modifiche al file di configurazione my.cnf sono presenti:

root@paolo-laptop:/home/paolo# dpkg-deb -x mysql-common_5.0.45-1ubuntu1_i386.deb .
 
root@paolo-laptop:/home/paolo# cat etc/mysql/my.cnf  | grep dpkg-repack
 
root@paolo-laptop:/home/paolo# cat etc/mysql/my.cnf  | grep test
 
####test

Il primo comando che ho dato, dpkg-deb -x nomepacchetto . serve per decomprimere in una directory locale il pacchetto senza installarlo.

Perfetto, le nostre modifiche sono state salvate, ora questi pacchetti potrebbero tranquillamente essere messi in un repository locale e utilizzarli per i più svariati motivi, quando si amministrano tante macchine e le modifiche ai file di configurazione sono di routine, questa procedura potrebbe salvare tantissimo tempo.

Conclusione

Quest'applicazione, come tutte le altre che abbiamo in Debian, possono essere utilizzati per i più svariati usi creativi, io vi ho mostrato come utilizzarlo per la creazione di un nostro piccolo repository.

Riferimenti:
http://www.debian-administration.org/articles/499
http://www.debian.org/doc/manuals/reference/ch-system.it.html





Commenti

Ritratto di ntropia
#1

Inviato da ntropia il Lun, 06/08/2007 - 01:59.

Complimenti al boss

Ci stiamo dando da fare con le guide, eh? Smile

E' la seconda volta che seguo la stessa trafila:

1. Cavolo! Mi ero scordato un'altra volta di controllare se c'erano guide in attesa di pubblicazione
2. ...ma e' di Paolo! Legg',legg',pens',pens'... echo $MA_CHE_BELLA_GUIDA
3. Devo ricordarmi di controllare la sezione guide piu' spesso...
4. ...com'era il punto 3?

Che dire, Pa', grazie come sempre!

eNjoy

Chi ha intendimento conti il numero della Bestia, perché è un numero d'uomo; e il suo numero è... rw-rw-rw-



Ritratto di paolo
#2

Inviato da paolo il Lun, 06/08/2007 - 14:35.

Re: Complimenti al boss

Smile Grazie per i complimenti, ce ne sono altre in arrivo, è il mio classico periodo di ispirazione Wink

Paolo Mainardi
CTO Twinbit http://www.twinbit.it
Vice Presidente -- ILDN - Italian Linux DIstro Network



Ritratto di pietro
#3

Inviato da pietro il Ven, 14/09/2007 - 13:18.

Re: Complimenti al boss

Grande Paolo! Non sapevo dell'esistenza di questo comando ma avendo una testing mi sono spesso trovato nella necessita' di ripacchettizzare kernel funzionanti di versioni vecchie non piu' presenti nei repository ma che avevo ancora sul PC.

Ho appena ripacchettizzato l'ultimo kernel 2.6.18 funzionante di Lenny insieme agli header, al linux-kbuild ed ai driver compilati.

Mi servivano i pacchetti poiche' il 2.6.21 sul mio PC si blocca ed ora sto utilizzando il kernel 2.6.22 da unstable. Ho rimosso tutti i pacchetti relativi al 2.6.18 ma mi conservo i repacchettizzati caso mai dovessi tornare indietro dalla unstable. Lo so che il 2.6.18 c'e' anche su Etch, ma non e' lo stesso pacchetto.

Purtroppo le versioni vecchie dei pacchetti di una specifica distribuzione non si trovano piu'...

Pietro

Debian. Be unique.



Ritratto di paolo
#4

Inviato da paolo il Dom, 16/09/2007 - 21:18.

Re: Complimenti al boss

Grazie Smile Sono contento che ti sia stata utile, a me ha risolto non pochi problemi

Ciao

Paolo Mainardi
CTO Twinbit http://www.twinbit.it
Vice Presidente -- ILDN - Italian Linux DIstro Network



Ritratto di kalos
#5

Inviato da kalos il Gio, 04/10/2007 - 21:35.

Re: Complimenti al boss

voglio chiedere una cosa:
è possibile ripacchettizare il kernel con i driver della scheda video ( nella fattispecie nvidia) ?

If you haven't tried Debian lately, this would be a good time.

deb lenny/sid
linux user 384443 http://counter.li.org/
linux nelle scuole, firma la petizione