Indexation baie Synology : installation de Synology-mediamon

L’indexation automatique d’une baie Synology n’est pas optimale, et pose souvent problème quand on passe par NFS pour copier les fichiers (par exemple). J’avais écrit l’année dernière un article pour installer le paquet “Media Indexer” de Francis Besset.

Hélas, depuis le passage en DSM 6, cela ne marchait plus vraiment : je retrouvais souvent le service arrêté. Et en allant aux nouvelles, le paquet a été retiré, et manifestement il ne faut pas compter sur une nouvelle version.

Je me suis donc tourné vers une autre solution appelée synology-mediamon. L’installation n’a rien de compliquée, mais elle se passe en mode “ligne de commande”. Je fais donc ce petit tuto en français, n’en ayant pas trouvé d’autres.

Tout ceci ne concerne bien entendu que les répertoires définis pour le “Indexing Service” dans le Control Panel :

La première chose à faire est d’installer Python 3 s’il n’a pas été installé précédemment. Rien de plus simple, aller dans le Package Center, sélectionner “Community” dans la partie gauche, et donc installer Python 3. Vous verrez peut-être qu’une autre version de Python est installée (la v2) : peu importe, installer Python 3 à côté.

La solution présentée ci-dessous ne fonctionne plus (pb démarrage automatique, plantages fréquents), et de plus n’est plus maintenue.
Voir désormais ce nouvel article pour une autre solution, Synoindex Watcher.

Il va d’abord falloir récupérer le fichier zip de la page github de synology-mediamon. Cliquer sur “Clone or Download” à droite, puis sur “Download ZIP”. En plus du readme, il y a deux fichiers qu’il va falloir copier dans /volume1/homes/admin/ : mediamon.py et S99mediamon.sh. On peut utiliser le File station de Synology pour ce faire :

Passons maintenant à la partie “ligne de commande”. Il va falloir activer SSH pour pouvoir se connecter à la baie Synology : aller dans le Control Panel, sélectionner “Terminal et SNMP” dans la partie gauche, cocher SSH et lui attribuer un numéro de port :

Il ne reste plus qu’à se connecter à partir d’un terminal (l’adresse IP de la baie est indiquée dans le Control Panel -> Info Center -> onglet Network). Dans mon cas, cela donne ceci :

ssh admin@192.168.1.14 -p 2158

Taper ensuite la commande suivante pour être l’utilisateur root (il faudra retaper le mot de passe) :

sudo su

On installe ensuite pyinotify :

python3 -m ensurepip
python3 -m pip install pyinotify

Pour vérifier que pyinotify fonctionne, taper :

python3 -m pyinotify -v /tmp

Vous devez alors voir des choses comme ceci défiler (taper Ctrl-c pour arrêter) :

Pour que synology-mediamon démarre automatiquement, Il faut maintenant copier S99mediamon.sh dans le répertoire /usr/local/etc/rc.d/, puis lui accorder les permissions 0755 :

cp /volume1/homes/admin/S99mediamon.sh /usr/local/etc/rc.d/
chmod 755 /usr/local/etc/rc.d/S99mediamon.sh

Il ne reste plus qu’à redémarrer votre baie Synology pour vérifier que le service démarre bien automatiquement. Sinon, taper la commande suivante :

/usr/local/etc/rc.d/S99mediamon.sh start

Pour vérifier que tout fonctionne, ajouter des fichiers (via NFS tant qu’à faire) dans l’un des répertoires /volume1/photo, /volume1/music, ou /volume1/video, et vérifier le fichier de log de mediamon. On doit voir  défiler des “synoindex -a” pour chaque fichier ajouté (pour chaque inode j’ai l’impression !) :

Voilà, ça a l’air de bien fonctionner, pas de problème depuis que je l’ai installé.

Le développeur note que si vous avez un très grand nombre de fichiers multimédias, le message d’erreur “No space on device” peut survenir. Cela ne signifie pas qu’il n’y a plus d’espace disque, mais que l’on a atteint la limite du nombre de fichiers surveillés. Il est possible d’augmenter cette limite en tapant la commande suivante (en tant que root) :

echo fs.inotify.max_user_watches=100000 | sudo tee -a /etc/sysctl.conf; sudo sysctl -p

Bonne indexation !

16 commentaires sur “Indexation baie Synology : installation de Synology-mediamon”

  1. Bonjour,

    Merci pour la trouvaille et le tuto, le DLNA fonctionnait plus trop depuis le passage à Linux, je n’avais pas forcement le lien avec le NFS.

    Installation de mediamon et tout refonctionne.

    Merci encore

  2. Génial ! Enfin une solution fiable pour ce problème frustrant.
    Merci beaucoup pour ce tutorial.
    Petit conseil vérifier bien que vous avez activé les dossiers Homes pour vos utilisateurs AVANT d’installer Python3.
    Sinon les commandes Python3 ne fonctionnerons pas.
    Merci Pascal !

    1. Ça peut arriver, dans ce cas je le redémarre manuellement.
      Si le problème persiste, il faut investiguer, càd ouvrir une session ssh, le lancer manuellement (commande “python3 /volume1/homes/admin/mediamon.py” typiquement) et voir ce qu’il se passe.

      1. il semble que ce soit un souci de caractere pouvant etre rencontré, le processus s’arrete sans fournir de log dès qu’il rencontre un caractere du type accent, apostrophe…. dans le nom de fichier

  3. Bonjour, je viens de changer le HDD de mon Synology DS115j et du coup je dois tout réinstaller et tout configurer. J’utilisais auparavant la solution de Francis Besset pour l’indexage automatique que j’utilise principalement pour le serveur DLNA mais impossible apparement à réinstaller maintenant. Je souhaite utiliser cette méthode. J’en suis à l’étape où il faut copier les fichiers “mediamon.py et S99mediamon.sh” mais je n’ai pas le dossier “/volume1/homes/admin/” je peux le creer simplement à partir du compte admin où cela doit se faire autrement ? Merci d’avance.

    1. Bonjour Martin,
      Si tu n’as pas la même arborescence pour le compte admin, le mieux est de regarder à l’étape suivante, avec l’installation de ssh, dans quel répertoire tu te retrouves quand tu te loggues avec le compte admin (commande ‘pwd’), et tu copies les fichiers dans ce répertoire.

      1. Merci pour ta réponse Pascal. Je suis connecté en SSH sur le NAS en ROOT et quand je tape la commande “python3 -m ensurepip” et me “réponds” ash: python3: command not found” ? (J’ai Python3 installé, dans le centre de paquets il est écrit “En cours d’exécution”)

  4. Cela dit, je n’arrive pas à faire en sorte que le script se lance automatiquement au démarrage.

    J’ai bien placé S99mediamon.sh dans “/usr/local/etc/rc.d/”, avec les droits en 755.
    Je peux le lancer à la main avec ‘start’ et l’arrêter avec ‘stop’, il apparait bien dans un ps aux | grep mediamon sans me retourner d’erreur et les modifications de fichier apparaissent bien dans les logs .

    Par contre, après un démarrage le processus n’est pas lancé.
    J’ai essayé aussi via DSM > Planificateur de tache > Créer > Tache déclencher > “bash /usr/local/etc/rc.d/S99mediamon.sh start” lancé par root au boot.

    Le retour de la commande que je recois par mail est le suivant :

    Tâche : Mediamon
    Heure de début : Fri, 22 May 2020 01:20:49 GMT
    Heure d’arrêt : Fri, 22 May 2020 01:20:50 GMT
    État actuel : 1 (Interrompu)
    Sortie standard/erreur :
    Traceback (most recent call last):
    File “/volume1/homes/admin/mediamon.py”, line 132, in
    exclude_filter=lambda p: ‘/@’ in p
    File “/volume1/@appstore/py3k/usr/local/lib/python3.5/site-packages/pyinotify.py”, line 1916, in add_watch
    exclude_filter)
    File “/volume1/@appstore/py3k/usr/local/lib/python3.5/site-packages/pyinotify.py”, line 1833, in __add_watch
    wd = self._inotify_wrapper.inotify_add_watch(self._fd, path, mask)
    File “/volume1/@appstore/py3k/usr/local/lib/python3.5/site-packages/pyinotify.py”, line 153, in inotify_add_watch
    return self._inotify_add_watch(fd, pathname, mask)
    File “/volume1/@appstore/py3k/usr/local/lib/python3.5/site-packages/pyinotify.py”, line 246, in _inotify_add_watch
    pathname = pathname.encode(sys.getfilesystemencoding())
    UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 72-73: ordinal not in range(128)

    Et cela dépasse désormais mes compétences.
    Pourriez vous m’aider ?

    Merci d’avance.

    1. Bonjour Jo,
      Oui, je confirme que ce script ne fonctionne plus en démarrage automatique (bug connu), et en plus il plante assez souvent en cours de fonctionnement. Et le script ne semble plus maintenu…
      La bonne nouvelle, c’est qu’en regardant un peu tout ça, j’ai trouvé une autre solution appelée Synoindex Watcher, qui fonctionne très bien, plus récente et toujours maintenue. J’ai donc fait un nouvel article disponible ici : https://pled.fr/?p=16444. Je vais modifier cette page pour indiquer tout ça.
      Pour nettoyer cette install, il faut supprimer les deux fichiers “mediamon”, et désinstaller pyinotify par la commande suivante : “sudo python3 -m pip uninstall pyinotify”.
      Désolé pour cette installation inutile !

  5. Bonjour Pascal, je vais passer aussi à la nouvelle solution que tu propose parce que avec celle-ci quand j’ajoute un torrent à rutorrent l’indexation automatique ne fonctionne pas, peut-être qu’avec cette nouvelle solution cela va fonctionner ? Espérons je vais tester cela. Merci tes partages 🙂

    1. Bonjour Martin,
      J’espère que celui fonctionnera. Vérifies bien que ton répertoire fait partie des dossiers indexés… sinon éventuellement tu devras peut-être créer un fichier de configuration. Mais Synoindex Watcher a l’air prometteur ! 😉

Laisser un commentaire

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