Benutzer-Werkzeuge

Webseiten-Werkzeuge


software:controller:vzlogger:installation_cpp-version

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
software:controller:vzlogger:installation_cpp-version [2017/02/26 13:00] – [Prerequisites for compiling vzlogger] udo1software:controller:vzlogger:installation_cpp-version [2024/02/04 11:25] (aktuell) – [Build von Hand] cmake Syntaxfehler jau
Zeile 1: Zeile 1:
 ====== vzlogger Installation ====== ====== vzlogger Installation ======
 +
 +This manual is also available in [[/software/controller/vzlogger/installation_en|english]].
  
 === Repository === === Repository ===
-Our repository: https://github.com/volkszaehler/vzlogger\\+Unser Repository: https://github.com/volkszaehler/vzlogger\\ 
 + 
 +Derzeit ist vzlogger und (auf manchen Plattformen) ein paar der Bibliotheken (Libraries) 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:
  
-Actually vzlogger and some of the libraries are only provided by sourcecode. They have to be compiled before use. 
-Select a working directory your user has writing permissions. For example the home directory: 
 <code> <code>
 cd ~ cd ~
 </code> </code>
  
-===== Prerequisites for compiling vzlogger =====+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 =====
  
-Please note that a full configured vzlogger requires besides gcc (4.7 or higher) and glibc, these libraries to compile successfully:+Für eine erfolgreiche Kompilierung des vzlogger werden, neben gcc und glibc, auch diese Libraries benötigt:
  
 === Tools === === Tools ===
-  * git (package: git-core)+  * git
   * cmake   * cmake
   * pkg-config   * pkg-config
-  * subversion (for tests using googlemock)+  * subversion (für Tests mit googlemock)
    
-=== Required Libraries === +=== Erforderliche Libraries === 
-  * libjson >= 0.11 (>= 0.9 before [[https://github.com/volkszaehler/vzlogger/pull/106]]) +  * libjson-c-dev 
-  * libcurl3 >= 7.19 +  * libcurl4-openssl-dev 
-  * libgnutls-dev+  * libgnutls28-dev
   * libgcrypt   * libgcrypt
   * libsasl2-dev   * libsasl2-dev
   * libuuid1   * libuuid1
-  * libsml (for sml meters)+  * libsml (für sml meters)
   * libmicrohttpd-dev >= 0.4.6 (for builtin "local" webserver)   * libmicrohttpd-dev >= 0.4.6 (for builtin "local" webserver)
   * libltdl >=0.8.0 (for OMS)   * libltdl >=0.8.0 (for OMS)
   * libleptonica-dev (for OCR)   * libleptonica-dev (for OCR)
 +  * libmosquitto-dev (for MQTT)
 +  * libunistring-dev (wegen Problem mit Ubuntu 18.04)
  
  
-=== Debian packages === +=== Debian Pakete ===
-On Debian-Jessie based distributios, most of these dependencies can easily be installed with: +
-(as root, consider running "apt-get update" first) +
-<code>sudo apt-get install build-essential git-core 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 dh-autoreconf</code>+
  
-For Debian Wheezy: +Für auf Debian basierende Distributionen können die meisten dieser Abhängigkeiten mit:
-<code>sudo apt-get install build-essential git-core cmake pkg-config subversion libcurl3-dev libgnutls-dev libsasl2-dev uuid-dev libtool libmicrohttpd-dev libcurl4-openssl-dev libssl-dev libltdl-dev libleptonica-dev dh-autoreconf</code>+
  
-===== Build by script ===== +<code>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</code> 
-Vzlogger provides a shell script for downloadbuild and install of the modules issued only as sourcecode.+installiert werden. Eventuell erstmal <code>sudo apt-get update</code> ausführen. 
 + 
 +===== Build per Script ===== 
 +Vzlogger bietet ein Shellscript für DownloadÜbersetzung und Installation der Module die nur als Quellen verfügbar sind.
 <code> <code>
 git clone https://github.com/volkszaehler/vzlogger.git git clone https://github.com/volkszaehler/vzlogger.git
Zeile 49: Zeile 56:
 </code> </code>
  
-The script supports also build of one single moduleSee the comments in the script for details.+Das Script bietet auch die Möglichkeit, nur einzelne Module zu übersetzenDetails dazu findet man als Kommentar im Script.
  
-=== Update ===+Möchte man den vzlogger mit optionaler Funktionalität MQTT bauen lautet der Aufruf für das Script:
 <code> <code>
-sudo systemctl stop vzlogger  #only works after creating the systemd start script, see below+./install.sh vzlogger libjson libsml mqtt 
 +</code> 
 + 
 +=== Hintergrunddienst === 
 +Nun sollte vzlogger vollends als Systemdienst eingerichtet werden. Details dazu [[software/controller/vzlogger/installation_cpp-version#systemd_startscript|weiter unten]]. 
 + 
 +=== Aktualisierung === 
 + 
 +Ist in der Regel aber nicht nötig, aber die zugrundeliegende SML Bibliothek kann (vorher) für sich aktualisiert werden, indem: 
 +<code> 
 +cd vzlogger/libs/libsml 
 +git pull 
 +cd ../.. 
 +./install.sh libsml 
 +</code> 
 + 
 +Zum Aktualisieren des vzlogger dient diese Prozedur: 
 +<code> 
 +sudo systemctl stop vzlogger
 cd vzlogger cd vzlogger
 git pull git pull
 ./install.sh vzlogger ./install.sh vzlogger
-sudo systemctl start vzlogger #only works after creating the systemd start script, see below+sudo systemctl start vzlogger
 </code> </code>
  
-===== Build by hand ===== +Mit optionaler Funktionalität MQTT lautet hier der Aufruf für das Script:
-In cases the script does not fit the conditions. +
- +
-=== Building libjson === +
- +
-The best case is building libjson from source, which is simple too:+
 <code> <code>
-sudo apt-get install dh-autoreconf +./install.sh mqtt vzlogger
-git clone -b json-c-0.12 https://github.com/json-c/json-c +
-cd json-c +
-sh autogen.sh +
-./configure +
-make +
-sudo make install+
 </code> </code>
  
-Go back to your starting directory: <code>cd ..</code>+===== Build von Hand ===== 
 + 
 +Falls das Script nicht zu den Gegenheiten passt nachfolgend die einzelnen Schritte. 
 +<note warning>Nur für geübte User! Wer wenig Erfahrung hat sollte den [[software:controller:vzlogger:installation_cpp-version#build_per_script|Build per Script]] machen.</note>
  
 === Building libsml === === Building libsml ===
 +Debian bietet zwar ein Paket libsml-dev, das basiert aber leider auf veraltetem, nicht mehr gepflegtem Code.
 <code> <code>
 git clone https://github.com/volkszaehler/libsml.git git clone https://github.com/volkszaehler/libsml.git
Zeile 84: Zeile 102:
 sudo make sudo make
 </code> </code>
-Note that libsml does not include a 'make install' target.+Libsml bietet kein 'make install' Vorgabe.
  
-You can manually install it into your system by copying the following files and directories+Man macht das manuell in dem man die folgenden Dateien und Verzeichnisse kopiert:
 <code> <code>
 sudo cp sml/lib/libsml.* /usr/lib/ sudo cp sml/lib/libsml.* /usr/lib/
Zeile 93: Zeile 111:
 </code> </code>
  
-Go back to your starting directory: <code>cd ..</code>+Zurück zum Ausgangsverzeichnis: <code>cd ..</code>
  
 === Building vzlogger === === Building vzlogger ===
 +<note>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 ..''</note>
 <code> <code>
 git clone https://github.com/volkszaehler/vzlogger.git git clone https://github.com/volkszaehler/vzlogger.git
Zeile 102: Zeile 120:
 mkdir build mkdir build
 cd build cd build
-cmake ..+cmake -DBUILD_TEST=off ..
 make make
 sudo make install sudo make install
 </code> </code>
  
-Go back to your starting directory: <code>cd ../..</code>+Zurück zum Ausgangsverzeichnis: <code>cd ../..</code> 
 + 
 +== Bau als Debian-Paket == 
 + 
 +Das vzlogger Repository enthält ebenfalls Code, um ein "sauber" installier- und deinstallierbares Debian-Paket zu bauen.  
 + 
 +<code> 
 +git clone https://github.com/volkszaehler/vzlogger.git 
 +cd vzlogger 
 +apt build-dep ./ 
 +apt install devscripts 
 +debuild 
 +</code> 
  
 === Building OMS === === Building OMS ===
  
-OMS requires openssl and libmbus >=0.8.0 from e.g. https://github.com/rscada/libmbus.git +OMS erfordert openssl und libmbus >=0.8.0 z.Bvon https://github.com/rscada/libmbus.git
-(installation is easy:)+
 <code> <code>
 git clone https://github.com/rscada/libmbus.git git clone https://github.com/rscada/libmbus.git
 cd libmbus cd libmbus
-sudo ./build.sh+./build.sh
 sudo make install sudo make install
 </code> </code>
  
-Go back to your starting directory: <code>cd ..</code>+Zurück zum Ausgangsverzeichnis: <code>cd ..</code>
  
-=== Update vzlogger ===+=== Hintergrunddienst === 
 +Nun sollte vzlogger als Systemdienst eingerichtet werden. Details dazu [[software/controller/vzlogger/installation_cpp-version#systemd_startscript|weiter unten]].
  
 +=== vzlogger aktualisieren ===
 +Falls der vzlogger aktualisiert werden soll ist wie folgt vorzugehen:
 <code> <code>
-sudo systemctl stop vzlogger #only works after creating the systemd start script, see below 
 cd vzlogger cd vzlogger
 git pull git pull
 cd build cd build
-cmake ..+cmake -DBUILD_TEST=off ..
 make make
 +sudo systemctl stop vzlogger
 sudo make install sudo make install
-cd ../.. +sudo systemctl start vzlogger
-sudo systemctl start vzlogger #only works after creating the systemd start script, see below+
 </code> </code>
  
-if you are having trouble building with libsml, instead of just "cmake .", use:+ 
 +====== Systemd Startscript ====== 
 +Systemd dient dazu Hintergrunddienste einzurichten und zu verwalten. 
 + 
 +Das Installationsscript fragt ob es ein "systemd unit file" für dich installieren sollFalls 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: 
 +[[https://github.com/volkszaehler/vzlogger/blob/master/etc/vzlogger.service|./etc/vzlogger.service]] 
 +<code>sudo cp ./etc/vzlogger.service /etc/systemd/system/vzlogger.service</code> 
 + 
 +<note important> 
 +Bitte stelle sicher das die Pfade zur Binary (vzlogger) und der Konfigurationsdatei (vzlogger.conf) korrekt sind. 
 +</note> 
 + 
 +Den vzlogger kann man dann mit dem üblichen systemctl Kommando startenstoppen und prüfen: 
 <code> <code>
-cmake .. -DSML_HOME=/path/to/libsml+sudo systemctl start vzlogger 
 +systemctl status vzlogger 
 +sudo systemctl stop vzlogger
 </code> </code>
 +<note>Eine lauffähige Konfiguration ist dafür zwingend! Ansonsten wird vzlogger beendet und systemd meldet Fehler.</note>
 +
 +Wenn der vzlogger zufriedenstellend läuft und bei jedem boot als Hintergrunddienst gestartet werden soll:
  
-a debian package can be generated using: 
 <code> <code>
-cpack -G DEB+sudo systemctl enable vzlogger
 </code> </code>
  
-=== Cross compiling === 
  
 +====== 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:
 <code> <code>
-cmake -DCMAKE_TOOLCHAIN_FILE=/path/to/toolchainfile /path/to/vzlogger_sources+sudo setcap 'cap_sys_nice=eip' /usr/local/bin/vzlogger
 </code> </code>
  
 +<note>Auf Raspberry können dennoch Zugriffsprobleme beim Konfigurieren der GPIO auftreten. Frühzeitiger export in ''/etc/rc.local'' umgeht das Problem.</note>
  
-====== Systemd start script ======+=== Dienst-User anlegen ===
  
-If your computer uses systemd (Debian-Jessiethen follow these steps to add vzlogger as a new service:+Man kann für den Dienst einen separaten User (z.B. ''vzlogger''ohne Homeverzeichnis anlegen und Passwort vergeben. 
 +<code> 
 +sudo useradd -M vzlogger 
 +sudo passwd vzlogger 
 +</code>
  
-Create a file vzlogger.service in /etc/systemd/systemand fill it with these lines+Auf einem Raspberry den neuen User diversen Gruppen hinzufügen. 
 +<code> 
 +sudo usermod -aG gpio vzlogger 
 +sudo usermod -aG dialout vzlogger 
 +sudo usermod -aG staff vzlogger 
 +</code>
  
 +Für das Logfile ein Unterverzeichnis mit passenden Schreibrechten anlegen.
 <code> <code>
-[Unit] +sudo mkdir /var/log/vzlogger 
-Description=vzlogger +sudo chgrp staff /var/log/vzlogger 
-After=syslog.target network.target +sudo chmod g+w /var/log/vzlogger 
-After=mysql.service ntp.service+</code> 
  
-[Service] +=== vzlogger.conf anpassen ===
-ExecStart=/usr/local/bin/vzlogger -c /etc/vzlogger.conf +
-ExecReload=/bin/kill -HUP $MAINPID +
-StandardOutput=null+
  
-[Install] +Der neue Ort fürs Logfile muss natürlich auch vzlogger bekannt gemacht werden. ''/etc/vzlogger.conf'': 
-WantedBy=multi-user.target+<code> 
 +"log" : "/var/log/vzlogger/vzlogger.log",
 </code> </code>
  
-<note important> 
-Please make sure that both paths to the binary (vzlogger) and its configuration file (vzlogger.conf) are correct. 
-</note> 
  
-You can startstop or verify vzloggers status using the common systemctl command:+=== Systemd Startscript anpassen === 
 + 
 +Nun muss nur noch im Systemd Startscript (siehe anderer Paragraph) der Usermit 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:
  
 <code> <code>
-sudo systemctl start vzlogger +User=vzlogger
-systemctl status vzlogger +
-sudo systemctl stop vzlogger+
 </code> </code>
-<note>You need a working configuration at this point! Else vzlogger will be closed and systemd generates failures.</note> 
  
-If you are satisfied and want to have vzlogger permanently startet as a service everytime your machine boots, just enable it:+Nun muss der Service nur neu gestartet werden und vzlogger läuft unter dem angegebenen Benutzer:
  
 <code> <code>
-sudo systemctl enable vzlogger+sudo systemctl daemon-reload
 </code> </code>
 +
 +=== 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:
 +<code>
 +cpack -G DEB
 +</code>
 +
 +=== Cross Kompilierung===
 +
 +<code>
 +cmake -DCMAKE_TOOLCHAIN_FILE=/path/to/toolchainfile /path/to/vzlogger_sources
 +</code>
 +
  
software/controller/vzlogger/installation_cpp-version.1488110448.txt.gz · Zuletzt geändert: 2017/02/26 13:00 von udo1