Ich versuche, Intels OpenCL SDK zu installieren, aber die DEB-Dateien sind fehlerhafte Konvertierungen von RPM (sieheHierfür Neugierige). Ich muss das postinst
Skript 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-deb
um die Steuerinformationen und die Paketdateien zu extrahieren. Verwenden Sie „, dpkg-deb -b
um 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 fakeroot
und nicht jede dpkg-deb
Sequenz einzeln, da dieser fakeroot
Prozess 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-deb
bietet keine Möglichkeit, dies zu tun. Glücklicherweise haben Deb-Pakete ein Standardformat: Sie sindar
Archive. Sie können also ar
das Kontrollarchiv extrahieren, seine Dateien ändern und es ar
erneut 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.1
wird also zB zu 1.2.3-4.1~johnjumper1
.
Anstelle von Shell-Tools können Sie Emacs verwenden.dpkg-dev-el
Paket(das ist sein eigener Upstream, da es sich um ein natives Debian-Paket handelt) enthält Modi zum Bearbeiten von .deb
Dateien und Debian-Änderungsprotokollen. Emacs kann interaktiv oder per Skript verwendet werden.
Antwort2
Sie könnenfpmmit der Option , das Skript wie folgt --after-install
zu 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.)