neu packen Ich versuche, das OpenCL SDK von Intel zu installieren, aber die DEB-Dateien sind fehlerhafte Konvertierungen von RPM (siehe hier für Neugierige). Ich muss das Skript postinst
in der von ihnen bereitgestellten DEB bearbeiten.
Wie kann ich eine vorhandene DEB übernehmen, dann den Inhalt (einschließlich der Steuerinformationen) extrahieren? den Inhalt später neu verpacken, um eine neue DEB zu erstellen? Ich werde nur Dateien bearbeiten, es werden keine Dateien hinzugefügt oder entfernt.
Kommentare
- Das Entpacken kann vom Mitternachtskommandanten (
apt install mc
) – Drücken Sie einfach die Eingabetaste in einer Deb-Datei.
Antwort
Die Der primäre Befehl zum Bearbeiten von Deb-Paketen lautet dpkg-deb
.
Um das Paket zu entpacken, erstellen Sie eine Leeren Sie das Verzeichnis und wechseln Sie dorthin. Führen Sie dann dpkg-deb
aus, 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 Dateien „, sofern Ihr Skript nicht als root ausgeführt wird“ Berechtigungen und Eigentumsrechte werden in der Extraktionsphase beschädigt. Eine Möglichkeit, dies zu vermeiden, besteht darin, Ihr Skript unter fakeroot
auszuführen Beachten Sie, dass Sie die gesamte Sequenz unter fakeroot
ausführen müssen, nicht jede dpkg-deb
einzeln, da es sich um die Prozess, der den Speicher der Berechtigungen der Dateien beibehält, die nicht so erstellt werden können, wie sie sind.
fakeroot sh -c " mkdir tmp dpkg-deb -R original.deb tmp # edit DEBIAN/postinst dpkg-deb -b tmp fixed.deb "
Anstatt zu verwirren Mit Berechtigungen können Sie das Datenarchiv intakt halten und nur das Steuerungsarchiv ändern. dpkg-deb
bietet keine Möglichkeit, dies zu tun. Glücklicherweise haben Deb-Pakete ein Standardformat: Sie sind „ ar
Archive. Sie können also ar
, um das Steuerarchiv zu extrahieren, seine Dateien zu ändern und ar
erneut zu verwenden, um das Steuerungsarchiv 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
Sie sollten einen Änderungsprotokolleintrag hinzufügen und den ändern Versionsnummer , wenn Sie etwas im Paket ändern. Die Infrastruktur zum Bearbeiten von Debian-Paketen setzt dies voraus, wenn zwei Pakete vorhanden sind Mit dem gleichen Namen und der gleichen Version sind sie das gleiche Paket. Fügen Sie dem Teil debian_revision am Ende der Versionsnummer ein Suffix hinzu. Aus Sortiergründen sollte das Suffix mit ~
beginnen, z. 1.2.3-4.1
wird zu 1.2.3-4.1~johnjumper1
.
Anstatt Shell-Tools zu verwenden, können Sie Emacs verwenden. Das dpkg-dev-el
-Paket (das sein eigenes Upstream ist, da es sich um ein natives Debian-Paket handelt) enthält Modi zum Bearbeiten von .deb
Dateien und zum Bearbeiten von Debian-Änderungsprotokollen. Emacs können interaktiv oder per Skript verwendet werden.
Kommentare
- Sie können auch den Schalter
-e
von verwenden fpm , um die Steuerdatei zu ändern:fpm -e -s deb -t deb ../old.deb
. Dadurch wird die Steuerdatei in Ihrem Editor geöffnet. - übrigens
fakeroot bash
und der Versuch, Befehle auszugeben, funktioniert in Bezug auf den Besitz nicht, und diear
Methode ist unglaublich schnell für große Deb-Dateien! - Danke. Das war nützlich. Mit
dpkg-deb -R
wurden die Modi beibehalten unddpkg-deb -b
setzte dieuid:gid
der extrahierten Dateien auf0:0
. ' brauchte keinen Fakeroot (ich kann mir vorstellen, dass es Probleme geben könnte, wenn {u, g} ID-Dateien im Archiv festgelegt wären, aber das war nicht ' Dies ist in meiner Situation nicht der Fall. - @PSkocik Nicht nur setxid-Dateien, sondern auch Dateien und Verzeichnisse unter
/etc
oder/var
die zu einer bestimmten Gruppe gehören müssen. - Vielen Dank für die großartige Antwort. Gibt es eine Möglichkeit, um sicherzustellen, dass das neu erstellte Paket im Vergleich zum Originalpaket dieselbe md5sum hat?
Antwort
Sie können fpm mit der --after-install
Option zum Ersetzen des Skripts postinst
wie folgt:
fpm -e --after-install ../DEBIAN/postinst.new -s deb -t deb ../old.deb
Kommentare
- So installieren Sie fpm unter Debian / Ubuntu: sudo apt-get install ruby-dev build-essential; sudo gem install fpm
Antwort
Wenn Sie nur Dateien aus einer .deb-Datei extrahieren möchten le, 7-Zip ist bequem. 7-Zip unterstützt „ar“ -Dateien für „nur entpacken“. (Die Datei muss nicht umbenannt werden. Sie öffnet * .deb als „ar“ und zeigt „data.tar“ an.)
Kommentare
- Willkommen auf der Website und vielen Dank für Ihren Beitrag.Bitte beachten Sie, dass das OP speziell nach " gefragt hat, um DEB zu entpacken … und DEB " neu zu packen. Vielleicht können Sie Ihren Beitrag bearbeiten , um auch dieses Thema anzusprechen.