On m’a récemment demandé de trouver une façon de faire jouer une liste Spotify en continu.
Au début, on me proposait d’utiliser une tablette, mais on voulait quelque chose qui pouvait être automatisé et configuré avec plus de flexibilité. Après quelques recherches, je suis tombé sur le projet Pi MusicBox qui répondait à mes besoins. Après quelques essais et erreurs, j’ai réussi à me faire une configuration plutôt stable. Un problème que j’ai eu à de multiples reprises, fut la corruption de la carte mircoSD (due à une interruption impromptue du Raspberry Pi), ce qui m’obligeait à recharger mon image et refaire toutes les configurations. J’ai fini par mettre mon Raspberry Pi en mode lecture seule, afin d’éviter que ce problème revienne.
Voici une procédure étape par étape de ma configuration.
Note : Pour pouvoir utiliser Spotify, vous devez disposer d’un compte premium.
Matériel utilisé :
- Raspberry Pi (acheté sur Amazon)
- Un fil Jack 3.5 à RCA (acheté sur Amazon)
- Un amplificateur
- Des haut-parleurs
- Un fil réseau
Étape 1 configuration de la carte microSD
Puisque j’étais sous Windows, j’ai utilisé l’utilitaire Win32 Disk Imager. Il suffit de télécharger l’image de Pi MusicBox, disponible sur la page référée ci-dessus ou directement, en suivant ce lien https://github.com/pimusicbox/pimusicbox/releases/tag/v0.7.0RC6.
Sous Linux, vous pouvez utiliser l’utilitaire dd pour écrire l’image sur la carte microSD.
dd bs=4M if=musicbox_v0.7.0RC5.img of=/dev/sdX conv=fsync
Où /dev/sdX correspond au chemin vers votre carte microSD, en prenant pour acquis que vous êtes dans le répertoire où se trouve le fichier image.
Étape 2 connexion de la Raspberry Pi
Il est assez simple de brancher la Raspberry Pi, il suffit de brancher le fil réseau à la Pi, d’y connecter la prise analogue à votre amplificateur en utilisant le fil Jack à RCA, et d’y brancher le courant.
Il peut être pratique d’y connecter un écran et un clavier, mais ce n’était pas nécessaire (dans mon cas).
Étape 3 configuration (de base)
Vous devez d’abord identifier l’adresse IP de votre Pi. Personnellement, j’ai regardé l’attribution faite par mon serveur DHCP faite à ma Pi. Elle est facilement identifiable, son nom est MusicBox. Si vous avez branché un moniteur à la Pi, l’adresse IP devrait être affichée à l’écran.
Disons que l’adresse identifiée est : 192.168.0.10
Dans un fureteur, entrez l’adresse http://192.168.0.10 dans la barre d’adresse.
Vous devriez tomber sur l’interface web de la MusicBox.
- Dans la section Settings, nous allons d’abord configurer un mot de passe pour l’utilisateur root.
- Effectuer les autres configurations possible via l’interface web (note : vos configurations peuvent varier). Retournez sur la Settings de l’interface web, puis :
- Dans l’onglet Network, activer la connexion SSH.
- Dans l’onglet MusicBox :
- Configurer l’URL de lecteur automatique (dans mon cas, pour Spotfiy) : spotify:user:Nom-d’utilisateur:playlist:Id-de-la-liste.
- Mettre le Autoplay Timeout à 600 secondes.
- Activer le Stream Watchdog.
- Dans l’onglet Audio, choisir la sortie Analog.
- Dans l’onglet Spotify :
- Activer l’option Enable playing music form Spotify.
- Entrer le nom d’utilisateur et le mot de passe de votre compte Spotify.
- Activer l’option Spotify Connect.
- Activer l’option Spotify Web.
- Suivre le lien https://www.mopidy.com/authenticate
- Copier le Client ID et le Client Secret dans les cases à cet effet.
- Enregistrer les modifications.
- Appliquer les modifications et redémarrer le Pi.
Si tout s’est bien passé, la musique de votre liste Spotify devrait jouer au redémarrage de la Pi.
Étape 4 configuration (avancée)
Vous devez d’abord vous connecter à la Pi, si vous y avez branché un moniteur et un clavier, il est possible de faire les configurations suivante directement sur la Pi, personnellement, je préfaire utiliser SSH pour faire ceci. Vous pouvez donc vous connecter à votre Pi en utilisant Putty (sous Windows) ou SSH (sous Linux).
Sous Linux, utilisez la ligne de commande suivante pour vous connecter à votre Pi.
ssh -l root 192.168.0.10
- Configurer le fuseau horaire.
dpkg-reconfigure tzdata
- Puisque je voulais que la liste Spotify joue de façon aléatoire et en boucle, j’ai aussi ajouter les lignes suivantes au fichier /opt/musicbox/startup.sh
nano /opt/musicbox/startup.sh # trouver la ligne mpc add "$INI__musicbox__autoplay" et ajouter les deux lignes suivantes sous cette ligne. mpc random on mpc repeat on
Voilà! Tout est configuré. Mais, nous avions dit que nous voulions que la Pi soit en lecture seule, afin d’éviter la corruption de la carte microSD.
Étape 5 configuration de la Pi en lecture seule
Afin de me guider dans la configuration de ma Pi en lecture seule, je me suis basé sur les deux pages suivantes :
Le deuxième réfère à une installation Raspbian de base (utilisant Jessie), puisque nous utilisons Pi MusicBox (Wheezy), il faut en prendre et en laisser, voici ce que j’ai fait.
Désactivation de la swap et de la vérification du système de fichiers.
Il faut pour ce faire ajouter les paramètres fastboot noswap ro à la ligne de commande du fichier /boot/cmdline.txt.
Mon fichier original était comme ceci :
# dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait dwc_otg.fiq_enable=1 dwc_otg.fiq_fsm_enable=1 dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait
Mon fichier modifié est donc comme ceci :
# dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait dwc_otg.fiq_enable=1 dwc_otg.fiq_fsm_enable=1 dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait fastboot noswap ro
Déplacement de fichiers dans le système de fichier temporaire.
rm -rf /var/lib/dhcp/ /var/lib/dhcpcd5 /var/run /var/spool /var/lock ln -s /tmp /var/lib/dhcp ln -s /tmp /var/lib/dhcpcd5 ln -s /tmp /var/run ln -s /tmp /var/spool ln -s /tmp /var/lock
Installation du paquet resolvconf.
Afin de permettre la mise à jour des serveurs de noms par l’entremise de DHCP, nous devons installer le paquet resolvconf.
apt-get install resolvconf
Modification de la synchronisation de l’horloge internet.
Premièrement, installons le service ntp (Network Time Protocol).
apt-get install ntp
Puis, il faut modifier le fichier de configuration du service ntp pour permettre l’écriture (temporairement) lorsque l’heure est mise à jour. Pour ce faire, nous devons ajouter des lignes au fichier /etc/cron.hourly/fake–hwclock.
Mon fichier original était comme ceci :
#!/bin/sh # # Simple cron script - save the current clock periodically in case of # a power failure or other crash if (command -v fake-hwclock >/dev/null 2>&1) ; then fake-hwclock save fi
Mon fichier modifié est comme ceci :
#!/bin/sh # # Simple cron script - save the current clock periodically in case of # a power failure or other crash if (command -v fake-hwclock >/dev/null 2>&1) ; then mount -o remount,rw / fake-hwclock save mount -o remount,ro / fi
Noter les modifications aux lignes 7 et 9 du fichier modifié.
Ensuite, nous devons rediriger le driftfile du fichier /etc/ntp.conf vers une zone inscriptible.
Mon fichier original contenait la ligne suivante :
driftfile /var/lib/ntp/ntp.drift
que j’ai commentée, puis j’ai ajouté une ligne comme ceci :
#driftfile /var/lib/ntp/ntp.drift driftfile /var/tmp/ntp.drift
Modification de l’emplacement des logs de mopidy.
Afin de permettre l’écriture du fichier log de Mopidy, nous devons modifier l’emplacement du fichier en question. Pour ce faire, nous enlevons simplement le sous-répertoire mopidy du chemin du fichier de journalisation dans le fichier de configuration /etc/mopidy/logging.conf.
Mon fichier original était comme ceci :
[loggers] keys = root [handlers] keys = fileHandler [formatters] keys = simpleFormatter [logger_root] #level = INFO level = WARNING handlers = fileHandler [handler_fileHandler] class = FileHandler #level = INFO level = WARNING formatter = simpleFormatter args = ('/var/log/mopidy/mopidy.log',) [formatter_simpleFormatter] format = %(asctime)s - %(levelname)-8s %(message)s datefmt =
Mon fichier modifié est comme ceci :
[loggers] keys = root [handlers] keys = fileHandler [formatters] keys = simpleFormatter [logger_root] #level = INFO level = WARNING handlers = fileHandler [handler_fileHandler] class = FileHandler #level = INFO level = WARNING formatter = simpleFormatter args = ('/var/log/mopidy.log',) [formatter_simpleFormatter] format = %(asctime)s - %(levelname)-8s %(message)s datefmt =
Noter la modification de la ligne 21 de mon fichier.
Altération du démarrage
Tout d’abord, nous enlevons 2 scripts de démarrage en utilisant la ligne de commande suivante :
insserv -r bootlogs; insserv -r console-setup
Finalement, nous modifions le fichier /etc/fstab afin de lui indiquer de monter les partitions en lecture seule.
Mon fichier original était comme ceci :
proc /proc proc defaults 0 0 /dev/mmcblk0p1 /boot vfat defaults,user,rw,umask=000 0 2 /dev/mmcblk0p2 / ext4 defaults,noatime 0 1 # a swapfile is not a swap partition, so no using swapon|off from here on, use dphys-swapfile swap[on|off] for that /dev/mmcblk0p3 none swap sw 0 0
Mon fichier modifié est comme ceci :
proc /proc proc defaults 0 0 /dev/mmcblk0p1 /boot vfat defaults,user,umask=000,ro 0 2 /dev/mmcblk0p2 / ext4 defaults,noatime,ro 0 1 # a swapfile is not a swap partition, so no using swapon|off from here on, use dphys-swapfile swap[on|off] for that #/dev/mmcblk0p3 none swap sw 0 0 # Tmpfs tmpfs /tmp tmpfs nosuid,nodev 0 0 tmpfs /var/log tmpfs nosuid,nodev 0 0 tmpfs /var/log tmpfs nosuid,nodev 0 0
Noter les modifications aux lignes 2 et 3 (ajout du paramètre ro pour readonly) ainsi qu’à la ligne 5 que j’ai commentée. Je ne suis pas certain que la modification de la ligne 5 était nécessaire, mais tout semble bien tourner avec cette configuration.
Redémarrer
Nous avons terminé, il ne reste qu’à redémarrer la Raspberry Pi afin d’appliquer toutes les modifications.
Comment passer du mode lecture seule au mode lecture/écriture
Si vous devez passer en mode lecture/écriture afin de modifier une configuration ou pour toute autre raison. Vous pouvez utiliser la ligne de commande suivante :
mount -o remount,rw /
Pour retourner en mode lecture seule, utilisez la commande suivante :
mount -o remount,ro /
Voilà!
Tout est configuré, vous pouvez maintenant profiter de votre MusicBox.