Lua ist eine einfache, aber dennoch sehr mächtige Scriptsprache (siehe http://www.lua.org). Die meisten Funktionen, in denen LiveConfig mit anderen Programmen kommuniziert oder Konfigurationsdateien erzeugt, sind in Lua programmiert. Alle Lua-Programme liegen LiveConfig im Quelltext bei, somit sind Anpassungen an spezielle Anforderungen relativ einfach.

8.2.1. Organisation und Funktionsweise

Die Lua-Programme liegen im Verzeichnis <library_path>/lua/ (der library_path kann über die LiveConfig-Konfigurationsdatei verändert werden); üblicherweise ist das /usr/lib/liveconfig/lua/. Sowohl beim LiveConfig Server als auch beim LiveConfig Client werden alle Lua-Programme installiert (der Server enthält ja praktisch einen integrierten LiveConfig-Client zur Steuerung des lokalen Systems).

Beim Start von LiveConfig werden mehrere Threads für die Systemverwaltung gestartet; jeder davon enthält eine eigene Lua-Umgebung. In jeder Lua-Umgebung werden zuerst die internen Bibliotheksfunktionen registriert (z.B. LC.expect, LC.sys, u.v.m.), und anschließend das Programm liveconfig.lua ausgeführt. Dieses lädt alle restlichen, in Lua programmierten Module nach (z.B. LC.web, LC.dns, etc.). Außerdem prüft dieses, ob eine Datei namens custom.lua existiert (s.u.). Falls ja, wird dieses ebenfalls geladen und ausgeführt.

Tritt bei diesem Ladevorgang irgendwo ein Fehler auf, dann bricht LiveConfig an dieser Stelle mit einer Fehlermeldung ab. Außerdem dürfen auch keine Bildschirmausgaben (print()) während der Initialisierung erfolgen.

Platz für Änderungen/Erweiterungen: custom.lua

Eigene Erweiterungen, die beim Start der Lua-Umgebung berücksichtigt werden sollen, sollten idealerweise in die Datei custom.lua aufgenommen werden. Standardmäßig existiert diese Datei nicht; gleichzeitig wird diese bei eventuellen Updates/Upgrades von LiveConfig auch nicht angerührt.

Bei Updates von LiveConfig ist es grundsätzlich möglich (und sogar recht wahrscheinlich), dass auch die mitgelieferten Lua-Programme aktualisiert werden. Sollten Sie daran eventuelle Änderungen vorgenommen haben, gehen diese dabei verloren. Daher wird empfohlen, dass Sie Ihre eigenen Modifikationen ausschließlich über die Datei custom.lua verwalten.

Sollten Sie Änderungen an den von LiveConfig mitgelieferten Lua-Programmen vornehmen, kann selbstverständlich keine Gewährleistung für deren Korrektheit übernommen werden. Prüfen Sie eigene Funktionen bitte entsprechend sorgfältig, bevor Sie diese produktiv einsetzen!

Nach Änderungen an der Datei custom.lua oder irgend einem anderen Lua-Script muss LiveConfig neu gestartet werden, damit die Änderungen wirksam werden.

Für das Testen eigener Lua-Programme dient lclua, welches ebenfalls sowohl dem LiveConfig-Client als auch dem Server beiliegt. Dieses enthält einen Lua-Interpreter, und stellt gleichzeitig alle Bibliotheks-Funktionen von LiveConfig zur Verfügung.

8.2.3. Programmbeispiel

Wenn Sie beispielsweise die Erkennung der Linux-Distribution anpassen möchten, könnte die Datei custom.lua so aussehen:

-- Namespace "MY" einführen:
MY = { }

-- Original-Funktion "LC.distribution.detect" merken
MY.orig_detect = LC.distribution.detect

-- Funktion zur Betriebssystem-Erkennung umbiegen:
function LC.distribution.detect()
  if (LC.fs.is_file("/etc/exampLinux")) then
    -- wir haben ein "ExampleLinux"...
    LC.distribution.name        = "ExampLinux"
    LC.distribution.codename    = "example"
    LC.distribution.family      = "Debian"
    LC.distribution.version     = "1.0"
    LC.distribution.description = "Example Linux 1.0 (example)"
    return true
  else
    -- Original-Funktion zur Betriebssystem-Erkennung aufrufen:
    return MY.orig_detect()
  end
end

8.2.4. Lua-Referenz

In der nachfolgenden Referenz sind alle Lua-Module beschrieben. LiveConfig verwendet für alle bereitgestellten Module und Bibliotheksfunktionen den Namespace-Präfix LC.