Vorige: , Nach oben: Aufruf von guix build   [Inhalt][Index]


10.1.4 Fehlschläge beim Erstellen untersuchen

Wenn Sie ein neues Paket definieren (siehe Pakete definieren), werden Sie sich vermutlich einige Zeit mit der Fehlersuche beschäftigen und die Erstellung so lange anpassen, bis sie funktioniert. Dazu müssen Sie die Erstellungsbefehle selbst in einer Umgebung benutzen, die der, die der Erstellungsdaemon aufbaut, so ähnlich wie möglich ist.

Das Erste, was Sie dafür tun müssen, ist die Befehlszeilenoption --keep-failed oder -K von guix build einzusetzen, wodurch Verzeichnisbäume fehlgeschlagener Erstellungen in /tmp oder dem von Ihnen als TMPDIR ausgewiesenen Verzeichnis erhalten und nicht gelöscht werden (siehe --keep-failed).

Im Anschluss können Sie mit cd in die Verzeichnisse dieses fehlgeschlagenen Erstellungsbaums wechseln und mit source dessen environment-variables-Datei laden, die alle Umgebungsvariablendefinitionen enthält, die zum Zeitpunkt des Fehlschlags der Erstellung galten. Sagen wir, Sie suchen Fehler in einem Paket foo, dann würde eine typische Sitzung so aussehen:

$ guix build foo -K
… Erstellung schlägt fehl
$ cd /tmp/guix-build-foo.drv-0
$ source ./environment-variables
$ cd foo-1.2

Nun können Sie Befehle (fast) so aufrufen, als wären Sie der Daemon, und Fehlerursachen in Ihrem Erstellungsprozess ermitteln.

Manchmal passiert es, dass zum Beispiel die Tests eines Pakets erfolgreich sind, wenn Sie sie manuell aufrufen, aber scheitern, wenn der Daemon sie ausführt. Das kann passieren, weil der Daemon Erstellungen in isolierten Umgebungen („Containern“) durchführt, wo, anders als in der obigen Umgebung, kein Netzwerkzugang möglich ist, /bin/sh nicht exisiert usw. (siehe Einrichten der Erstellungsumgebung).

In solchen Fällen müssen Sie den Erstellungsprozess womöglich aus einer zu der des Daemons ähnlichen isolierten Umgebung heraus ausprobieren:

$ guix build -K foo
…
$ cd /tmp/guix-build-foo.drv-0
$ guix shell --no-grafts -C -D foo strace gdb
[env]# source ./environment-variables
[env]# cd foo-1.2

Hierbei erzeugt guix shell -C eine isolierte Umgebung und öffnet darin eine Shell (siehe guix shell aufrufen). Der Teil mit strace gdb fügt die Befehle strace und gdb zur isolierten Umgebung hinzu, die Sie gut gebrauchen können, während Sie Fehler suchen. Wegen der Befehlszeilenoption --no-grafts bekommen Sie haargenau dieselbe Umgebung ohne veredelte Pakete (siehe Sicherheitsaktualisierungen für mehr Informationen zu Veredelungen).

Um der isolierten Umgebung des Erstellungsdaemons noch näher zu kommen, können wir /bin/sh entfernen:

[env]# rm /bin/sh

(Keine Sorge, das ist harmlos: All dies passiert nur in der zuvor von guix shell erzeugten Wegwerf-Umgebung.)

Der Befehl strace befindet sich wahrscheinlich nicht in Ihrem Suchpfad, aber wir können ihn so benutzen:

[env]# $GUIX_ENVIRONMENT/bin/strace -f -o log make check

Auf diese Weise haben Sie nicht nur die Umgebungsvariablen, die der Daemon benutzt, nachgebildet, sondern lassen auch den Erstellungsprozess in einer isolierten Umgebung ähnlich der des Daemons laufen.


Vorige: Zusätzliche Erstellungsoptionen, Nach oben: Aufruf von guix build   [Inhalt][Index]