Raspberry als Zeitserver

Ob Laptop, Webcam oder IoT Device, nahezu alle Geräte in einem Netzwerk synchronisieren ihre Systemzeit üblicherweise mit einem NTP-Server aus dem Internet. Möchten wir dies unterbinden oder benötigt dank nicht vorhandenem Internetzugang eine lokale Alternative, bietet der Raspberry eine einfache Lösung.

Installation

Der Zeitserver und Client für den PI ist äußerst schlank und schnell installiert. Anschließend bezieht das System automatisch die aktuelle Uhrzeit und stellt diese wiederum als Server für andere Geräte zur Verfügung.

#Den Dienst installieren
sudo apt-get install ntp ntpdate

Nach erfolgreicher Installation können wir für einen ersten Test einen Abgleich mit einem externen NTP-Server anfordern.

#Zeitabgleich mit den in der ntp.conf eingetragenen Servern (meistens debian.pool.ntp.org)
sudo ntpd -qg

#Zeitabgleich mit einem bestimmen NTP-Server, z.B. aus Deutschland
sudo ntpdate -u de.pool.ntp.org

#Mögliche Antwort nach wenigen Sekunden
11 Dec 09:35:47 ntpdate[27127]: adjust time server 185.242.112.53 offset -0.005542 sec

War das Update erfolgreich, können wir anschließend unsere lokalen Geräte mit dem eigenen Server synchronisieren.

Clients einrichten

Unser NTP-Server stellt seinen Dienst unter seiner IP und dem Port 123 (UDP) bereit. Bei den meisten Client-Geräten reicht jedoch die Eingabe der Adresse in das passende Feld („Zeitserver“ oder „NTP-Server“).

#Adresse des Zeitservers für Clienten
<ip-meines-pis>:<Port>

#Beispiel
192.168.0.1 oder 192.168.0.1:123

Weitere Einstellungen für den NTP-Server

Welche externen NTP-Server zur Synchronisation in Verwendung sind, verrät uns der Befehl

ntpq -pn

Möchten wir andere Server hinzufügen oder Einstellungen ändern, ist hierfür die ntp.conf zuständig.

#Config bearbeiten
sudo nano /etc/ntp.conf

Für den Standort Deutschland sind natürlich die deutschen NTP Server bestens geeignet.

server 0.de.pool.ntp.org
server 1.de.pool.ntp.org
server 2.de.pool.ntp.org
server 3.de.pool.ntp.org

Nach dem Speichern sorgt ein Restart des Services für die Übernahme der Änderungen

#Dienst neu starten
sudo /etc/init.d/ntp restart

Timesyncd

Neuere Versionen des Raspberry Pi OS halten die Systemzeit bereits per timesyncd aktuell. Wer möchte, kann diesen nach der Installation von ntp nun unnötigen Dienst auch abschalten – oder einfach zur Sicherheit parallel laufen lassen.

#Service stoppen
systemctl stop systemd-timesyncd

#Autostart deaktivieren
systemctl disable systemd-timesyncd

Raspberry mit statischer IP

Verwenden wir unseren PI als (FTP-, Web-, Smarthome, …) Server, sollte dieser möglichst immer unter der selben IP erreichbar sein. Falls der verwendete DHCP Server (z.B. Router des Internetanbieters) jedoch keine dauerhafte Zuweisung erlaubt, können wir dem PI natürlich auch manuell eine statische IP verpassen.

IP finden und setzen

1. Die aktuelle IP (falls bereits mit einem Netzwerk verbunden) erfahren wir mit dem Befehl hostname

hostname -I

#Beispielantwort
192.168.1.10

oder alternativ per

ip r | grep default

#Beispielantwort
default via 192.168.1.1 dev eth0 proto dhcp src 192.168.1.10 metric 202 

In diesem Fall ist die erste IP der verwendete DNS-Server, die zweite die des PIs und eth0 steht für die Anbindung per LAN Schnittstelle.

2. Bei einer Standardinstallation von Raspian OS läuft auf unserem PI bereits ein DHCP-Dienst über den sich die Zuweisung unsere Wunsch-IP vornehmen lässt.

#DHCP Status testen - es sollte eine Meldung wie "Active: active (running)" erscheinen
sudo service dhcpcd status

#DHCP Konfiguration editieren
sudo nano /etc/dhcpcd.conf

3. Scrolle bis an das Ende der Datei, bis ein auskommentiertes Beispiel für eine mögliche Konfiguration erscheint.

# Example static IP configuration:
#interface eth0
#static ip_address=192.168.0.10/24
#static ip6_address=fd51:42f8:caae:d92e::ff/64
#static routers=192.168.0.1
#static domain_name_servers=192.168.0.1 8.8.8.8 fd51:42f8:caae:d92e::1

Entsprechend dem Beispielschema fügen wir direkt darunter unsere eigenen Daten ein, wobei wir bei interface entweder eth0 für Ethernet (LAN) oder wlan0 für Wifi verwenden. Bei routers und domain_name_servers steht üblicherweise die selbe IP oder Du verwendest als DNS alternativ z.B. den Server von Google unter 8.8.8.8 oder 1.1.1.1 von Cloudflare.

#Generisches Beispiel
interface <eht0 oder wlan0>
static ip_address=<Deine gewünschte IP>/24
static routers=<IP des Routers>
static domain_name_servers=<DNS>
#Beispiel
interface eht0
static ip_address=192.168.0.10/24
static routers=192.168.0.1
static domain_name_servers=8.8.8.8

Wichtig ist natürlich eine IP zu verwenden die noch im Netzwerk frei ist! (kann zuvor mit PING überprüft werden)

Anschließend den Editor mit CTRL-X und dem bestätigen des Speicherns beenden (Y oder J) und den PI einmal neu starten.

sudo reboot

4. Nun beten, dass alles funktioniert hat und das Ergebnis am besten überprüfen.

hostname -I

Alternative ohne DHCP

Befindet sich im Netzwerk bereits ein anderer DHCP-Server, können wir uns diesen Dienst und damit ein paar unnötige Ressourcen auf unserem PI auch einsparen.

1. Hierzu stoppen und deaktivieren wir den Service dauerhaft

#Dienst stoppen
sudo service dhcpcd stop

#Autostart verbieten
sudo systemctl disable dhcpcd

2. Für die Zuweisung nutzen wir direkt die Konfigurationsdatei der Netzwerkgeräte

#Config öffen
sudo nano /etc/network/interfaces

und ergänzen den Inhalt um

#Meine statische Konfiguration:
auto eth0
allow-hotplug eth0
iface eth0 inet static
address <Deine gewünschte IP>
netmask 255.255.255.0
gateway <IP des Routers>
dns-nameservers <IP des gewünschten DNS>

Nach einem Neustart sollte der PI nun stets unter der vorgegeben IP erreichbar sein.

Ordnergrößen in Linux

Die Festplatte wird voller und voller, nur wo befinden sich all diese Dateien und welcher Ordner belegt wie viel Platz? Die Antwort verrät uns das systeminterne du – Disk Usage.

Größe eines bestimmen Ordners

sudo du -sh /var

#Ausgabe 
910M    /var

Durch den Parameter -s (summarize) wird die Größe des gesamten Ordnerns inklusive Unterordner bestimmt, während -h für eine verständliche (human-readable) Ausgabe sorgt.

Um den belegten Platz im aktuellen Ordner anzuzeigen setzen wir am Ende einfach einen Punkt. Die zusätzliche Eingabe von sudo ist eigentlich nur für systemweite Suchen oder Abfragen in geschützten Verzeichnissen notwendig.

sudo du -sh .

Um dem gesamten auf der Festplatte belegten Platz anzuzeigen

sudo du -hs / 

Unterordner

Ergänzen wir obigen Befehl um ein Slash-Sternchen erhalten wir die Größen aller Unterordner. Wer nochmals die Gesamtgröße sehen möchte, verwendet einfach -shc anstelle von nur -sh.

sudo du -sh /var/*

#Ausgabe
812K    /var/backups
143M    /var/cache
354M    /var/lib
4.0K    /var/local
0       /var/lock
415M    /var/log
4.0K    /var/mail
4.0K    /var/opt
0       /var/run
28K     /var/spool
20K     /var/tmp
256K    /var/www

Die größten Verzeichnisse finden

Um etwa die zehn größten Verzeichnisse zu finden, lässt sich die Ausgabe von du sortieren (sort -rh) und per head auf eine gewünschte Anzahl begrenzen. Eine jeweilige Pipe grenzt diese nachfolgenden Bearbeitungen vom eigentlichen du-Befehl ab.

sudo du -h /var/ | sort -rh | head -10

Dateien ausschließen

Möchtest du bestimmte Dateien von der Einberechnung ausschließen hilft der Zusatz –exclude weiter. Für alle ZIP-Dateien wäre dies etwa –exclude=“*.zip“.

sudo du -shc --exclude="*.zip" /var/*

Die wichtigsten Optionen im Überblick

-aPlatzbedarf aller Dateien anzeigen
-c Zeigt am Ende zusätzlich den summierte Platzbedarf der Suche
-h Formatiert die Zahlen anstelle von Kilobyte in besser lesbare Werte wie Megabyte oder Gigabyte
-sSummiert das Ergebnis auf einzelne Ordner
–excludeSchließt bestimmte Dateien aus
–timeEine zusätzliche Spalte mit dem Zeitpunkt der letzten Änderung

Alle weiteren Möglichkeiten findest du mit

du --help