Etherpad auf 16.04

Ein Update zu der etwas in die Jahre gekommenen Anleitung zur Installation von Etherpad Lite auf Ubuntu, auch wenn sich viele Dinge nicht wirklich grundlegend geändert haben.

Erst einmal versorgen wir unseren Server mit einem aktuellen NodeJ.js sowie NPM. Die Anleitung hierzu: https://nodejs.org/en/download/package-manager/#debian-and-ubuntu-based-linux-distributions

Dieser wird gefolgt, bis mit

nicht nur NodeJS, sondern auch NPM an Bord ist.

Es folgen die Vorbereitungen für die lokale Installation von EP:

Dazu gehört ein Benutzerkonto etherpad:

In dessen Kontext dann gewechselt wird, um EP zu installieren:

Der erste Start installiert die Abhängigkeiten und sollte es danach ermöglichen, die Etherpad Installation unter http://example.org:9001 aufzurufen. Gelingt dies, dann brechen wir EP mit STRG C ab, um in Ruhe die Datei settings.json in /opt/etherpad/etherpad-lite sowie den Web- und DB-Server anzupassen.

Da wir nun immer wieder EP neu starten (als user etherpad) und außerdem als root weitere Pakete nachinstallieren sowie Anpassungen vornehmen müssen macht eine zweite Shell zum Server Sinn.

Nach der Installation von Apache2 und der Einrichtung von SSL-Zertifikaten folgt die Aktivierung der entsprechenden Module im Apachen:

Ich folge hier im Wesentlichen der Anleitung hier: https://github.com/ether/etherpad-lite/wiki/How-to-put-Etherpad-Lite-behind-a-reverse-Proxy und erhalte am Ende eine VirtualHost Definition, die so aussieht:

Nach einem Neustart des Apachen und einem erneuten Start von EP lite (aus dem Konto von etherpad heraus) sollte EP über https abgerufen werden können.

Hinweis zu den geladenen Apache-Modulen: wstunnel beseitigte bei mir Fehlermeldungen wie die diese:

Wir können EP nun wieder mit STRG C anhalten und eine Datenbank für EP einrichten. Dazu benötigen wir einen MySQL-Server sowie, bei Bedarf, phpMyAdmin für die einfachere Verwaltung. Weiter sollte auch abiword mit an Bord geholt werden, damit Pads exportiert werden können.

Sind diese Schritte vollbracht, wird die settings.json überarbeitet:

Viel angepasst habe ich nicht: Die Datenbankverbindung, den einführenden Text in jedes Pad mit einem Verweis auf die Benutzerordnung und das Passwort für den administrativen Benutzer.

Ob die Datenbankverbindung glückt, wird erneut aus dem Kontext des Benutzers etherpad geprüft. Danach wird Etherpad als Service eingerichtet.

Dazu erstellt man sich eine Datei /etc/systemd/system/etherpad.service mit folgendem Inhalt:

Das entspricht bis auf die Pfade der Anleitung hier: https://github.com/ether/etherpad-lite/wiki/How-to-deploy-Etherpad-Lite-as-a-service 

Gelingt der Start mit service etherpad start kann man mit ufw den Port 9001 zu machen und in den Betrieb übergehen. Wer will kann etherpad auch automatisch starten lassen: systemctl enable etherpad

Der Login-Screen von Etherpad kann in /opt/etherpad/etherpad-lite/src/templates/index.html an die eigenen Wünsche angepasst und z.B. um Links zum Impressum und zur Benutzerordnung erweitert werden.

Nur noch ein Punkt: Das Plugin, das man als schulischer Admin unbedingt haben will, ist das hier: https://www.npmjs.com/package/ep_adminpads

PDF Formulare

Seit acroread nicht mehr in den Repos ist und sich auch nicht mehr ohne Klimmzüge auf aktuelleren Linuxen installieren lässt, sieht es Mau aus mit dem Ausfüllen von PDF-Formularen. Man kann Okular nehmen … und dann damit leben, dass die Formularinhalte als XML Dateien im Homeverzeichnis „verschwinden“, statt direkt beim Dokument zu liegen. Für mich ist das ein No-go, weil ich PDF-Formulare noch Jahre später oder auch auf einer anderen Maschine ausgefüllt ansehen können will.

Eine unfreie aber praktikable Lösung scheint mir hier zu liegen:

https://code-industry.net/free-pdf-editor/

Erste Versuche mit den Beihilfeformularen zeigen, dass sich Master PDF Editor benimmt wie ein Acrobat Reader. Die Formulareinträge landen im PDF. Man kann das PDF also verschieben und kopieren und die Inhalte bleiben erhalten.

Die Installation wiegt mit rund 10MB nicht viel und abgesehen von einigen Qt Abhängigkeiten kommt wenig an Bord.

VM Transfer

EIne VM braucht so seine Zeit bis sie eingerichtet ist. Wenn nur das Netz im Hause lahmt, dann kann man diese zu Hetzner umziehen. Ich hab das mal mit Proxmox (Hetzner) und VirtualBox (im Haus) getestet.

Hier die /etc/network/interfaces des Rootservers bei Hetzner mit den Routing für die VMs:

Man erstellt sich in Proxmox eine KVM VM (hier mit der IP 99.99.99.83) mit ausreichend HDD-Platz, um den zu Hause liegenden Server aufzunehmen. Dabei achtet man in der Proxmox-GUI darauf, dass die Einstellungen möglichst genau denen der zu übetragenden VM in VBox entsprechen – z.B. virtio für die Netzwerkkarten.

Dann zieht man sich ein Live-Medium als ISO (bei Hetzner mit wget -4 weil die IPv6 Namensauflösung länger dauert als der Download) auf dem Proxmox-Server nach /var/lib/vz/template/iso und bindet dieses in der KVM-VM in Proxmox ein. Davon dann booten.

Die Wahl des Tastatur-Layouts gelang VNC in Proxmox bei Ubuntu ISOs hierbei nicht immer, weswegen man auch gleich bei US bleiben kann. Bessere Erfahrungen machte ich mit Lubuntu ISOs.

Ist das Live-Medium gebootet, müssen dessen Netzwerkeinstellungen händisch vorgenommen werden. Dabei können IP und Gateway noch über die grafische Oberfläche festgelegt (meist handelt es sich bei den Live-Medien um den Network-Manager) werden. Als DNS kann man z.B. den von Google (8.8.8.8) nutzen. Das Feld für Gateway bleibt leer. Denn: Die Routen für die KVM-VM müssen händisch mit ip route add gesetzt werden.

Meist muss für eth0 noch der Name des Interfaces an den der KVM-VM angepasst werden. Wie das Interface sich im gegebenen Fall nennt, zeigt ein ifconfig.

Netzwerkverbindung testen.

In der KVM-VM wird zu einer root shell gewechselt und für root ein Passwort vergeben

Dann einen openssh-server installieren und dessen Konfiguration so anpassen, dass sich root über SSH mit Passwort einloggen darf. Den SSH Server neu starten.

Jetzt kann man schon ausprobieren, ob man sich von der lokalen VBox VM auf dem Live-Medium bei Hetzner einloggen kann.

Klappt das, dann kann es mit dem Transfer der lokalen VBox VM losgehen.

Dazu legt man auf der HDD der KVM-VM zuerst ein Dateisystem an. Im Live-Medium kann man hierzu sogar Gparted nutzen.

Dann mounted man die root Partition (müsste /dev/sda1 sein) der KVM-VM nach /mnt und der eigentliche Transfer erfolgt nun in mindestens zwei Schritten, will man die downtime des lokalen Servers klein halten: Einmal einen rsync aus dem laufenden System heraus. Ein zweites mal, nachdem das lokale System ebenfalls mit einem Live-Medium gebootet wurde, um die Veränderungen auch noch zu übertragen. Ist einem die downtime egal, dann nutzt man am besten gleich lokal ein Live-Medium.

Ab jetzt sind wieder die im Vorteil, die viel Bandbreite im Upstream haben. In meinem Fall wird die Übertragung 33 Stunden dauern, was dazu führt, dass mir die Zwangstrennung der Internetverbindung die Übertragung in einem Rutsch vermasselt.

Literatur 1, 2, 3

OCR revisited

Zwar liefert Finereader die besseren Ergebnisse und obendrein noch ein Layout für die Scans, aber für eine lokale Suche nach einem PDF reicht auch ein bischen weniger, so dass man sich die Ausgaben bei ABBYY für jede einzelne Seite zumindest teilweise sparen kann.

Unter einem Debian 9:

Details und weitere Konfigurationsmöglichkeiten, Batch-Skripte und mehr sind hier zu haben. Ich setze ocrmypdf bisher gezielt auf einzelne Verzeichnis an mit diesem Einzeiler:

Das ergibt dann TXT Dateien mit zu über 95% richtig erkanntem Inhalt, wenn die Vorlage gut ist. Presst man PDF-Faxe und ähnlichen Mist durch die tool chain, dann kommt leider weitaus weniger Brauchbares hinten raus – aber zum Wiederfinden auf der lokalen Platte mit recoll reicht es.

Falsches Userhome im LDAP

Nach Beendigung des Klassenarbeitsmodus auf einer LD vergisst diese gelegentlich, die richtigen Pfade zurück in den LDAP Baum zu schreiben. Meldet sich der Benutzer danach an, erhält er ein Homeverzeichnis, das dem aus dem Klassenarbeitsmodus entspricht

und kommt an seine eigenen Dateien nicht mehr ran. Außerdem hat er keinen Zugriff auf die Tauschverzeichnisse.

Einfachster Weg: Den LDAP Baum in eine Datei kippen

Den Dump dann mit grep und Freunden nach „Klassenarbeit“ durchsuchen und die Fundstellen zusammen mit den betroffenen Benutzern inklusive username notieren.

Auf einem Client jxplorer installieren (der sich in den Ubuntu Repos befindet) und sich mit diesem mit dem LDAP auf dem Server verbinden. Der anzugebende LDAP Server ist hierbei die IP des Schulservers / LD-Servers (also z.B. 10.16.1.1), als Benutzer nehmen wir den ldap-admin, dessen genaue Bezeichnung / DN wir aus dem gerade exportierten LDAP Baum nehmen können

Verwendet man für diesen das Passwort des admin (Administrator), dann erhält man nur lesenden Zugriff. Schreibenden Zugriff bekommt man mit dem Passwort, das in

liegt.  Hier dann im Bäumchen users unter

eintragen – und nicht den Eintrag aus ldRealHomeDirectory übernehmen, der nur den Serverpfad enthält. Auf dem LD-Server ist der Pfad oben ein Symlink.

Am Ende des Prozesses noch durch die Homeverzeichnisse – auch den ver-symlinkten Teil unterhalb von /home/dynamic – durchsehen und nach evtl. noch bestehenden Symlinks auf das ehemalige Klassenarbeitsverzeichnis suchen. Diese löschen.

HSK alpha II

Der Zugang zum „Dachsschluf“ ist nun so hoch und breit, dass ich flach auf dem Bauch liegend wie auch seitlich durchkomme und viel weniger blaue Flecken abbekomme. Nach einer Stunde Arbeiten an der Erweiterung war bei mir aber die Kraft erst einmal zu Ende – also lief ich noch ein wenig die Hänge hoch und runter und suchte die Umgebung der HSK ab. Dabei fand ich das Deckenloch für den Eingang der HSK. Das sieht auf dem Bild größer aus, als es ist.

Auf Grund der beschränkten Kraftressourcen muss ich mir die Arbeit für die nächsten Schritte einteilen: Es reicht immer nur für rund 1 Stunde auf dem Bauch liegend buddeln und Dreck wegkratzen – dann will mein Kreuz eine längere Pause.

Beim nächsten Anlauf kommt also die zweite Engstelle im „Dachsschluf“ dran und erst beim übernächsten Mal geht es dann ins Neuland.

Evil Penguin (beta)

Janis 3D-Drucker musste ich ausprobieren und sitze nun an einem Entwurf für einen richtig bösen Pinguin zum Stecken. Aktuell sieht er so aus, wie im PNG Bild oben.

Meine toolchain ist: Entwurf in Inkscape (weil ich damit leidlich klar komme), Export nach openSCAD mit Hilfe dieses Plugins und aus openSCAD dann die STL erzeugen, die mit Cura von Janis gesliced wird.

Meine von Janis in Blender noch einmal optimierte (die Bauchlinie des Pinguins war für den Druck zu dünn gezeichnet) Machbarkeitsstudie von gestern und damit mein erster Entwurf steht hier schon.

Die SVG sowie die hieraus erzeugten SCAD und STL Dateien und auch die optimierte Version für Blender sind hier zu haben [ZIP] [125kb]

2017-06-12_penguin-evil-dow

Noch wackelt er ein klein wenig, weil ich die Stecker nicht richtig dimensionierte (oder diese noch hätte mit Sandpapier nachschleifen müssen) – aber der Anfang ist gemacht.

Update 15.06.

Inzwischen spiele ich an einem 3D Modell des evil penguin. Dank einer Einführung von Janis traute ich mich an Blender und hab inzwischen das Gefühl, dass ich noch nie vor einer Tastatur saß. Blender ist am Anfang hartes Brot. Aber der Pinguin nimmt Formen an.

HSK alpha I

Gestern zwängte ich mich also durch die erste Engstelle in den Teil der HSK, der ab jetzt Dachsschluf heißt. In der zweiten Ausbuchtung nach der zweiten Engstelle befand sich nämlich auf der linken Seite ein verlassenes Nest.

Die beiden anderen Fortsetzungen habe ich aufgegeben. Die sind schlicht zu eng.

Insgesamt eine ziemliche Quälerei, das Loch. Eindeutig Elsachbröllerfeeling – auch was die Zahl an Schürfungen und blauen Flecke heute angeht. Die im Dachschluf oft weniger als 30cm zwischen Boden und Decke werden durch Anhäufungen von Boden (immer noch Humus und Erde, aber zunehmend fest) in dem leicht ansteigenden Gang fast plombiert. Man muss sich also entscheiden, in welche Richtung man den Kopf gedreht haben will und kann diese Ausrichtung bis zur nächsten Kuhle in der Decke / im Boden nicht ändern. Rechts und links hat man ein wenig Platz, so dass keine Platzangst aufkommt, jedoch nicht so viel, dass man sich für den Rückweg drehen könnte. Also rückwärts wieder raus, was in der ersten Engstelle dann zu heftigen Flüchen führt, weil man auf dem Rückweg die Arme schon in der Engstelle verkeilt hat und sich trotzdem irgendwie „den Hang hoch“ schieben muss. Also windet man sich Zentimeter um Zentimeter der Eingangskammer entgegen.

Aber hinten geht es weiter. Der sich leicht nach links (?) wendende Gang wird dabei noch ein wenig flacher bzw. die Bodenwellen aus Erde nehmen an Häufigkeit zu, jedoch der leichte Luftzug bleibt.

Jetzt müssen die blauen Flecke abheilen – dann kommt der nächste Anlauf.

Haldenhofhöhlen

Für Bodman-Ludwigshafen sind in Openstreetmap Höhlen eingezeichnet.


View Larger Map

Dort hat es keinen Kalk. Da ist alles Sandstein / Molasse. Da ich am Dienstag vor Ort war, ging ich nachsehen – im festen Glauben, da hat sich jemand eine Scherz erlaubt. Aber tatsächlich: Löcher im Fels!

Die Höhle auf der linken Seite nenne ich auf Grund ihrer Form mal „Haldenhofabri“, auch wenn es sich bei dieser um eine menschliche Grabung handeln dürfte.

Immerhin hat sie zwei kleine Fortsetzungen unbekannter Länge.

In Ermangelung der richtigen Ausrüstung bekroch ich nichts, sondern peilte nur einmal mit dem Disto in Richtung Berg.

Die im Plan bei OSM rechts gelegene „Höhle“ ist ein von Hand aus dem Fels gemeiselter Keller von gut über 20 Meter Länge.

Der kastenförmige Gang ist zu Beginn noch übermannshoch, wird dann aber, je weiter man dem Gefälle in den Berg hinein folgt, niedriger.

Der Gang biegt leicht nach links ab, nähert sich also dem Haldenhofabri und scheint in einem rechteckigen Kellerraum zu enden.

Da sich ungefähr an der Biegung Regenwasser zu einem mehr als knöcheltiefem See gesammelt hat und ich in normalen Schuhen und ohne Lampe unterwegs war, musste eine Peilung und die Handylampe reichen, um zu einer ersten groben Schätzung zu gelangen, wie es hier im Berg aussehen könnte.

Am Anfang des „Sees“ liegen noch Bretter im Wasser … weiter hinten liegen diese unter der Wasseroberfläche. Das nächste Mal habe ich meine Gummistiefel dabei – und Licht.

A Time Tracker

Ich nutze seit dem 01.08.2016 A Time Tracker (bei FDroid zu haben) als Zeiterfassungssoftware auf dem Smartphone – und das für mich überraschend diszipliniert und an vielen Stellen evtl. auch übergenau. Verlasse ich den Schreibtisch oder die SItzung etc., stoppe ich die Zeiterfassung.

Da das RP wie jedes Jahr um Pfingsten meinen Tätigkeitsbericht haben wollte, wollte ich mir die Arbeit nun erleichtern und zum ersten Mal einen echten Stundenzettel einreichen. Das klappte nur bedingt. Einerseits ist das RP-Formular dafür nicht gemacht, weil es sich nicht interessiert, wie viel man gearbeitet hat, sondern nur dafür, wie viele Stunden Unterricht ausgefallen sind, während man als Landesbeamter andere Dienstaufträge erfüllte.

Andererseits ging ich zuerst den falschen Weg und exportierte mir die SQLite Datenbank aus A Time Tracker (Mehr – Auf Speicher sichern). Mit der konnte ich lokal auf dem Rechner aber wenig anfangen: die Zeiten sind als Unix timestamps abgelegt, müssen also zuerst konvertiert werden und auch die Zuordnung von IDs zu den Tätigkeitsbezeichnungen ist derart auf einzelne Tabellen verteilt, dass das Zusammenführen viel zu viel Mühe macht.

Eine Übersicht über die eigene Arbeitszeit lässt sich aus dem CSV Export viel zügiger erstellen:

  1. Mehr – Zeitbereich ändern – Alle
  2. Mehr – Ansicht nach CSV exportieren

A Time Tracker legt die timetracker.db wie auch die all.csv auf der obersten Ebene des Nutzerverzeichnisses auf dem Smartphone ab – hier ist das /storage/emulated/0/.

Die Konvertierung von Unix timestamps ins Format YYYY-MM-DD HH-MM-SS wird von der App vorgenommen. Der Import nach LibreOffice gelingt ohne Mühe.

Formatiert man die Zellen für die Summen im Format [HH]:MM:SS, unterlässt LibreOffice jegliche Umrechnungen und addiert schlicht die Zeiten in Richtung Stunden. Entscheidend ist die eckige Klammer um das HH!

Man kann dann mit dem üblichen =SUMME(FeldA:FeldZ) rechnen, statt sich permanent zu wundern, was LibreOffice da gerade macht, und die Daten auch grafisch darstellen etc. pp.

Ganz hübsch erhellend für mich war, dass ich schon vor Monaten meine vorgesehene Jahresarbeitszeit „durch“ hatte. Dabei ist das Schuljahr noch nicht einmal zu Ende. Auch erhellend war die Verteilung meiner Stunden auf die von mir in A Time Tracker angelegten Kategorien. Ich weiß nun, wo ich mehr darauf achten muss, mich nicht zu sehr vereinnahmen zu lassen. Ich muss „Nein“ noch üben.