Vorige: Zusätzliche Erstellungsoptionen, Nach oben: Aufruf von guix build
[Inhalt][Index]
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]