Am Ende hatte ich es mit einer Software zu tun, die mit dpkg bereitgestellt werden sollte. Das .deb-Paket funktioniert in der Testumgebung einwandfrei, schlägt jedoch beim Staging fehl. Beide verwenden dieselbe Ubuntu-Version, aber ich bin mir der restlichen Konfiguration nicht 100% sicher. Wie kann ich dieses dpkg-Problem weiter debuggen?
Die Installation schlägt folgendermaßen fehl:
sudo dpkg -i --debug=7337 package.deb
D000010: ensure_pathname_nonexisting `/var/lib/dpkg/tmp.ci'
(Reading database ... 201812 files and directories currently installed.)
Unpacking myProprietarySoftware (from package.deb) ...
D000001: process_archive oldversionstatus=not installed
D000002: fork/exec /var/lib/dpkg/tmp.ci/preinst ( install )
dpkg: error processing package.deb (--install):
subprocess new pre-installation script returned error exit status 1
D000002: maintainer_script_new nonexistent postrm `/var/lib/dpkg/tmp.ci/postrm'
D000010: ensure_pathname_nonexisting `/var/lib/dpkg/tmp.ci'
D000010: ensure_pathname_nonexisting running rm -rf
D000010: ensure_pathname_nonexisting `/var/lib/dpkg/reassemble.deb'
Errors were encountered while processing:
package.deb
Antworten:
Das .preinst-Skript des Pakets schlägt aus irgendeinem Grund fehl.
Um herauszufinden, warum, überprüfen Sie das Skript in
/var/lib/dpkg/info/PACKAGENAME.preinst
Wenn Sie genau sehen möchten, in welcher Zeile das Skript fehlschlägt, bearbeiten Sie das .preinst-Skript und fügen Sie es
set -x
unmittelbar nach der#!
Zeile hinzu. Dadurch wird die Ausführungsverfolgung im Skript aktiviert.HINWEIS: Dies setzt voraus, dass das .preinst-Skript ein Shell-Skript ist (entweder posix sh oder bash). Fast alle .preinst- (und .postinst-, .prerm- und .postrm-) Skripte sind Shell-Skripte, müssen es aber nicht sein, sie können auch ausführbar sein. zB auf meinem Haupt-Desktop-Computer mit 9104 installierten Paketen sind 14 Perl-Skripte, 1 ist eine kompilierte ausführbare Datei (Bashs Preinst - es kann nicht davon ausgegangen werden, dass bereits eine funktionierende Shell installiert ist), und alle anderen sind Shell-Skripte ... 9041 sind POSIX-Shell-Skripte, 63 sind Bash-Skripte. Wenn es sich bei .preinst um Perl oder Python oder etwas anderes handelt, müssen Sie herausfinden, wie Sie den Debugging- oder Ausführungs-Trace-Modus oder ähnliches in dieser Sprache aktivieren.
Dann renne
dpkg --configure --pending
.Dies führt dazu, dass dpkg versucht, das halbinstallierte Paket zu konfigurieren. Installieren Sie es NICHT mit
dpkg -i
, da dies Ihr bearbeitetes .preinst-Skript mit der Version im .deb-Paket überschreibt.Dies kann Ihnen genügend Informationen geben, um das Problem zu beheben. Es kann etwas Einfaches sein, wie ein unerwarteter oder nicht erfasster Exit-Code aus einem Programm (die meisten .preinst-Skripte usw. haben
set -e
, um sie beim ersten Fehler zu beenden) oder die Annahme, dass bereits ein Verzeichnis vorhanden ist (und dies kann auf eine nicht deklarierte Abhängigkeit zurückzuführen sein in der Debian / Control-Datei des Pakets - dh es sollte von foo abhängen, tut es aber nicht. installiere einfach foo trotzdem)Sobald es behoben ist, führen Sie es
dpkg --configure --pending
erneut aus und das Paket sollte ordnungsgemäß installiert sein.Wenn das .preinst-Skript fehlerhaft ist, besteht eine vernünftige Wahrscheinlichkeit, dass auch die .postinst- (und / oder .prerm- und .postrm-) Skripte vorhanden sind. Möglicherweise müssen Sie sie auch reparieren.
Vergessen Sie nicht, einen Fehlerbericht an denjenigen zu senden, der das Paket erstellt hat, damit er es beheben kann.
quelle
Ihre Software enthält ein "Pre-Installation-Skript" (Preinst), das fehlschlägt. Dies ist ein Shell-Skript, das in die .deb-Datei eingebettet ist. Sie können es extrahieren mit:
Dann können Sie schauen
out-dir/preinst
und sehen, ob Sie herausfinden können, warum es fehlschlägt.Wenn Sie dieses Skript ändern und neu
.deb
erstellen möchten (möglicherweise, um Debugging-Code hinzuzufügen), versuchen Sie esquelle
Sie müssen die Datei extrahieren und sehen, warum das
preinst
Skript mit Code beendet wird1
.Ich bin mir nicht sicher, ob es eine Diskussion zu UNIX.SE gab, aber ich kann mir diese Frage von AskUbuntu ansehen, um eine Vorstellung davon zu bekommen, wie man sie extrahiert.
Danach müssen Sie das
preinst
Skript manuell ausführen, um festzustellen, warum die Paketinstallation fehlschlägt.quelle
Wenn Sie das Paket direkt bearbeiten möchten, versuchen Sie Folgendes:
Quelle: http://ubuntuforums.org/showthread.php?t=636724
quelle
control
Datei zu ändern (und das Paket neu zu erstellen), nicht daspreinst
Skript gemäß dem OP-Problem.