Ik probeer Intels OpenCL SDK te installeren, maar de DEB-bestanden zijn foutieve conversies van RPM (zie hier voor nieuwsgierigen). Ik moet het postinst -script bewerken in de DEB die ze leveren.

Hoe kan ik een bestaande DEB nemen, de inhoud extraheren (inclusief de besturingsinformatie), en vervolgens de inhoud later opnieuw inpakken om een nieuwe DEB te maken? Ik zal alleen bestanden bewerken, er zullen geen bestanden worden toegevoegd of verwijderd.

Opmerkingen

  • het uitpakken kan worden gedaan vanaf middernachtcommandant (apt install mc) – druk gewoon op enter in een deb-bestand

Antwoord

De het primaire commando om deb-pakketten te manipuleren is dpkg-deb .

Om het pakket uit te pakken, maakt u een lege map en schakel ernaartoe, voer dan dpkg-deb uit om de controle-informatie en de pakketbestanden te extraheren. Gebruik dpkg-deb -b om het pakket opnieuw op te bouwen.

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

Pas op dat, tenzij je script als root draait, de bestanden ” machtigingen en eigendom worden beschadigd tijdens de extractiefase. Een manier om dit te vermijden is door uw script uit te voeren onder fakeroot . Houd er rekening mee dat u de hele reeks onder fakeroot moet uitvoeren, niet elke dpkg-deb afzonderlijk, aangezien dit de fakeroot proces dat het geheugen bewaart van de rechten van de bestanden die” niet kunnen worden aangemaakt zoals ze zijn.

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

In plaats van rommel met machtigingen kunt u het data-archief intact houden en alleen het controle-archief wijzigen. dpkg-deb biedt geen manier om dat te doen. Gelukkig hebben deb-pakketten een standaardindeling: ze “re ar archieven. U kunt dus ar om het controle-archief uit te pakken, de bestanden te wijzigen, en ar opnieuw te gebruiken om het controle-archief te vervangen door een nieuwe versie.

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 

U moet een changelog-item toevoegen en de versienummer als u iets in het pakket wijzigt. De infrastructuur om Debian-pakketten te manipuleren gaat ervan uit dat als twee pakketten dezelfde naam en versie, ze zijn hetzelfde pakket. Voeg een achtervoegsel toe aan het debian_revision -gedeelte aan het einde van het versienummer; om sorteerredenen moet het achtervoegsel beginnen met ~, bijv. 1.2.3-4.1 wordt 1.2.3-4.1~johnjumper1.

In plaats van shell-tools te gebruiken, kun je Emacs gebruiken. Het dpkg-dev-el -pakket (dat zijn eigen upstream is aangezien dit een native Debian-pakket is) bevat modi om .deb bestanden en om de wijzigingslogboeken van Debian te bewerken. Emacs kan interactief of gescript worden gebruikt.

Reacties

  • Je kunt ook de -e schakelaar van fpm om het controlebestand te wijzigen: fpm -e -s deb -t deb ../old.deb. Hierdoor wordt het controlebestand in je editor geopend.
  • tussen haakjes, fakeroot bash en proberen om commandos uit te voeren werken niet met betrekking tot eigendom, en de ar methode is ongelooflijk snel voor grote deb-bestanden!
  • Bedankt. Dit was handig. Met dpkg-deb -R werden de modi behouden en dpkg-deb -b reset de uid:gid van de uitgepakte bestanden naar 0:0. Had ' geen fakeroot nodig (ik kan me voorstellen dat er problemen zouden zijn als er ingestelde {u, g} id-bestanden in het archief waren, maar dat was niet ' t het geval in mijn situatie.
  • @PSkocik Niet alleen setxid-bestanden, ook bijvoorbeeld bestanden en mappen onder /etc of /var die tot een specifieke groep moeten behoren.
  • Bedankt voor het goede antwoord. Is er een manier om ervoor te zorgen dat het herbouwde pakket versus het originele pakket dezelfde md5sum heeft?

Antwoord

U kunt fpm gebruiken met de --after-install optie om het postinst script als volgt te vervangen:

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

Opmerkingen

  • Om fpm op Debian / Ubuntu te installeren: sudo apt-get install ruby-dev build-essential; sudo gem install fpm

Answer

Als u alleen bestanden wilt extraheren van een .deb-bestand le, 7-Zip is handig. 7-Zip ondersteunt “ar” -bestanden voor “alleen uitpakken”. (Het is niet nodig om het bestand een andere naam te geven; het opent * .deb als “ar” en toont “data.tar” binnenin.)

Reacties

  • Welkom op de site en bedankt voor je bijdrage.Merk op dat het OP specifiek om " vroeg om DEB uit te pakken … en DEB opnieuw in te pakken ". Misschien kun je je bericht bewerken om dat onderwerp ook aan te pakken.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *