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

  • la parte di decompressione può essere eseguita da midnight commander (apt install mc) – basta premere Invio su un file deb

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 il ar è incredibilmente veloce per file deb di grandi dimensioni!
  • Grazie. Questo è stato utile. Utilizzando dpkg-deb -R le modalità sono state mantenute e dpkg-deb -b ha reimpostato uid:gid dei file estratti su 0: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.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *