Bananenkiste als Homeserver

Aus BraLUG-Wiki

Wechseln zu: Navigation, Suche

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.

Verwendung von rdiff-backup

Backup:

rdiff-backup /home/user /backup/home/user

Es wird hier das Verzeichnis /home/user (mit allen Unterverzeichnissen) in das Backup-Verzeichnis /backup/home/user gesichert. Selbstverständlich können die Verzeichnisse jeweils auch Netzlaufwerke sein. Mit ein wenig Konfigurationsaufwand kann der Anstoß auch remote via ssh auf dem zu sichernden Rechner erfolgen. Weiterhin können, über entsprechende Aufrufparameter, die zu sichernden Verzeichnisse/Dateien über Include-/Exclude-Listen feiner spezifiziert werden. Hilfreich ist dazu die Dokumentation von rdiff-backup.


Restore: Wenn einfach nur die aktuellste Sicherung einer Datei oder eines Verzeichnisses aus dem Backup zurückgeholt werden soll, reicht ein ein einfaches Kopieren vom Backup-Verzeichnis an den gewünschten Zielort. Soll eine ältere Version aus dem Backup zurückgesichert werden kann dies z.B. mit folgendem Befehl erfolgen:

rdiff-backup -r 10D /backup/home/user/datei.txt /home/user/datei.txt

In diesem Beispiel wird die Version von vor 10 Tagen der Datei /home/user/datei.txt aus dem Backup an ihren Ursprungsort zurückgesichert. Natürlich kann auch ein anderes Rücksicherungsziel angegeben werden. Weitere Rücksicherungsoptionen sind der Dokumentation von rdiff-backup zu entnehmen.


Alte Sicherungen löschen:

Mit der Zeit sammeln sich einige Sicherungen an. Wenn man nicht alle aufheben möchte, bietet rdiff-backup eine Reihe von Befehlen an, um ältere bzw. bestimmte Backups aus dem Sicherungsverzeichnis zu eleminieren:

rdiff-backup --remove-older-than 180D /backup/home/user

Mit diesem Befehl werden z.B. alle Sicherungen gelöscht, welche älter als 180 Tage sind. Weitere Möglichkeiten sind der Dokumentation von rdiff-backup zu finden.


Status der Sicherungen abfragen:

Ab und zu sollte man auch mal überprüfen, ob das Backup überhabt noch funktioniert. Mit folgendem Befehl kann z.B. eine Liste alle Backups erzeugt werden:

rdiff-backup -l /backup/home/user

Weitere Informationsquellen (zu rdiff-backup)

Mail

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

Archivierung einer Mailbox:

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!

Kontakt

Uwe

'Persönliche Werkzeuge