Comment installer un serveur iTunes sur LinuxMint?

Le logiciel iTunes d’Apple permet de partager sa bibliothèque multimédia sur son réseau local depuis belle lurette. Mais qu’en est-t’il lorsque l’on est sur Linux? Après tout, iTunes ne fonctionne pas sur Linux, même avec Wine.

Des logiciels alternatifs tel que Banshee et Rhythmbox permettent d’avoir une énorme bibliothèque multimédia et interface « à la iTunes ». Mais ces derniers ne peuvent pas partager votre musique sur le réseau.

daap

daap signifie Digital Audio Access Protocol. Ce protocole à source fermé appartient à Apple et a été créé avec la version 4 d’iTunes. Au fil des années, plusieurs projets dans la comunauté open-source ont vu le jour pour « reverse engineering » le protocole afin de faire un serveur indépendant qui n’aurait pas besoin que iTunes soit ouvert pour partager votre bibliothèque dont mt-daapd, forked-daapd, et probablement d’autres, ont existé par le passé, mais ont cessé d’être activement développé.

Si ma mémoire est bonne, mt-daapd a été le plus populaire. Il sera renommé par « Firefly » avec le temps. Lorsque le développement de ce dernier cessa, forked-daapd vu le jour. Il s’est basé sur la dernière version de Firefly et a progressé par la suite.

Mais aujourd’hui, la version officielle de forked-daapd n’est plus développé non plus. Cette version qui est disponible dans les répertoires de Ubuntu et de LinuxMint, soit la version 0.19, comporte des lacunes.

Entre autre, les versions supérieures à la version 11.5 d’iTunes se font automatiquement déconnecter après 5 minutes. Banshee (version actuelle 2.6.2) a de la difficulté à lire beaucoup de ces fichiers. Dans ma bibliothèque la majorité ne jouait pas.

Après pas mal de recherches sur Google, j’ai trouvé un nouveau projet nommé forked-daapd, qui se nomme forked-daapd. (Oui je sais, très original) Les auteurs du projet se sont basé simplement sur la dernière version 0.19, et ont continué le développement de ce dernier. Je ne sais pas pourquoi ils n’ont pas simplement maintenu le code dans le projet original, il y a peut-être eu des problèmes entre les développeurs, mais bon, bref, la version actuelle et maintenue à jour de forked-daapd, que je vais vous montrer comment installer sous LinuxMint 17.1 « Rebecca » ci-dessous, est la version 0.22.

Cette version comporte des limitations également, donc je vais vous faire part du scénario actuel dans lequel je l’utilise.

J’ai un ordinateur roulant LinuxMint qui me sert de NAS (Network-Attached-Storage). Sur ce dernier, j’ai des serveurs SMB, SSH, daapd, Seafile et je travaille sur FireFox Sync 1.5 également en ce moment.

Donc mon ordinateur LinuxMint n’est pas qu’un NAS, mais un serveur en soi, puisqu’il gère beaucoup de services réseaux pour mes autres ordinateurs.

J’ai un ordinateur de bureau roulant Windows 7, où j’utilise iTunes(version 12.1 actuellement) pour écouter mon beat. J’ai également un bon vieux Mac Mini roulant Mac OS X 10.6.8 où j’utilise iTunes également pour écouter ma musique.

J’ai finalement un portable (terme pour ordinateur portatif au Québec, et non un smartphone comme en France) roulant LinuxMint 17.1 Rebecca également. Sur ce dernier, j’utilise Banshee 2.6.2.

Malheureusement pour mon portable, la solution qui suit ne fonctionne pas avec Banshee, mais fonctionne parfaitement avec iTunes. Je n’ai plus de déconnexion après 5 minutes dans iTunes, et iTunes ne gèle pas sur certain fichiers.

Je mettrai à jour l’article quand j’aurai trouvé une solution pour écouter ma musique sur LinuxMint.

Je tiens également à préciser que la version de forked-daapd qui suit, permet de fonctionner avec les bébelles « AirPlay » et Apple Remote, Spotify et des radios Internet.

Donc si nous débutions, je trouve que l’article est déjà assez long.

Installation de forked-daapd 0.22+

La page officielle du projet est https://github.com/ejurgensen/forked-daapd.

Puisqu’il n’existe aucun paquet pré-compilé, nous allons devoir compiler nous même depuis la source du projet.

Nous allons d’abord débuter par installer une tonne de dépendances requises.

sudo apt-get update

sudo apt-get install build-essential git autotools-dev autoconf automake libtool gettext gawk gperf antlr3 libantlr3c-dev libconfuse-dev libunistring-dev libsqlite3-dev libavcodec-dev libavformat-dev libswscale-dev libavutil-dev libasound2-dev libmxml-dev libgcrypt11-dev libavahi-client-dev libavl-dev zlib1g-dev libevent-dev libavresample-dev libcurl4-openssl-dev

Maintenant nous allons télécharger la source de forked-daapd.

git clone https://github.com/ejurgensen/forked-daapd.git

Nous allons entrer dans le dossier forked-daapd que nous venons de télécharger.

cd forked-daapd

L’heure de la compilation a sonnée.

autoreconf -i
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
make

Il est temps de l’installer à présent.

sudo make install

Maintenant nous allons devoir créer un script de démarrage automatique.

Création du service

sudo gedit /etc/init.d/forked-daapd

#! /bin/sh
### BEGIN INIT INFO
# Provides: forked-daapd
# Required-Start: $local_fs $remote_fs $network $time
# Required-Stop: $local_fs $remote_fs $network $time
# Should-Start: avahi
# Should-Stop: avahi
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: DAAP/DACP (iTunes) server, support for AirPlay and Spotify
# Description: forked-daapd is an iTunes-compatible media server for
# sharing your media library over the local network with DAAP
# clients like iTunes. Like iTunes, it can be controlled by
# Apple Remote (and compatibles) and stream music directly to
# AirPlay devices. It also supports streaming to RSP clients
# (Roku devices) and streaming from Spotify.
### END INIT INFO

# Do NOT "set -e"

PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Serveur DAAP"
NAME=forked-daapd
DAEMON=/usr/sbin/$NAME
DAEMON_ARGS=""
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

[ -x "$DAEMON" ] || exit 0

[ -r /etc/default/$NAME ] && . /etc/default/$NAME

. /lib/init/vars.sh

. /lib/lsb/init-functions

# start

do_start()
{
# Echo
# 0 started
# 1 already started
# 2 unable to start
start-stop-daemon –start –quiet –pidfile $PIDFILE –exec $DAEMON –test > /dev/null \
|| return 1
start-stop-daemon –start –quiet –pidfile $PIDFILE –exec $DAEMON — \
$DAEMON_ARGS \
|| return 2
}

# stop

do_stop()
{
# Echo
# 0 stop
# 1 already stop
# 2 unable to stop
# other error
start-stop-daemon –stop –quiet –retry=TERM/30/KILL/5 –pidfile $PIDFILE –name $NAME
RETVAL="$?"
[ "$RETVAL" = 2 ] && return 2

start-stop-daemon –stop –quiet –oknodo –retry=0/30/KILL/5 –exec $DAEMON
[ "$?" = 2 ] && return 2

rm -f $PIDFILE
return "$RETVAL"
}

do_reload() {

start-stop-daemon –stop –signal 1 –quiet –pidfile $PIDFILE –name $NAME
return 0
}

case "$1" in
start)
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
do_start
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
stop)
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
status)
status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
;;
#reload|force-reload)
#
# If do_reload() is not implemented then leave this commented out
# and leave ‘force-reload’ as an alias for ‘restart’.
#
#log_daemon_msg "Reloading $DESC" "$NAME"
#do_reload
#log_end_msg $?
#;;
restart|force-reload)
#
# If the "reload" option is implemented then remove the
# ‘force-reload’ alias
#
log_daemon_msg "Restarting $DESC" "$NAME"
do_stop
case "$?" in
0|1)
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
#echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
exit 3
;;
esac

:

Nous allons donner les bonnes permissions au script nouvellement créé.

sudo chmod 755 /etc/init.d/forked-daapd

Nous allons ajouter le service au démarrage.

sudo update-rc.d forked-daapd defaults

Si vos fichiers que vous désirez partager se trouvent sur un volume RAID, forked-daapd ne se lancera pas au démarrage, puisqu’il ne trouvera pas vos fichiers.

Ce problème est lié au fait que forked-daapd se lance en même temps ou avant que le gestionnaire de disque logique mdadm qui gère les volume RAID ne soit lancé.

Vous devez faire la manipulation qui suit si c’est votre cas.

MODIFICATION POUR RAID LOGICIEL

Nous allons devoir faire en sorte que le script de démarrage de forked-daapd s’exécute après le script de démarrage de mdadm.

Linux lance de façon chronologique les scripts selon leurs noms de fichiers. Il faudra donc simplement renommer le nom du fichier du script dans les dossiers /etc/rc2.d à /etc/rc5.d .

Allez dans le dossier /etc/rc2.d .

cd /etc/rc2.d

Listez la liste des fichiers.

ls

Notez les numéros suivant le S au début du nom de mdadm et de forked-daapd. Dans mon cas, j’avais S20 pour forked-daapd et S25 pour mdadm. Donc forked-daapd se lançait avant que le disque RAID où se trouve ma bibliothèque multimédia ne soit accessible.

Il faut donc renommer S20forked-daapd pour S26 ou plus. J’ai choisi de mettre S90, puisque ça me laisse beaucoup de distance si jamais j’ai autre chose à ouvrir chronologiquement entre mdadm et forked-daapd.

Donc on renomme le fichier S20forked-daapd pour S90forked-daapd.

sudo mv S20forked-daapd S90forked-daapd

Il faudra refaire cette manipulation dans chacun des dossiers /etc/rc3.d , /etc/rc4.d et /etc/rc5.d .

Il ne faut pas apporter la modification dans les dossiers /etc/rc0.d , /etc/rc1.d et /etc/rc6.d puisque ces derniers gère l’arrêt, le mode simple utilisateur (équivalent au mode sans échec sous Windows) et le redémarrage.

FIN DE MODIFICATION POUR RAID LOGICIEL

Configuration de forked-daapd

Nous allons configurer forked-daapd à présent.

sudo gedit /etc/forked-daapd.conf

Nous allons débuter par enlever le # au début de la ligne suivante.

db_path = "/var/cache/forked-daapd/songs3.db"

Par défaut forked-daapd scan vos fichiers multimédia à chaque démarrage de ce dernier. Si vous n’ajouterez jamais d’autre fichiers à votre bibliothèque, vous pouvez enlever le # sur le ligne suivante.

cache_path = "/var/cache/forked-daapd/cache.db"

Plus bas dans la section # Library configuration.

Changez la valeur de name par le nom que vous désirez donner à votre bibliothèque. Elle s’affichera tel quel dans iTunes.

name = "Tounes de Guizmo"

Vous pouvez utiliser la valeur port pour changer le port par défaut pour un autre que 3689 si vous avez un besoin spécifique, sinon laissez le port 3689.

Vous pouvez utiliser password pour requérir un mot de passe pour se connecter à votre bibliothèque. Dans ce cas-ci, vous devez enlever le # au début de la ligne et spécifier le mot de passe entre les guillemets.

Il faut maintenant changer la valeur directories pour l’emplacement de vos fichiers. Évidement remplacer pour votre chemin, ne copiez-collez pas le mien!!

directories = { "/media/guizmo/RAID4TB/Multimedia" }

Si votre dossier contenant vos fichiers contient des types de fichiers dont vous ne désirez pas partager, vous pouvez jouer avec la valeur filetypes_ignore plus bas dans le fichier.

Dans mon cas, je ne voulais pas partager les fichiers vidéos se trouvant ce mon dossier, j’ai donc ajouté les extensions .mp4, .avi, .mkv pour que forked-daapd ignore ces fichiers et ne les indexe pas dans la base de donnée.

filetypes_ignore = { ".db", ".ini", ".db-journal", ".pdf", ".mp4", ".avi", ".mkv" }

Si vous désirez utiliser les hauts-parleurs de votre ordinateur LinuxMint pour jouer de l’audio depuis iTunes sur un autre ordinateur à l’aide de la fonction AirPlay d’iTunes ou l’application Remote sous iOS, vous devez modifier les valeurs dans les sections # Local audio output et # AirPlay/Airport Express device settings.

La valeur nickname indique le nom que vous donner à votre ordinateur dans l’application Remote d’Apple sous iOS.

La valeur card indique quel sortie audio utiliser sur votre ordinateur.

La valeur airplay indique le nom de votre ordinateur dans iTunes dans les périphériques AirPlay.

La valeur max_volume désigne le volume maximal que votre ordinateur LinuxMint est capable de prendre. 11 est la valeur maximale de forked-daapd, donc je vous dirais de commencer et de rester avec une valeur plus basse pour ne pas faire sauter votre carte de son.

Et la valeur password est le mot de passe que vous désirez demander pour pouvoir utiliser AirPlay sur cet ordinateur à partir de iTunes.

Dans le bas il y a une section Spotify, mais je n’utilise pas cela, par conséquent je ne m’avancerai pas sur la configuration puisque c’est non testé.

Configurer les permissions

Lorsque vous avez installé forked-daapd, il a créé un utilisateur « daapd » sur votre ordinateur. Nous devons nous assurer que cet utilisateur est accès à l’emplacement de votre bibliothèque, ainsi qu’à l’emplacement où la base de donnée est créée par forked-daapd.

Nous allons donner accès en lecture, écriture et exécution à l’utilisateur « daapd » en le mettant propriétaire du dossier cache de forked-daapd.

sudo chown -R daapd:root /var/cache/forked-daapd
sudo chmod 755 -R /var/cache/forked-daapd

Maintenant pour votre dossier de fichiers multimédia, assurez-vous simplement que daapd ait accès en lecture et exécution à ce dossier. Vous n’avez pas besoin de le mettre propriétaire du dossier.

chmod 775 -R /media/guizmo/RAID4TB/Multimedia

Le propriétaire de ce dossier ainsi que le groupe est « guizmo » sur mon ordinateur, donc je laisse les choses telle quelles en laissant 7 pour le propriétaire et 7 pour le groupe, ce qui me laisse le contrôle total sur le dossier. La valeur -R rend récursif la commande pour tous les sous-dossiers et fichiers s’y retrouvant.

Le troisième chiffre, est pour « autres », pour tout les utilisateurs ne se trouvant ni dans le groupe « guizmo », ni étant le propriétaire. L’utilisateur daapd tombe dans cette catégorie. 5 signifie lecteur et exécution des fichiers et dossiers, mais il ne peut en aucun cas modifier le contenu.

Si vous désirez comprendre les permissions sur Linux, lisez mon article sur le sujet ici.

Configurer le pare-feu

Il faudra vous assurez que le port 3689 est ouvert en TCP dans votre pare-feu s’il est activé. Le pare-feu de base dans LinuxMint est « ufw » et vous pouvez installer « gufw » pour avoir un interface GUI afin de faciliter la configuration.

Lancer forked-daapd

Maintenant que le tout est installé et configurer, il ne nous reste plus qu’à lancer forked-daapd.

sudo service forked-daapd start

Cette commande n’aura pas besoin d’être exécuté lors du prochain démarrage de votre ordinateur puisque nous avons configurer plus tôt pour que le tout se lance automatiquement.

Il faut laisser un peu de temps à forked-daapd d’indexer la base de donnée avant de s’y connecter lorsque vous avez une grande bibliothèque. Pour ma part j’ai environ 19Go de mp3 sur un disque dur 3.5″ de 5400rpm, ce qui prend environ 50 secondes.

Vous pouvez voir l’état du progrès du scan en cour en utilisant la commande suivante.

tail -f /var/log/forked-daapd.log

Maintenant allez sur iTunes dans votre Mac ou PC Windows ou votre application Remote sur iOS et vous devriez voir votre bibliothèque partagée et être en mesure d’y accéder et de faire jouer vos fichiers.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *