Aujourd'hui, un petit tutoriel présentant l'installation sur SME de MediaTomb, un media-center UPnP AV (à ne pas confondre avec l'UPnP "tout court").
Le but de l'opération est la diffusion de photos, musiques et vidéos sur la Freebox (oui, je sais, pas de musique pour l'instant sur FB), notamment, mais aussi sur d'autres clients UPnP (PS3 ou Xbox, par exemple).
Dans le cas qui a motivé ce tuto, il s'agit de diffuser sur la Freebox, donc via la patte externe du serveur. Je n'ai testé que cette configuration et la diffusion sur le réseau local avec un client XBMC sous Windows.
Je vous préviens, l'installation est quelque peu tarabiscotée car MediaTomb n'est pas disponible en RPM et il y a donc un peu de travail manuel...
Pour info, j'avais essayé avec Ushare, mais le nombre de bugs rencontrés m'a fait reculer.
I Installation
Sur la page de téléchargement, copier l'adresse du package "Static Binaries" pour processeur i386. A la date de création de ce tuto, il s'agit de http://downloads.sourceforge.net/mediat ... 386.tar.gz
Nous commençons les opérations sur le serveur (si le lien vers le package a changé, pensez à modifier la ligne correspondante, hein...) :
- Code: Tout sélectionner
useradd -c "mediatomb user" -d /var/mediatomb -r -s /sbin/nologin mediatomb
mkdir -p /opt/mediatomb /var/mediatomb /var/run/mediatomb
chown -R mediatomb:mediatomb /var/mediatomb /var/run/mediatomb
cd /opt
wget http://downloads.sourceforge.net/mediatomb/mediatomb-static-0.11.0-r2-linux-uclibc-i386.tar.gz
tar -xzf mediatomb-static-0.11.0-r2-linux-uclibc-i386.tar.gz ./mediatomb
rm -f mediatomb-static-0.11.0-r2-linux-uclibc-i386.tar.gz
chmod -R g-w mediatomb
chown -R root:root /opt/mediatomb
Nous avons donc créé un utilisateur système "mediatomb" qui sera utilisé pour lancer le serveur UPnP.
Le package en lui-même est installé dans /opt/mediatomb.
Le fichier de configuration (config.xml) et la base de donnée seront installés dans /var/mediatomb.
II Intégration
Allons-y crescendo...
Pour la rotation des logs, créer le fichier /etc/logrotate.d/mediatomb contenant ceci :
- Code: Tout sélectionner
/var/log/mediatomb {
compress
create 644 root root
missingok
notifempty
}
Un serveur UPnP a la particularité de devoir écouter sur son port spécifique (normal), mais aussi sur le port UDP 1900 en Multicast. Et là, c'est moins drôle car, en toute logique, SME bloque le multicast sur l'interface réseau externe. Vous allez donc créer un nouveau fragment de template (si vous n'amez pas vi, utilisez votre éditeur favori à la place) :
- Code: Tout sélectionner
mkdir -p /etc/e-smith/templates-custom/etc/rc.d/init.d/masq
vi /etc/e-smith/templates-custom/etc/rc.d/init.d/masq/39mediatombMulticast
Dans ce fichier, collez ceci :
- Code: Tout sélectionner
{
my $status = $mediatomb{status} || 'disabled';
my $access = $mediatomb{access} || 'private';
if ($status eq "enabled" && $access eq 'public')
{
$OUT .= <<HERE;
# mediatomb: Allow UPnP Multicast
/sbin/iptables --append INPUT --proto udp --dport 1900 \\
--source \$OUTERNET --destination 239.255.255.250 --jump ACCEPT
/sbin/iptables --append OUTPUT --proto udp --dport 1900 \\
--source \$OUTERNET --destination 239.255.255.250 --jump ACCEPT
HERE
}
}
Maintenant, un gros pavé : le script de lancement... Créez le fichier /etc/init.d/mediatomb et collez-lui ceci dedans :
- Code: Tout sélectionner
#!/bin/bash
#
# Init file for the MediaTomb UPnP MediaServer
#
# chkconfig: 2345 95 30
#
# description: MediaTomb is an open source (GPL) UPnP MediaServer with a nice web user interface
# processname: mediatomb
# config: /var/mediatomb/config.xml
# pidfile: /var/run/mediatomb/mediatomb.pid
#
# NOTE : Databases are located in /var/mediatomb
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "${NETWORKING}" == "no" ] && exit 0
# Installation paths
LAUNCHDIR="/opt/mediatomb"
export MEDIATOMB_DATADIR="$LAUNCHDIR/usr/share/mediatomb"
export MEDIATOMB_MAGIC_FILE="$LAUNCHDIR/usr/share/file/magic"
# Determine the interface MediaTomb should be bind to
SYSTEMMODE=`/sbin/e-smith/db configuration get SystemMode`
ACCESSMODE=`/sbin/e-smith/db configuration getprop mediatomb access`
if [ "$SYSTEMMODE" = "serveronly" -o "$ACCESSMODE" = "private" ]
then
INTERFACE=`/sbin/e-smith/db configuration getprop InternalInterface Name`
else
INTERFACE=`/sbin/e-smith/db configuration getprop ExternalInterface Name`
fi
PORT=`/sbin/e-smith/db configuration getprop mediatomb TCPPort`
HOMEDIR="/var/mediatomb"
CFGDIR="."
PIDFILE="/var/run/mediatomb/mediatomb.pid"
LOGFILE="/var/log/mediatomb.log"
OPTIONS="--interface $INTERFACE --port $PORT --daemon --home $HOMEDIR --cfgdir $CFGDIR --pidfile $PIDFILE --user mediatomb --group mediatomb --logfile $LOGFILE"
PATH=$PATH:$LAUNCHDIR/usr/bin/
RETVAL=0
prog=$(/bin/basename $0 | sed -e 's/^[SK][0-9][0-9]*//')
[ -x $LAUNCHDIR/usr/bin/$prog ] || exit 0
start () {
echo -n "Starting MediaTomb: "
daemon $prog $OPTIONS
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
return $RETVAL
}
stop () {
echo -n "Stopping MediaTomb: "
killproc $prog
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog
return $RETVAL
}
restart () {
stop
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart|reload)
restart
;;
condrestart)
[ -e /var/lock/subsys/$prog ] && restart
RETVAL=$?
;;
status)
status $prog
RETVAL=$?
;;
*)
echo $"Usage: $0 {start|stop|restart|condrestart|status}"
RETVAL=1
esac
exit $RETVAL
On l'intègre au système dans les différents runlevels ainsi que dans le rc7 spécifique à SME :
- Code: Tout sélectionner
chkconfig --add mediatomb
ln -s /etc/rc.d/init.d/e-smith-service /etc/rc7.d/S95mediatomb
Et pour finir, la configuration de ce service pour une parfaite intégration à SME :
- Code: Tout sélectionner
/sbin/e-smith/db configuration set mediatomb service AllowHosts 212.27.38.253 TCPPort 49152 access public status enabled
signal-event remoteaccess-update
Dans AllowHosts (hôtes autorisés à accéder au service), j'ai indiqué l'adresse IP des Freebox mais vous pouvez définir ceux qui vous conviennent en fonctions de vos équipements UPnP. S'il y en a plusieurs, ils doivent être séparés par une virgule (ex: 192.168.100.25,192.168.100.30).
Notez que MediaTomb ne peut écouter que sur une seule interface. S'il est configuré en "public", les équipements du réseau local n'y auront donc pas accès.
Il faudrait pour cela lancer un deuxième service sur la patte locale avec un autre fichier de config, etc. Si le jeux vous en dit, lancez-vous !
III Configuration
Au premier lancement, MediaTomb va créer ses fichiers de configuration et de base de données. On va donc faire un marche/arrêt :
- Code: Tout sélectionner
/etc/rc7.d/S*mediatomb start && /etc/rc7.d/S*mediatomb stop
Nous pouvons à présent modifier quelques éléments utiles dans /var/mediatomb/config.xml :
*) dans <config> / <server>, vous pouvez changer le nom du serveur tel qu'il apparaît sur les clients :
- Code: Tout sélectionner
<name>Ma babasse adorée</name>
J'ai également choisi de masquer le "dossier" PC-Directory (à chacun de juger de son utilité) :
- Code: Tout sélectionner
<pc-directory upnp-hide="yes"/>
*) dans <config> / <import hidden-files="no">, il faut définir le jeu de caractères des fichiers :
- Code: Tout sélectionner
<filesystem-charset>UTF-8</filesystem-charset>
<metadata-charset>UTF-8</metadata-charset>
Comme j'ai créé une ibay "toto" dédiée à mon serveur UPnP, je la défini "en dur" :
- Code: Tout sélectionner
<autoscan use-inotify="auto">
<directory location="/home/e-smith/files/ibays/toto/files" mode="timed" interval="60" level="full" recursive="yes" hidden-files="no"/>
</autoscan>
MediaTomb scannera toute l'arborescence de ce répertoire chaque minute pour détecter la présence de nouveaux fichiers.Vous pouvez augmenter ce délai si la charge de travail se fait ressentir.
Enfin, sachez que vous pouvez ajouter ou supprimer des fichiers et répertoires par l'intermédiaire d'un mini site Web situé à l'adresse http://ip_de_votre_serveur:49152 (ou un autre port, si vous l'avez changé)
Pour l'utilisation et la configuration spécifique de MediaTomb, je vous recommande la lecture de sa documentation officielle.
Notez que je n'ai pas intégré ce service aux daemontools comme je l'avais fait pour ntop, mais c'est principalement par manque de temps.
Si vous constatez un manque de stabilité du service, faites-le moi savoir et je comblerais cet "oubli".
Voilà pour l'instant. Je suis à l'écoute de vos avis, commentaires, conseils, etc. (enfin, presque car je vais m'absenter quelques jours mais j'en prendrais compte à mon retour).