Apache 2.4 mit Mod-Lua

Der Mond ist aufgegangen

Lua ist eine kleine, schlanke und schnelle Skriptsprache – ideal also eigentlich, um auf einem Webserver zu werkeln. Doch erst die brandneue Version 2.4 des Apache Webservers liefert offiziell ein passendes Modul mit. Das hat nicht nur ein paar kleinere Macken, sondern es durchaus auch in sich.
NAS-Speicher mit einer Kapazität von einigen Dutzend Terabyte, wie sie sich für mittelständische Anwender eignen, nimmt die ADMIN-Redaktion in der Ausgabe ... (mehr)

Die Skriptsprache Lua entstand bereits 1993 an der Universität von Rio de Janeiro und steht ab Version 5 unter der MIT-Lizenz [1]. Der nur wenige Kbyte (!) kleine Interpreter ist extrem schnell und lässt sich über eine C-Schnittstelle bequem an andere Programme anflanschen. Aus diesem Grund war und ist Lua vor allem in der Spielebranche äußerst beliebt. Mittlerweile hat Lua aber auch seriöse Anwendungen erobert, so werkelt es etwa in Adobes Lightroom oder Wireshark. Lua selbst ist eine imperative und funktionale Sprache, eine objektorientierte Programmierung ist in Ansätzen möglich. Die Syntax kommt so mit wenigen Schlüsselwörtern aus, im Gegenzug wirken Lua-Programme etwas kryptischer als beispielsweise ihre PHP-Pendants.

Mit all diesen Eigenschaften drängt sich Lua förmlich auch als Skriptsprache für Webserver auf. So verwundert es wenig, dass immer mal wieder entsprechende Module für Apache entstanden. Das ambitionierte Kepler-Projekt ging sogar noch einen Schritt weiter [2]. Mit einem Haufen selbst entwickelter Werkzeuge, Bibliotheken und Standards sollte man in Lua ganz einfach komplette Web-Anwendungen schreiben können. Eines der Ergebnisse war Xavante, ein in Lua geschriebener Webserver [4]. Seit 2010 liegt das Kepler-Projekt jedoch auf Eis.

Auch die vielen Apache-Module schafften nie den Sprung in das offizielle Apache-Paket und verschwanden schnell wieder von der Bildfläche – mit einer Ausnahme. 2006 begann Brian McCallister die Arbeit an einem Modul mit dem etwas kuriosen Namen »mod_wombat« . Es flanscht den Lua-Interpreter an den Apache-Webserver an, sodass dieser Lua-Skripte starten und ausführen kann – ganz analog zu »mod_php« und »mod_perl« . Obwohl die Weiterentwicklung über die Jahre eher schleppend verlief, wanderte McCallisters Modul ganz offiziell in den neuen Apache 2.4. Im Zuge dessen benannten es seine Entwickler in »mod_lua« um. Dummerweise hießen so jedoch auch schon viele ausgemusterte Apache-Module. Wer nach einer Dokumentation im Internet sucht, stolpert folglich über viele unbrauchbare Altlasten.

Work in progress

Und es gibt noch einen Haken: »mod_lua« gehört zwar zum Lieferumfang von Apache, ist aber immer noch als experimentell gekennzeichnet. Es eignet sich somit nicht für den produktiven Betrieb. Nichtsdestotrotz arbeitet es bereits durchweg stabil und lockt mit der Einbindung von Hooks – folglich lohnt durchaus schon jetzt ein Blick.

Wer »mod_lua« nutzen möchte, muss das Modul bereits bei der Übersetzung des Apache-Servers miterstellen lassen. Dazu benötigt man wiederum die Lua-Bibliothek in der Version 5.1 einschließlich der zugehörigen Entwicklerdateien. Unter Ubuntu heißen die entsprechenden Pakete »lua5.1« und »liblua5.1.0-dev« , Open-Suse-Besitzer spielen hingegen »lua-devel« und »liblua5_1« ein.

Liegt Lua auf der Festplatte, wendet man sich dem Quellcode des Apache-Webservers zu. Das beiliegende »configure« startet man mit dem zusätzlichen Parameter »--enable-lua« . Alternativ kann man auch hinter »--enable-mods-shared=« noch »lua« ergänzen oder gleich »--enable-mods-shared=all« verwenden.

Abkürzung XAMPP

Wer keine Erfahrung mit dem Übersetzungsprozess hat, aber »mod_lua« unbedingt in einer kleinen Testinstallation auf seinem eigenen Linux-PC ausprobieren möchte, findet im Kasten "Schnellinstallation" eine kurze Anleitung. Die kommende Version 1.8.0 des für solche Zwecke beliebten Komplettpakets XAMPP wird zwar Apache 2.4 enthalten, »mod_lua« gab es in der zum Redaktionsschluss verfügbaren zweiten Beta-Version erstaunlicherweise aber nur in der Windows-Variante [4].

Schnellinstallation

Die folgenden Schritte installieren Apache mit »mod_lua« im Unterverzeichnis »httpd« des eigenen Heimatverzeichnisses. Dabei darf kein anderer Webserver laufen.

Nachdem die Lua-Bibliotheken über den Paketmanager eingespielt sind, laden Sie sich von der Homepage des Apache-Webservers das aktuelle Archiv [5] und entpacken es. Unter [6] laden Sie sich die Pakete zu APR und APR-util herunter und entpacken sie im Unterordner »srclib/apr-util« des Apache-Verzeichnisses. Anschließend streichen Sie die Versionsnummer aus den beiden Verzeichnisnamen. Der Inhalt des APR-Archivs liegt dann im Unterordner »srclib/apr« , der aus dem APR-Util-Paket unter »srclib/apr-util« .

Im Verzeichnis mit dem Apache-Quellcode setzen Sie jetzt die folgenden Befehle ab:

./configure --prefix=$HOME/httpd --enable-lua --with-included-apr
make
make install

Am Ende sollte im Verzeichnis »~/httpd/modules« auch das Modul »mod_lua« liegen. Den Webserver startet schließlich:

sudo ~/httpd/bin/apachectl start

Wenn alles geklappt hat, erreichen Sie mit dem Browser unter der URL http://localhost eine Seite mit einer Erfolgsmeldung.

Einen Neustart des Webservers veranlasst:

sudo ~/httpd/bin/apachectl restart

Der folgende Befehl beendet den Apache-Server wieder:

sudo ~/httpd/bin/apachectl stop

Um Apache nach den Tests wieder zu deinstallieren, löschen Sie einfach das Verzeichnis »~/httpd« .

Um das Lua-Modul zu aktivieren, ergänzen Sie in der »httpd.conf« folgende Zeile (wer dem Kasten "Schnellinstallation" gefolgt ist, findet die Datei im Verzeichnis »~/httpd/conf« ):

LoadModule lua_module modules/mod_lua

Mit einer weiteren Zeile darunter können Sie Apache anweisen, alle Dateien mit der Endung ».lua« als Lua-Skripte auszuführen:

AddHandler lua-script .lua

»lua-script« ist ein so genannter Handler, den »mod_lua« bereitstellt. Man kann ihn selbstverständlich wie die übrigen Apache-Handler nutzen.

Nach dem Speichern der geänderten Konfiguration müssen Sie Apache einmal neustarten und können sich dann ans Schreiben von Lua-Skripten machen.

Ein von Apache gestartetes Lua-Skript muss zwingend die Funktion »handle()« anbieten. Diese ruft »mod_lua« auf und übergibt ihr dabei ein Request-Objekt, das die meisten Beispiele »r« nennen:

function handle(r)
 ... mache etwas ...
end

Das Request-Objekt stellt ein paar Methoden bereit, über die man die fertige Seite zusammensetzt beziehungsweise ausgibt. Wie das funktioniert, zeigt Listing 1 mit dem obligatorischen Hello-World-Beispiel. Kommentare beginnen in Lua immer mit zwei Bindestrichen. »r.content_type« ändert zunächst den MIME-Typ des zurückgelieferten Dokuments auf »text/plain« , »r.puts« gibt anschließend die Zeichenkette »Hallo Welt« aus.

Listing 1

"Hello World" mit Lua und mod_lua

01 function handle(r)
02         -- Setzte MIME-Type auf text/plain:
03         r.content_type = "text/plain"
04
05         -- gebe den Text "Hallo Welt" zurück:
06         r:puts("Hallo Welt!")
07 end

Um das Skript zu starten, parken Sie es unter dem Namen »hallo.lua« im Document-Root (wer dem Kasten "Schnellinstallation" gefolgt ist, nimmt das Verzeichnis »~/httpd/htdocs« ). Jetzt können Sie es einfach über den Browser ansteuern, also etwa über die URL http://localhost/hallo.lua.

Sollte sich ein Tippfehler eingeschlichen haben, meldet Apache einen internen Server-Fehler (Nummer 500). Nur in bestimmten Fällen erscheint eine Fehlermeldung des Lua-Interpreters (Abbildung 1). Haben Sie vergessen, den MIME-Type zu setzen, bietet Apache in der Standardkonfiguration sogar an, das Lua-Skript herunterzuladen.

Abbildung 1: Ausschließlich Laufzeitfehler schiebt
comments powered by Disqus

Artikel der Woche

Systeme mit Vamigru verwalten

Auch wer nur kleine Flotten von Linux-Servern verwaltet, freut sich über Werkzeuge, die ihm diese Arbeit erleichtern. Vamigru tritt mit diesem Versprechen an. Wir verraten, was es leistet und wie Sie es in der eigenen Umgebung in Betrieb nehmen. (mehr)
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Container

Wie setzen Sie Container ein?

  • Gar nicht
  • Docker standalone
  • Docker mit Kubernetes
  • Docker mit Swarm
  • Docker mit anderem Management
  • LXC/LXD
  • Rocket
  • CRI-O auf Kubernetes
  • Container auf vSphere
  • Andere (siehe Kommentare auf der Ergebnisseite)

Google+

Ausgabe /2018

Microsite