Wir bauen einen Raspberry Pi Konsolenserver
Warum einen Konsolenserver selbst bauen?
Stellen Sie sich Folgendes vor: Sie arbeiten an der Konfiguration Ihrer Router im Rechenzentrum. Sobald Sie die neue Konfiguration aktivieren, wird Ihre Verbindung abgebrochen. Was nun? Wenn Sie darauf vorbereitet sind, besitzen Sie einen Konsolenserver mit einer redundanten Netzwerkverbindung, über den Sie mit einem seriellen Kabel Ihre Router wieder erreichen können. Leider sind diese Konsolenserver recht teuer und unflexibel. Also haben wir beschlossen, unseren eigenen zu bauen.
Der Entwurf des Konsolenservers wurde mir überlassen. Das auf einem Raspberry Pi aufbauende System muss in der Lage sein, mit den seriellen Schnittstellen unserer Switche und Router kommunizieren zu können. Nur so ist sichergestellt, dass wir über unsere redundante Netzwerkanbindung die Geräte noch erreichen, wenn sie über die Hauptleitungen nicht mehr erreichbar sind. Da ein Raspberry Pi von sich aus über keine seriellen Schnittstellen verfügt, setzen wir Adapterkabel ein, welche USB auf Seriell wandeln.
Eine weitere Aufgabe des Konsolenservers ist die Überwachung unserer Racks: Er checkt die Umgebungstemperatur und Luftfeuchtigkeit des Racks und prüft regelmäßig, ob die seriellen Schnittstellen zu den Switchen und Routern noch erreichbar sind.
Für den Entwurf musste ich die richtigen Komponenten für den Server finden und sie dann mit selbst entworfenen Teilen zusammenfügen. So lernte ich, wie man CAD-Software verwendet, um Teile zu entwerfen, die 3D gedruckt werden können.
Um einen konstanten Betrieb sicherzustellen, benutzen wir eine zusätzliche Schaltung für die Bereitstellung einer redundanten Stromversorgung (Dual Ideal Diode Supply). Auf diese Weise können wir den Konsolenserver weiter nutzen, selbst wenn eine der beiden Stromversorgungen im Rechenzentrum oder ein einzelnes Netzteil ausfällt. Wir verwenden ausschließlich originale Raspberry Pi Netzteile, da wir in der Vergangenheit Probleme mit der Zuverlässigkeit der Stromversorgung hatten, die durch Netzteile von Drittanbietern stammten.
Aufbau des Konsolenservers
Der Server besteht aus mehreren Teilen: einem Gehäuse, einem Raspberry Pi, einem Lüfter, einer Ein/Aus-Taste, einem Temperatursensor und einem Stromanschluss. Um alles zusammen zu fügen werden zwei 3D gedruckte Teile benötigt, nämlich eine Plattform und eine Blende (FreeCAD Dateien verlinkt). Außerdem müssen Jumper-Kabel an die Elektroteile gelötet werden.
Löten / Verkabeln
Um den Lüfter und den Druckknopf an den Raspi anzuschließen, müssen erst die Jumper-Kabel angelötet werden. Von 9 Jumper-Kabeln und von den zwei Lüfter-Kabeln muss das Ende abgeschnitten werden.
An den Pluspol des Druckknopfs wird der 330R Widerstand zwischen Kabel und Pin gelötet. An die restlichen Pins und an die Lüfter Kabel werden dann Jumper-Kabel gelötet.
Dann werden die Embedding Muttern mit dem Lötkolben erhitzt und in die Plattform eingeschmolzen wie im Bild:
Jetzt kann man den Raspi in seine Halterung einrasten und den Dual USB-C Supply festkleben. Wenn das erledigt ist, kann man den Lüfter festschrauben. Die 5mm Abstandshalter kommen zwischen den Lüfter und die Plattform.
Vor der Verkabelung ist es schlau, den Druckknopf und den Ethernet Port Extender in die Blende einzubauen. Es ist möglich, dass die Schraubenlöcher im 3D Druck nicht groß genug werden, also müssen sie dann vergrößert werden.
Die Jumper-Kabel können dann, wie in der Tabelle, angeschlossen werden. pinout.xyz wird hier sehr hilfreich sein.
Temperatur Sensor Vcc | Pin 2 | 5v Power |
Lüfter Pluspol | Pin 4 | 5v Power |
Druckknopf Pin | Pin 5 | GPIO 3 |
Lüfter Minuspol | Pin 6 | Ground |
Temperatur Sensor Data | Pin 7 | GPIO 4 |
Druckknopf LED Pluspol | Pin 8 | GPIO 14 |
Temperatur Sensor Ground | Pin 9 | Ground |
Druckknopf LED Minuspol | Pin 14 | Ground |
Druckknopf Pin | Pin 34 | Ground |
Festkleben
Danach kann man den USB Hub, die Plattform und den Temperatursensor mit einer Heißklebepistole festkleben, wie im Bild (Der Temperatursensor ist im Bild hinter dem USB Hub).
Software Installation
Genau so wichtig wie die Hardware ist natürlich auch die Software. Wir benutzen RaspiOS und konfigurieren den Bootloader, um Funktionalität für die Ein/Aus-Taste freizuschalten. Außerdem stellen wir einen SSH Zugang bereit.
Image runterladen und konfigurieren
Unter https://downloads.raspberrypi.org/raspios_lite_armhf_latest kann man ein RaspiOS Image runterladen. Das Image muss vor dem ersten Booten noch editiert werden. Man kann das Image auf ein Flash Drive oder eine SD Karte flashen und dann editieren. Linux-Nutzer können das Image mit kpartx -s -av <image name>.img
mounten und so editieren.
SSH Konfiguration
Um den SSH-Zugang zu ermöglichen muss man eine leere Datei namens "ssh" unter /boot/firmware/ anlegen. SSH Public Keys können dann in home/pi/.ssh/authorized_keys kopiert werden (ein Public Key pro Zeile).
Nutzer Konfiguration
Um sich per SSH einloggen zu können muss ein Nutzer erstellt werden, dafür muss man eine Datei namens "userconf" in der Boot Partition anlegen und diese folgendermaßen bearbeiten:
nutzer:verschlüsseltes-passwort |
Das verschlüsselte Passwort generieren Sie wie folgt im Terminal:
echo 'meinpasswort' | openssl passwd -6 -stdin |
Bootloader Konfiguration
/boot/firmware/config.txt benötigt die folgenden Zeilen:
dtoverlay=gpio-shutdown # dtoverlay=disable-bt # dtoverlay=disable-wifi enable_uart=1 |
gpio-shutdown ist erforderlich, damit der Raspberry Pi mit der Power-Taste ausgeschaltet werden kann. enable_uart aktiviert eine serielle Konsole, die wir an die Status-LED des Einschaltknopfes anschließen. Auf diese Weise flackert das Licht, während das Gerät hochfährt, und bleibt ansonsten konstant.
Um WiFi oder Bluetooth auszuschalten können einfach die # entfernt werden.
Hostname Konfiguration
Der gewünschte Hostname muss in der /etc/hostname eingetragen werden.
/etc/hosts muss dann außerdem wie folgt ergänzt werden:
127.0.0.1 localhost |
Mit diesem Image lässt sich der Raspberry Pi booten. Wenn alles funktioniert, sollten auch die Netzwerkverbindung und der SSH-Zugang klappen.
Weitere Installation
Die folgenden Befehle können für das Setup angepasst werden:
# Passwort Login für SSH nicht mehr zulassen # (Stelle sicher das ein funktionierender SSH Key hinterlegt ist) sed 's/#PasswordAuthentication yes/PasswordAuthentication no/' -i /etc/ssh/sshd_config
sed 's/# de_DE.UTF-8 UTF-8/de_DE.UTF-8 UTF-8/' -i /etc/locale.gen locale-gen de_DE.UTF-8 update-locale LANG=de_DE.UTF-8
timedatectl set-timezone Europe/Berlin
chpasswd <<<"pi:<passwort>"
apt update apt upgrade --yes
systemctl disable avahi-daemon.service systemctl disable wpa_supplicant systemctl disable bluetooth systemctl disable hciuart systemctl disable inetd systemctl disable alsa-utils |
Temperatursensor Funktion
Nachdem ein Temperatursensor angeschlossen wurde, möchten wir natürlich auch gerne Temperaturwerte ablesen. Dies ist mit der folgenden Python Funktion leicht möglich. Natürlich muss aber erst Python auf dem Pi installiert werden.
Paket Installation
apt install python3-dev python3-pip libgpiod2 --yes
pip3 install adafruit-circuitpython-dht
Python Funktion
In diesem Beispiel wird davon ausgegangen, dass der Sensor an GPIO 4 angeschlossen ist.
Wenn der Sensor an einem anderen GPIO Pin hängt, muss man SENSOR_PIN anpassen.
import adafruit_dht import board SENSOR_PIN = board.D4 DHT_SENSOR = adafruit_dht.DHT22(SENSOR_PIN, use_pulseio=False) def check_temp(): """Get temperature and Humidity from sensor.""" try: humidity = DHT_SENSOR.humidity temperature = DHT_SENSOR.temperature sensorok = 1 exceptBaseException as e: humidity = 0 temperature = 0 sensorok = 0 return(humidity, temperature, sensorok) |
- 1 Raspberry Pi 4b
- 1 IVETTO 7 Port USB Hub
- 1 19" Gainta 1HE Gehäuse
- 1 Fydun Druckknopf
- 1 USB Flash Drive
- 1 Set Raspberry Pi Kühlkörper
- 1 0.5 Meter USB-C to USB-C kabel
- 1 DHT22 Temperatur/Luftfeuchtigkeit Sensor
- 1 VHBW Ethernet Port Extender
- 1 50x50x15 3D Drucker Radiallüfter
- 1 8086 dual ideal diode USB-C splitter
- 9 Jumper Wires
- 2 M3 embedding Muttern
- 2 M3 20mm Schrauben
- 2 5mm Schrauben Abstandshalter
- 1 330R Widerstand
- 2 Raspi Netzteile
- Lötkolben
- Lötzinn
- Heißklebepistole
- 3D Drucker