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.
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.
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
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.
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
Inviato da ntropia il Lun, 06/08/2007 - 01:59.
Complimenti al boss
Ci stiamo dando da fare con le guide, eh?
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-
Inviato da paolo il Lun, 06/08/2007 - 14:35.
Re: Complimenti al boss
Paolo Mainardi
CTO Twinbit http://www.twinbit.it
Vice Presidente -- ILDN - Italian Linux DIstro Network
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.
Inviato da paolo il Dom, 16/09/2007 - 21:18.
Re: Complimenti al boss
Grazie
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
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