ArmStone A9 als Mediacenter und NAS
Mit Hilfe eines kleinen, leistungsfähigen und energiesparenden Mini-Computers, einem ArmStone A9 ARM-Board, ist es mir endlich gelungen, einen Daten-Server (NAS) für meine WG einzurichten. Die Platine wird eigentlich in der Industrie verwendet (z.B. in Automobilsystemen) und hat dementsprechend viel Peripherie, die Ich eigentlich garnicht benötige. Trotzdem eignet sich das Board mit Gbit-Ethernet und einem Sata-Port auch für meine Zwecke.
Der Hersteller fs-net aus Stuttgart hat seit nicht all zu langer Zeit auch einen aktuelleren Linux Kernel für die i.MX6 SOC Platform nachgeliefert, womit es mir dann auch einfacher gelungen ist, ein ArchLinuxARM Betriebssystem zu installieren. Hier hatte Ich eine aktuelle und breite Auswahl an Software zur Verfügung, wie Ich es auch schon bei Server- und Desktopumgebungen gewohnt bin.
Verwendet hatte Ich davor einen Banana PI, der aber für Multimediaanwendungen zu schwach war und einige Hardwarefehler aufwies. Der ArmStone hingegen schafft Ethernet-Transferraten von bis zu 40MB/s und ist auch schnell genug für das Reenkodieren von Audiodateien.
Folgende Dienste soll der kleine Server bereitstellen:
- Dateifreigabe der 5 TB Festplatte im Netzwerk
- Plex-Media-Server für Zugriff auf Mediendateien (via. App oder Webseite)
- DynDNS-Dienst, der dafür sorgt, dass der WG-Server auch über das Internet erreichbar ist
Die folgende Anleitung beschreibt die Software-Installation auf diesem speziellen Gerät und desweiteren die Konfiguration ind Installation der benötigten Software. Letzteres ist allgemeiner gehalten und kann auch ohne Probleme auf anderen Geräten oder Platformen angewendet werden.
ArchLinux auf dem ArmStone installieren
Hierzu habe Ich schon im ArchLinux-Wiki eine ausführliche Anleitung erstellt. Für mein Setup sei ergänzend noch angemerkt, dass Ich folgende Kernel-Module bei dem vom Hersteller ausgelieferten Linux-Kernel noch hinzugenommen habe:
nftables
iptables
btrfs
Nachdem ArchLinux und der anepasste Kernel eingerichtet sind, kann das System gestartet werden.
Bevor das System mit Ansible eingerichtet werden kann (siehe nächster Abschnitt), müssen SSH-Schlüssel generiert und der SSH-Dienst gestartet werden. Der ArmStone muss hierfür via. Ethernet mit dem Internet verbunden sein. Einloggen kann man sich via. SSH mit dem Benutzer root und dem Passwort root.
pacman -Sy python sudo
systemctl start sshdgenkeys
systemctl start sshd
Der Benutzer alarm, der schon von Anfang an dabei ist und von Ansible genutzt werden soll, benötigt administrative Rechte via. sudo. Dazu muss die sudoers-Datei um folgende Zeile, nach “root ALL …” ergänzt werden:
##
## User privilege specification
##
root ALL=(ALL) ALL
alarm ALL=(ALL) ALL
Damit Ansible sich automatisch via. SSH auf dem NAS einloggen kann, sollten die öffentlichen Schlüssel des lokalen Benutzers auf den ArmStone kopiert werden:
ssh-copy-id alarm@10.0.0.2
Mit Ansible das System automatisch einrichten
Mit dem Programm Ansible ist es möglich, eine Systemkonfiguration einheitlich und abstrahiert zu beschreiben und danach automatisiert auf einen oder mehreren Systemen zu anzuwenden. Viele hier verwendete Module und Konfigurationsanweisungen können auch in Zukunft in anderen Projekten wiederverwendet werden.
Ansible muss bereits auf dem lokalen System installiert, und der zu konfigurierende Server über das Netzwerk angeschlossen und erreichbar sein. Mit folgenden Befehlen wird das Ansible-Skript heruntergeladen und alle benötigten Abhängigkeiten installiert:
git clone https://git.project-insanity.org/onny/ansible-picloud.git
cd ansible-picloud
ansible-galaxy install -r requirements.yml -p roles --ignore-errors
Grundlegende Einstellungen bzw. Variablen für das NAS-System können in folgenden Dateien (im vars-Ordner) angepasst werden:
common.yml | Definiert Hostname, Locale und Benutzernamen. |
systemd-networkd.yml | Festlegen der IP-Adresse und des Gateways. |
ufw.yml | Beinhaltet Konfigration der Firewall. Alle Ports bis auf: CIFS, Plex, mosh, ssh und https werden blockiert. Der Zugriff auf CIFS (Samba) wird nur aus einem bestimmten Subnet gestattet. |
mount.yml | Definiert Einhängepunkte von Root und dem externen Datenträger nach /mnt |
inwx_dyndns_update.yml | Beinhaltet Login-Daten zu Inwx.com und angaben über den zu aktualisierenden DNS-Record |
shares.yml | Definiert Benutzer- und Zugriffsrechte für die Netzwerkdateifreigabe via. Samba |
archlinux_aur.yml | Zu installierende AUR-Packete. Abägnigkeit des Inwx-Skriptes |
hd-idle.yml | Installiert und konfiguriert das Programm, dass die Festplatten bei inaktivität in Standby versetzt |
Es genügt in diesen Dateien die grundlegenden Einstellungen vorzunehmen. Je nach belieben können einzelne Module aus dem sogenannten Ansible-Playbook (picloud.yml) herausgenommen oder hinzugefügt werden, sodass nicht das komplette Setup, wie hier beschrieben, 1-zu-1 umgesetzt werden muss. Zuletzt wird in der hosts-Datei die IP-Adresse des Servers definiert:
[picloud]
10.0.0.2 ansible_user=alarm
Die Verbindung zum Server kann direkt mit Ansible getestet werden:
ansible -i hosts all -m ping
# 10.0.0.2 | SUCCESS => {
# "changed": false,
# "ping": "pong"
# }
Sollte dies alles in Ordnung sein, kann die Konfiguration auf dem Zielsystem mit folgendem Befehl ausgeführt werden:
ansible-playbook -i hosts picloud.yml --ask-become-pass
Alle oben genannten Dienste werden nun automatisch installiert, konfiguriert und gestartet :)
Mit Vagrant in einer virtuellen Maschine Konfiguration testen
In dem Ansible-Projektordner ist auch noch Vagrantfile beigelegt, die eine ArchLinux-VM automatisch einrichtet und die Ansible-Konfiguration anschließend anwendet. Dafür muss nur folgender Befehl ausgeführt werden:
cd ansible-picloud
vagrant up
Als Fazit könnte man sagen, dass der erste Aufwand beim Einrichten von Ansible sehr hoch ist. Auf der anderen Seite denke Ich, dass es gerade bei der Administration von vielen unterschiedlichen VMs im Serverbereich nützlich ist, mit Ansible schnell und einfach einen einheitlichen Konfigurationsstand auf allen Maschinen zu haben.