Einfaches Entpacken von DEB, Bearbeiten von Postinst und erneutes Packen von DEB

Einfaches Entpacken von DEB, Bearbeiten von Postinst und erneutes Packen von DEB

Ich versuche, Intels OpenCL SDK zu installieren, aber die DEB-Dateien sind fehlerhafte Konvertierungen von RPM (sieheHierfür Neugierige). Ich muss das postinstSkript im bereitgestellten DEB bearbeiten.

Wie kann ich ein vorhandenes DEB nehmen, den Inhalt (einschließlich der Steuerinformationen) extrahieren und den Inhalt später neu verpacken, um ein neues DEB zu erstellen? Ich werde nur Dateien bearbeiten, es werden keine Dateien hinzugefügt oder entfernt.

Antwort1

Der primäre Befehl zum Manipulieren von Deb-Paketen istdpkg-deb.

Um das Paket zu entpacken, erstellen Sie ein leeres Verzeichnis und wechseln Sie dorthin. Führen Sie dann „Aus“, dpkg-debum die Steuerinformationen und die Paketdateien zu extrahieren. Verwenden Sie „, dpkg-deb -bum das Paket neu zu erstellen“.

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

Beachten Sie, dass die Berechtigungen und Eigentümer der Dateien beim Extrahieren beschädigt werden, wenn Ihr Skript nicht als Root ausgeführt wird. Dies lässt sich vermeiden, indem Sie Ihr Skript unterfakeroot. Beachten Sie, dass Sie die gesamte Sequenz unter ausführen müssen fakerootund nicht jede dpkg-debSequenz einzeln, da dieser fakerootProzess die Berechtigungen der Dateien speichert, die so, wie sie sind, nicht erstellt werden können.

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

Anstatt mit den Berechtigungen herumzuspielen, können Sie das Datenarchiv intakt lassen und nur das Kontrollarchiv ändern. dpkg-debbietet keine Möglichkeit, dies zu tun. Glücklicherweise haben Deb-Pakete ein Standardformat: Sie sindarArchive. Sie können also ardas Kontrollarchiv extrahieren, seine Dateien ändern und es arerneut verwenden, um das Kontrollarchiv durch eine neue Version zu ersetzen.

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 solltestfüge hinzu einÄnderungsprotokolleintragund ändern Sie dieVersionsnummerwenn Sie etwas im Paket ändern. Die Infrastruktur zur Manipulation von Debian-Paketen geht davon aus, dass es sich bei zwei Paketen mit gleichem Namen und gleicher Version um dasselbe Paket handelt. Fügen Sie ein Suffix an diedebian_revisionTeil am Ende der Versionsnummer; aus Sortierungsgründen sollte das Suffix mit beginnen ~, 1.2.3-4.1wird also zB zu 1.2.3-4.1~johnjumper1.

Anstelle von Shell-Tools können Sie Emacs verwenden.dpkg-dev-elPaket(das ist sein eigener Upstream, da es sich um ein natives Debian-Paket handelt) enthält Modi zum Bearbeiten von .debDateien und Debian-Änderungsprotokollen. Emacs kann interaktiv oder per Skript verwendet werden.

Antwort2

Sie könnenfpmmit der Option , das Skript wie folgt --after-installzu ersetzen :postinst

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

Antwort3

Wenn Sie nur Dateien aus einer .deb-Datei extrahieren möchten, ist 7-Zip praktisch. 7-Zip unterstützt „ar“-Dateien nur zum „Entpacken“. (Sie müssen die Datei nicht umbenennen; es öffnet *.deb als „ar“ und zeigt darin „data.tar“ an.)

verwandte Informationen