La Lanterne Rouge

Warning: Geek Inside

Erreurs dans MPD à cause de la casse

- Posted in Sans catégorie by

Un très courte et simple astuce aujourd'hui mais qui peut sauver des nerfs.

J'ai déjà mentionné de nombreuses fois ma home web-radio utilisant MPD en place sur mon serveur Usul, et le fait qu'elle lisait les fichiers situés sur mon NAS via un montage Samba. Il y a quelques mois je me suis mis à retagger en masse mes fichiers car les informations étaient très souvent hétérogènes (voire inexistantes).

En plus du retaggage, j'en ai profité pour renommer en masse les fichiers (une fonctionnalité souvent proposée en parallèle). C'est ainsi que certains fichiers ou dossiers n'ont pas changé d'orthographe mais on changé de casse.

Un exemple :

"Draconian times" (de Paradise Lost) est devenu "Draconian Times".

Peu de temps après j'ai réalisé que MPD stoppait inexplicablement sa lecture sur certains fichiers (avec une erreur du genre "Impossible de décoder le fichier ...", soit un message qui n'est pas aussi explicite que "Fichier introuvable").

Au départ je n'ai pas fait le rapprochement, et en comparant à l'oeil nu les chemins je n'ai pas trouvé de différence, d'autant qu'en copiant-collant le chemin depuis le message d'erreur, le fichier était bien trouvé dans le terminal ! (eh oui, Samba est case-insensitive comme Windows)

J'ai bien essayé de rescanner mes dossiers, plusieurs fois, mais rien n'y faisait, au bout d'un moment il y avait ces erreurs qui arrêtaient la lecture sur des fichiers qui pourtant, semblaient exister.

Et puis j'ai compris. Mais par contre cela ne m'a pas expliqué pourquoi MPD ne mettait pas ces chemins à jour dans sa base. Il semblerait qu'il adopte une gestion "deux poids deux mesures" :

  • le scan des fichiers (l'ajout initial en base) est case-sensitive, jusque-là c'est normal,
  • la vérification de l'existence lors de la mise à jour de la base dépend du support, donc si c'est sur un montage Samba, elle sera case-insensitive,
  • et la lecture des fichiers est forcément case-sensitive, ça je ne l'explique pas.

Une mise à jour de la base ne suffit donc pas à mettre réellement à jour les chemins des fichiers. Il faut la détruire.

Et pour cela, rien de plus simple :

# /etc/init.d/mpd stop
# rm /var/lib/mpd/tag_cache
# /etc/init.d/mpd start

On peut ensuite relancer un scan complet de ses dossiers de musique, et là les chemins seront évidemment mis à jour (mais le scan sera plus long qu'une simple mise à jour).