Raspberry Pi Zero W mit Raspbian Lite als Headless Server

Ziel ist es einen Raspberry Pi Zero W (also mit WLAN) ohne Monitor und Tastatur zu installieren.

Zuerst laden wir uns das Betriebssystem ist Rasbian Lite auf unseren PC.

Der Download ist als ZIP-Datei möglich.

Nach dem Entpacken kann man die Datei auf Windows per Win32DiskImager auf eine SD Karte übertragen.

Für Linux gibt es eine Anleitung.

Die ZIP-Datei entpacken und das Image auf eine SD Karte übertragen.

unzip -p 2018-06-27-raspbian-stretch-lite.zip | sudo dd of=/dev/mmcblk0 bs=4M conv=fsync

Nach dem Übertragen müssen wir noch das WLAN und SSH einrichten, damit wir Headless sofort den Raspberry Pi Zero W starten können.

Wir entfernen die SD Karte und stecken die Karte wieder in den PC. Bei vielen Betriebssystem erfolgt das Mounten automatisch.

Auf der SD Karte gibt es zwei Partitionen (boot/root).

Die Boot Partition hat das vfat Format, die Root Partition das ext4 Format.

Die WLAN Einstellungen (SSID, Passwort) werden in der Root Partition hinterlegt.

sudo vim /media/user/rootfs/etc/wpa_supplicant/wpa_supplicant.conf

network={
   ssid="WLAN-SSID"
   psk="WLAN-PASSWORT"
}

Für den automatisch start des SSH Server müssen wir eine leere Datei in der Boot Partition erstellen.

touch /media/user/boot/ssh

Jetzt können wir die SD Karte in den Raspberry Pi Zero W stecken und starten. Monitor und Tastatur ist nicht notwendig.

Jetzt können wir uns per SSH zu dem Paspberry Pi verbinden. Das Kennwort für den Benutzer „pi“ lautet „raspberry“.

ssh pi@192.168.10.123

Mit dem Tool Raspi-Config können wir weitere Einstellungen vornehmen.

sudo raspi-config

Diese Punkte sollten wir ändern.

– Change User Password
– Network Options / Hostname
– Localisation Options / Change Locale
– Localisation Options / Timezone
– Localisation Options / Keyboard Layout
– Localisation Options / Wi-fi Country

Die Pakete sollte man aktualisieren.

sudo apt update
sudo apt dist-upgrade

Die Tools (htop, iotop, iftop und vim) finde ich sehr sinnvoll.

sudo apt install vim htop iotop iftop

Will man die Lebenszeit der SD Karte verlängern und Fehler bei einem Spannungsverlust vorbeugen, sollte man die Schreibvorgänge auf die Karte unterbinden.

Auf das Swap File sollte wir deshalb verzichten.

sudo systemctl stop dphys-swapfile
sudo systemctl disable dphys-swapfile
sudo rm /var/swap

Die Partitionen können wir auf Read Only (ro) setzen und die Log-Dateien in dem RAM schreiben.

sudo vim /etc/fstab

proc              /proc     proc    defaults              0   0
PARTUUID=xxxx-01  /boot     vfat    ro,defaults           0   2
PARTUUID=xxxx-02  /         ext4    ro,defaults,noatime   0   1
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that
 
tmpfs   /tmp            tmpfs   nosuid,nodev,size=20M    0   0
tmpfs   /var/log        tmpfs   nosuid,nodev,size=50M    0   0
tmpfs   /var/tmp        tmpfs   nosuid,nodev,size=10M    0   0

Optional kann man diese Installationen entfernen.

sudo apt remove --purge cron logrotate triggerhappy dphys-swapfile fake-hwclock samba-common
sudo apt autoremove --purge

Einige Dienste schreiben Informationen auf das Dateisystem. Das müssen wie wieder ermöglichen.

sudo rm -rf /var/lib/dhcp/ /var/spool /var/lock /var/cache/unbound/resolvconf_resolvers.conf
sudo ln -s /tmp /var/lib/dhcp
sudo ln -s /tmp /var/spool
sudo ln -s /tmp /var/lock
sudo ln -s /tmp/resolv.conf /etc/resolv.conf
sudo ln -s /tmp/resolvconf_resolvers.conf /var/cache/unbound/resolvconf_resolvers.conf

Die automatischen Jobs sollten wir deaktivieren. Dazu entziehen wir Ihnen einfach die Execute Rechte.

sudo chmod -x /etc/{cron.hourly,cron.daily,cron.weekly,cron.monthly}/*

Der Dienst Sshd möchte gerne in Datei /var/log/lastlog schreiben. Diese Datei müssen wir nach einem Neustart in /var/log anlegen.

sudo vim /etc/rc.local

touch /var/log/lastlog /var/spool/rsyslog
chgrp utmp /var/log/lastlog
chmod 664 /var/log/lastlog
bash -c 'mkdir -p /var/log/{apache2,fsch,apt,ConsoleKit,watchdog}'

Nach dem Neustart ist die SD Karte schreibgeschützt und kann durch einen Stromausfall
nicht mehr beschädigen werden.

sudo reboot

Der Re-Mount als Read-Write ist zur Lautzeit möglich.

sudo mount -o remount,rw /dev/mmcblk0p1 /boot
sudo mount -o remount,rw /dev/root /

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 oder Ubuntu Server für den Raspberry Pi.

TVheadend 4.0.8 Raspbian Light
TVheadend 4.2.7 Ubuntu Classic Server 16.04

Nach dem Download sollte das Image entpackt und auf eine SD Karte kopiert werden.
Die SD Karte wird im Raspberry Pi eingesetzt und gestartet. Nach dem Start sollten die aktuellen Updates und Patches installieren werden.

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

Ab Version 4.2.7 ist dieser Key notwendig.

curl https://doozer.io/keys/tvheadend/tvheadend/pgp | sudo apt-key add -

sudo apt-get install apt-transport-https

Bei Rasbian wird diese Einstellung verwendet.

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

Bei Ubuntu Server 16.04 wird diese Einstellung verwendet.

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

Ab Version 4.2.7 liegen die Pakete für ARMv7 (armhf) hier:

sudo sh -c 'echo "deb https://apt.tvheadend.org/stable $(lsb_release -sc) main" | tee -a /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.

Die Metadaten für die Aufzeichnung werden in dem Verzeichnis /home/hts/.hts/tvheadend/dvr/log gespeichert.

Der Zugriff auf die Kanalliste vom Live Stream mit VLC erfolgt über die Url.

http://login:passwort@192.168.187.100:9981/playlist/channels

Noch ein Hinweis für die Senderlogos. Leider ist die Einrichtung sehr schlecht beschrieben. Hier meine Konfiguration unter dem Menü „Configuration / General / Base / Picon“.

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“.

Die Senderlogos findet man im Internet.

Als Client Anwendung für den Zugriff auf TVheadend gibt es unterschiedliche Plugins.

Ubuntu enthält im Repository den Kodi Mediaplayer und das Plugin für TVheadend.

sudo apt install kodi kodi-pvr-hts

Die Einstellung der IP-Adresse für Tvheadend ist nicht einfach zu finden.

Add-ons > PVR clients | All > Tvheadend HTSP Client > Enable + Configure

Die Sprache, Tastatur und Zeitzone kann man in Kodi auch ändern.

Settings > Interface settings > Regional > Language, Keyboard layouts, Timezone

Raspberry Pi Kamera als Stream Server

In diesem Projekt verwende ich einen Raspberry Pi (Zero W) mit Raspbian als Betriebssystem und einer Raspberry Pi Kamera.

Das Raspberry Pi wird als Stream-Server konfiguriert. Die Aufnahmen der Kamera werden später von Motion erfasst. Motion kann die Bewegungen im Bild erkennen und einen Alarm auslösen.

Die Vorarbeiten (Installation und Konfiguration) von Raspbian Lite sind grundlage für dieses Projekt.

Mit Raspberry Konfig müssen wir das Kamera Modul aktiviert.

sudo raspi-config

Interfacing Options / Camera -> Enable
Advanced Options / Memory Split = 128MB GPU

Den Neustart bitte nicht vergessen!

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/lpkey.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/stretch stretch 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 1280 --height 720 --encoding jpeg

Die Einstellungen kann man in der Konfig Datei speichern.

sudo vim /etc/uv4l/uv4l-raspicam.conf

encoding = h264
width = 1280
height = 720
framerate = 20

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

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

Quelle: Linux-Projects

Weiterlesen