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.
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.
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
- git
- cmake
- pkg-config
- subversion (für Tests mit googlemock)
Erforderliche Libraries
- libjson-c-dev
- libcurl4-openssl-dev
- libgnutls28-dev
- libgcrypt
- libsasl2-dev
- libuuid1
- libsml (für sml meters)
- libmicrohttpd-dev >= 0.4.6 (for builtin „local“ webserver)
- libltdl >=0.8.0 (for OMS)
- libleptonica-dev (for OCR)
- libmosquitto-dev (for MQTT)
- libunistring-dev (wegen Problem mit Ubuntu 18.04)
Debian Pakete
Für auf Debian basierende Distributionen können die meisten dieser Abhängigkeiten mit:
sudo apt-get update && sudo apt-get install install extrace git-core cmake libtool dh-autoreconf uuid-dev libmicrohttpd-dev build-essential pkg-config libgnutls28-dev libssl-dev libmosquitto-dev libgcrypt20-dev libcurl3-dev libunistring-dev libssl-dev libsasl2-dev libcurl4-openssl-dev uuid-dev libtool libltdl-dev
installiert werden.
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.
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
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
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
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
/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