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
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, ogar
-metoden er utrolig rask for store deb-filer! - Takk. Dette var nyttig. Ved hjelp av
dpkg-deb -R
ble modusene beholdt ogdpkg-deb -b
tilbakestilluid:gid
av de utpakkede filene til0: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å.
apt install mc
) – bare trykk enter på en deb-fil