NixOS und Konfiguration

Die Modulauswertung gerät in unendliche Rekursion

Nix kann einen Konfigurationszyklus nicht auflösen. Prüfe config-abhängige Importe, Selbstbezüge und Argumentzeitpunkt vor dem Umbau von Modulen.

Auf dieser Seite
  1. Symptome und Geltungsbereich
  2. Mögliche Ursachen
  3. Sicher prüfen
  4. Nächste Schritte nach Befund
  5. Quellen und Prüfung
  6. Verwandte Probleme

Symptome und Geltungsbereich

  • Die Auswertung meldet infinite recursion encountered.
  • Der Trace kehrt wiederholt zu imports oder derselben Optionsabhängigkeit zurück.

Betroffene Umgebung

NixOS-Modulauswertung mit Fixpunkt, eigenen Modulen und Flake-specialArgs.

Erkennbare Meldungen (synthetische Beispiele)
error: infinite recursion encountered

Der zugehörige Trace ist nötig; diese Meldung tritt auch außerhalb von NixOS-Modulen auf.

Mögliche Ursachen

Das sind mögliche Erklärungen, keine bestätigte Diagnose. Mehrere unabhängige Fehler können gleichzeitig vorliegen.

  • imports kann nicht von einem config-Wert abhängen, dessen Definition erst das Einsammeln dieser Importe benötigt.
  • Selbstbezügliche Optionsausdrücke oder gegenseitig abgeleitete Modulargumente können ebenfalls Zyklen erzeugen.

Sicher prüfen

Führe jeweils einen Befehl in der passenden Sitzung aus. Lies zuerst die Erklärung. Großgeschriebene Platzhalter brauchen deine Werte; Werkzeuge und Rechte unterscheiden sich je nach Distribution. Die Website zeigt Befehle an und führt sie niemals aus.

Prüfschritt 1

Lies den tatsächlichen Modul-Checkout; konzentriere dich auf Stellen im gespeicherten Auswertungs-Trace.

rg -n 'imports|config\.|_module\.args|specialArgs' /etc/nixos

Ergebnis einordnen: config in gewöhnlichen Werten kann gültig sein; davon gewählte Importe können vor vorhandenen Werten zyklisch werden. specialArgs ist früher verfügbar.

Prüfschritt 2

Ersetze die Datei durch das betroffene Modul; Parsen liest sie ohne Auswertung oder Bau.

nix-instantiate --parse /etc/nixos/configuration.nix

Ergebnis einordnen: Erfolgreiches Parsen bestätigt nur die Grammatik. Es löst keine Importe auf und beweist keinen zyklusfreien Graph.

Nächste Schritte nach Befund

Importauswahl von config unabhängig machen

Wenn imports config abfragt, importiere verfügbare Module statisch und nutze lib.mkIf für bedingte Optionsdefinitionen. Übergib externe Importparameter als bewusst statische Werte durch specialArgs.

Vorsicht: mkIf macht eine config-abhängige Importliste nicht sicher. Übergib nicht die gesamte config erneut über specialArgs.

Wiederherstellung / Rücknahme: Stelle bei unbeabsichtigten Standardwertänderungen die frühere Modulstruktur aus der Versionsverwaltung zurück.

Hat dir dieser Hinweis geholfen?

Hinweis teilen#

Den bestätigten Wertezyklus auflösen

Wenn der Trace zwei gegenseitig abgeleitete Werte zeigt, führe eine unabhängige Eingabe ein. Ersetze die Ableitung einer Option aus ihrem eigenen Endwert durch einen lokalen let-Wert oder eine getrennte Eingabeoption.

Vorsicht: Ändere nur den gefundenen Zyklus. Entfernte unbeteiligte Importe können Funktionen still deaktivieren und den Fehler nur verdecken.

Wiederherstellung / Rücknahme: Stelle ursprüngliche Bindungen und Eingaben zurück; prüfe den Kandidaten ohne Aktivierung vor dem Beibehalten.

Hat dir dieser Hinweis geholfen?

Hinweis teilen#

Quellen und Prüfung

Diese Anleitung basiert auf Originalquellen von Projekten oder Distributionen und wurde am genannten Datum redaktionell geprüft. Das ist eine Quellenprüfung, kein Nachweis einer auf deiner Hardware reproduzierten Lösung. Log-Beispiele sind synthetische Testdaten. Versionsabhängige Details müssen zur installierten Ausgabe passen.