LuCI: Nur für Eingeweihte

Auch auf die Gefahr hin, daß ich mal wieder bei FLOSS-Aktivisten anecke: Lua/LuCI ist aus meiner Sicht eine Ausgeburt der Hölle.

Normalssterbliche werden mit Lua/LuCI bestenfalls auf der UI-Ebene Berührung gehabt haben — und das ist aus meiner Sicht auch besser so.

Nun, was ist »LuCI« überhaupt?

LuCI was founded in March 2008 as “FFLuCI” as part of the efforts to create a port of the Freifunk-Firmware from OpenWrt? Whiterussian to Kamikaze.

The initial reason for this project was the absence of a free, clean, extensible and easily maintainable web user interface for embedded devices. While most similar configuration interfaces make heavy use of the Shell-scripting language LuCI uses the Lua programming language and splits up the interface into logical parts like models and views, uses object-oriented libraries and templating. That ensures a higher performance, smaller installation size, faster runtimes and what is even more important: better maintainability.

Meanwhile LuCI evolved from a MVC-Webframework to a collection of several libraries, applications and user interfaces with general purpose for Lua programmers while the focus still remains on the web user interface which also became an official part of OpenWrt? Kamikaze.

LuCI is an open and independent project. Everyone is welcome to contribute.

Oder, zusammengefaßt: LuCI ist eine, aus den Anfängen der »Freifunk-Firmware« stammende Entwicklung eines »einfachen« Benutzerinterfaces für »Embedded Devices«, also schwachbrüstige Systeme, mit dem Fokus auf OpenWRT. Wer heute mit einem (WLAN-) Router interagiert, auf dem OpenWRT in der einen oder anderen Form läuft, wird die Konfiguration per Web-UI höchstwahrscheinlich über LuCI im Hintergrund machen.

Alles gut, alles schön. Mein Problem mit LuCI ist, daß ich keine Anleitung »LuCI for PHP/Perl/C-Coders« finde. Und daß LuCI vorzugweise irreführende, jedenfalls nicht hilfreiche, Fehlermeldungen schmeißt:

/usr/lib/lua/luci/dispatcher.lua:190: Failed to execute cbi dispatcher target for entry '/gluon-config-mode/wizard'.
The called action terminated with an exception:
/usr/lib/lua/luci/model/uci.lua:50: bad argument #2 to 'foreach' (string expected, got nil)
stack traceback:
	[C]: in function 'assert'
	/usr/lib/lua/luci/dispatcher.lua:190: in function 'dispatch'
	/usr/lib/lua/luci/dispatcher.lua:63: in function 

Weder an dispatcher.lua noch uci.lua habe ich was geändert. Das Problem liegt, sehr wahrscheinlich, an Dateien unterhalb /lib/gluon/config-mode/ — aber meine eigene Glaskugel ist beim Tuner und LuCI liefert keine mit :(

Ich verstehe wirklich nicht, warum sich vernunftbegabte Wesen so einen Scheiß antun. Dagegen sind Java-Tracebacks ja informativ. Und ich hatte ja alles lauffähig, wie es sollte — dann kam aber eine dämliche Eigenart des uci-Moduls von LuCI zum tragen, welches augenscheinlich willkürlich Daten cached. Hintergrund: ich habe eine .lua-Seite, aus der ich ein Shellskript starte, welches per »uci set«, »uci save« und »uci commit« Konfigurationsparameter ändert. Doof nur: lese ich via luci.model.uci.cursor() dann die Daten neu ein — bekomme ich irgendwelche alten Stände, nicht aber das, was im Flash/auf Platte aktuell steht.

Vollhonks. Gut, sicher honoriert mein Code keine Ideen hinter LuCI. Was primär an besagtem Fehlen zielgruppenorientierter Dokumentation liegt. Ich erkämpfe seit einem Jahr mittels try & error mir meinen Weg, und jeden Tag habe ich mehr den Eindruck, daß LuCI mit Feuer bekämpft gehört.

An und für sich möchte ich die FLOSS-Arbeit ja nicht diskreditieren. Aber ich muß hier mal meinen Frust als »Quereinsteiger« loswerden, denn LuCI macht es solchen IMHO alles andere als leicht. Lua finde ich konzeptionell schon schwierig, habe aber, denke ich, mich arrangiert. LuCI, und CBI, aber, Hölle, Nein! Die Ideen mögen »smart« sein — die Fehlermeldungen sind für’n Arsch. Verschiedenste Fehler führen zu willkürlichem Fail irgendwo; im Grunde kann man LuCI nur debuggen, in dem man nach *jeder* Änderung an einer Zeile ein neues Binary baut, mittles automatisierter Tests testet und erst dann weitere Änderungen am Code zuläßt.

Insofern keine Ahnung, aus welchem Loch im Raum-Zeit-Kontinuum es gefallen ist; nachtrauern würde ich LuCI nicht, sollte es vom Planeten eliminiert werden.

Ja, das mußte jetzt mal raus.