Der primäre Befehl zum Manipulieren von deb-Paketen lautet dpkg-deb
.
Um das Paket zu entpacken, erstellen Sie ein leeres Verzeichnis, wechseln Sie zu diesem und führen Sie es 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 der Besitz der Dateien in der Extraktionsphase beschädigt werden, es sei denn, Ihr Skript wird als Root ausgeführt. Eine Möglichkeit, dies zu vermeiden, besteht darin, Ihr Skript unter auszuführen fakeroot
. Beachten Sie, dass Sie die gesamte Sequenz ausführen müssen fakeroot
, nicht jede für sich dpkg-deb
, da es der fakeroot
Prozess ist, der die Berechtigungen der Dateien speichert, 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 mit Berechtigungen herumzuspielen, können Sie das Datenarchiv intakt halten und nur das Steuerarchiv ändern. dpkg-deb
bietet keine Möglichkeit, dies zu tun. Glücklicherweise haben Deb-Pakete ein Standardformat: Sie sind ar
Archive. So können Sie ar
das Kontrollarchiv extrahieren, seine Dateien ändern und 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
Sie sollten einen Changelog-Eintrag hinzufügen und die Versionsnummer ändern, wenn Sie etwas im Paket ändern. Die Infrastruktur zur Manipulation von Debian-Paketen geht davon aus, dass zwei Pakete mit demselben Namen und derselben Version dasselbe Paket sind. Fügen Sie dem debian_revision- Teil am Ende der Versionsnummer ein Suffix hinzu . aus sortierungsgründen sollte das suffix mit ~
zB beginnen 1.2.3-4.1
werden 1.2.3-4.1~johnjumper1
.
Anstelle von Shell-Tools können Sie auch Emacs verwenden. Das dpkg-dev-el
Paket (welches sein eigenes Upstream ist, da dies ein natives Debian-Paket ist) enthält Modi zum Bearbeiten von .deb
Dateien und zum Bearbeiten von Debian-Änderungsprotokollen. Emacs können interaktiv oder als Skript verwendet werden.
-e
Schalter von fpm , um die Steuerdatei zu ändern:fpm -e -s deb -t deb ../old.deb
. Dadurch wird die Steuerdatei in Ihrem Editor geöffnet.fakeroot bash
und das Ausgeben von Befehlen funktioniert in Bezug auf den Besitz nicht, und diear
Methode ist unglaublich schnell für große Deb-Dateien!dpkg-deb -R
die Modi beibehalten unddpkg-deb -b
dieuid:gid
der extrahierten Dateien auf zurückgesetzt0:0
. Fakeroot nicht nötig (Ich stelle mir vor, es könnte Probleme geben, wenn sich {u, g} id-Dateien im Archiv befinden, aber das war in meiner Situation nicht der Fall./etc
oder/var
dass Bedarf an einer bestimmten Gruppe gehören.Sie können fpm mit der folgenden
--after-install
Option verwenden, um daspostinst
Skript zu ersetzen :quelle