Sto tentando di installare OpenCL SDK di Intel ma i file DEB sono conversioni difettose da RPM (vedere qui per i curiosi). Devo modificare lo script postinst
nel DEB fornito.
Come posso prendere un DEB esistente, estrarne i contenuti (comprese le informazioni di controllo), quindi in seguito riconfezionare il contenuto per creare un nuovo DEB? Modificherò solo i file, nessun file verrà aggiunto o rimosso.
Commenti
Risposta
Il il comando principale per manipolare i pacchetti deb è dpkg-deb
.
Per decomprimere il pacchetto, creare un directory vuota e passare ad essa, quindi eseguire dpkg-deb
per estrarne le informazioni di controllo e i file del pacchetto. Usa 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, i file ” le autorizzazioni e la proprietà verranno danneggiate nella fase di estrazione. Un modo per evitarlo è eseguire lo script in fakeroot
. Tieni presente che devi eseguire lintera sequenza in fakeroot
, non ogni dpkg-deb
singolarmente, poiché “è fakeroot
processo che mantiene la memoria dei permessi dei file che non possono essere creati così come sono.
fakeroot sh -c " mkdir tmp dpkg-deb -R original.deb tmp # edit DEBIAN/postinst dpkg-deb -b tmp fixed.deb "
Piuttosto che confondere con i permessi, puoi mantenere intatto larchivio dati e modificare solo larchivio di controllo. dpkg-deb
non fornisce un modo per farlo. Fortunatamente, i pacchetti deb sono in un formato standard: “re ar
. Quindi puoi usare ar
per estrarre larchivio di controllo, modificarne i file e utilizzare di nuovo ar
per sostituire larchivio 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 la numero di versione se modifichi qualcosa nel pacchetto. Linfrastruttura per manipolare i pacchetti Debian presume 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 deve iniziare con ~
, ad es. 1.2.3-4.1
diventa 1.2.3-4.1~johnjumper1
.
Invece di usare gli strumenti della shell, puoi usare Emacs. Il dpkg-dev-el
pacchetto (che è il suo upstream in quanto questo è un pacchetto Debian nativo) contiene modalità per modificare .deb
file e per modificare i log delle modifiche Debian. Emacs può essere utilizzato in modo interattivo o con script.
Commenti
- Puoi anche usare lopzione
-e
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. - btw,
fakeroot bash
e il tentativo di emettere comandi non funzionerà riguardo alla proprietà e ilar
è incredibilmente veloce per file deb di grandi dimensioni! - Grazie. Questo è stato utile. Utilizzando
dpkg-deb -R
le modalità sono state mantenute edpkg-deb -b
ha reimpostatouid:gid
dei file estratti su0:0
. ' non necessitava di fakeroot (immagino che potrebbero esserci problemi se ci fossero file id {u, g} impostati allinterno dellarchivio, ma questo non era ' il caso nella mia situazione. - @PSkocik Non solo file setxid, ad esempio anche file e directory in
/etc
o/var
che devono appartenere a un gruppo specifico. - Grazie per lottima risposta. Cè un modo per garantire che il pacchetto ricostruito rispetto al pacchetto originale abbia lo stesso md5sum?
Risposta
Puoi utilizzare fpm con --after-install
opzione per sostituire lo postinst
script, in questo modo:
fpm -e --after-install ../DEBIAN/postinst.new -s deb -t deb ../old.deb
Commenti
- Per installare fpm su Debian / Ubuntu: sudo apt-get install ruby-dev build-essential; sudo gem install fpm
Risposta
Se desideri solo estrarre file da un file .deb fi le, 7-Zip è conveniente. 7-Zip supporta i file “ar” per “solo decompressione”. (Non è necessario rinominare il file; si apre * .deb come “ar” e mostra “data.tar” allinterno.)
Commenti
- Benvenuto nel sito e grazie per il tuo contributo.Tieni presente che lOP ha richiesto specificamente " decomprimere DEB … e reimballare DEB ". Forse puoi modificare il tuo post per affrontare anche questo argomento.
apt install mc
) – basta premere Invio su un file deb