Il comando principale per manipolare i pacchetti deb è dpkg-deb
.
Per decomprimere il pacchetto, creare una directory vuota e passare ad esso, quindi eseguire dpkg-deb
per estrarre le informazioni di controllo e i file del pacchetto. Utilizzare dpkg-deb -b
per ricostruire il pacchetto.
mkdir tmp
dpkg-deb -R original.deb tmp
# edit DEBIAN/postinst
dpkg-deb -b tmp fixed.deb
Fai attenzione che, a meno che lo script non sia in esecuzione come root, le autorizzazioni e la proprietà dei file verranno danneggiate in fase di estrazione. Un modo per evitarlo è eseguire lo script in fakeroot
. Si noti che è necessario eseguire l'intera sequenza in fakeroot
, non ciascuna dpkg-deb
individualmente, poiché è il fakeroot
processo che mantiene la memoria delle autorizzazioni dei file che non possono essere create così come sono.
fakeroot sh -c '
mkdir tmp
dpkg-deb -R original.deb tmp
# edit DEBIAN/postinst
dpkg-deb -b tmp fixed.deb
'
Invece di pasticciare con le autorizzazioni, è possibile mantenere intatto l'archivio dati e modificare solo l'archivio di controllo. dpkg-deb
non fornisce un modo per farlo. Fortunatamente, i pacchetti di deb sono in un formato standard: sono ar
archivi. Quindi è possibile utilizzare ar
per estrarre l'archivio di controllo, modificare i suoi file e ar
riutilizzarlo per sostituire l'archivio di controllo con una nuova versione.
mkdir tmp
cd tmp
ar p ../original.deb control.tar.gz | tar -xz
# edit postinst
cp ../original.deb ../fixed.deb
tar czf control.tar.gz *[!z]
ar r ../fixed.deb control.tar.gz
È necessario aggiungere una voce del log delle modifiche e modificare il numero di versione se si modifica qualcosa nel pacchetto. L'infrastruttura per manipolare i pacchetti Debian presuppone che se due pacchetti hanno lo stesso nome e versione, sono lo stesso pacchetto. Aggiungi un suffisso alla parte debian_revision alla fine del numero di versione; per motivi di ordinamento il suffisso dovrebbe iniziare con ~
, ad esempio 1.2.3-4.1
diventa 1.2.3-4.1~johnjumper1
.
Invece di usare gli strumenti shell, puoi usare Emacs. Il dpkg-dev-el
pacchetto (che è il suo upstream in quanto si tratta di un pacchetto Debian nativo) contiene le modalità per modificare i .deb
file e modificare i log delle modifiche Debian. Emacs può essere utilizzato in modo interattivo o tramite script.
-e
interruttore di FPM per modificare il file di controllo:fpm -e -s deb -t deb ../old.deb
. Questo aprirà il file di controllo nel tuo editor.