Nächste: , Vorige: , Nach oben: Systemkonfiguration   [Inhalt][Index]


8.14 guix system aufrufen

Sobald Sie eine Betriebssystemdeklaration geschrieben haben, wie wir sie in den vorangehenden Abschnitten gesehen haben, kann diese instanziiert werden, indem Sie den Befehl guix system aufrufen. Zusammengefasst:

guix system OptionenAktion Datei

Datei muss der Name einer Datei sein, in der eine Betriebssystemdeklaration als operating-system-Objekt steht. Aktion gibt an, wie das Betriebssystem instanziiert wird. Derzeit werden folgende Werte dafür unterstützt:

search

Verfügbare Diensttypendefinitionen anzeigen, die zum angegebenen regulären Ausdruck passen, sortiert nach Relevanz:

$ guix system search console
name: console-fonts
location: gnu/services/base.scm:806:2
extends: shepherd-root
description: Install the given fonts on the specified ttys (fonts are per
+ virtual console on GNU/Linux).  The value of this service is a list of
+ tty/font pairs.  The font can be the name of a font provided by the `kbd'
+ package or any valid argument to `setfont', as in this example:
+
+      '(("tty1" . "LatGrkCyr-8x16")
+        ("tty2" . (file-append
+                      font-tamzen
+                      "/share/kbd/consolefonts/TamzenForPowerline10x20.psf"))
+        ("tty3" . (file-append
+                      font-terminus
+                      "/share/consolefonts/ter-132n"))) ; for HDPI
relevance: 9

name: mingetty
location: gnu/services/base.scm:1190:2
extends: shepherd-root
description: Provide console login using the `mingetty' program.
relevance: 2

name: login
location: gnu/services/base.scm:860:2
extends: pam
description: Provide a console log-in service as specified by its
+ configuration value, a `login-configuration' object.
relevance: 2

…

Wie auch bei guix package --search wird das Ergebnis im recutils-Format geliefert, so dass es leicht ist, die Ausgabe zu filtern (siehe GNU recutils databases in Handbuch von GNU recutils).

reconfigure

Das in der Datei beschriebene Betriebssystem erstellen, aktivieren und zu ihm wechseln28.

Anmerkung: Es ist sehr zu empfehlen, guix pull einmal auszuführen, bevor Sie guix system reconfigure zum ersten Mal aufrufen (siehe Aufruf von guix pull). Wenn Sie das nicht tun, könnten Sie nach dem Abschluss von reconfigure eine ältere Version von Guix vorfinden, als Sie vorher hatten.

Dieser Befehl setzt die in der Datei festgelegte Konfiguration vollständig um: Benutzerkonten, Systemdienste, die Liste globaler Pakete, setuid-Programme und so weiter. Der Befehl startet die in der Datei angegebenen Systemdienste, die aktuell nicht laufen; bei aktuell laufenden Diensten wird sichergestellt, dass sie aktualisiert werden, sobald sie das nächste Mal angehalten wurden (z.B. durch herd stop X oder herd restart X).

Dieser Befehl erzeugt eine neue Generation, deren Nummer (wie guix system list-generations sie anzeigt) um eins größer als die der aktuellen Generation ist. Wenn die so nummerierte Generation bereits existiert, wird sie überschrieben. Dieses Verhalten entspricht dem von guix package (siehe Aufruf von guix package).

Des Weiteren wird für den Bootloader ein Menüeintrag für die neue Betriebssystemkonfiguration hinzugefügt, außer die Befehlszeilenoption --no-bootloader wurde übergeben. Bei GRUB werden Einträge für ältere Konfigurationen in ein Untermenü verschoben, so dass Sie auch eine ältere Systemgeneration beim Booten noch hochfahren können, falls es notwendig wird.

Nach Abschluss wird das neue System unter /run/current-system verfügbar gemacht. Das Verzeichnis enthält Provenienz-Metadaten: Dazu gehören die Liste der Kanäle, die benutzt wurden (siehe Kanäle) und die Datei selbst, wenn sie verfügbar ist. Diese Informationen sind nützlich, falls Sie später inspizieren möchten, wie diese spezielle Generation erstellt wurde.

Tatsächlich können Sie, wenn wir annehmen, dass die Datei eigenständig ist, später die Generation n Ihres Betriebssystems neu erstellen, indem Sie dies ausführen:

guix time-machine \
  -C /var/guix/profiles/system-n-link/channels.scm -- \
  system reconfigure \
  /var/guix/profiles/system-n-link/configuration.scm

Sie können sich das als eine Art eingebaute Versionskontrolle vorstellen! Ihr System ist nicht nur ein binäres Erzeugnis: Es enthält seinen eigenen Quellcode. Siehe provenance-service-type für mehr Informationen zur Provenienzverfolgung.

switch-generation

Zu einer bestehenden Systemgeneration wechseln. Diese Aktion wechselt das Systemprofil atomar auf die angegebene Systemgeneration. Hiermit werden auch die bestehenden Menüeinträge des Bootloaders umgeordnet. Der Menüeintrag für die angegebene Systemgeneration wird voreingestellt und die Einträge der anderen Generationen werden in ein Untermenü verschoben, sofern der verwendete Bootloader dies unterstützt. Das nächste Mal, wenn das System gestartet wird, wird die hier angegebene Systemgeneration hochgefahren.

Der Bootloader selbst wird durch diesen Befehl nicht neu installiert. Es wird also lediglich der bereits installierte Bootloader mit einer neuen Konfigurationsdatei benutzt werden.

Die Zielgeneration kann ausdrücklich über ihre Generationsnummer angegeben werden. Zum Beispiel würde folgender Aufruf einen Wechsel zur Systemgeneration 7 bewirken:

guix system switch-generation 7

Die Zielgeneration kann auch relativ zur aktuellen Generation angegeben werden, in der Form +N oder -N, wobei +3 zum Beispiel „3 Generationen weiter als die aktuelle Generation“ bedeuten würde und -1 „1 Generation vor der aktuellen Generation“ hieße. Wenn Sie einen negativen Wert wie -1 angeben, müssen Sie -- der Befehlszeilenoption voranstellen, damit die negative Zahl nicht selbst als Befehlszeilenoption aufgefasst wird. Zum Beispiel:

guix system switch-generation -- -1

Zur Zeit bewirkt ein Aufruf dieser Aktion nur einen Wechsel des Systemprofils auf eine bereits existierende Generation und ein Umordnen der Bootloader-Menüeinträge. Um die Ziel-Systemgeneration aber tatsächlich zu benutzen, müssen Sie Ihr System neu hochfahren, nachdem Sie diese Aktion ausgeführt haben. In einer zukünftigen Version von Guix wird diese Aktion einmal dieselben Dinge tun, wie reconfigure, also etwa Dienste aktivieren und deaktivieren.

Diese Aktion schlägt fehl, wenn die angegebene Generation nicht existiert.

roll-back

Zur vorhergehenden Systemgeneration wechseln. Wenn das System das nächste Mal hochgefahren wird, wird es die vorhergehende Systemgeneration benutzen. Dies ist die Umkehrung von reconfigure und tut genau dasselbe, wie switch-generation mit dem Argument -1 aufzurufen.

Wie auch bei switch-generation müssen Sie derzeit, nachdem Sie diese Aktion aufgerufen haben, Ihr System neu starten, um die vorhergehende Systemgeneration auch tatsächlich zu benutzen.

delete-generations

Systemgenerationen löschen, wodurch diese zu Kandidaten für den Müllsammler werden (siehe Aufruf von guix gc für Informationen, wie Sie den „Müllsammler“ laufen lassen).

Es funktioniert auf die gleiche Weise wie guix package --delete-generations (siehe --delete-generations). Wenn keine Argumente angegeben werden, werden alle Systemgenerationen außer der aktuellen gelöscht:

guix system delete-generations

Sie können auch eine Auswahl treffen, welche Generationen Sie löschen möchten. Das folgende Beispiel hat die Löschung aller Systemgenerationen zur Folge, die älter als zwei Monate sind:

guix system delete-generations 2m

Wenn Sie diesen Befehl ausführen, wird automatisch der Bootloader mit einer aktualisierten Liste von Menüeinträgen neu erstellt — z.B. werden im Untermenü für die „alten Generationen“ in GRUB die gelöschten Generationen nicht mehr aufgeführt.

build

Die Ableitung des Betriebssystems erstellen, einschließlich aller Konfigurationsdateien und Programme, die zum Booten und Starten benötigt werden. Diese Aktion installiert jedoch nichts davon.

init

In das angegebene Verzeichnis alle Dateien einfügen, um das in der Datei angegebene Betriebssystem starten zu können. Dies ist nützlich bei erstmaligen Installationen von „Guix System“. Zum Beispiel:

guix system init my-os-config.scm /mnt

Hiermit werden alle Store-Objekte nach /mnt kopiert, die von der in my-os-config.scm angegebenen Konfiguration vorausgesetzt werden. Dazu gehören Konfigurationsdateien, Pakete und so weiter. Auch andere essenzielle Dateien, die auf dem System vorhanden sein müssen, damit es richtig funktioniert, werden erzeugt — z.B. die Verzeichnisse /etc, /var und /run und die Datei /bin/sh.

Dieser Befehl installiert auch den Bootloader auf dem in my-os-config angegebenen Ziel, außer die Befehlszeilenoption --no-bootloader wurde übergeben.

vm

Eine virtuelle Maschine (VM) erstellen, die das in der Datei deklarierte Betriebssystem enthält, und ein Skript liefern, das diese virtuelle Maschine startet.

Anmerkung: Die Aktion vm sowie solche, die weiter unten genannt werden, können KVM-Unterstützung im Kernel Linux-libre ausnutzen. Insbesondere sollte, wenn die Maschine Hardware-Virtualisierung unterstützt, das entsprechende KVM-Kernelmodul geladen sein und das Gerät /dev/kvm muss dann existieren und dem Benutzer und den Erstellungsbenutzern des Daemons müssen Berechtigungen zum Lesen und Schreiben darauf gegeben werden (siehe Einrichten der Erstellungsumgebung).

An das Skript übergebene Argumente werden an QEMU weitergereicht, wie Sie am folgenden Beispiel sehen können. Damit würde eine Netzwerkverbindung aktiviert und 1 GiB an RAM für die emulierte Maschine angefragt:

$ /gnu/store/…-run-vm.sh -m 1024 -smp 2 -net user,model=virtio-net-pci

Die virtuelle Maschine verwendet denselben Store wie das Wirtssystem.

Mit den Befehlszeilenoptionen --share und --expose können weitere Dateisysteme zwischen dem Wirtssystem und der VM geteilt werden: Der erste Befehl gibt ein mit Schreibzugriff zu teilendes Verzeichnis an, während der letzte Befehl nur Lesezugriff auf das gemeinsame Verzeichnis gestattet.

Im folgenden Beispiel wird eine virtuelle Maschine erzeugt, die auf das Persönliche Verzeichnis des Benutzers nur Lesezugriff hat, wo das Verzeichnis /austausch aber mit Lese- und Schreibzugriff dem Verzeichnis $HOME/tmp auf dem Wirtssystem zugeordnet wurde:

guix system vm my-config.scm \
   --expose=$HOME --share=$HOME/tmp=/austausch

Für GNU/Linux ist das vorgegebene Verhalten, direkt in den Kernel zu booten, wodurch nur ein sehr winziges „Disk-Image“ (eine Datei mit einem Abbild des Plattenspeichers der virtuellen Maschine) für das Wurzeldateisystem nötig wird, weil der Store des Wirtssystems davon eingebunden werden kann.

Mit der Befehlszeilenoption --full-boot wird erzwungen, einen vollständigen Bootvorgang durchzuführen, angefangen mit dem Bootloader. Dadurch wird mehr Plattenplatz verbraucht, weil dazu ein Disk-Image mindestens mit dem Kernel, initrd und Bootloader-Datendateien erzeugt werden muss. Mit der Befehlszeilenoption --image-size kann die Größe des Disk-Images angegeben werden.

vm-image
disk-image
docker-image

Ein eigenständiges Disk-Image für eine virtuelle Maschine, ein allgemeines Disk-Image oder ein Docker-Abbild für das in der Datei deklarierte Betriebssystem liefern. Das vorgegebene Verhalten von guix system ist, die Größe des Images zu schätzen, die zum Speichern des Systems benötigt wird, aber Sie können mit der Befehlszeilenoption --image-size selbst Ihre gewünschte Größe bestimmen. Docker-Abbilder werden aber so erstellt, dass sie gerade nur das enthalten, was für sie nötig ist, daher wird die Befehlszeilenoption --image-size im Fall von docker-image ignoriert.

Sie können den Dateisystemtyp für das Wurzeldateisystem mit der Befehlszeilenoption --file-system-type festlegen. Vorgegeben ist, ext4 zu verwenden.

Wenn Sie ein vm-image anfordern, ist das gelieferte Disk-Image im qcow2-Format, was vom QEMU-Emulator effizient benutzt werden kann. Im Abschnitt Guix in einer VM starten finden Sie mehr Informationen, wie Sie das Disk-Image in einer virtuellen Maschine laufen lassen.

Wenn Sie ein disk-image anfordern, wird ein rohes Disk-Image hergestellt; es kann zum Beispiel auf einen USB-Stick kopiert werden. Angenommen /dev/sdc ist das dem USB-Stick entsprechende Gerät, dann kann das Disk-Image mit dem folgenden Befehls darauf kopiert werden:

# dd if=$(guix system disk-image my-os.scm) of=/dev/sdc

Wenn Sie ein docker-image anfordern, wird ein Abbild für Docker hergestellt. Guix erstellt das Abbild von Grund auf und nicht aus einem vorerstellten Docker-Basisabbild heraus, daher enthält es exakt das, was Sie in der Konfigurationsdatei für das Betriebssystem angegeben haben. Sie können das Abbild dann wie folgt laden und einen Docker-Container damit erzeugen:

image_id="`docker load < guix-system-docker-image.tar.gz`"
container_id="`docker create $image_id`"
docker start $container_id

Dieser Befehl startet einen neuen Docker-Container aus dem angegebenen Abbild. Damit wird das Guix-System auf die normale Weise hochgefahren, d.h. zunächst werden alle Dienste gestartet, die Sie in der Konfiguration des Betriebssystems angegeben haben. Sie können eine interaktive Shell in dieser isolierten Umgebung bekommen, indem Sie docker exec benutzen:

docker exec -ti $container_id /run/current-system/profile/bin/bash --login

Je nachdem, was Sie im Docker-Container ausführen, kann es nötig sein, dass Sie ihn mit weitergehenden Berechtigungen ausstatten. Wenn Sie zum Beispiel Software mit Guix innerhalb des Docker-Containers erstellen wollen, müssen Sie an docker create die Befehlszeilenoption --privileged übergeben.

container

Liefert ein Skript, um das in der Datei deklarierte Betriebssystem in einem Container auszuführen. Mit Container wird hier eine Reihe ressourcenschonender Isolierungsmechanismen im Kernel Linux-libre bezeichnet. Container beanspruchen wesentlich weniger Ressourcen als vollumfängliche virtuelle Maschinen, weil der Kernel, Bibliotheken in gemeinsam nutzbaren Objektdateien („Shared Objects“) sowie andere Ressourcen mit dem Wirtssystem geteilt werden können. Damit ist also eine „dünnere“ Isolierung möglich.

Zur Zeit muss das Skript als Administratornutzer „root“ ausgeführt werden, damit darin mehr als nur ein einzelner Benutzer und eine Benutzergruppe unterstützt wird. Der Container teilt seinen Store mit dem Wirtssystem.

Wie bei der Aktion vm (siehe guix system vm) können zusätzlich weitere Dateisysteme zwischen Wirt und Container geteilt werden, indem man die Befehlszeilenoptionen --share und --expose verwendet:

guix system container my-config.scm \
   --expose=$HOME --share=$HOME/tmp=/austausch

Anmerkung: Diese Befehlszeilenoption funktioniert nur mit Linux-libre 3.19 oder neuer.

Unter den Optionen können beliebige gemeinsame Erstellungsoptionen aufgeführt werden (siehe Gemeinsame Erstellungsoptionen). Des Weiteren kann als Optionen Folgendes angegeben werden:

--expression=Ausdruck
-e Ausdruck

Als Konfiguration des Betriebssystems das „operating-system“ betrachten, zu dem der Ausdruck ausgewertet wird. Dies ist eine Alternative dazu, die Konfiguration in einer Datei festzulegen. Hiermit wird auch das Installationsabbild des Guix-Systems erstellt, siehe Ein Abbild zur Installation erstellen).

--system=System
-s System

Versuchen, für das angegebene System statt für denselben Systemtyp wie auf dem Wirtssystem zu erstellen. Dies funktioniert wie bei guix build (siehe Aufruf von guix build).

--derivation
-d

Liefert den Namen der Ableitungsdatei für das angegebene Betriebssystem, ohne dazu etwas zu erstellen.

--save-provenance

Wie zuvor erläutert, speichern guix system init und guix system reconfigure Provenienzinformationen immer über einen dedizierten Dienst (siehe provenance-service-type). Andere Befehle tun das nach Voreinstellung jedoch nicht. Wenn Sie zum Beispiel ein Abbild für eine virtuelle Maschine mitsamt Provenienzinformationen erzeugen möchten, können Sie dies ausführen:

guix system vm-image --save-provenance config.scm

Auf diese Weise wird im erzeugten Abbild in Prinzip „sein eigener Quellcode eingebettet“, in Form von Metadaten in /run/current-system. Mit diesen Informationen kann man das Abbild neu erzeugen, um sicherzugehen, dass es tatsächlich das enthält, was davon behauptet wird. Man könnte damit auch eine Abwandlung des Abbilds erzeugen.

--file-system-type=Typ
-t Typ

Für die Aktion disk-image wird hiermit ein Dateisystem des angegebenen Typs im Abbild bzw. Disk-Image erzeugt.

Wird diese Befehlszeilenoption nicht angegeben, so benutzt guix system als Dateisystemtyp ext4.

--file-system-type=iso9660 erzeugt ein Abbild im Format ISO-9660, was für das Brennen auf CDs und DVDs geeignet ist.

--image-size=Größe

Für die Aktionen vm-image und disk-image wird hiermit festgelegt, dass ein Abbild der angegebenen Größe erstellt werden soll. Die Größe kann als Zahl die Anzahl Bytes angeben oder mit einer Einheit als Suffix versehen werden (siehe size specifications in GNU Coreutils).

Wird keine solche Befehlszeilenoption angegeben, berechnet guix system eine Schätzung der Abbildgröße anhand der Größe des in der Datei deklarierten Systems.

--network
-N

Für die Aktion container dürfen isolierte Umgebungen (auch bekannt als „Container“) auf das Wirtsnetzwerk zugreifen, d.h. es wird kein Netzwerknamensraum für sie erzeugt.

--root=Datei
-r Datei

Die Datei zu einer symbolischen Verknüpfung auf das Ergebnis machen und als Müllsammlerwurzel registrieren.

--skip-checks

Die Konfiguration nicht vor der Installation zur Sicherheit auf Fehler prüfen.

Das vorgegebene Verhalten von guix system init und guix system reconfigure sieht vor, die Konfiguration zur Sicherheit auf Fehler hin zu überprüfen, die ihr Autor übersehen haben könnte: Es wird sichergestellt, dass die in der operating-system-Deklaration erwähnten Dateisysteme tatsächlich existieren (siehe Dateisysteme) und dass alle Linux-Kernelmodule, die beim Booten benötigt werden könnten, auch im initrd-modules-Feld aufgeführt sind (siehe Initiale RAM-Disk). Mit dieser Befehlszeilenoption werden diese Tests allesamt übersprungen.

--on-error=Strategie

Beim Auftreten eines Fehlers beim Einlesen der Datei die angegebene Strategie verfolgen. Als Strategie dient eine der Folgenden:

nothing-special

Nichts besonderes; der Fehler wird kurz gemeldet und der Vorgang abgebrochen. Dies ist die vorgegebene Strategie.

backtrace

Ebenso, aber zusätzlich wird eine Rückverfolgung des Fehlers (ein „Backtrace“) angezeigt.

debug

Nach dem Melden des Fehlers wird der Debugger von Guile zur Fehlersuche gestartet. Von dort können Sie Befehle ausführen, zum Beispiel können Sie sich mit ,bt eine Rückverfolgung („Backtrace“) anzeigen lassen und mit ,locals die Werte lokaler Variabler anzeigen lassen. Im Allgemeinen können Sie mit Befehlen den Zustand des Programms inspizieren. Siehe Debug Commands in GNU Guile Reference Manual für eine Liste verfügbarer Befehle zur Fehlersuche.

Sobald Sie Ihre Guix-Installation erstellt, konfiguriert, neu konfiguriert und nochmals neu konfiguriert haben, finden Sie es vielleicht hilfreich, sich die auf der Platte verfügbaren — und im Bootmenü des Bootloaders auswählbaren — Systemgenerationen auflisten zu lassen:

describe

Die aktuelle Systemgeneration beschreiben: ihren Dateinamen, den Kernel und den benutzten Bootloader etc. sowie Provenienzinformationen, falls verfügbar.

list-generations

Eine für Menschen verständliche Zusammenfassung jeder auf der Platte verfügbaren Generation des Betriebssystems ausgeben. Dies ähnelt der Befehlszeilenoption --list-generations von guix package (siehe Aufruf von guix package).

Optional kann ein Muster angegeben werden, was dieselbe Syntax wie guix package --list-generations benutzt, um damit die Liste anzuzeigender Generationen einzuschränken. Zum Beispiel zeigt der folgende Befehl Generationen an, die bis zu 10 Tage alt sind:

$ guix system list-generations 10d

Der Befehl guix system hat sogar noch mehr zu bieten! Mit folgenden Unterbefehlen wird Ihnen visualisiert, wie Ihre Systemdienste voneinander abhängen:

extension-graph

Im Dot-/Graphviz-Format auf die Standardausgabe den Diensterweiterungsgraphen des in der Datei definierten Betriebssystems ausgeben (siehe Dienstkompositionen für mehr Informationen zu Diensterweiterungen).

Der Befehl:

$ guix system extension-graph file | dot -Tpdf > services.pdf

erzeugt eine PDF-Datei, in der die Erweiterungsrelation unter Diensten angezeigt wird.

shepherd-graph

Im Dot-/Graphviz-Format auf die Standardausgabe den Abhängigkeitsgraphen der Shepherd-Dienste des in der Datei definierten Betriebssystems ausgeben. Siehe Shepherd-Dienste für mehr Informationen sowie einen Beispielgraphen.


Fußnoten

(28)

Diese Aktion (und die dazu ähnlichen Aktionen switch-generation und roll-back) sind nur auf Systemen nutzbar, auf denen „Guix System“ bereits läuft.


Nächste: , Vorige: , Nach oben: Systemkonfiguration   [Inhalt][Index]