Inhaltsverzeichnis

vzlogger Installation

This manual is also available in english.

Repository

Unser Repository: https://github.com/volkszaehler/vzlogger

vzlogger aus Paket installieren

Dank Cloudsmith ist vzlogger als vorkompiliertes Binary-Paket für Debian und Raspbian verfügbar. Abhängigkeiten werden automatisch aufgelöst und installiert. Allerdings ist es kein offizielles Debian-Paket, man muss die Quelle dem System erst noch bekannt machen. Cloudsmith bietet dafür ein Script an das diesen Teil der Arbeit für uns erledigt.

Der nachfolgende Befehl führt das Script mit sudo aus, ein potentielles Sicherheitsrisiko. Wer das nicht möchte kann die Schritte, entsprechend der von Cloudsmith bereitgestellten Anleitung, einzeln ausführen.
curl -1sLf \
  'https://dl.cloudsmith.io/public/volkszaehler/volkszaehler-org-project/setup.deb.sh' \
  | sudo -E bash

Das Script identifiziert das vorhanden Betriebssystem und die Hardware, nimmt entsprechende Einstellungen vor und richtet den Paketmanager passend ein.

Danach kann nach üblicher Manier über den Paketmanager installiert werden:

sudo apt-get update
sudo apt-get install vzlogger

Systemd wird in diesem Zuge mit eingerichtet, die vzlogger.conf muss noch auf die eigenen Bedürfnisse angepasst werden.

Diese Binaries umfassen leider nicht alle Funktionen von vzlogger.

vzlogger compilieren

Vzlogger hat zusätzliche Features (OMS, OCR), die erforderlichen Bibliotheken (Libraries) sind allerdings nur als Quellcode verfügbar. Diese müssen vor gebrauch kompiliert (übersetzt) werden.

Dies macht man praktischerweise in einem Verzeichnis, in dem dein „normaler“ Nutzer Schreibrechte hat. Zum Beispiel dein Home-Verzeichnis:

cd ~

Die meisten Erfahrungen mit dem Bau des vzloggers bestehen mit Debian und verwandten Distributionen (Ubuntu, Raspbian). Die folgenden Anleitungen wurden im April 2022 mit Debian 11 „Bullseye“ verifiziert; Informationen für ältere Versionen finden sich in der Historie dieser Seite.

Systemvoraussetzungen zur Kompilierung des vzlogger

Für eine erfolgreiche Kompilierung des vzlogger werden, neben gcc und glibc, auch diese Libraries benötigt:

Tools

Erforderliche Libraries

Debian Pakete

Für auf Debian basierende Distributionen können die meisten dieser Abhängigkeiten mit:

sudo apt-get install build-essential git cmake pkg-config subversion libcurl4-openssl-dev libgnutls28-dev libsasl2-dev uuid-dev libtool libssl-dev libgcrypt20-dev libmicrohttpd-dev libltdl-dev libjson-c-dev libleptonica-dev libmosquitto-dev libunistring-dev dh-autoreconf

installiert werden. Eventuell erstmal

sudo apt-get update

ausführen.

Build per Script

Vzlogger bietet ein Shellscript für Download, Übersetzung und Installation der Module die nur als Quellen verfügbar sind.

git clone https://github.com/volkszaehler/vzlogger.git
cd vzlogger
./install.sh

Das Script bietet auch die Möglichkeit, nur einzelne Module zu übersetzen. Details dazu findet man als Kommentar im Script.

Möchte man den vzlogger mit optionaler Funktionalität MQTT bauen lautet der Aufruf für das Script:

./install.sh vzlogger libjson libsml mqtt

Hintergrunddienst

Nun sollte vzlogger vollends als Systemdienst eingerichtet werden. Details dazu weiter unten.

Aktualisierung

Ist in der Regel aber nicht nötig, aber die zugrundeliegende SML Bibliothek kann (vorher) für sich aktualisiert werden, indem:

cd vzlogger/libs/libsml
git pull
cd ../..
./install.sh libsml

Zum Aktualisieren des vzlogger dient diese Prozedur:

sudo systemctl stop vzlogger
cd vzlogger
git pull
./install.sh vzlogger
sudo systemctl start vzlogger

Mit optionaler Funktionalität MQTT lautet hier der Aufruf für das Script:

./install.sh mqtt vzlogger

Build von Hand

Falls das Script nicht zu den Gegenheiten passt nachfolgend die einzelnen Schritte.

Nur für geübte User! Wer wenig Erfahrung hat sollte den Build per Script machen.

Building libsml

Debian bietet zwar ein Paket libsml-dev, das basiert aber leider auf veraltetem, nicht mehr gepflegtem Code.

git clone https://github.com/volkszaehler/libsml.git
cd libsml
sudo make

Libsml bietet kein 'make install' Vorgabe.

Man macht das manuell in dem man die folgenden Dateien und Verzeichnisse kopiert:

sudo cp sml/lib/libsml.* /usr/lib/
sudo cp -R sml/include/* /usr/include/
sudo cp sml.pc /usr/lib/pkgconfig/

Zurück zum Ausgangsverzeichnis:

cd ..

Building vzlogger

Hier können bei Bedarf weitere Funktionen dazu kompiliert werden z.B. MQTT, dazu den cmake-Befehl anpassen:
cmake -DBUILD_TEST=off -DENABLE_MQTT=on ..
git clone https://github.com/volkszaehler/vzlogger.git
cd vzlogger
mkdir build
cd build
cmake -DBUILD_TEST=off ..
make
sudo make install

Zurück zum Ausgangsverzeichnis:

cd ../..
Bau als Debian-Paket

Das vzlogger Repository enthält ebenfalls Code, um ein „sauber“ installier- und deinstallierbares Debian-Paket zu bauen.

git clone https://github.com/volkszaehler/vzlogger.git
cd vzlogger
apt build-dep ./
apt install devscripts
debuild

Building OMS

OMS erfordert openssl und libmbus >=0.8.0 z.B. von https://github.com/rscada/libmbus.git

git clone https://github.com/rscada/libmbus.git
cd libmbus
./build.sh
sudo make install

Zurück zum Ausgangsverzeichnis:

cd ..

Hintergrunddienst

Nun sollte vzlogger als Systemdienst eingerichtet werden. Details dazu weiter unten.

vzlogger aktualisieren

Falls der vzlogger aktualisiert werden soll ist wie folgt vorzugehen:

cd vzlogger
git pull
cd build
cmake -DBUILD_TEST=off ..
make
sudo systemctl stop vzlogger
sudo make install
sudo systemctl start vzlogger

Systemd Startscript

Systemd dient dazu Hintergrunddienste einzurichten und zu verwalten.

Das Installationsscript fragt ob es ein „systemd unit file“ für dich installieren soll. Falls dein System systemd nutzt (ab Debian „Jessie“) solltest du mit yes (ja) bestätigen.

Falls du es selbst kopieren oder editieren willst findest du ein Beispiel unter: ./etc/vzlogger.service

sudo cp ./etc/vzlogger.service /etc/systemd/system/vzlogger.service
Bitte stelle sicher das die Pfade zur Binary (vzlogger) und der Konfigurationsdatei (vzlogger.conf) korrekt sind.

Den vzlogger kann man dann mit dem üblichen systemctl Kommando starten, stoppen und prüfen:

sudo systemctl start vzlogger
systemctl status vzlogger
sudo systemctl stop vzlogger
Eine lauffähige Konfiguration ist dafür zwingend! Ansonsten wird vzlogger beendet und systemd meldet Fehler.

Wenn der vzlogger zufriedenstellend läuft und bei jedem boot als Hintergrunddienst gestartet werden soll:

sudo systemctl enable vzlogger

vzlogger als anderer Benutzer ausführen

Elevated privileges für vzlogger binary setzen

Als User führt man folgenden Befehl aus, um ausreichend Rechte zum Ausführen des Programms zu erhalten:

sudo setcap 'cap_sys_nice=eip' /usr/local/bin/vzlogger
Auf Raspberry können dennoch Zugriffsprobleme beim Konfigurieren der GPIO auftreten. Frühzeitiger export in /etc/rc.local umgeht das Problem.

Dienst-User anlegen

Man kann für den Dienst einen separaten User (z.B. vzlogger) ohne Homeverzeichnis anlegen und Passwort vergeben.

sudo useradd -M vzlogger
sudo passwd vzlogger

Auf einem Raspberry den neuen User diversen Gruppen hinzufügen.

sudo usermod -aG gpio vzlogger
sudo usermod -aG dialout vzlogger
sudo usermod -aG staff vzlogger

Für das Logfile ein Unterverzeichnis mit passenden Schreibrechten anlegen.

sudo mkdir /var/log/vzlogger
sudo chgrp staff /var/log/vzlogger
sudo chmod g+w /var/log/vzlogger

vzlogger.conf anpassen

Der neue Ort fürs Logfile muss natürlich auch vzlogger bekannt gemacht werden. /etc/vzlogger.conf:

"log" : "/var/log/vzlogger/vzlogger.log",

Systemd Startscript anpassen

Nun muss nur noch im Systemd Startscript (siehe anderer Paragraph) der User, mit welchem vzlogger ausgeführt werden soll, hinzugefügt bzw. geändert werden.

Unter der Kategorie [Service] fügt man eine weitere Zeile hinzu. Für den User vzlogger lautet es zum Beispiel:

User=vzlogger

Nun muss der Service nur neu gestartet werden und vzlogger läuft unter dem angegebenen Benutzer:

sudo systemctl daemon-reload

Verwendung

Das Betreiben von vzlogger unter einem anderen Benutzer als root ist vor allem bei der Verwendung vom Protokol „exec“ von Bedeutung. vzlogger muss nicht für die Verwendung neu kompiliert werden. Aufrufe von „exec“ werden nicht von root sondern vom verwendeten User gemacht.

Spezielle Hinweise

Debian Paket

Um ein Debian Paket zu erzeugen:

cpack -G DEB

Cross Kompilierung

cmake -DCMAKE_TOOLCHAIN_FILE=/path/to/toolchainfile /path/to/vzlogger_sources