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
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, ogar
-metoden er utroligt hurtig til store deb-filer! - Tak. Dette var nyttigt. Ved hjælp af
dpkg-deb -R
blev tilstande bevaret ogdpkg-deb -b
nulstilledeuid:gid
af de udpakkede filer til0: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.
apt install mc
) – tryk bare på enter på en deb-fil