Home.

Technik-Blog

Willkommen auf meinem
Notiz - Blog
Blog

Kmoser's Tech-Blog

Sonntag
04
Mai 2014
Klaus Moser
Klaus Moser

Ubuntu 14.04 - DLNA - MediaTomb

Bin zwischenzeilich zu einer anderen Lösung gekommen mit der ich jetzt sehr zufrieden bin. Einfach einen Raspberry Pi nehmen und Kodi installieren. Dann reichen auch normale Dateifreigaben per NFS oder SMB um die eigene Mediensammlung abzuspielen.

DLNA (Digital Living Network Alliance) ist ein Standard für Geräte in der digitalen Unterhaltungselektronik, mit dem es möglich ist unterschiedliche Geräte mit Multimedia-Inhalten zu versorgen.

Unter Ubuntu gibt es eine ganze Reihe freier und kommerzieller DLNA Server. In diesem Beitrag werde ich den DLNA Server MediaTomb testen. Dieser Server wird wohl nicht mehr weiterentwickelt (Projektseite). Laut ChangeLog war die letzte Änderung 2010.

Eine gute Anleitung gibt es wie immer unter ubuntuusers.de.

Installation

Die Installation ist sehr einfach aus den offiziellen Quellen möglich:

sudo apt-get install mediatomb

Konfiguration

Die Konfiguration erfolgt in der Datei /etc/mediatomb/config.xml, welche im XML Format vorliegt und ist etwas anspruchsvoller als z.B. bei minidlna oder ushare.

sudo nano /etc/mediatomb/config.xml

In der Konfigurationsdatei kann man ziemlich viel konfigurieren. Als wichtigste Einstellung legt man den Basispfad der Mediendateien unter config > server > home fest. Also z.B.

<home>/media/data/mediafiles</home>

Umlautprobleme

In der Standardkonfiguration werden Dateinamen mit Umlauten am ersten Umlaut abgeschnitten. Die Lösung hierfür war aber schnell gefunden. Die folgenden Zeilen müssen zusätzlich in die config > import - Sektion in der Konfigurationsdatei /etc/mediatomb/config.xml

<filesystem-charset>UTF-8</filesystem-charset>
<metadata-charset>UTF-8</metadata-charset>
<playlist-charset>UTF-8</playlist-charset>

Danach muss außerdem die Datenbank neu erstellt werden.

Datenbank neu erzeugen

Falls man man die Datenbank neu erzeugen lassen will muss man den Server stoppen

sudo service mediatomb stop

Dann benennt man die alte DB-Datei um. Der Pfad zu der Datei mediatomb.db ist in der der Konfigurationsdatei /etc/mediatomb/config.xml unter

config > server > home

definiert.

cd /var/lib/mediatomb/
sudo mv mediatomb.db mediatomb.db.bak

Startet man jetzt den Server jetzt neu, wird eine neue leere Datenbank angelegt. Hat man keine Verzeichnisse die überwacht werden sollen in der Konfiguration definiert, muss man diese noch über das Web-Interface hinzufügen. Damit ist die Datenbank neu erzeugt.

Verzeichnisse festlegen

Verzeichnisse mit Multimedia-Inhalten kann man entweder über die Web-Oberfläche hinzufügen oder direkt in der Konfigurationsdatei festlegen indem man folgende Zeilen in die <import> - Sektion hinzufügt.

<autoscan use-inotify="auto">
<directory location="/home/media" mode="inotify" recursive="yes" hidden-files="no"/>
</autoscan>

Damit wird das Verzeichnis /home/media und dessen Unterverzeichnisse mittels inotify zu den Autoscan Verzeichnissen hinzugefügt.

Firewall

Sollte eine Firewall auf dem Server aktiv sein, müssen folgende Ports freigeschalten werden:

Weboberfläche

Die Weboberfläche kann man aktivieren indem man in der Konfigurationsdatei das Attribut

ui enabled="yes"

unter config > server > ui setzt. Über die Weboberfläche kann man weitere zu scannende Verzeichnisse festlegen.

Port Protokoll Richtung
1900 TCP beide
1900 UDP beide
49152 TCP beide

Praxis

Auf meinem Samsung UE55H6290 lassen sich mp3s abspielen und es werden auch die AlbumArt Thumbs angezeigt. Vorwärts und rückwärts spulen lässt sich jedoch nicht. Mit BubbleUPNP auf einem Android Gerät funktioniert das Springen innerhalb von mp3 Tracks.

Fehlersuche

Für die Fehlersuche empfiehlt es sich das Log unter /var/log/mediatomb.log im Auge zu behalten:

tail -f /var/log/mediatomb.log

Außerdem kann man mediatomb auch manuell starten und die Debug-Ausgabe aktivieren. Vorher deaktiviert man den Service und führt mediatomb dann über die Kommandozeile aus.

sudo service mediatomb stop
sudo mediatomb -D -u mediatomb -c /etc/mediatomb/config.xml

Das startet mediatomb mit der Konfiguration unter /etc/mediatomb/mediatomb.xml (-c) und mit dem Benutzer mediatomb (-u) und gibt zusätzlich Debug Infos aus (-D).

Auf diese Weise konnte ich feststellen, dass die Abstürze von mediatomb beim Abspielen von Medien-Inhalten verursacht wurden von der Einstellung <mark-played-items> in der Konfigurationdatei. Siehe dazu auch den Bugreport auf launchpad.net.

Fügt man einen Content - Typ innerhalb der <mark-played-items> - Sektion in der Konfigurationsdatei hinzu stürzt mediatomb nicht mehr ab:

<mark-played-items enabled="yes" suppress-cds-updates="yes">
  <mark>
    <content>video</content>
  </mark>
  <string mode="prepend">*</string>
</mark-played-items>

Da diese Funktion tatsächlich nur richtig Sinn bei z.B. TV-Serien macht, habe ich diese auch nur für Video aktiviert.

Transcoding

Script

INPUT="$1"
OUTPUT="$2"
VIDEO_CODEC="mpeg2video"
VIDEO_BITRATE="4096k"
AUDIO_CODEC="mp2"
AUDIO_BITRATE="192k"
AUDIO_SAMPLERATE="48000"
AUDIO_CHANNELS="2"
FORMAT="dvd"
exec /usr/bin/ffmpeg -threads 2 -i "${INPUT}" -vcodec ${VIDEO_CODEC} -b ${VIDEO_BITRATE} \
-acodec ${AUDIO_CODEC} -ab ${AUDIO_BITRATE} -ar ${AUDIO_SAMPLERATE} -ac  {AUDIO_CHANNELS} \
-f ${FORMAT} - > "${OUTPUT}" #2>/dev/null

bla

avconv -i - -codec:v libx264 -s vga -preset ultrafast -f mpegts -codec:a libmp3lame -ac 2 -y OUTFILE

bla

<transcoding enabled="yes">
  <mimetype-profile-mappings>
    <transcode mimetype="video/x-matroska" using="video-common"/>
  </mimetype-profile-mappings>
  <profiles>
    <profile name="video-common" enabled="yes" type="external">
      <mimetype>video/mpeg</mimetype>
      <accept-url>yes</accept-url>
      <first-resource>yes</first-resource>
      <accept-ogg-theora>yes</accept-ogg-theora>
      <agent command="mediatomb-transcode-video-ffmpeg" arguments="%in %out"/>
      <buffer size="10485760" chunk-size="262144" fill-size="524288"/>
    </profile>
  </profiles>
</transcoding>

bla

Parameter Erklärung
-i Lesen von stdin
-codec:v libx264 Benutze den libx264 Codec für die Videoausgabe
-s vga Erzeuge eine Ausgabe in VGA Größe (in a bid to lower computation cost) (qvga, vga, svga)
-preset ultrafast Argument für den libx264 Codec der bestimmt lieber schnell als genau zu sein
-f mp4 Ausgabeformat ist mp4
-codec:a libmp3lame Audio in mp3 kodieren
-ac 2 benutze die ersten beiden Audiokanäle und verwerfe den Rest (x264 doesn't handle >2 audio channels)
-y Überschreiben ohne zu fragen. Ohne kann der Prozess in mediatomb hängen bleiben.

Fazit

 

Ähnliches gilt für uShare. Er ist recht einfach zu installieren nur es fehlen einfach die Zusatzfunktionen, insbesondere auch wieder das Transcoding.

Mediatomb ist der vielseitigste freie DLNA Server mit einem hohen Funktionsumfang. Dafür verlangt er auch ein bisschen mehr Konfigurationsaufwand. Mit der Standardkonfiguration kann man aber schon gut leben, sofern man mal den Bug mit den Abstürzen im Griff hat. Leider scheint mediatomb nicht mehr weiterentwickelt zu werden. Die letzten Änderungen waren 2010. Sehr schade...

Donnerstag
01
Mai 2014
Klaus Moser
Klaus Moser

Ubuntu für SSD optimieren

Solid State Festplatten (SSD) büßen am meißten ihrer Lebensdauer durch Schreibzugriffe ein. Es gibt viele Prozesse und Funktionen bei denen unser Ubuntu Daten auf die Platte schreibt, einige davon laufen in Hintergrund und fallen uns gar nicht so bewusst auf.

Generell ist es sinnvoll für Partitionen auf der SSD den Parameter noatime in der /etc/fstab zu setzen.

/dev/sda1    /    ext4    noatime,errors=remount-ro    0    1

Der Parameter noatime verhindert das setzen des Zeitstempels für den letzten Lesezugriff auf Dateien.

Lese- und Schreibzugriffe

Um herauszufinden wann und was auf unsere Festplatte geschrieben wird, gibt es ein paar Befehle die ganz nützlich sind.

Um z.B. Lese- und Schreibzugriffe auf unsere Platte sehen zu können aktivieren wir das logging dafür mit dem Befehl:

echo 1 >/proc/sys/vm/block_dump

Jetzt kann man mit

tail -f /var/log/syslog

beobachten wann von der Platte gelesen oder auf sie geschrieben wird.

Wir erhalten dabei Ausgaben wie die folgende:

Apr 27 23:03:13 srv1 kernel: [22002.728653] mozStorage #7(4646): WRITE block 11963148 on sda1 (328 sectors)
Apr 27 23:03:13 srv1 kernel: [22002.749616] jbd2/sda1-8(449): WRITE block 94802732 on sda1 (8 sectors)

Wenn wir fertig sind, nicht vergessen das Logging wieder zu deaktivieren. Das geht mit:

echo 0 >/proc/sys/vm/block_dump

Bei mir hat der Prozess jbd2 sehr viele Schreibzugriffe verursacht. Der JBD (journaling block device) ist für ext4 und sitzt zwischen dem System und dem Block Device Treiber.

Verwendung der Swap Partition verringern

Man kann unter Ubuntu einstellen wie stark das System den Swap-Speicher verwenden soll. Den aktuellen Wert der Einstellung kann man ansehen mit:

cat /proc/sys/vm/swappiness

Je niedriger dieser Wert ist um so mehr System Load muss vorhanden sind, bevor das System anfängt den Swap Speicher zu nutzen. Der Standardwert dürfte so bei 60 liegen.

Den Wert kann man anpassen in dem man die Datei /etc/sysctl.conf ändert.

sudo nano /etc/sysctl.conf

An das Ende der Datei folgenden Inhalt einfügen:

# Sharply reduce swap inclination
vm.swappiness=1
# Improve cache management
vm.vfs_cache_pressure=50

Dann den Rechner neu starten und nochmal den Wert ausgeben lassen.

Over-Provisioning

Eine SSD partitioniert man so dass ca. 10-20% unformatierter Speicherplatz auf der Platte übrig bleiben. Das scheint wohl dafür zu sein, um defekte Zellen zu kompensieren. Auch die Schreibgeschwindigkeit soll daudurch positiv beeinflusst werden.

Für die Einrichtung von Over-Provisioning gibt es sogar ein Tool von Samsung, das SSD Magician 3.2.

Logfiles

Da Linux, zum Segen aller Administratoren, recht ausführlich Logfiles schreibt, haben wir natürlich ständig kleine Schreibzugriffe auf unsere Systemfestplatte. Das ist für unsere SSDs natürlich nicht so gut.

Es gibt zwei Möglichkeiten wie wir diese Zugriffe von unserer SSD fernhalten können:

Entweder verwenden wir für die Logfiles einen Flash Speicher, wie z.B. einen alten USB Stick. Das hätte den Vorteil, dass die Logs auch nach einem Neustart noch vorhanden wären, würde aber zum gleichen Problem führen wie wir mit den SSDs schon haben, und zwar dass Schreibvorgänge den Flash-Speicher schnell altern lassen.

Oder man legt die Logs in eine Ramdisk. Das hat den Vorteil, dass wir keinerlei Schreibzugriffe auf persitenten Speichern mehr haben. Der Nachteil ist aber, dass die Logs nach einem Neustart weg sind.

Zuerst einmal können wir prüfen ob wir evtl. ein Logfile haben, in das übermäßig viele Daten geschrieben werden:

ls -hlS /var/log/*log | head

Die Dateien sollten maximal ein paar MB groß sein.

Dann legen wir eine Ramdisk für /var/log an. Dazu legen wir in der Datei /etc/fstab einen neuen Eintrag an:

# Log Dateien
tmpfs /var/log tmpfs defaults,noatime 0 0

Jetzt mal testweise alle Dateien aus /var/log löschen und das Laufwerk mounten.

sudo rm -Rf /var/log/*
sudo mount /var/log

Jetzt werden alle Logdateien in die RAM-Disk geschrieben. Man sollte allerdings beachten dass die Fehleranalyse so bei einem Problem oder Sicherheitsrisiko schwieriger ist.

Logfiles Apache

Läuft auf dem Rechner ein Apache hat man das Problem dass der Apache nicht startet wenn er auf die Logfiles unter /var/log/apache nicht zugreifen kann. Da die Ramdisk aber beim Start leer ist haben wir so ein Problem. Wir brauchen also ein Init-Script, das diese Dateien anlegt, bevor der Apache startet.

sudo nano /etc/init.d/apache2-tmpfs

In die Datei kommt folgender Inhalt:

#!/bin/bash
#
### BEGIN INIT INFO
# Provides:          apache2-tmpfs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Required-Start:  
# Required-Stop:   
# Short-Description: Create /var/log/apache2/error.log on tmpfs at startup
# Description:       Create /var/log/apache2/error.log needed by Apache.
### END INIT INFO

#
# main()
#
case "${1:-''}" in
  'start')
   # create the /var/log/apache2/error.log needed by apache
   mkdir /var/log/apache2
   chmod 777 /var/log/apache2
   touch /var/log/apache2/error.log
   chmod 777 /var/log/apache2/error.log
   ;;
  'stop')
   ;;
  'restart')
   ;;
  'reload'|'force-reload')
   ;;
  'status')
   ;;
  *)
   echo "Usage: $SELF start"
   exit 1
   ;;
esac

Das Script noch ausführbar machen

sudo chmod 0755 /etc/init.d/apache2-tmpfs

und das Init-Script dem runlevel hinzufügen. Da der apache am Stellen 91 kommt fügen wir das Script an Stelle 90 ein. In der Beenden Reihenfolge kommt Apache an Stelle 9, also kommt unser Script an Stelle 10.

sudo update-rc.d apache2-tmpfs defaults 90 10

Zum Schluss den Rechner neu starten.

Thanks to Petr Svoboda for this Script (Link).

Temporäres Verzeichnis

Man kann das temporäre Verzeichnis ebenfalls in eine Ramdisk legen. Dazu in der Datei /etc/fstab folgenden Eintrag machen:

tmpfs    /tmp    tmpfs    defaults,noatime,mode=1777    0    0

Weitere Verzeichnisse wären:

tmpfs /tmp tmpfs defaults,noatime,nosuid,size=100m 0 0
tmpfs /var/tmp tmpfs defaults,noatime,nosuid,size=30m 0 0
tmpfs /var/log tmpfs defaults,noatime,nosuid,mode=0755,size=100m 0 0
tmpfs /var/run tmpfs defaults,noatime,nosuid,mode=0755,size=2m 0 0
tmpfs /var/spool/mqueue tmpfs defaults,noatime,nosuid,mode=0700,gid=12,size=30m 0 0
Sonntag
27
April 2014
Klaus Moser
Klaus Moser

HP Data Vault x312 mit Ubuntu 14.04

Nachdem endlich mein Anschlusskabel für die HP Data Vault gekommen ist und ich jetzt einen Tastatur-/Mauseingang sowie einen VGA-Anschluss habe, werde ich heute mal versuchen ein Ubuntu 14.04 zu installieren.

Adapter ist eingebaut, VGA-Monitor, PS/2-Tastatur und eine USB-Maus sind angeschlossen. Als Systemfestplatte ist eine alte 80 GB SATA Festplatte eingebaut, die ich für die ersten Tests mal verwenden möchte. Diese wird gegen eine SSD ausgetauscht, wenn alles so klappt wie ich mir das vorstelle.

VGA PS/2 Maus - Adapter in HP Data Vault x312

Der erste Eindruck nach dem Starten war das die DV ein ganz normaler PC ist, was die DV natürlich gleich noch viel interessanter gemacht hat. Solche Geräte liebe ich, Technik mit Mehrwert durch ein bisschen Bastelei.

Die Installation verlief dementsprechend problemlos. ISO herunterladen und auf DVD brennen. Für die Installation verwende ich ein externes DVD-Laufwerk, welches über USB angeschlossen wird. Als Ubuntu hab ich mir die Xubuntu-Desktop Version ausgesucht, da ich diese auch auf meinen PCs installiert habe und Xubuntu nicht dieses grässliche Unity verwendet.

Also NAS einschalten und ins BIOS gehen. Bootreihenfolge so angepasst, so dass von DVD gebootet werden kann. Noch ein paar weitere Anpassungen vorgenommen und das Gerät wieder neu gestartet.

Die Installation lief exakt so wie auf einem x-beliebigen PC. Es gab nichts besonderes zu beachten. Nachdem die Installation fertig war nochmal neu gestartet und fertig war die Installation des Grundsystems.

Pakete

Folgende Pakete würde ich gerne auf dem Ubuntu Homeserver installieren:

Für Filesharing und Multimedia:

  • Samba
  • DLNA Server

Für den Webserver:

  • Apache2
  • MySQL
  • PHP5

Für den Mailserver:

  • Postfix
  • Dovecot
  • fetchmail

Für die Entwicklung

  • git
  • gitLab

Für die Authentifikation

  • OpenLDAP

Für den Remote Desktop 

  •  VNC, Teamviewer oder RDP

Cloud-Dienst

  • OwnCloud

Weitere Pakete:

  • OpenSSH

Ich werde die Installation der Pakete in separaten Blog-Beiträgen behandeln, da ich dafür bestimmt eine Weile brauchen werde und noch viele Manuals lesen muss.

Der nächste Blogeintrag wird sich aber erst mal damit beschäftigen, die Ubuntu Installation für eine SSD fit zu machen, da ich gerne das System auf einer SSD Platte hätte. Ich hoffe so ein paar Watt zu sparen und den Desktop, den ich gerne Remote nutzen möchte etwas zu beschleunigen.

 

Pakete

Folgende Pakete würde ich gerne auf dem Ubuntu Homeserver installieren:

Für Filesharing und Multimedia:

  • Samba
  • ReadyMedia (minidlna)

Für den Webserver:

  • Apache2
  • MySQL
  • PHP5

Für den Mailserver:

  • Postfix
  • Dovecot
  • fetchmail

Für die Entwicklung

  • git
  • gitLab

Für die Authentifikation

  • OpenLDAP

Weitere Pakete:

  • OpenSSH

Ich werde die Installation der Pakete in separaten Blog-Beiträgen behandeln, da ich dafür bestimmt eine Weile brauchen werde und noch viele Manuals lesen muss.

Der nächste Blogeintrag wird sich aber erst mal damit beschäftigen, die Ubuntu Installation für eine SSD fit zu machen, da ich gerne das System auf einer SSD Platte hätte. Ich hoffe so ein paar Watt zu sparen und den Desktop, den ich gerne Remote nutzen möchte etwas zu beschleunigen.

Blog

Kmoser's Tech-Blog