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 die ar Methode ist unglaublich schnell für große Deb-Dateien!
  • Danke. Das war nützlich. Mit dpkg-deb -R wurden die Modi beibehalten und dpkg-deb -b setzte die uid:gid der extrahierten Dateien auf 0: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 '
  • @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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.