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/root/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

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

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
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 /

Ubuntu Desktop 18.04 mit xRDP und Sound

In Ubuntu 18.04 ist die xRDP Version 0.9.5 enthalten. Mit dieser Version ist es möglich auch Sound per RDP zu übertragen.

Als Desktop wird bei mir Ubuntu Mate verwendet. Natürlich können Sie auch andere Manager verwenden, aber Wayland ist zur Zeit noch nicht möglich.

Die Installation von XRDP erfolgt mit APT.

sudo apt install xrdp xorgxrdp xrdp-pulseaudio-installer

Für die Wiedergabe des Sound wird Plusaudio verwendet. Leider muss man für XRDP zwei Module selbst compilieren. Dafür brauchen wir die Quellen von Pulseaudio aus dem Archiv.

cd /tmp
apt source pulseaudio
cd pulseaudio-11.1
./configure

Nach erfolgreichem Kompilieren von Pulseaudio, kann man die XRDP Module für Pulseaudio kompilieren und installieren. Das Ubuntu Paket xrdp-pulseaudio-installer enthält die Quellen von
Github.

cd /usr/src/xrdp-pulseaudio-installer/
sudo make PULSE_DIR="/tmp/pulseaudio-11.1"
sudo install -s -m 644 module-xrdp-sink.so /usr/lib/pulse-11.1/modules
sudo install -s -m 644 module-xrdp-source.so /usr/lib/pulse-11.1/modules

Ein wichtiger Hinweis befand sich auf Github. Scheinbar funktioniert die Soundausgabe nur, wenn das Host-System eine reale Soundkarte verbaut hat. Server oder virtuelle Umgebung haben eigentlich keine Soundkarte On-Board. Ohne Soundkarte scheitert aber die Wiedergabe mit Pulseaudio und damit auch die Weiterleitung zum Client per RDP Verbindung.

Weitere Anleitungen:
How to set up audio redirection
Audio Output Virtual Channel-support in XRDP

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 640 --height 480 --encoding jpeg

Die Einstellungen kann man in der Konfig Datei speichern.

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

encoding h264
width 640
height 480
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

Entfernen aller Pakete, die von dpkg mit rc markiert sind

Es gibt einen signifikanten Unterschied zwischen Apt remove oder purge. Apt (dpkg) remove entfernt nur die Paket-Binärdateien. Die Konfigurationsdateien des Pakets werden nicht gelöscht. Solche Pakete haben normalerweise den Zustand rc.

Mit dpkg können Sie den Status aller Pakete anzeigen.

dpkg --list |grep "^rc"

Was bedeutet „rc“? Dieser Zustand bedeutet, dass die Konfigurationsdateien noch nicht entfernt wurden, sondern nur die Binärdateien.

Rc entspricht…

R: Die Binärdateien wurde zur Entfernung markiert.
C: Die Konfigurationsdateien sind weiterhin vorhanden.

Lassen Sie uns die Pakete extrahieren, welche mit „rc“ markiert sind.

dpkg --list |grep "^rc" | cut -d " " -f 3

Nun entfernen wir alle Pakete, die als rc markiert sind.

dpkg --list |grep "^rc" | cut -d " " -f 3 | xargs sudo dpkg --purge

Ubuntu Pakete entfernen welche für die Entfernung markiert sind

Das Tool dpkg gibt den Status „rc“ aus. Was bedeutet der Status und welche Maßnahmen sind zu ergreifen?

– r: das Paket zum Entfernen markiert
– c: die Konfigurationsdateien sind derzeit im System vorhanden

Die Idee ist, markierte Pakete auszuwählen und dann Apt „purge“-Befehl für die ausgewählten Pakete auszuführen:

dpkg --list | grep "^rc" | cut -d " " -f 3 | xargs sudo apt-get -y purge

Ubuntu LTS 14.04 auf 16.04.1 Update nicht möglich

Vielleicht haben Sie auch das Problem, dass ein Update von Ubuntu 14.04. auf 16.04.1 nicht möglich ist.

Zuerst brauchen wir die Update Tools.

sudo apt-get install update-manager-core

Jetzt sollte das Update von LTS 14.04 auf 16.04.1 möglich sein.

sudo do-release-upgrade

Checking for a new Ubuntu release
No new release found

Es wird keine neue Version gefunden, obwohl Ubuntu 16.04.1 veröffentlicht ist. Das Problem liegt in der Freigabe, welche noch nicht erteilt wurde. Dazu muss die Version in der Text Datei veröffentlicht werden.

Die Einstellung welche Version verwendet wird, sind in der Datei /etc/update-manager/release-upgrades gespeichert.

Die Quelle ist in der Datei /etc/update-manager/meta-release definiert. Die LTS Quelle lautet…

http://changelogs.ubuntu.com/meta-release-lts

Die Veröffentlichung wird erst eine Woche nach dem Relese Datum durchgeführt! Will man nicht warten, kann man auf Ubuntu 14.06 ein Update durchführen.

sudo do-release-upgrade --devel-release

Hier wird auf diese Freigabe zugegriffen.

http://changelogs.ubuntu.com/meta-release-lts-development

Will man von Ubuntu 14.04 auf Ubuntu 14.10 updaten, so muss man die Einstellungen von LTS auf Normal ändern.

sudo sed -i s/Prompt=lts/Prompt=normal/g /etc/update-manager/release-upgrades

Quellen: askubuntu.com #1 #2

Ubuntu Pakete sichern

Will man den Server – Anbieter wechselt, so muss man alle Ubuntu Pakete auf ein neues System installieren.

Zu erst Exportieren wird die Liste alle installieren Paket in eine Text-Datei.

sudo dpkg --get-selections > my-packages.list

Auf dem neuen Server kann man die Ubuntu Paket mit der Liste ganz einfach installieren.

sudo dpkg --set-selections < my-packages.list

Jetzt noch die Updates installieren und Abhängigkeiten prüfen.

sudo apt-get -y update
sudo apt-get dselect-upgrade

Weitere Arbeitsschritte:

- Einstellung aus dem Verzeichnis /etc/* kopiert (ggf. anpassen)
- Benutzerdateien aus Verzeichnis /home/* kopieren
- Anwendungsdaten kopieren...
Apache in /var/www/
MySQL in /var/lib/mysql/
Check_MK Agent in /var/lib/check_mk_agent/

Ubuntu Paket mit fixer Version installieren

Manchmal ist es notwendig eine bestimmte Version von einem Programm zu verwenden und nicht automatisch auf die neuste Version zu wechseln.

1. Alte Version entfernen

sudo apt-get remove firefox

2. Versionen anzeigen lassen

sudo apt-cache madison firefox
apt-cache show firefox | grep Version

Version: 40.0+build1-0ubuntu0.14.04.1
Version: 38.0+build2-0ubuntu2

3. Version installieren

sudo apt-get install firefox=38.0\*
sudo apt-get install firefox=38.0+build2-0ubuntu2

4. Updates auf neue Version verhindern

sudo apt-mark hold firefox

Sollte man sich doch entscheiden auf die aktuelle Version zu wechseln, kann man den Vorgang auch rückgängig machen.

sudo apt-mark unhold firefox
sudo apt-get upgrade

Ubuntu Update Steuerung mit Alias

Debian und Ubuntu verwenden als Paketverwaltung das Tool „apt-get“. Um ein System auf den aktuellen Stand zu bringen sind immer folgende Schritte notwendig.

1.) Änderungen der Paketliste laden

sudo apt-get update

2.) Ubuntu Distribution updaten

sudo apt-get dist-upgrade

3.) Aufräumen

sudo apt-get --purge autoremove
sudo apt-get autoclean

Diese drei Schritte kann man in einem Kommando als Alias zusammen fassen.

vim ~/.bash_aliases

alias update="sudo apt-get update && sudo apt-get dist-upgrade -y && sudo apt-get --purge autoremove && sudo apt-get autoclean"

Nach einem Re-Login in die BASH kann man alle Schritte mit einem Befehl update starten.