Raspberry Pi als Videorekorder

In diesem Projekt wollen wir mit Hilfe von einem Raspberry Pi und einem DVB Stick einen Videorekorder aufbauen. Ich beschreibe die Installation mit einem Terratec Cinergy HTC USB XS HD, der sich heute noch bei Kabel (DVB-C) eignet. Es gibt viele andere DVB USB Sticks, welche sich auch dafür eignen. Eine externe Festplatte mit USB Anschluss dient als Speichermedium.

Als Betriebssystem verwenden ich Raspbian Light.

An dem das Image auf der SD Karte kopiert wurden, sollten wir die aktuellen Patches installieren.

sudo apt update
sudo apt dist-upgrade

Für den Betrieb von dem DVB Stick brauchen wir noch die Firmware und den Kernel 4.4 oder größer.

cd /lib/firmware/
sudo wget https://github.com/OpenELEC/dvb-firmware/raw/master/firmware/dvb-usb-terratec-htc-stick-drxk.fw

Das Update vom Kernel ist schnell gemacht.

sudo apt install rpi-update
sudo rpi-upgrade
sudo reboot
uname -a

Sollte es Probleme geben, dann kann man hiermit die Fehler suchen.

lsusb
dmesg

Unseren Server wollen wir mit eine festen IP Adresse betreiben und nicht per DHCP.

sudo vim /etc/network/interfaces

auto eth0
iface eth0 inet static
  address 192.168.187.100
  netmask 255.255.255.0
  gateway 192.168.187.1
  dns-nameservers 192.168.187.1

Den DHCP Dienst können wir stoppen und deaktivieren.

sudo service dhcpcd stop
sudo systemctl disable dhcpcd

Für den Betrieb als Headless-Server ist SSH notwendig.

sudo apt install openssh-server
sudo systemctl start ssh
sudo systemctl enable ssh
sudo touch /boot/ssh

Weitere Einstellung wie Hostname, Ländereinstellung, Tastatur kann man einfach mit dem Konfig-Tool vornehmen.

sudo raspi-config

Diese Tools helfen uns beim Betrieb weiter.

sudo apt install vim htop iotop iftop

Das Swap-File kann man ausschalten und deinstallieren.

sudo dphys-swapfile swapoff
sudo apt purge dphys-swapfile

Wenn die USB Festplatte mit dem NTFS Dateisystem verwendet wird, dann ist die Installation von extra Tools notwendig.

sudo apt install ntfs-3g

Für die Einbingung ist eine Eintragung in der Konfig „fstab“ notwendig.

sudo vim /etc/fstab

/dev/sda1 /media   ntfs  defaults,uid=hts,umask=0022,nosuid,nodev,noexec   0  0

Jetzt erfolgt die Installation von TVheadend.

curl http://apt.tvheadend.org/repo.gpg.key | sudo apt-key add -
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 379CE192D401AB61

sudo apt-get install apt-transport-https

sudo sh -c 'echo "deb https://dl.bintray.com/tvheadend/deb jessie release" > /etc/apt/sources.list.d/tvheadend.list'

sudo apt update
sudo apt install tvheadend

Das Login und Password ist für den Betrieb notwendig.

http://192.168.178.100:9981/

Der Rest der Einrichtung erfolgt per Web-Interface und ist hier beschrieben.

Noch ein Hinweis für die Senderlogos. Leider ist die Einrichtung sehr schlecht beschrieben. Hier meine Konfiguration.

Channel icon path: picon://%C.png
Picon path: file:///home/pi/logos/

Das User Icon lautet dann zum Beispiel „picon://Das_Erste.png“ und „picon“ wird durch den Path ersetzt zu „file:///home/pi/logos/Das_Erste.png“.

Laufzeit von Zertifikaten mit Check_MK prüfen

Mit diesem BASH Script kann man SSL Zertifikate im PEM Format mit Hilfe von Check_MK Monitoring überprüfen. Dazu erstellen Sie das Script im Verzeichnis /usr/lib/check_mk_agent/local/. Der Check prüft die Laufzeit der Letsencrypt Zertifikate.

vim /usr/lib/check_mk_agent/local/check_certificates.sh

#!/bin/bash
# Plugin Return Codes
# = 0   OK
# = 1   Warning
# = 2   Critical
# = 3   Unknown
#
DIR=/etc/letsencrypt/live/*/
FILTER=$DIR/cert.pem
 
function output {
 NAME=$(basename $1)
 DATE=$(date --date="$2" --iso-8601)
 SUBJECT=$3
 
 TODAY=$(date +%s)
 DATE_I=$(date -d ${DATE} +%s)
 EXPIRATION=$((15 * 24 * 60 * 60)) # 15 days
 
 if [[ -z $SUBJECT ]] ; then
  STATUS=3
  STATUS_TEXT="UNKNOWN"
  TEXT="Empty subject value"
 elif [ ${TODAY} -gt ${DATE_I} ] ; then
  STATUS=2
  STATUS_TEXT="CRITICAL"
  TEXT="Certificate has expired since ${DATE}"
 elif [[ $(expr $TODAY + $EXPIRATION) -gt ${DATE_I} ]] ; then
  STATUS=1
  STATUS_TEXT="WARNING"
  TEXT="Certificate will expire on ${DATE}"
 else
  STATUS=0
  STATUS_TEXT="OK"
  TEXT="Certificate will expire on ${DATE}"
 fi
 
 echo "${STATUS:-1} Certificate_${SUBJECT} Date=${DATE}; Check(${STATUS_TEXT}) - ${TEXT} - ${SUBJECT}"
}
 
function check {
 FILE=$1
 DATE=$(cat ${FILE} |openssl x509 -noout -enddate|cut -d= -f2-)
 SUBJECT=$(cat ${FILE} |openssl x509 -noout -subject|cut -d= -f3-)
 output "$FILE" "$DATE" "$SUBJECT"
}
 
for FILE in $FILTER;
do
  # take action on each certificate file.
  check "$FILE"
done

Zertifikatsdateien umwandeln

Es gibt unterschiedliche Dateiformate für ein Server-Zertifikat. Hier eine List von möglichen Umwandlungen.

Konvertiert eine DER Datei (.crt .cer .der) in PEM

openssl x509 -inform der -in certificate.cer -out certificate.pem

Konvertiert eine PEM Datei in DER

openssl x509 -outform der -in certificate.pem -out certificate.der

Konvertiert eine PKCS#12 Datei (.pfx .p12) in PEM

openssl pkcs12 -in keyStore.pfx -out keyStore.pem -nodes

PKCS#12 enthält den privaten Schlüssel und das Zertifikat. Sie können mit dem Parameter -nocerts nur den privaten Schlüssel oder mit Parameter -nokeys nur das Zertifikat speichern.

Konvertiert ein PEM Datei und den privaten Schlüssel zu PKCS#12 (.pfx .p12)

openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt

Laufzeit von einem Zertifikat prüfen

Wer einen Server mit TLS/SSL Verschlüsslung betreibt, der muss dafür ein Zertifikat mit einer begrenzten Laufzeit erstellen. Das Zertifikat muss vor dem Ende der Laufzeit ersetzt werden, sonst gibt es Fehlermeldungen im Browser. Hier möchte ich einige Beispiel zeigen, wie man die Laufzeit überprüfen kann.

Hiermit können wir uns die Lautzeit ausgeben lassen.

echo Q | openssl s_client -connect www.google.com:443 2>/dev/null | openssl x509 -noout -dates

Hier geben wir uns nur das Laufzeitende vom Zertifikat aus.

date --date="$(echo Q | openssl s_client -connect www.google.com:443 2>/dev/null | openssl x509 -noout -enddate |cut -d= -f 2)" --iso-8601

Wir können auch alle Zertifikate speichern.

echo Q | openssl s_client -connect www.google.com:443 -showcerts > chain.pem

Auch hier kann man sich das Datum ausgeben lassen.

gawk 'BEGIN { pipe="openssl x509 -noout -subject -dates -serial "} \
  /^-+BEGIN CERT/,/^-+END CERT/ { print | pipe }
  /^-+END CERT/                 { close(pipe); printf("\n")}  ' chain.pem

Wir wollen jetzt nur das Server Zertifikat extrahieren und noch einmal prüfen, ob es wirklich zu der CA valide ist.

sed -n '/-BEGIN/,/-END/p;/-END/q' chain.pem > site.pem
openssl verify -verbose -CAfile chain.pem site.pem
cat site.pem |openssl x509 -noout -enddate

Befindet man sich hinter einem Proxy Server, braucht das Programm „proxytunnel“.

proxytunnel -p yourproxy:8080 -d www.google.com:443 -a 7000
openssl s_client -connect localhost:7000 -showcerts

HP Proliant Server SNMP via ESXi Agent

Für das Monitoring von HL Proliant Server ist das Simple Network Management Protocol (SNMP) notwendig. Wenn man auf dem Server ein ESXi Host installiert hat, so bringt das HP Image den Agent schon mit.

Zuerst fragen wir den SNMP ab.

# esxcli system snmp get

   Authentication: 
   Communities: 
   Enable: false
   Engineid: 
   Hwsrc: indications
   Largestorage: true
   Loglevel: info
   Notraps: 
   Port: 161
   Privacy: 
   Remoteusers: 
   Syscontact: 
   Syslocation: 
   Targets: 
   Users: 
   V3targets:

Jetzt müssen wir den SNMP Agent in VMware ESXi aktivieren.

# esxcli system snmp set -c public -e true

Die Ausgabe sieht jetzt anders aus.

# esxcli system snmp get

   Authentication: 
   Communities: public
   Enable: true
   Engineid: 00000063000000a100000000
   Hwsrc: indications
   Largestorage: true
   Loglevel: info
   Notraps: 
   Port: 161
   Privacy: 
   Remoteusers: 
   Syscontact: 
   Syslocation: 
   Targets: 
   Users: 
   V3targets:

SNMP MIB module file download

WebDav mount im Dateisystem

Unter Linux kann man ein WebDav im Dateisystem einbinden und damit direkt Datei speichern. Einige Cloud Speicheranbieter bieten die Möglichkeit von WebDav an.

sudo apt install dav2fs

Nach der Installation sollten wir noch einige Parameter ändern. Zuerst die Mount Einstellungen.

sudo vim /etc/fstab

https://webdav.hidrive.strato.com/ /mnt/hidrive/ davfs noauto,user,rw 0 0
https://webdav.mediencenter.t-online.de/ /mnt/t-online/ davfs noauto,user,rw 0 0

Dann die Zugangsdaten für WebDav bei Beispeil von HiDrive und T-Online Mediencenter.

sudo vim /etc/davfs2/secrets

/mnt/hidrive/ benutzer passwort
/mnt/t-online/ benutzer@t-online.de passwort

Hier noch einige Einstellung für Dav2fs.

sudo vim /etc/davfs2/davfs2.conf

use_locks 0
cache_size 1
table_size 4096
gui_optimize 1
trust_server_cert /etc/davfs2/certs/hidrive.pem

Kommt es zu einem Fehler, so muss das Zertifikat hinterlegt werden.

/sbin/mount.davfs: wir trauen dem Zertifikat nicht
/sbin/mount.davfs: das Einhängen schlug fehl;
Server certificate verification failed: issuer is not trusted

echo|openssl s_client -connect webdav.hidrive.strato.com:443 |openssl x509 -out /etc/davfs2/certs/hidrive.pem

USB Kamera Streamer

Wir wollen eine USB Webcam oder die RaspberryPi Kamera welche unter /dev/video0 bereit steht, im Netzwerk als Stream bereitstellen.

sudo apt-get update
sudo apt-get install build-essential libjpeg-dev imagemagick subversion libv4l-dev checkinstall

Quellcode herunterladen und kompilieren

svn co https://mjpg-streamer.svn.sourceforge.net/svnroot/mjpg-streamer mjpg-streamer
cd mjpg-streamer/mjpg-streamer
make USE_LIBV4L2=true
VERSION=$( sed -n '/SOURCE_VERSION/s/^.*"\(.*\)".*$/\1/gp' < mjpg_streamer.h )
REVISION=$( svnversion -cn | sed "s/.*://" )
sudo checkinstall --pkgname=mjpg-streamer --pkgversion="$VERSION+$REVISION~checkinstall" --default

MJPG-Streamer kann nun auf der Kommandozeile gestartet werden.

export LD_LIBRARY_PATH=/usr/local/lib
mjpg_streamer -i "/usr/local/lib/input_uvc.so -d /dev/video0 -f 15 -r 640x480" -o "/usr/local/lib/output_http.so -p 8090 -w /usr/local/www -c benutzername:passwort"

MJPG-Streamer

Raspberry Pi Zeitraffer Aufnahmen

Dieser kurze Beitrag beschreibt nicht die Installation der Kamera, sondern nur die Zeitraffer-Aufnahmen.

Mit dem Befehl lassen sich über einen definierten Zeitraum in bestimmten Zeitabständen Bilder aufnehmen:

raspistill -o img_%04d.jpg -tl 5000 -t 36000

Das Kommando ist aus mehreren Befehlen zusammengesetzt

Der Parameter -o definiert den Speicherort und den Dateinamen des Bildes. Es benennt die aufgenommenen Bilder mit einer fortlaufenden 4-stelligen Zahl.

Der Parameter -tl 5000 definiert die Zeitabstände zum Aufnehmen der Fotos, alle 5 Sekunden wird ein Bild erstellt.

Der Parameter -t 36000 definiert die Zeitdauer, wie lange das Programm laufen soll.

Die Zeitraffer-Aufnahmen stellen eine Vielzahl an einzelnen Bildern dar, die auch in ein Video zusammengeführt werden können. Dafür verwendet ihr den Befehl, um den Film video.mp4 zu erstellen.

ffmpeg -qscale 5 -r 4 -b 9600 -i img_%04d.jpg video.mp4

Raspberry Pi Kamera als Stream Server

Bei diesem Projekt verwende ich eine Raspberry Pi Kamera als Stream Server. Das Betriebssystem ist Rasbian Jessy Lite.

Mit Raspberry Konfig haben wir das Kamera Modul aktiviert.

sudo raspi-config

Ein erster Snapschuss sollte schon jetzt möglich sein.

raspistill -o /tmp/snapshot.jpg

Jetzt können wir die Installation starten.

Zuerst die PublicKey für Apt-Get hinzufügen.

curl http://www.linux-projects.org/listing/uv4l_repo/lrkey.asc | sudo apt-key add -

Die Installationsquellen für Apt-Get hinzufügen.

sudo sh -c 'echo "deb http://www.linux-projects.org/listing/uv4l_repo/raspbian/ jessie main" > /etc/apt/sources.list.d/uv4l.list'

Jetzt kann die Installaion starten.

sudo apt-get update
sudo apt-get install uv4l uv4l-raspicam uv4l-raspicam-extras

Der Dienst sollte jetzt laufen.

sudo service uv4l_raspicam status

oder man kann das Device /dev/video0 mit dem Programm uv4l erstellen.

uv4l --driver raspicam --auto-video_nr --width 640 --height 480 --encoding jpeg

Jetzt erstellen wir ein Foto in /tmp/snapshot.jpg.

dd if=/dev/video0 of=/tmp/snapshot.jpg bs=11M count=1

Jetzt kann man Motion oder einen anderen StreamServer verwenden.

Wir verwenden einen WebRTC StreamServer.

sudo apt-get install uv4l-webrtc

Mit VLC oder dem Firefox kann man sich den Stream ansehen.

vlc http://raspberrypi:8080/stream/video.mjpeg

Motion bietet sehr viel mehr, wie eine Bewegungserkennung und Alarm.

sudo apt install motion

Es gibt auch eine Beispielkonfiguration.

wget http://linux-projects.org/downloads/examples/motion.conf

Jetzt können wir Motion starten.

LD_PRELOAD=/usr/lib/uv4l/uv4lext/armv6l/libuv4lext.so motion -c /home/pi/motion/motion.conf

Im Webbrowser kann unter der Adresse http://raspberrypi:8081/stream.mjpg die Kamera aufzurufen.

Die LED an der Kamera lässt sich deaktivieren, indem der Eintrag disable_camera_led in der Konfig Datei gesetzt wird.

sudo sh -c 'echo "disable_camera_led=1" >> /boot/config.txt'

Weitere Informationen zur UV4L Installation.

Check_MK Raw Server Edition installation

Diese Anleitung beschreibt die Installation von Check_MK Raw Server Version 1.2.8 auf Ubuntu Server 16.04 LTE.

Die Installation von Ubuntu Server 16.04 wird einfach mit Standardvorgaben installiert.

Zusätzlich installieren wird ein extra Tool, welcher alle Abhängigkeiten zu Check_mk installiert.

sudo apt-get install gdebi-core

Auf der Download Seite von Check_mk finden wir die Version 1.2.8 Raw, welche 100% kostenlos ist.

Wir laden die 64bit Version für Ubuntu 16.04 runter.

wget https://mathias-kettner.de/support/1.2.8p18/check-mk-raw-1.2.8p18_0.xenial_amd64.deb

Jetzt können wir Check_mk mit allen Abhängigkeiten installieren.

sudo gdebi check-mk-raw-1.2.8p18_0.xenial_amd64.deb

Check_mk verwendet den Apache mit mod_proxy, welches aktiviert werden sollte.

sudo a2enmod proxy_http

Nach einem Neustart ist die Installation schon fast abgeschlossen.

sudo service apache2 restart

Wir können die installierte Version ausgeben.

omd version

Check_mk bietet die Möglichkeit unterschiedliche Seiten gleichzeitig zu betreiben. Wir erstellen eine Beispielseite „mysite“.

sudo omd create mysite
sudo omd start mysite

Jetzt kann man die Seite im Browser erreichen. http://HOSTNAME/mysite/ Der Login lautet „omdadmin“ und das Password ist „omd“.

Ein Update auf eine neue Check_mk Version ist immer möglich. Das Versionsupdate wird in Schritten durchgeführt.