Achtung

Dieser Beitrag ist schon sehr alt, und die Infos hier sind sicherlich hoffnungslos veraltet…

Eine kleine Servergeschichte

Ubuntu
ubuntuusers
Autor:in

produnis

Veröffentlichungsdatum

24. Januar 2010

Mein alter Hörspielserver, ein eMac G4, geht nun in Rente, und so brauchte ich Ersatz.

Die Aufgabe des Servers besteht darin, MP3-Dateien abzuspielen und CDs zu rippen. Gesteuert wird er über das Netzwerk per VNC und FreeNX. Im Leerlauf soll der Server in den Ruhezustand fahren. Per Wake on LAN wird er dann bei Bedarf wieder aufgeweckt.

Folgende Hardware kommt zum Einsatz:

Mit einem Mini-Tower kostet die Hardware beim Laden um die Ecke ca 280,-. Als System wird ein frisches Ubuntu Karmic Koala 32bit verwendet. Dieses hab ich von CD aus installiert. Da der Server keinen graphischen Schnick-Schnack machen muss, benutze ich keine proprietären Grafiktreiber (auf dem Board sitzt eine GeForce 7025 mit nForce 630a Chip. Ich hab hier gelesen, dass bei Verwendung der NVIDIA-Treiber evtl. noch ein BIOS-Update durchgeführt werden muss. Da hatte ich keine Lust drauf).

Systemeinrichtung

Scriptordner Eigentlich habe ich auf so ziemlich jedem System meinen eigenen Scriptordner. Logisch also, dass auch der Hörspielserver einen bekommt. Ich erstelle daher einen eigenen bin/-Ordner im home-Verzeichnis:

cd ~ mkdir bin chmod 744 bin

Damit auch alle Dateien des Verzeichnisses von “überall” in der Konsole aufgerufen werden können, muss noch der PATH entsprechend angeglichen werden. Hierzu editiert man im Homeverzeichnis die Datei .bashrc um folgenden Inhalt:

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/home/produnis/bin

Hierbei müsst ihr auf eurem System natürlich das “produnis” gegen euren Benutzernamen tauschen.

Wenn die Datei gespeichert wurde, müsst ihr euch einmal aus der Konsole aus- und wieder einloggen. Ab jetzt können alle Scripte im /home/BENUTZER/bin-Verzeichnis ohne ./ vorweg aufgerufen werden.

Wake on Lan Damit Wake on LAN (WOL) funktioniert, muss zunächst im BIOS des Boards diese Funktion aktiviert werden. Ist das System wieder hochgefahren, muss das Paket ethtool installiert werden, z.B. per

sudo apt-get install ethtool

Mein Server besitzt nur die On-Board-Netzwerkkarte (eth0). Über diese Karte soll der Server per “Magic Package” geweckt werden. Um diese Funktion zu aktivieren gibt man ein:

sudo ethtool -s eth0 wol g

Damit diese Funktion auch beim Systemstart automatisch zur Verfügung steht, öffnet man die Datei /etc/rc.local und trägt den Befehl dort über dem “exit 0”-Eintrag ein. Das sieht bei mir so aus:

#!/bin/sh -e
#
# (...)
#
# By default this script does nothing.
sleep 5
ethtool -s eth0 wol g
exit 0

Standardmäßig wird die Netzwerkkarte beim Herunterfahren deaktiviert, so dass sie keine Packages im Ruhezustand annehmen kann. Um dies zu verhindern, muss in der Datei /etc/init.d/halt der Eintrag NETDOWN=yes geändert werden in NETDOWN=no

Auf meinem Server funktioniert nun WOL ohne Probleme.

VNC Der Server besitzt keinen eigenen Monitor, und überhaupt soll er hauptsächlich über das LAN, also per VNC oder FreeNX gesteuert werden. Ich persönlich finde vino (Ubuntus Standard-VNC-Server) nicht so dolle, und daher installiere ich mir lieber x11vnc:

sudo apt-get remove vino sudo apt-get install x11vnc

Damit nicht jeder aus meinem Heimnetz den Server ansteuern kann (es soll Leute geben, die Die drei ??? nicht mögen, und daher lieber auf Point Whitmark umschalten! Frechheit!), hinterlege ich ein VNC-Passwort. Im Terminal wird hierzu folgender Befehl eingegeben:

x11vnc -storepasswd

Man wird nach dem neuen VNC-Passwort gefragt (plus Bestätigung). Dieses ist anschließend in der Datei ~/.vnc/passwd gespeichert.

Nun bastel ich mir ein kleines Startscript für x11vnc mit dem Namen x11vnc.start.sh:

cd ~/bin/ touch x11vnc.start.sh chmod +x x11vnc.start.sh vim x11vnc.start.sh

Dieses bekommt folgenden Inhalt:

#!/bin/bash
echo "Kille evtl. laufende x11vnc-Prozesse"
killall -9 x11vnc
echo "starte x11vnc neu"
x11vnc -avahi -display :0 -usepw -forever & bg
echo "fertig"

Die Parameter des Scripts bedeuten:

  • -avahi = Der Server wird den VNC-Clients als “potentiell verfügbar” angezeigt

  • -display :0 = Der Standardmonitor wird übertragen

  • -uswepw = Das Passwort wird abgefragt

  • -forever = x11vnc beendet sich nicht, falls ein Client die Verbindung beendet

Damit das Script bei jedem Systemstart ausgeführt wird, trage ich es unter “System/Einstellungen/Startprogramme” als zusätzliches Programm ein. Alternativ kann man auch per Terminal ins Verzeichnis ~/.config/autostart wechseln, und dort eine neue Datei mit Endung .desktop anlegen, z.B. x11vnc.desktop. Diese bekommt folgenden Inhalt:

[Desktop Entry]
Type=Application
Exec=/home/produnis/bin/x11vnc.start.sh
Hidden=false
X-GNOME-Autostart-enabled=true
Name[de_DE]=x11vnc
Name=x11vnc
Comment[de_DE]=x11vnc
Comment=x11vnc

Sollte wider Erwartens x11vnc mal absaufen, kann man einfach das eben erstellte Script im Terminal aufrufen:

x11vnc.start.sh

automatische Useranmeldung Auf dem Server gibt es nur einen Benutzer, und desses GNOME-Session wird dazu verwendet, die Musikwiedergabe und -verwlatung zu regeln. Es gibt keine “kritischen” oder “privaten” Daten, und daher darf “jeder” die Session dieses Users (per VNC) benutzen, sofern er das VNC-Passwort kennt. Deshalb möchte ich, dass beim Booten direkt in die Usersession gestartet wird (automatische Useranmeldung). Hierfür editiert man die Datei /etc/gdm/custom.conf und setzt AutomaticLoginEnable auf true, sowie AutomaticLogin auf den entsprechenden User. Bei mir sieht das dann so aus:

[daemon]
TimedLoginEnable=false
AutomaticLoginEnable=true
TimedLogin=produnis
AutomaticLogin=produnis
TimedLoginDelay=30

Bildschirmauflösung Da beim Booten des Servers kein Monitor angeschlossen ist, setzt das System die maximale Bildschirmaulösung auf 800x600. Damit man per VNC eine höhere Auflösung erhält, wird die Datei /etc/X11/xorg.conf mit folgendem Inhalte (neu) angelegt (Die Datei xorg.conf wird vom System nicht mehr benötigt und fehlt daher bei der Standardinstallation bzw. wenn keine proprietären Treiber installiert wurden. Wenn man sie aber neu anlegt, dann wird sie vom System gelesen und verwendet):

Section "Device"
Identifier "VNC Device"
Driver "vesa"
EndSection

Section "Screen"
Identifier "VNC Screen"
Device "VNC Device"
Monitor "VNC Monitor"
SubSection "Display"
Modes "1024x768"
EndSubSection
EndSection

Section "Monitor"
Identifier "VNC Monitor"
HorizSync 30-70
VertRefresh 50-75
EndSection

Ruhezustand Der Server soll Musik abspielen, namentlich Hörspiele für abends zum Einschlafen. Wird keine Musik abgespielt, soll er in den Ruhezustand fahren. Per Wake on LAN wird er bei Bedarf wieder aufgeweckt. In GNOME kann dies unter System/Einstellungen/Energieverwaltung unter “Rechner bei Leerlauf in Energiesparmodus versetzen” eingestellt werden (bei mir: 10 Minuten).

Das hat aber folgenden Effekt: Wenn man sich nicht per VLC sonder per NX verbindet, dann wird nach 10 Minuten “nur” die virtuelle NX-Sitzung in den Ruhestand geschickt. Oder andersherum: obwohl man per NX recht aktiv ist, die “richtige” GNOME-Session aber im Leerlauf ist, dann fährt der Rechner nach 10 Minuten in den Suspend. Das ist übrigens der Grund, warum ich den Server (vor allem abends) ausschließlich per VNC steuer.

Hierbei kann es Probleme mit VNC geben, wenn nach dem Aufwachen der GNOME-Bildschirm gesperrt ist, und man das Benutzerpasswort eingeben muss um die Sitzung zu entsperren. Um diesen “Lock”-Modus abzuschalten, verbindet man sich per VNC mit dem Server, öffnet dann in der VNC-Session ein Terminal und tippt ein:

gconf-editor

Es öffnet sich der Konfigurationseditor. Hier wählt man aus der linken Leiste apps/gome-power-manager/lock aus, und entfernt die Häkchen bei “hibernate” und “suspend”. [caption id=“attachment_967” align=“alignnone” width=“300” caption=“apps/gnome-power-manager/lock”][apps/gnome-power-manager/lock](../../images/2010/01/screenshot_001.png)[/caption]

Anschließen wählt man in der linken Spalte desktop/gnome/lockdown und setzt bei “disable_lock_screen” ein Häkchen. [caption id=“attachment_969” align=“alignnone” width=“300” caption=“desktop/gnome/lockdown”][desktop/gnome/lockdown](../../images/2010/01/screenshot_002.png)[/caption]

Musikplayer

Tja, auf dem alten eMac habe ich natürlich iTunes verwendet. Daher möchte ich bestimmte Funktionen, an die ich mich 8 Jahre lang gewöhnt habe, weiterhin nutzen:

  • Dateimanager - neue Titel werden automatisch anhand des ID3Tags umbenannt in Artist/Album/Tracknummer - Titel und so im Hauptordner der Musiksammlung hinterlegt.

  • Cover aus ID3Tags werden angezeigt

  • Cover werden in den ID3Tag gespeichert (so sind sie dann auf externen Playern verfügbar)

  • während der Musikwiedergabe wird der Ruhezustand unterdrückt

So ziemlich alle Player unter Linux haben Probleme mit dem Speichern der Covers innerhalb des ID3Tags. Lediglich bei aTunes und Songbird habe ich diese Funktion entdeckt. Während aTunes Probleme mit dem Dateimanagement hat, kann Songbird den Suspend-Modus nicht unterdrücken (betrifft aTunes auch). Für Rhythmbox steht hierfür ein Plug-In zur Verfügung, und Amarok verhindert wohl auch, dass bei Musikwiedergabe der Ruhezustand aktiviert wird. Bei beiden fehlt aber wieder dieses Cover-in-Tag-speichern-Feature. Die Auswahl ist also schwierig, aber so hab ich es für mich gelöst:

  • abends nutze ich Rhythmbox, damit der Rechner nach dem Hörspiel einschläft - so wie ich :-)

  • wenn ich das Cover im ID3-Tag ändern möchte, verwende ich Songbird. Meist hab ich die Dateien eh liebevoll getaggt, bevor ich sie meiner Sammlung hinzufüge

Ich verstehe gar nicht, warum dieses Cover-Metadata-Feature sich noch nicht wirklich durchgesetzt hab. Ich hab mich da so dran gewöhnt, ich möchte es nicht mehr missen…

[UPDATE:] Mittlerweile habe ich einen Workaround herausgefunden, so dass auch bei Songbird ein Suspend verhindert wird.

Links: