Jeg prøver at installere Intels OpenCL SDK, men DEB-filerne er buggy-konverteringer fra RPM (se her for de nysgerrige). Jeg er nødt til at redigere postinst scriptet i DEB, de leverer.

Hvordan kan jeg tage en eksisterende DEB, udtrække indholdet (inklusive kontroloplysningerne), derefter senere ompakke indholdet for at oprette en ny DEB? Jeg redigerer kun filer, ingen filer tilføjes eller fjernes.

Kommentarer

  • udpakningsdelen kan gøres fra midnatskommandør (apt install mc) – tryk bare på enter på en deb-fil

Svar

primær kommando til at manipulere deb-pakker er dpkg-deb .

For at pakke pakken ud skal du oprette en tom mappe, og skift til den, kør derefter dpkg-deb for at udtrække dens kontroloplysninger og pakkefilerne. Brug dpkg-deb -b til at genopbygge pakken.

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

Pas på, medmindre dit script kører som root, filerne ” tilladelser og ejerskab bliver beskadiget på udvindingsstadiet. En måde at undgå dette på er at køre dit script under fakeroot Bemærk, at du skal køre hele sekvensen under fakeroot, ikke hver dpkg-deb individuelt, da det er fakeroot -proces, der holder hukommelsen på tilladelserne til de filer, der ikke kan oprettes, som de er.

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

I stedet for rod med tilladelser kan du holde dataarkivet intakt og kun ændre kontrolarkivet. dpkg-deb giver ikke en måde at gøre det på. Heldigvis er deb-pakker i et standardformat: de “re ar arkiver. Så du kan bruge ar for at udtrække kontrolarkivet, ændre dets filer og bruge ar igen til at erstatte kontrolarkivet med en ny version.

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 skal tilføje en ændringslogpost og ændre versionsnummer hvis du ændrer noget i pakken. Infrastrukturen til at manipulere Debian-pakker forudsætter, at hvis to pakker har med samme navn og version, de er den samme pakke. Tilføj et suffiks til debian_revision delen i slutningen af versionsnummeret; af sorteringsårsager skal suffikset starte med ~, f.eks. 1.2.3-4.1 bliver 1.2.3-4.1~johnjumper1.

I stedet for at bruge shell-værktøjer kan du bruge Emacs. dpkg-dev-el pakke (som er dens egen opstrøms, da dette er en indfødt Debian-pakke) indeholder tilstande til redigering af .deb filer og redigering af Debian-ændringslogfiler. Emacs kan bruges interaktivt eller scriptet.

Kommentarer

  • Du kan også bruge -e -omskifteren til fpm for at ændre kontrolfilen: fpm -e -s deb -t deb ../old.deb. Dette åbner kontrolfilen i din editor.
  • btw, fakeroot bash og prøv at udstede kommandoer fungerer ikke med hensyn til ejerskab, og ar -metoden er utroligt hurtig til store deb-filer!
  • Tak. Dette var nyttigt. Ved hjælp af dpkg-deb -R blev tilstande bevaret og dpkg-deb -b nulstillede uid:gid af de udpakkede filer til 0:0. Behøvede ' ikke fakeroot (jeg forestiller mig, at der kan være problemer, hvis der var indstillede {u, g} id-filer inde i arkivet, men det var ikke ' t tilfældet i min situation.
  • @PSkocik Ikke kun setxid-filer, også f.eks. filer og mapper under /etc eller /var der skal tilhøre en bestemt gruppe.
  • Tak for det gode svar. Er der en måde at sikre, at den genopbyggede pakke vs originalpakke har samme md5sum?

Svar

Du kan bruge fpm med --after-install mulighed for at erstatte postinst scriptet som dette:

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

Kommentarer

  • For at installere fpm på Debian / Ubuntu: sudo apt-get install ruby-dev build-essential; sudo gem install fpm

Svar

Hvis du kun vil udpakke filer fra en .deb fi le, 7-Zip er praktisk. 7-Zip understøtter “ar” -filer til “kun udpakning”. (Ingen grund til at omdøbe filen; den åbner * .deb som “ar” og viser “data.tar” indeni.)

Kommentarer

  • Velkommen til siden, og tak for dit bidrag.Bemærk, at OPen specifikt anmodede om " udpakke DEB … og pakke DEB " igen. Måske kan du redigere dit indlæg for også at adressere det emne.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *