Einleitung:
Vor mehr als einem Jahr habe ich hier mal einen Eintrag über Linux als Musikserver geschrieben. Damals verwendete ich mpd, den Music Player Daemon.
Das Projekt ist bei mir dann aber leider eingeschlafen (oder: gestorben), da ich Linux und mpd zu diesem Zeitpunkt nur auf meinem Notebook installiert hatte und dieses nicht wirklich als Home Server verwenden konnte oder wollte.
Jetzt hat mir vor einiger Zeit ein Kollege von einem ganz netten HP Homeserver erzählt (HP NL40), den er sich u. a. für diesen Zweck angeschafft hat. Und da war dann auch mein Interesse wieder geweckt, da so ein Home Server doch ganz praktisch sein kann ;-)
Blöderweise hat mit der HP NL40 nicht so gut gefallen, dass ich ihn mir dann auch zugelegt hätte. Darüberhinaus wäre es zumindest bei mir auch etwas sinnlos, da ich eigentlich schon einen 'Server' hier stehen habe, jedoch war da bisher lediglich Windows 7 drauf, ohne irgendwelche Serverdienste. Das Gehäuse ist aber wunderbar für jede Menge Festplatten geeignet und lässt sich auch sonst schön erweitern. Wozu also einen neuen Server kaufen, wenn ich den PC hier zu einem Server umfunktionieren könnte?
Gesagt getan.
Was soll der Server können?
- Musik streamen
- Videos streamen
- Datenablage
Ok, das war kürzer als vermutet ;-)
Was brauchen wir dafür?
Anforderungen:
- Einen PC mit genügend RAM und einer einigermaßen potenten CPU
- Jede Menge Festplattenplatz
- Linux
- LAN oder WLAN
- Etwas Zeit
In meinem Fall verwende ich meinen etwas älteren Intel i7 950 mit 12 GB RAM. An Festplatten habe ich hier zwar noch jede Menge ältere 500 GB's und 150 GB's rumliegen, doch mangels SATA Anschlüssen am Mainboard (habe zwar 8, davon sind aber nur 6 ohne den Onboard Controller wirklich nutzbar) war das mit diesen Platten insgesamt zu wenig Platz. Also habe ich mir noch drei neue Hitachis mit je 2 TB besorgt. Dazu kommen zwei ältere Samsung Platten mit je 1 TB.
Die CPU wäre geschickterweise natürlich eine möglichst stromsparende. Auch der Arbeitsspeicher muss nicht so groß sein, zwei bis vier Gigabyte würden für unsere Zwecke völlig ausreichen.
Wieviel Festplattenplatz man benötigt hängt natürlich von der Menge der Medien ab, die auf dem Server gespeichert werden sollen.
Alternativen:
Ja, die gibt es natürlich reichlich. Man könnte sich sicher so einen HP Server kaufen, dazu noch eine recht günstige Lizenz für einen Windows Home Server, dann setzt man hier und da ein paar Haken und alles läuft erstmal.
Doch wozu Windows, wenn man das ganze auch kostenlos, performanter, schlanker, schöner, individueller und noch dazu sicherer mit Linux hinkriegt?
Man könnte auch einfach eine externe Festplatte an eine Playstation oder XBOX anschließen (sofern man eine hat).
Oder man schließt die externe Festplatte direkt an einen Fernseher an (sofern der das kann), doch sind dann die Möglichkeiten leicht begrenzt (wie kommen die neuen Inhalte auf die Platte?).
Unser späterer Linux Server ließe sich prinzipiell mit ein paar zusätzlichen Programmen in einen Mail-Server, einen DNS-Server, einen Web-Server oder was weiß ich erweitern. Der für mich größte Vorteil an Linux besteht aber darin, dass ich LVM und SSH nutzen kann. Und ja, das geht auch mit Windows (Stichwort "Dynamische Datenträger").
Nachteile an meinem Vorhaben sind aktuell definitiv die Menge an konsumiertem Strom, doch das ist hardwarebedingt und liegt leider an meinem älteren Mainboard mit externer Grafikkarte...
Sehr interessant ist übrigens auch das Projekt OpenELEC, im Prinzip eine Mini Linuxdistribution mit XMBC.
Vorhaben:
Was ich im Folgenden beschreibe ist eigentlich in wenigen Sätzen zusammengefasst (auch wenn es durch mein Geschwafel leider deutlich länger geworden ist): wir installieren Ubuntu Server 12.04 als einziges Betriebssystem auf dem PC, installieren ein paar Zusatzprogramme und ändern was an den Konfigurationen. Dann muss man das ganze nur noch mit den Mediendaten bestücken und fertig ist es ;-)
Etwas ausführlicher:
Nach der Installation des Ubuntu Servers richten wir dort OpenSSH ein, um uns auf den Server remote verbinden zu können. Man kann das natürlich auch weglassen und sich direkt vor den Server setzen, aber spätestens dann, wenn das Ding nur noch werkeln soll, ist kein Monitor, keine Maus und keine Tastatur mehr angeschlossen. Und wenn man dann mal was an dem Ding machen will, ist das etwas nervig...
Da ich auch nur einen Monitor habe, verwende ich das Terminal von Mac OSX und verbinde mich via ssh auf den Server.
So... Unter Linux richten wir dann ein LVM (Logical Volume Manager) ein. Das ermöglicht unter anderem, dass alle Platten als eine große Platte angesprochen werden können. Darüberhinaus kann das Ganze dann sehr einfach erweitert werden, sollten in Zukunft weitere Platten hinzukommen. Auch schön: segnet eine Platte in absehbarer Zeit das zeitliche, kann man das LVM einfach mit einer neuen Platte erweitern und muss nicht wieder von vorne anfangen.
Danach wird Samba installiert. Das bringt den Vorteil, dass man von anderen Rechnern einfach auf das LVM zugreifen kann, um bspw. Dateien zu öffnen oder welche hinzuzufügen (je nach Berechtigung).
Zu guter letzt installieren wir MiniDLNA, ein OpenSource Programm für Linux, das die Videos, Bilder und Musik an die entsprechenden Geräte im Haushalt weiterleitet, beispielsweise einen modernen Fernseher, ein Smartphone und so weiter.
Weitere Infos zu MiniDLNA gibt es hier bei Ubuntu-Users.
Durchführung:
Ob man jetzt Ubuntu oder eine andere Linux Distribution verwendet spielt eigentlich keine Rolle. Ich habe mich irgendwie aus Gewohnheit auf Ubuntu festgelegt, denkbar wären aber auch alle anderen Distributionen.
Man lädt sich also erstmal seine Linux Distribution als ISO runter, brennt das auf eine CD/DVD und bootet dann den zukünftigen Server davon.
Die Installation (zumindest mal die von Ubuntu bzw. Debian) ist sehr einfach da menügesteuert. Das einzig wichtige am Anfang ist - würde ich sagen - dass man den Internetzugriff gleich korrekt konfiguriert.
WLAN Probleme?
Bei mir war die erste Hürde das WLAN zu verwenden, da ich kein Kabel quer durch die Wohnung zum Router spannen wollte. Dummerweise geht bei Ubuntu die WLAN Verbindung nach der erfolgreichen Installation nicht mehr. Toll. Also doch wieder das 10m LAN Kabel aus dem Keller geholt.
Der Trick an der Sache ist, dass das WLAN zwar geht, Ubuntu aber die Verschlüsselung nicht checkt. Daher musste ich bei mir zuerst via
sudo apt-get install wpasupplicant
die wpasupplicant Tools nachinstallieren, und das geht halt nur mit LAN Anschluss zum Internet ;-)
Damit das Netzwerk weiß, dass es die wpasupplicant Konfiguration verwenden soll, trägt man folgendes in die Netzwerk Konfiguration ein:
Netzwerkkonfigurationsdatei öffnen:
sudo nano /etc/network/interfaces
Darin steht bei mir:
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).# The loopback network interface
auto lo
iface lo inet loopback# Achtung, ich habe bei mir den LAN Anschluss eth0 auskommentiert, sprich deaktiviert. Soll das nicht so sein, einfach das # vor den Zeilen entfernen.
# The primary network interface
# auto eth0
# iface eth0 inet dhcp# Hier die WLAN Konfiguration
auto wlan0
iface wlan0 inet dhcp
# und hier nun der Verweis auf die wpasupplicant Konfigurationsdatei
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf# Braucht man keine besonderen Treiber für die Verschlüsselung könnte auch folgendes ausreichen:
# wpa-ssid MeinHeimnetzwerk
# wpa-psk MeinGeheimerSchlüssel
So, und in die wpasupplicant Konfigurationsdatei trägt man sein Netzwerk in etwa wie folgt ein:
Öffnen der Konfigurationsdatei:
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
# 0: Der Treiber des Interfaces kümmert sich um das Scannen von Netzen und die AP-Auswahl.
# Dieser Modus sollte benutzt werden, wenn man eine Verschlüsselung auf ein Kabelnetzwerk legt.
# 1: wpa_supplicant kümmert sich um das Scannen von Netzen und die AP-Auswahl.
# 2: Fast wie 0, es wird aber mit Hilfe von Sicherheitsrichtlinien und der SSID zu APs verbunden (BSSID wird nicht unterstützt)
#
# Normalerweise funktioniert entweder Modus 1 oder Modus 2.
ap_scan=1network={
ssid="MeinHeimnetzwerk"
scan_ssid=1
proto=RSN
key_mgmt=WPA-PSK
pairwise=CCMP
group=TKIP
psk="MeinGeheimerSchlüssel"
}
Je nachdem, welche Art von Verschlüsselung das WLAN verwendet, sind hier ggf. andere Werte von Nöten. Diese findet man entweder auf dem Ubuntu Users Forum oder direkt bei wpasupplicant.
Installation der Dienste:
Ok, jetzt können wir die notwendigen Dienste installieren:
sudo apt-get install openssh
sudo apt-get install samba
sudo apt-get install minidlna
LVM ist bei Ubuntu mittlerweile standardmäßig an Bord, muss also nicht mehr manuell nachinstalliert werden.
OpenSSH funktioniert direkt ohne Konfiguration. Man kann sich also direkt nach der Installation von einem anderen PC (oder Mac) darauf verbinden.
Unter Windows verwendet man dazu beispielsweise putty, unter Mac OS X ist ssh bereits vorinstalliert.
In meinem Fall für Mac OSX wäre das folgender Befehl:
ssh LinuxBenutzername@LinuxServerIP
Welche IP Adresse der Server hat, erfährt man unter anderem mit
ifconfig
Außerdem steht es nach dem Login bei Ubuntu oben in den Willkommens-Infos ;-)
Als Benutzernamen verwendet man natürlich sein Linux Login. Das Kennwort ist das des Linux Benutzers.
LVM Konfiguration
Im Internet wimmelt es nur so von LVM Tutorials, ein sehr hilfreiches fand ich bei is-a-geek.org.
Dennoch fasse ich hier mal die Schritte zusammen, die notwendig sind, um aus den ganzen Platten ein LVM zu erstellen. Unter anderem deshalb, da es bei mir anfangs zwar geklappt hat, ich aber nicht auf das LVM schreiben konnte. Ich landete immer auf meiner root-Partition...
Um die Namen der Platten zu bekommen, die wir bündeln wollen, geben wir folgenden Befehl ein:
sudo fdisk -l
In meinen Fall wären das die Platten: sdb, sdc, sdd, sde, sdf und sdg.
Um diese später zu einer Volumegroup hinzufügen zu können, müssen wir eine Partition mit dem Typ “Linux LVM” erstellen. Dazu benutzen wir “fdisk”:
sudo fdisk /dev/sdb
Falls vorhanden, wird die vorhandene Partition mit "d" gelöscht.
Mit "n" muss eine neue Partition erstellt werden.
Anschließend wählen wir "p" für "Primary Partition" aus.
Bei der Partitionsnummer wählt man die "1" und den Rest bestätigt man mit ENTER.
Die neue Partition muss vom Typ "Linux LVM" sein, daher verwenden wir den Befehl "t" und geben "8e" ein.
Zu guter letzt wird das ganze dann via "w" abgespeichert.
Diese Schritte (beginnend ab dem fdisk Befehl) wiederholt man nun für alle Festplatten (also bei mir sdc, sdd, sde, sdf und sdg).
Nun wird das Physical Volume erstellt:
sudo pvcreate /dev/sdb1
sudo pvcreate /dev/sdc1
sudo pvcreate /dev/sdd1
sudo pvcreate /dev/sde1
sudo pvcreate /dev/sdf1
sudo pvcreate /dev/sdg1
Wichtig ist hier die 1 hinter dem Festplattennamen, da wir mit der 1 die Partition und nicht die ganze Festplatte ansprechen.
Dann wird die Volume Group namens "VOLUMEGROUPNAME" erstellt (den Namen sollte man natürlich durch was schöneres ersetzen ;-)):
sudo vgcreate VOLUMEGROUPNAME /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1
Und nun das Logical Volume (VOLUMEGROUPNAME und LOGICALVOLUMENAME können hierbei identisch sein):
sudo lvcreate -l 100%FREE -n VOLUMEGROUPNAME LOGICALVOLUMENAME
Das neu erstellte Laufwerk wird nun mit dem Dateisystem ext3 formatiert (und das dauert eine Zeit lang - je nach Größe):
sudo mkfs.ext3 /dev/VOLUMEGROUPNAME/LOGICALVOLUMENAME
Jetzt müssen wir das neue Laufwerk noch einhängen. Dazu erstellt man zuerst einen neuen Ordner im Mount Verzeichnis von Linux:
sudo mkdir /mnt/LV1
Danach wird das neue Laufwerk in das neu angelegte Verzichnis gehängt:
sudo mount /dev/VOLUMEGROUPNAME/LOGICALVOLUMENAME /mnt/LV1
Fertig.
Medien Ordner erstellen
Jetzt erstellen auf dem neuen Volume die Medien Ordner, also die Ordner, die später die Videos, Musik und oder Bilder enthalten sollen:
sudo mkdir /dev/VOLUMEGROUPNAME/LOGICALVOLUMENAME/Bilder
sudo mkdir /dev/VOLUMEGROUPNAME/LOGICALVOLUMENAME/Videos
sudo mkdir /dev/VOLUMEGROUPNAME/LOGICALVOLUMENAME/Musik
Damit wir später auch von extern auf die Ordner schreibend zugreifen können, müssen wir noch via chmod die Berechtigungen ändern:
sudo chmod a+rwe /dev/VOLUMEGROUPNAME/LOGICALVOLUMENAME/Bilder
sudo chmod a+rwe /dev/VOLUMEGROUPNAME/LOGICALVOLUMENAME/Videos
sudo chmod a+rwe /dev/VOLUMEGROUPNAME/LOGICALVOLUMENAME/Musik
Das a steht dabei für User, Group und Other. Das "+" bedeutet, dass wir das Recht hinzufügen möchten. Das Recht ist "rwe" was für "Read", "Write" und "Execute" steht.
Nützliche Infos zum chmod-Befehl findet man wieder in Ubuntu Users.
Wichtig: Nachdem wir mit der Bestückung der Verzeichnisse fertig sind, sollten wir diese Berechtigungen dringend wieder zurücksetzen, da ansonsten jeder mit Zugriff auf den Server die Daten auch lesen, bearbeiten und löschen kann.
Samba Konfiguration
Nachdem Samba installiert ist, wird die Konfigurationsdatei via Editor geöffnet:
sudo nano /etc/samba/smb.conf
Standardmäßig steht hier jede Menge drin, da Samba weit mehr kann, als nur eine "Dateifreigabe". Da ich jedoch nicht mehr wünsche und mir die Standardkonfigurationsdatei zu unübersichtlich war, habe ich bei mir jetzt nur noch folgendes drin stehen:
[global]
workgroup = WORKGROUP
server string = %h server (Samba, Ubuntu)
dns proxy = no
log file = /var/log/samba/log.%m
max log size = 1000
syslog = 0
panic action = /usr/share/samba/panic-action %dencrypt passwords = true
passdb backend = tdbsam
obey pam restrictions = yes
unix password sync = yespasswd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
pam password change = yes
map to guest = bad user### Hier gehts los mit den Freigabeverzeichnissen, alles was oben steht ist Standard.
[Bilder]
path = /dev/VOLUMEGROUPNAME/LOGICALVOLUMENAME/Bilder
public = yes
writable = yes[Videos]
path = /dev/VOLUMEGROUPNAME/LOGICALVOLUMENAME/Videos
public = yes
writable = yes[Musik]
path = /dev/VOLUMEGROUPNAME/LOGICALVOLUMENAME/Musik
public = yes
writable = yes
Die unteren drei Blöcke regeln die Freigabeverzeichnisse. Der Verzeichnisname unter Path ist natürlich entsprechend anzupassen.
Jetzt sollten wir noch uns als Benutzer hinzufügen, so dass wir von anderen Rechnern aus was in die Freigabeverzeichnisse stellen können. Dies geschieht via:
sudo smbpasswd -a Benutzername
Zum Auflisten der Benutzer wird der Befehl
sudo pdbedit -L
verwendet.
Damit Samba nun auch Wind von der neuen Konfiguration bekommt, müssen wir den Dienst neu starten und geben dazu folgendes in die Konsole ein:
sudo initctl restart smbd
Jetzt sollten die Freigabeordner für andere Rechner im Netzwerk sichtbar sein.
MiniDLNA Konfiguration
Die Konfigurationsdatei von MiniDLNA wird via
sudo nano /etc/minidlna.conf
geöffnet.
Bei mir sieht sie auszugsweise wie folgt aus:
# port for HTTP (descriptions, SOAP, media transfer) traffic
port=8200# network interfaces to serve, comma delimited
network_interface=wlan0# set this to the directory you want scanned.
# * if have multiple directories, you can have multiple media_dir= lines
# * if you want to restrict a media_dir to a specific content type, you
# can prepend the type, followed by a comma, to the directory:
# + "A" for audio (eg. media_dir=A,/home/jmaggard/Music)
# + "V" for video (eg. media_dir=V,/home/jmaggard/Videos)
# + "P" for images (eg. media_dir=P,/home/jmaggard/Pictures)
# media_dir=/opt
media_dir=A,/dev/VOLUMEGROUPNAME/LOGICALVOLUMENAME/Musik
media_dir=V,/dev/VOLUMEGROUPNAME/LOGICALVOLUMENAME/Videos
media_dir=P,/dev/VOLUMEGROUPNAME/LOGICALVOLUMENAME/Bilder
Wichtig ist hier eventuell das Standardnetzwerkinterface anzupassen. Bei mir ist das wlan0, bei den meisten dürfte es jedoch eth0 sein.
Die Medienverzeichnisse werden unten via "media_dir" angegeben. Dahinter kommt dann erst der Medientyp, "A" bei Audio, "V" bei Video und "P" bei Pictures (das werden dann wohl die Bilder sein ;-). Dahinter der Verzeichnisname in welchem die Daten liegen. Es können natürlich beliebig viele Verzeichnisse angegeben werden.
Damit der MiniDLNA dienst nun die Daten einliest, gibt man folgendes in die Konsole ein:
sudo service minidlna stop
sudo minidlna -R
sudo service minidlna start
Der Dienst wird also zuerst via "stop" beendet, dann teilen wir ihm via "-R" mit, dass er die Verzeichnisse neu einlesen soll und sobald das erledigt ist, startet man den Dienst via "start" wieder.
Fertig:
Damit wären wir auch schon fertig ;-)
Zu Beachten:
Da ich Linuxanfänger bin, habe ich hier sicherlich das ein oder andere falsch gemacht. Sollte also jemand mit mehr Ahnung in der Linuxwelt einen Fehler entdecken (oder einen Tipp haben, wie man etwas besser macht), wäre ich sehr dankbar, wenn man mir das mitteilt, so dass ich diesen Eintrag entsprechen korrigieren kann.
Sobald bei mir die Bestückung der Verzeichnisse abgeschlossen ist, werde ich den Server erstmal neustarten und prüfen, ob a.) jemand anderes als ich darauf zugreifen kann (was nicht gewünscht ist (der Parameter "public" stört mich aktuell etwas in der Samba Konfiguration)), und b.) schauen, ob die Dienste alle auch wirklich automatisch starten. In den Ubuntu-User Wikis stand bei einigen Diensten dabei, dass man diese da und dort eintragen muss, damit sie beim nächsten Systemstart automatisch starten (was ja gewünscht ist). Testen konnte ich das bisher leider noch nicht, da mein Server seit ein paar Tagen läuft und wegen der Kopieraktion aktuell nicht neugestartet werden kann.
Anmerkungen:
Erfahrungswerte über die Geschwindigkeit, Abspieleigenschaften von gewissen Meiden usw. habe ich bisher recht wenig sammeln können (aber: die bisher getesteten funktionierten alle problemlos ;-)). Sobald diese aber vorliegen, werde ich den Eintrag hier entsprechend ergänzen.
Und zu guter Letzt: sicher gibt es im Internet zahlreiche bessere Anleitungen wie diese hier, eventuell sogar welche, die alle von mir aufgeführten Punkte einschließen, aber das soll hier auch gar keine Referenz sein. Viel eher dient es für mich zum Lernen, Verstehen, Nachschlagen und Verbessern ;-)

