Jag försöker installera Intels OpenCL SDK men DEB-filerna är buggy-omvandlingar från RPM (se här för nyfikna). Jag måste redigera postinst -skriptet i DEB som de tillhandahåller.

Hur kan jag ta en befintlig DEB, extrahera innehållet (inklusive kontrollinformationen) och sedan senare packa om innehållet för att skapa en ny DEB? Jag kommer bara att redigera filer, inga filer läggs till eller tas bort.

Kommentarer

  • uppackningsdelen kan göras från midnattsbefälhavaren (apt install mc) – tryck bara på enter på en deb-fil

Svar

primärt kommando för att manipulera deb-paket är dpkg-deb .

För att packa upp paketet skapar du en tom katalog och växla till den, kör sedan dpkg-deb för att extrahera dess kontrollinformation och paketfilerna. Använd dpkg-deb -b för att bygga om paketet.

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

Observera att om inte ditt skript körs som root, filerna ” behörigheter och ägande kommer att skadas i extraktionsfasen. Ett sätt att undvika detta är att köra ditt skript under fakeroot Observera att du måste köra hela sekvensen under fakeroot, inte varje dpkg-deb individuellt, eftersom det är fakeroot -process som håller minnet på behörigheterna för filerna som inte kan skapas som de är.

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

Snarare än röra med behörigheter kan du hålla dataarkivet intakt och bara ändra kontrollarkivet. dpkg-deb ger inte ett sätt att göra det. Lyckligtvis är deb-paket i standardformat: de ”re ar arkiv. Så du kan använda ar för att extrahera kontrollarkivet, ändra dess filer och använda ar för att ersätta kontrollarkivet 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 bör lägga till en ändringsloggpost och ändra versionsnummer om du ändrar något i paketet. Infrastrukturen för att manipulera Debians paket förutsätter att om två paket har samma namn och version, de är samma paket. Lägg till ett suffix till delen debian_revision i slutet av versionsnumret; av sorteringsskäl bör suffixet börja med ~, t.ex. 1.2.3-4.1 blir 1.2.3-4.1~johnjumper1.

Istället för att använda skalverktyg kan du använda Emacs. dpkg-dev-el -paketet (vilket är det egna uppströms eftersom det här är ett inbyggt Debian-paket) innehåller lägen för att redigera .deb filer och för att redigera Debians ändringsloggar. Emacs kan användas interaktivt eller skriptas.

Kommentarer

  • Du kan också använda omkopplaren -e fpm för att ändra kontrollfilen: fpm -e -s deb -t deb ../old.deb. Detta öppnar kontrollfilen i din redigerare.
  • btw, fakeroot bash och försök att utfärda kommandon fungerar inte när det gäller ägande, och ar -metoden är otroligt snabb för stora deb-filer!
  • Tack. Detta var användbart. Med dpkg-deb -R behölls lägena och dpkg-deb -b återställde uid:gid för de extraherade filerna till 0:0. Behövde ' inte fakeroot (jag antar att det kan finnas problem om det fanns inställda {u, g} id-filer i arkivet men det var inte ' t fallet i min situation.
  • @PSkocik Inte bara setxid-filer, även t.ex. filer och kataloger under /etc eller /var som behöver tillhöra en viss grupp.
  • Tack för det fantastiska svaret. Finns det ett sätt att säkerställa att det ombyggda paketet jämfört med originalpaketet har samma md5sum?

Svar

Du kan använda fpm med --after-install alternativet att ersätta postinst -skriptet, så här:

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

Kommentarer

  • Så här installerar du fpm på Debian / Ubuntu: sudo apt-get install ruby-dev build-essential; sudo gem install fpm

Svar

Om du bara vill extrahera filer från en .deb fi le, 7-Zip är bekvämt. 7-Zip stöder ”ar” -filer för ”endast uppackning”. (Du behöver inte byta namn på filen; den öppnar * .deb som ”ar” och visar ”data.tar” inuti.)

Kommentarer

  • Välkommen till sajten och tack för ditt bidrag.Observera att OP specifikt frågade för " packa upp DEB … och packa om DEB ". Kanske kan du redigera ditt inlägg för att ta itu med det ämnet också.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *