Jeg prøver å installere Intels OpenCL SDK, men DEB-filene er buggy-konverteringer fra RPM (se her for nysgjerrige). Jeg må redigere postinst skriptet i DEB de gir.

Hvordan kan jeg ta en eksisterende DEB, trekke ut innholdet (inkludert kontrollinformasjonen), så senere ompakke innholdet for å lage en ny DEB? Jeg vil bare redigere filer, ingen filer vil bli lagt til eller fjernet.

Kommentarer

  • utpakningsdelen kan gjøres fra midnattkommandør (apt install mc) – bare trykk enter på en deb-fil

Svar

primær kommando for å manipulere deb-pakker er dpkg-deb .

For å pakke ut pakken, opprett en tom katalog og bytt til den, og kjør deretter dpkg-deb for å trekke ut kontrollinformasjonen og pakkefilene. Bruk dpkg-deb -b for å gjenoppbygge pakken.

mkdir tmp dpkg-deb -R original.deb tmp # edit DEBIAN/postinst dpkg-deb -b tmp fixed.deb 

Vær oppmerksom på at med mindre skriptet kjører som root, er filene » tillatelser og eierskap blir ødelagt i utvinningsfasen. En måte å unngå dette på er å kjøre skriptet ditt under fakeroot Merk at du må kjøre hele sekvensen under fakeroot, ikke hver dpkg-deb hver for seg, siden den er fakeroot prosess som holder minnet om tillatelsene til filene som ikke kan opprettes som de er.

fakeroot sh -c " mkdir tmp dpkg-deb -R original.deb tmp # edit DEBIAN/postinst dpkg-deb -b tmp fixed.deb " 

Snarere enn rot med tillatelser kan du holde dataarkivet intakt og bare endre kontrollarkivet. dpkg-deb gir ikke en måte å gjøre det på. Heldigvis er deb-pakker i et standardformat: de «re ar arkiver. Så du kan bruke ar for å trekke ut kontrollarkivet, endre filene og bruke ar for å erstatte kontrollarkivet med en ny versjon.

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 

Du bør legge til en endringsloggoppføring og endre versjonsnummer hvis du endrer noe i pakken. Infrastrukturen for å manipulere Debian-pakker forutsetter at hvis to pakker har med samme navn og versjon, er de samme pakken. Legg til et suffiks til debian_revision delen på slutten av versjonsnummeret; av sorteringsårsaker bør suffikset starte med ~, f.eks. 1.2.3-4.1 blir 1.2.3-4.1~johnjumper1.

I stedet for å bruke skallverktøy kan du bruke Emacs. dpkg-dev-el -pakken (som er sin egen oppstrøms da dette er en innfødt Debian-pakke) inneholder modi for å redigere .deb filer og for å redigere Debian-endringslogger. Emacs kan brukes interaktivt eller skriptes.

Kommentarer

  • Du kan også bruke -e bryteren til fpm for å endre kontrollfilen: fpm -e -s deb -t deb ../old.deb. Dette åpner kontrollfilen i redigeringsprogrammet.
  • btw, fakeroot bash og prøver å utstede kommandoer fungerer ikke angående eierskap, og ar -metoden er utrolig rask for store deb-filer!
  • Takk. Dette var nyttig. Ved hjelp av dpkg-deb -R ble modusene beholdt og dpkg-deb -b tilbakestill uid:gid av de utpakkede filene til 0:0. Trengte ' ikke fakeroot (jeg forestiller meg at det kan være problemer hvis det ble satt {u, g} id-filer inne i arkivet, men det var ikke ' t saken i min situasjon.
  • @PSkocik Ikke bare setxid-filer, også f.eks. filer og kataloger under /etc eller /var som trenger å tilhøre en bestemt gruppe.
  • Takk for det gode svaret. Er det en måte å sikre at den ombygde pakken mot originalpakken har samme md5sum?

Svar

Du kan bruke fpm med --after-install alternativet for å erstatte postinst -skriptet, slik:

fpm -e --after-install ../DEBIAN/postinst.new -s deb -t deb ../old.deb 

Kommentarer

  • Slik installerer du fpm på Debian / Ubuntu: sudo apt-get install ruby-dev build-essential; sudo gem install fpm

Svar

Hvis du bare vil hente ut filer fra en .deb fi le, 7-Zip er praktisk. 7-Zip støtter «ar» -filer for «bare utpakking». (Ingen grunn til å gi nytt navn til filen; den åpner * .deb som «ar» og viser «data.tar» inne.)

Kommentarer

  • Velkommen til siden, og takk for ditt bidrag.Vær oppmerksom på at OP spesifikt ba om " pakke DEB ut … og pakke DEB ". Kanskje du kan redigere innlegget ditt for å adressere det emnet også.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *