Bananenkiste als Homeserver
Aus BraLUG-Wiki
Inhaltsverzeichnis |
Motivation
Mein alter Homeserver, welcher seit Jahren klaglos seinen Dienst erledigt hatte, will nicht mehr so richtig. Zwar ist das Ding nicht irreparabel kaputt, aber ab und zu sollte man auch mal mit der Zeit gehen. Also der richtige Augenblick die Hardware zu tauschen, das Betriebssystem frisch zu installieren und die gewünschten Server-Dienste neu aufsetzen...
Die folgenden Kapitel sind in erster Linie eine Dokumentation für mich selbst, nützen aber vielleicht auch anderen "Freizeitadministratoren", die Ähnliches vorhaben.
Hardware
"Mit der Zeit gehen..." heißt natürlich aktuelle, ressourcen-seitig ausreichende und, vor allem, stromsparende Hardware zu verwenden, denn immerhin soll der Server ja 24 Stunden, 7 Tage in der Woche arbeiten. Heutzutage ist es kein Problem ein geeignetes Board, welches mit dem Betriebssystem Linux läuft, zu finden. Meine Wahl fiel auf einen Banana Pro. An die, auf dem Board vorhandene, SATA-Schnittstelle wurde eine 2,5"-"WD Red"-Festplatte angeschlossen. Alles in einem entsprechenden Gehäuse eingebaut, ergibt es ein recht kompaktes Gerät, welches überall Platz finden sollte.
Linux-Betriebssystem installieren und konfigurieren
Installation
Als Linux-Distribution wird Bananian verwendet, was eigentlich ein Debian 7 ist, welche aber speziell für den Banana Pi/Pro angepasst wurde.
Die Installation gestaltet sich recht einfach. Nach dem Download des gepackten Images, ist es zu entpacken und auf eine passende SD-Karte zu kopieren (Beispiel für Linux :-)):
> dd if=bananian-1504.img of=/dev/<your-sd-card> bs=1M > sync
Danach ist die SD-Karte nur noch in den entsprechenden Slot des Banana Pi zu stecken, Netzwerk dran und Strom an! Das System sollte booten und eine IP-Adresse über DHCP beziehen. Zugriff auf das System hat man dann entweder lokal über die/den angeschlossene/n Tastatur/Monitor oder auch remote via ssh. Das root-Passwort lautet initial pi und sollte natürlich sofort geändert werden...
Konfiguration
Eine erste Konfiguration des Systems, kann man mit folgenden Tool erledigen:
> bananian-config
Folgende Einstellungen können verändert werden:
- das root-Passwort
- die Zeitzone
- den Zeichensatz
- den Rechnernamen
- einige grundlegende Hardware-Einstellungen
Danach sollte das System einmal durchgestartet werden.
Feste IP-Adresse
Ein Server sollte eine feste IP-Adresse haben. Dazu ist die Konfigurationsdatei /etc/network/interfaces anzupassen:
# interfaces(5) file used by ifup(8) and ifdown(8) auto lo iface lo inet loopback auto eth0 # dhcp configuration # iface eth0 inet dhcp # static ip configuration iface eth0 inet static address 10.1.1.42 netmask 255.255.255.0 gateway 10.1.1.1
Erläuterung: Die Netzwerkschnittstelle eth0 bezieht seine IP-Adresse nicht via DHCP (entsprechende Zeile einkommentiert), sondern wird fest auf (beispielsweise) 10.1.1.42, der Netzwerkmaske 255.255.255.0 und dem Gateway 10.1.1.1 eingestellt.
Danach sollte das Netzwerk neu gestartet werden oder der gesamte Rechner durchgestartet werden. Wird im Netzwerk ein DNS-Server betrieben, sollte dort IP-Adresse/-Name entsprechend aufgenommen werden, um den Server mit seinem IP-Namen ansprechen zu können. Alternativ kann diese Kombination auch in der jeweiligen Hosts-Datei (z.B. Linux /etc/hosts) der Clients aufgenommen werden.
Bananian von einer Festplatte booten
Hat man eine SATA-Festplatte an seinen Banana Pi angeschlossen, ist es sinnvoll von dieser auch zu booten. Um dies so einzurichten, sind z.B. folgende Schritte zielführend (angenommen, /dev/sda ist die angeschlossene Festplatte):
> fdisk /dev/sda
...RTFM --> Partionierung der Festplatte.
> mkfs.ext4 /dev/sda1
...Formatierung der (ersten eingerichteten) Partition der Festplatte mit ext4.
Das root-Filesystem der SD-Karte muss auf die Festplatte kopiert werden (Annahme, es wurde nur die Partition /dev/sda1 auf der Festplatte angelegt; der Swap-Bereich befindet sich in der Datei /swapfile1 (Default bei Bananian)):
> mount /dev/sda1 /mnt/ > rsync -ax / /mnt/
Danach müssen noch die entsprechenden Boot-Parameter in der Datei /uEnv.txt eingestellt werden (der Editor joe ist installiert):
> umount /mnt/ > mount /dev/mmcblk0p1 /mnt/ > joe /mnt/uEnv.txt
Die Zeichenfolge 'root=/dev/mmcblk0p2' ist durch 'root=/dev/sda1' auszutauschen. Nach einem
> reboot
sollte von der angeschlossenen Festplatte gebootet werden...! Die SD-Karte muss natürlich im entsprechenden Slot bleiben, da sich darauf der Bootloader befindet. Bei einem Festplattendefekt hat man damit auch gleich ein funktionsfähiges Basissystem zur Verfügung (uEnv.txt entsprechend angepasst...).
"Heartbeat" ausschalten
Um die nervig blinkende grüne LED auf dem Banana-Board auszuschalten, ist folgender Befehl (als root auszuführen) erfolgreich:
> echo none > /sys/class/leds/green\:ph24\:led1/trigger
Wird dieses Kommando in der Datei /etc/rc.local aufgenommen, erfolgt das Ausschalten der blinkenden "Herzschlag"-LED automatisch nach dem Hochfahren des Systems.
Server-Dienste
Printserver
Als Druck-Server wird CUPS verwendet. Die Installation gestaltet sich recht entspannt:
apt-get install cups cups-bsd foo2zjs
Mit dem Tool cupsctl sollte man folgendes einstellen:
- die lokalen, am Server angeschlossenen, Drucker im Netzwerk freigeben
- CUPS über das Netzwerk administrierbar machen
- die automatische Druckervermittlung aktivieren
cupsctl --share-printers --remote-admin --remote-printers
Danach kann CUPS z.B. über einen Webbrowser administriert werden. URL: https://dein_server:631. Wie man Drucker einrichtet und administriert, kann der CUPS-Dokumentation entnommen werden bzw. die Web-Oberfläche ist auch recht selbsterklärend...
Ich besitze einen HP Laserjet 1018, es muss die Firmware aus dem Internet geholt und installiert werden, damit diese automatisch beim Einschalten des Druckers in selbigen kopiert wird:
> getweb 1018 ...
Das Tool getweb ist Bestandteil des Paketes foo2zjs. Als Parameter wird die Typ-Nummer des Druckers angegeben. Das Tool richtet dann alles notwendige automatisch ein.
Danach empfiehlt sich ein Reboot des Systems.
autofs
Spätestens beim Backup benötigt man sinnvoller Weise einen Datenträger, welcher nur während des Schreiben/Lesens in den Verzeichnisbaum eingebunden und sonst vom System jeder Zeit gefahrlos entfernbar ist. Es wird also ein Dienst benötigt, welcher z.B. eine bestimmte USB-Festplatte automatisch, vor dem ersten Zugriff, einbindet, wenn diese im System verfügbar ist und auch wieder selbstständig, nach einer einstellbaren Zeit der Inaktivität, entfernt. Ein solcher Dienst ist u.a. autofs.
Installation:
sudo apt-get install autofs
Festlegung des Verzeichnisses, unter dem der dynamische Datenträger eingebunden werden soll (alle Aktionen als Benutzer root):
> mkdir /autofs > cat /etx/auto.master /autofs /etc/auto.autofs --timeout=300 --ghost > cat /etc/auto.autofs usb-backup -fstype=ext3,sync :/dev/disk/by-uuid/0d5ef4bb-6f06-4814-95fe-7aa5acf09f4f
Also:
- ein Verzeichnis (/autofs) anlegen, unter dem die Datenträger eingebunden werden sollen
- auto.master --> alle Datenträger, welche unter diesem Verzeichnis (autofs) eingebunden werden sollen (mehrere möglich), sind in /etc/auto.autofs konfiguriert, werden nach 300 Sekunden ausgehangen (timeout) --> RTFM!
- im Unterverzeichnis usb-backup wird eine USB-Festplatte, formatiert mit ext3, (vor dem ersten Lesen oder Schreiben) eingebunden, wenn sie die angegebene UUID hat...
UUID ermitteln:
sudo blkid -o list -w /dev/null ... /dev/sdb1 ext3 (not mounted) 0d5ef4bb-6f06-4814-95fe-7aa5acf09f4f
Nach einer Änderung der autofs-Konfiguration ist der entsprechende Dienst neu zu starten:
< service autofs restart
Fileserver
sshfs
Die einfachste Methode ein Server-Verzeichnis in den Verzeichnisbaum des Clients einzubinden, bietet sshfs, vorausgesetzt:
- auf der Server-Seite ist ein ssh-Server (sollte eigentlich Standard sein...) und
- auf der Client-Seite ist sshfs (siehe z.B. folgende Dokumentation)
installiert.
Das Einbinden eines Server-Verzeichnisses via sshfs erfolgt (interaktiv) über folgendes Kommando:
> sshfs serveruser@server:/serververzeichnis /clientverzeichnis
Man wird nach dem Passwort des angegebenen Server-Benutzers gefragt...
Natürlich kann man auch alles automatisieren und z.B. das Einbinden eines Server-Verzeichnisses via sshfs über einen Eintrag in der Datei /etc/fstab erledigen. Eine weitere interessante Methode über den NetworkManager-Dispatcher ist z.B. hier beschrieben.
Ein, über sshfs eingebundenes Server-Verzeichnis, wird man mit folgenden Kommando wieder los:
> fusermount -u /clientverzeichnis
NFS
...kommt (vielleicht) noch.
Samba
Samba ist auch eine recht nette Möglichkeit, Zugriff auf Verzeichnisse des Servers zu bekommen. Vorteil ist, dass man damit auch Windows-Clients versorgen kann...
Installation Samba-Server plus einiger Tools:
> sudo apt-get install samba-common samba-common-bin samba samba-doc samba-doc-pdf tdb-tools
Samba verwaltet seine Benutzer in einer eigenen Datenbank (wenn nichts anderes konfiguriert):
> sudo smbpasswd -a <user> # Benutzer <user> in der Samba-DB anlegen/aktivieren > sudo smbpasswd -x <user> # Benutzer <user> aus der Samba-DB entfernen > sudo smbpasswd -d <user> # Benutzer <user> in der Samba-DB deaktivieren > sudo smbpasswd -e <user> # Benutzer <user> in der Samba-DB wieder aktivieren
Beim Anlegen eines Samba-Benutzers (erstes Kommando) kann man auch gleich ein Passwort vergeben. Mit dem gleichen Befehl kann dieses Passwort für den angegeben Benutzer auch geändert werden.
Die Konfiguration des Samba-Servers erfolgt über die Datei /etc/samba/smb.conf. Über die vielfälltigen Einstellungsmöglichkeiten sind diverse Beschreibungen im Internet zu finden. Um beispielsweise ein Verzeichnis auf dem Server im Netzwerk freizugeben, ist die Datei /etc/samba/smd.conf um folgende Zeilen zu ergänzen:
# Bilder [Bilder] path = /medien/bilder public = no writeable = yes
Erläuterung: Das Verzeichnis /medien/bilder auf dem Server wird als Share "Bilder" freigegeben, kann allerdings nur von Benutzern aus der Samba-DB (siehe oben) geöffnet werden und ist auch beschreibbar. (Nicht angegebene Optionen wirken mit ihrem Default-Wert (RTFM...)).
Bevor man die Samba-Dienst mit der veränderten Konfiguration durchstartet, sollte man deren Syntax überprüfen, um eventuelle Fehler auszuspüren:
> testparm
Das Durchstarten der Samba-Dienste kann z.B. mit folgenden Kommando erfolgen:
> service samba restart
ToDo:
- Client-Zugriff auf freigegebene Shares
- Zugriff auf "Server-Drucker" von Windows-Clients aus
- ?
Backup
Allgemeines zu rdiff-backup
Ein recht komfortables Backuptool zur Sicherung entfernter Rechner bzw. auch lokaler Serververzeichnisse auf einen externen Datenträger ist rdiff-backup. Das Tool ermöglicht eine einfache und platzsparende Sicherung (und natürliche auch Rücksicherung) von Daten. Nach einer initialen Vollsicherung werden in der Folge nur noch Änderungen versioniert in einer speziellen Verzeichnisstruktur gesichert (RTFM). Die Backups können auch über das Netzwerk gesichert via ssh erfolgen.
rdiff-backup ist ein Kommandozeilentool. Es gibt aber eine Reihe von GUIs, die u.U. die Bedienung vereinfachen. Ich selbst verwende zur Überprüfung/Sichtung der Backups auf dem Homeserver rdiffweb, eine kleine WEB-basierte Oberfläche.
Backup-Szenarien
Szenario 1: Sicherung von Systemen, auf Initiative des Homeservers (Backupservers), die ständig angeschaltet und im Heimnetz erreichbar sind. Bei mir sind das z.B. mein Wohnzimmer-"Multimedia"-Rechner und mein Mini-Rechner zur Aufzeichnung von diversen Wetterdaten.
Eine mögliche Vorgehensweise für die Konfiguration eines solchen Backup-Szenarios ist hier zu finden. Zur automatisierten zyklischen Sicherung der entfernten Rechner, sollten zum Abschluss die entsprechenden rdiff-backup-Befehle in der Crontab des Backup-Users auf dem Homeserver aufgenommen werden.
Szenario 2: Sicherung von Desktops, Notebooks etc., auf den Homeserver, welche nur sporadisch angeschaltet sind und damit selbst den Backup-Zeitpunkt bestimmen sollen/müssen.
...
Szenario 3: Sicherung von Daten des Homeserves auf ein angeschlossenes externes Speichermedium (z.B. USB-Festplatte).
...
Weitere Informationsquellen (zu rdiff-backup)
- http://www.nongnu.org/rdiff-backup/
- https://www.thomas-krenn.com/de/wiki/Backup_unter_Linux_mit_rdiff-backup
- https://www.howtoforge.com/linux_rdiff_backup
- http://arctic.org/~dean/rdiff-backup/unattended.html
- http://www.patrikdufresne.com/en/rdiffweb/
Allgemeines
Auf meinem alten Homeserver hatte ich einen Mailserver betrieben. Diverse Scripte, regelmäßig via Cron gestartet, holten meine E-Mails von den diversen Mail-Servern in Internet ab und verteilten diese in lokale Mailboxen bzw. -ordner, damit sie im lokalen Netz auf allen Clients verfügbar waren. Bei der Neukonzeption meines Homeservers habe ich mir dann die Frage gestellt: "Warum dieser Aufwand?", denn die Mails sind bei den einzelnen Mail-Providern doch ganz gut aufgehoben, von überall, mit geeigneten E-Mail-Clients, abgreifbar und die Größengrenzen der E-Mailboxen für den Normalverbraucher ausreichend.
Damit bleiben dann eigentlich nur zwei Dinge offen, deren Lösungen in der Folge (beispielhaft) beschrieben werden:
- Servermeldungen/-zustände automatisiert versenden
- Archivierung einer Mailbox
Servermeldungen/-zustände automatisiert versenden mittels ssmtp
"Hat das Backup heute Nacht eigentlich funktioniert?", "Ist die Server-Festplatte demnächst der Meinung, ihren Geist aufzugeben?" oder "War die Verarbeitung von Job xyz erfolgreich?"...
Mal ehrlich, loggt sich der Admin regelmäßig jeden Tag, Woche etc. auf dem Server ein, um obiges zu überprüfen? Bestimmt nicht...! Also brauchen man eine automatisierbare Lösung, welche den Status von Jobs, den Zustand der Hardware oder was auch immer an eine Mail-Adresse sendet, welche man regelmäßig abfragt!
Befragt man dazu die bekannten Suchmaschinen, bekommt man zuerst die Antwort: "sendmail", "postfix" etc.. Aber warum so kompliziert, durch Zufall bin ich auf ssmtp aufmerksam geworden:
Installation
> apt-get install ssmtp
Konfiguration
Es sind nach der Installation zwei Konfigurationsdateien anzupassen:
/etc/ssmtp/ssmtp.conf (z.B. für eine Mailbox von blabla@gmx.net auf gmx.net):
root=blabla@gmx.net mailhub=mail.gmx.net:465 rewriteDomain=gmx.net hostname=gmx.net UseTLS=YES AuthUser=blabla@gmx.DE AuthPass=kenntnurblabla FromLineOverride=NO
/etc/ssmtp/revaliases (für jeden User, der etwas zu melden hat):
root:blabla@gmx.net:mail.gmx.net:465 blabla:blabla@gmx.net:mail.gmx.net:465
...etc..
Anwendung
/usr/sbin/ssmtp blabla@gmx.net < /home/blabla/msg.txt
Mailbox archivieren via archivemail
Falls man keinen eigenen, ständig ansprechbaren E-Mailserver betreibt, ist, aus meiner Sicht, die einfachste E-Mail-Lösung, die Mails einfach auf den Server des jeweiligen Providers zu belassen und seinen E-Mail-Client so zu konfigurieren, dass er diese E-Mail-Fächer bedient. Wie dies funktioniert, ist den diversen Beschreibungen im Internet zu entnehmen oder/und man vertraut den Installationshinweisen seines bevorzugten E-Mail-Clients.
Allerdings wird es doch irgendwann Zeit, die E-Mails vom Server des jeweiligen Providers herunter zu laden und zu archivieren! Hauptgründe dafür sind vor allem die begrenzte Größe der E-Mailbox beim jeweiligen Provider oder einfach nur die Übersichtlichkeit innerhalb des Postfach. Für meine Bedürfnisse habe ich dazu das Tool archivmail auserkoren:
Installation:
apt-get install archivemail
Verwendung
Backup eines Verzeichnisses:
archivemail --no-compress -q -d100 --pwfile /home/blabla/.pwd_web_de -o /home/blabla/web_de/ imaps://"blabla"@imap.web.de/INBOX
Es werden alle Mails von blabla@web.de, welche sich im Mail-Verzeichnis "INBOX" des Postfach befinden und älter als 100 Tage sind, im (lokalen) Verzeichnis /home/blabla/web_de/ in einer Datei im mbox-Format abgelegt und auch auf dem Server des E-Mail-Providers gelöscht. Das Passwort für die angesprochene Mailbox auf dem Server des Mail-Providers befindet sich in der Datei /home/blabla/.pwd_web_de. Weitere mögliche Aufrufparameter sind u.a. der man-Page von Archivemail zu entnehmen!