Automatisierte Gemini-Textkonvertierung für Lighttpd

➤ Martin Döring 13. Februar 2021

In meinem letzten Artikel habe ich ein Awk-Script von Omar Polo angepasst, um damit meine Gemini-Text-Seiten nach HTML zu konvertieren:

➤ Gemini Textformat nach HTML umwandeln

Lighttpd-Server installieren und konfigurieren

Inzwischen habe ich auf meinem Arch-Linux-Server einen Lighttpd-Server installiert ...

pacman -S lighttpd

Jetzt sollten wir noch die Konfiguration /etc/lighttpd/lighttpd.conf vom Webserver so anpassen, dass es für uns passt:

# This is a minimal example config
server.port		= 80
server.username		= "http"
server.groupname	= "http"
server.document-root	= "/srv/http"
server.errorlog		= "/var/log/lighttpd/error.log"
dir-listing.activate	= "enable"
index-file.names	= ( "index.html" )
mimetype.assign		= ( ".html" => "text/html" )

In diesem Fall kann der Webserver wirklich nur HTML-Dateien ausliefern, sonst nichts.

Nun starten wir den Webserver und konfigurieren ihn so, dass er auch bei einem Reboot automatisch startet:

systemctl start lighttpd.service
systemctl enable lighttpd.service

Damit ist dieser Teil abgeschlossen. Nun müssen wir natürlich noch HTML-Dateien haben, die wir anzeigen können.

Wrapper-Script anpassen

Ich habe mein gem2html Konverter-Script so angepasst, dass es das HTML gleich in den Ordner vom Lighttpd abwirft. Dieses Verzeichnis ist bei Arch-Linux /srv/http.

gmi2html Shell-Script angepasst für Automatisierung

Meine Gemini-Dateien liegen in /srv/gemini/content, aber das kann man halten, wie man will. Das angepasste Shell-Script sieht jetzt so aus, in der dritten und vierten Zeile sind die Anpassungen:

#!/bin/bash

htmldir="/srv/http"
cd /srv/gemini/content/
for file in `find . -mtime -1 -type f -name "*.gmi"`
do
   barefile=`basename -s .gmi $file`
   outfile="$htmldir/$file"
   outdir=`dirname $outfile`
   mkdir -p $outdir
   outfile="$outdir/$barefile.html"

   title=$(cat $file|grep -m 1 '^# '|sed 's/#//'|awk '{$1=$1;print}')
   gem2html.awk $file | sed "s/TITLEEE/$title/" > $outfile
done

Ebenso wurde beim find »-mtime -1« ergänzt, damit nur alle HTML-Dateien neu gebaut werden, die neuer als einen Tag sind.

Automatisierung mit systemd

Systemd erlaubt es, mit drei Zeilen unser gem2html Script als Service zu setzen und mit einem weiteren Dreizeiler dieses regelmäßig auszuführen, ganz ohne cron. Das kann zum Beispiel stündlich sein oder einmal am Tag.

Wir müssen also eine Service- und eine Timer-Konfiguration bei systemd eintragen:

Die Service-Datei schreiben:

# Datei /etc/systemd/system/gem2html.service

[Unit]
Description=Convert Gemini files to HTML

[Service]
ExecStart=/usr/local/bin/gem2html

Dieser Service wird aber nicht direkt aufgerufen, sondern regelmäßig, in diesem Fall stündlich, von einem Timer:

# Datei /etc/systemd/system/gem2html.timer

[Unit]
Description=Rebuild html files from Gemini files every hour

[Timer]
OnCalendar=hourly

[Install]
WantedBy=basic.target

Nachdem wir nun beide Dateien haben, starten wir den Timer einfach, und zwar so, dass er sofort startet und zu jeder vollen Stunde sein Werk vollbringt:

systemctl enable --now gem2html.timer

Wir können auch mal den Status angucken und schauen, ob alles funktioniert:

systemctl status gem2html.timer

Das sollte dann in etwa so aussehen

● gem2html.timer - Rebuild html files from Gemini files every hour
     Loaded: loaded (/etc/systemd/system/gem2html.timer; enabled; vendor preset: disabled)
     Active: active (waiting) since Sat 2021-02-13 17:11:30 CET; 3h 43min ago
    Trigger: Sat 2021-02-13 21:00:00 CET; 4min 55s left
   Triggers: ● gem2html.service

Feb 13 17:11:30 hubbz systemd[1]: Started Rebuild html files from Gemini files every hour.

Das war es. Die Konvertierung findet nicht sofort statt, sondern erst zu jeder vollen Stunde. Und so erhältst Du jetzt einen Webauftritt mit einem Abklatsch Deiner Gemini-Kapsel (Bezeichnung für eine Gemini-Website). Viel Spaß!

🌐 Die Scripts sind unter der MIT-Lizenz lizenziert.

➤ Zurück
➤ Datenschutzinformation