Lyrion Music Server

Référence : Lyrion Music Server 9.1.2, canal Stable Nightly – Ubuntu Server 24.04 – interface Material Skin 6.4.9

Lyrion Music Server

Le fichier .md de cette page : ouvrir le .md

Ce que cette page couvre : monter un serveur de musique Lyrion sur une machine sans écran, lui donner une bibliothèque, régler son transcodage, ses journaux et sa sécurité, et savoir vérifier qu’il est à jour. Ce qui joue le son — les platines — fait l’objet d’une page distincte à laquelle celle-ci renvoie.

Contexte : une machine physique sous Ubuntu Server 24.04, deux cartes réseau, une bibliothèque d’environ 81 000 pistes sur un disque local, une interface en français. Les adresses, noms d’hôtes et noms de comptes sont des exemples à transposer.

Trois choses valent le détour même sans suivre ce guide de bout en bout.

Le logiciel a changé de nom sans que ses fichiers suivent : le paquet et le service portent le nom neuf, tout le reste porte l’ancien. C’est la section Ce que le nom cache, et c’est ce qui fait échouer la moitié des procédures qu’on trouve ailleurs.

La version installée ne se vérifie pas par son numéro de version. La section Vérifier qu’on est à jour dit pourquoi, et quel nombre comparer.

Un réglage de journalisation modifié dans l’interface ne survit pas au redémarrage suivant si une case n’a pas été cochée. C’est la section Les journaux, et c’est ce qui explique qu’un serveur ramené au calme redevienne bavard tout seul.

Convention : chaque bloc de commandes est précédé de la machine où il s’exécute — ici [nas-host] pour tous.

⚠️ Deux lignes de code de ce guide dépassent la largeur du PDF et s’y enroulent sans aucun signe visible : la ligne de téléchargement du paquet et la première ligne de commande de custom-convert.conf. Aucune n’accepte de continuation. Les recopier depuis le .md, jamais depuis le PDF.


1. Ce que fait ce serveur, et ce qui n’est pas ici

Lyrion Music Server tient la bibliothèque musicale, lit les métadonnées des fichiers, les range dans une base, sert une interface web pour naviguer dedans, et envoie un flux aux appareils qui jouent. Il ne produit lui-même aucun son — sauf s’il est aussi sa propre platine, ce qui est le cas ici et qui est décrit sur l’autre page.

Il descend de Logitech Media Server, lui-même successeur de SlimServer et SqueezeCenter. C’est un programme Perl, maintenu aujourd’hui par la communauté après l’abandon du matériel Squeezebox par Logitech.

Trois sujets voisins ont leur propre page, et ce guide n’y revient pas :

  • Les platines Squeezelite — ce qui joue le son : la platine du serveur lui-même, celles des postes de travail, les Raspberry Pi sous piCorePlayer, la Squeezebox d’origine, les applications mobiles.
  • MusicIP — analyse acoustique et listes de lecture — le moteur d’empreintes acoustiques qui alimente les listes de lecture automatiques, et les greffons qui l’interrogent.
  • Icecast2 – Ices2 — la diffusion d’une source audio externe sur le réseau, qu’on ajoute ensuite à Lyrion comme une radio web ordinaire.

Les trois ports

  • 9000 — l’interface web et son interface de programmation.
  • 9090 — l’interface de commande en texte.
  • 3483 — le protocole des platines, en TCP et en UDP.

Aucun des trois n’est fait pour traverser Internet, et aucune redirection de port ne mène ici. Le protocole de contrôle circule en clair. Hors de la maison, tout passe par un tunnel.


2. Installer

Il n’existe aucun dépôt apt

🎯 C’est le point sur lequel on perd le plus de temps. La page du projet s’intitule LMS Server Repository, et ce n’en est pas un : elle ne porte ni ligne deb http, ni fichier sources.list, ni clé GPG. Elle propose uniquement des fichiers .deb à télécharger. Le nom de la page est le piège.

L’installation consiste donc à prendre un .deb et à le poser. Ce n’est pas un bricolage : c’est la méthode que le projet prescrit.

Les trois canaux

CanalCe que c’est
Latest Releasela dernière version publiée
Stable Nightlyla branche stable, reconstruite chaque nuit — c’est le canal suivi ici
Development🔴 la branche de développement, que le projet lui-même déconseille d’installer à qui n’est pas prêt à réparer son installation à la main

Le canal Stable Nightly prend les correctifs quelques semaines avant la version publiée, au prix d’une reconstruction quotidienne dont on ne sait rien.

Poser le paquet

[nas-host]

cd /home/hostadmin/downloads
wget https://downloads.lms-community.org/nightly/lyrionmusicserver_9.1.2~1788782766_amd64.deb

🎯 Installer avec apt, et non avec dpkg -i. La différence n’est pas cosmétique : apt sait résoudre les dépendances déclarées par le paquet, dpkg ne sait que les constater et échouer. Une procédure qui fait installer les bibliothèques Perl à la main avant un dpkg -i résout un problème qu’apt n’a pas.

[nas-host]

sudo apt install ./lyrionmusicserver_9.1.2~1788782766_amd64.deb

Le chemin doit commencer par ./ ou par / : sans cela, apt cherche un paquet portant ce nom dans ses dépôts et ne trouve rien.

Les bibliothèques que le paquet tire avec lui sont celles du chiffrement Perl — libio-socket-ssl-perl, libnet-ssleay-perl, libcrypt-openssl-rsa-perl, libcrypt-openssl-bignum-perl, libcrypt-openssl-random-perl — plus lame pour l’encodage MP3.

Ce que l’installation crée

Le paquet pose le service, l’active, et le démarre. Il crée aussi le compte de service et les trois arborescences décrites à la section suivante.

[nas-host]

systemctl is-enabled lyrionmusicserver.service
systemctl is-active lyrionmusicserver.service

Attendu : enabled puis active.

Le serveur répond alors sur le port 9000, et l’assistant de première configuration s’ouvre au premier accès.


3. Vérifier qu’on est à jour

⚠️ Comparer les numéros de version ne prouve rien. Sur le canal Stable Nightly, deux nuits successives portent le même numéro de version avec un horodatage différent : 9.1.2~1788782766 un soir, 9.1.2~1788869166 le lendemain. Un serveur qui affiche 9.1.2 en face d’un fichier nommé 9.1.2 peut avoir des semaines de retard.

🎯 Ce qu’il faut comparer est le nombre qui suit le tilde, et le serveur l’affiche.

Ouvrir Réglages → Informations, section État du Lyrion Music Server :

Lyrion Music Server Version : 9.1.2 - 1788782766 @ Tue Sep 8 02:47:29 UTC 2026

Ce nombre — 1788782766 — est exactement le suffixe du fichier proposé au téléchargement, lyrionmusicserver_9.1.2~1788782766_amd64.deb. S’ils concordent, l’installation est à jour sur son canal. Sinon, elle ne l’est pas, quels que soient les numéros de version.

La page Informations du serveur

ℹ️ C’est la page à ouvrir en premier pour à peu près toute question sur cette installation. Elle donne, outre la version : le nom d’hôte, l’adresse et le port du serveur, le système, l’architecture, le nombre de platines identifiées, les versions de Perl et de ses modules, et les statistiques de la bibliothèque — morceaux, albums, artistes, genres, listes de lecture, durée totale. Trois de ces informations n’existent nulle part ailleurs de façon aussi accessible.

⚠️ L’adresse que le serveur s’attribue n’est pas forcément celle par laquelle on le joint. Ici il annonce 192.168.0.2 alors que toutes les platines le joignent en 192.168.0.11 : la machine porte deux cartes réseau et le service répond sur les deux. Ce n’est pas un défaut à corriger, c’est une propriété d’une machine physique — rien ne lie le service à une seule interface.


4. Ce que le nom cache

🎯 Le renommage de Logitech Media Server vers Lyrion Music Server n’est fait qu’à moitié, et c’est le piège central de cette installation.

Portent le nom neuf :

  • le paquet, lyrionmusicserver ;
  • le service, lyrionmusicserver.service ;
  • le fichier d’options, /etc/default/lyrionmusicserver.

Portent l’ancien :

  • le binaire, /usr/sbin/squeezeboxserver, et ses quatre compagnons -scanner, -resized, -cleanup et _safe ;
  • le compte de service, squeezeboxserver ;
  • les trois arborescences/var/lib/squeezeboxserver, /etc/squeezeboxserver, /var/log/squeezeboxserver.

Aucun chemin en lyrion n’existe. Un ls /var/lib/lyrionmusicserver ne rend rien, et c’est normal.

[nas-host]

id squeezeboxserver
ls -ld /var/lib/squeezeboxserver /etc/squeezeboxserver /var/log/squeezeboxserver

Le compte a un identifiant système, nologin comme interpréteur, et son groupe principal est nogroup. Ce sont ses groupes secondaires qui décident de ce qu’il peut faire :

GroupeCe qu’il ouvre
audiola carte son, quand le serveur est aussi sa propre platine
cdromle lecteur de disques
sambasharela bibliothèque musicale, dont les fichiers appartiennent à ce groupe

[nas-host]

sudo usermod -a -G audio,cdrom,sambashare squeezeboxserver
sudo systemctl restart lyrionmusicserver

⚠️ Une appartenance de groupe ne s’applique pas à un processus déjà lancé. Le redémarrage du service n’est pas une précaution, c’est ce qui rend le changement effectif.

Le fichier d’options

/etc/default/lyrionmusicserver est le seul endroit prévu pour passer des arguments au serveur. Son contenu par défaut :

# User to run Lyrion Music Server as.
# Only applicable to platforms that do not use systemd.
SLIMUSER=squeezeboxserver

# Additional options for the server.
SLIMOPTIONS="--quiet"

ℹ️ SLIMUSER n’a plus d’effet. L’unité systemd fixe User=squeezeboxserver en dur, et le commentaire du paquet le dit lui-même. Seul SLIMOPTIONS agit. Le --quiet qui s’y trouve empêche le serveur de doubler son journal sur la sortie standard — sans lui, tout ce qui va dans server.log irait aussi dans journalctl.

⚠️ L’unité du paquet porte Restart=no, délibérément. Le commentaire du fichier l’assume : relancer automatiquement un serveur qui échoue masque la cause de l’échec. Ne pas « corriger » ce point sans raison.


5. La bibliothèque

Trois dossiers, et le troisième se règle ailleurs

🎯 C’est l’erreur de relevé la plus facile à commettre. Deux dossiers sont des dossiers multimédias ; le troisième, celui des listes de lecture, est un réglage distinct. Qui ne lit que la liste des dossiers multimédias en manque un tiers.

Page Réglages → Réglages de base :

Les dossiers de la bibliothèque
ChampValeur
LangueFrançais
Dossiers multimédias/media/nas1/Audio/LMS
/media/nas1/Audio/LMS_Filtre_MusicIP
Dossier des listes de lecture/media/nas1/Audio/LMS_Liste_de_lecture

La colonne Musique de chaque dossier multimédia dit à l’analyseur d’y chercher de l’audio ; les colonnes voisines servent aux images et aux vidéos, inutiles ici.

Pourquoi un second dossier multimédia. Le module de soumission en bloc de l’outil d’analyse acoustique déplace physiquement hors de la bibliothèque les fichiers qu’il écarte — sans empreinte, durée aberrante, genre exclu. S’il n’y avait qu’un dossier, ces fichiers disparaîtraient purement et simplement du catalogue. Le second dossier les rattrape. 🔴 Les deux doivent être analysés, sinon des pièces s’évanouissent sans message. Le détail est sur la page MusicIP.

Le dossier de la bibliothèque n’est qu’un ensemble de liens

Les fichiers ne vivent pas dans /media/nas1/Audio/LMS. Ce dossier ne contient que des liens symboliques vers les dossiers réels, ce qui permet de choisir ce qui entre dans la bibliothèque sans déplacer un seul fichier — un dossier de travail, une corbeille, un miroir transcodé restent dehors simplement parce qu’aucun lien ne les désigne.

[nas-host] — à faire sous le compte propriétaire de la bibliothèque, pas sous root : un dossier créé par root ne serait pas accessible par les partages réseau.

mkdir -p /media/nas1/Audio/LMS
cd /media/nas1/Audio/LMS
ln -s /media/nas1/Audio/Musique/24-44      24-44
ln -s /media/nas1/Audio/Musique/24-48      24-48
ln -s /media/nas1/Audio/Musique/24-88      24-88
ln -s /media/nas1/Audio/Musique/24-96      24-96
ln -s /media/nas1/Audio/Musique/24-192     24-192
ln -s /media/nas1/Audio/Musique/24-Mix_fq  24-Mix_fq
ln -s /media/nas1/Audio/Musique/Flac       Flac
ln -s /media/nas1/Audio/Musique/Flac_vrac  Flac_vrac
ln -s /media/nas1/Audio/Musique/Flac_Mix_res-Mix_fq  Flac_Mix_res-Mix_fq
ln -s /media/nas1/Audio/Musique/AlbumsMP3  AlbumsMP3
ln -s /media/nas1/Audio/Musique/MP3vrac    MP3vrac
ln -s /media/nas1/Audio/Musique/Podcasts   Podcasts
ln -s /media/nas1/Audio/Musique/Francis    Francis

Et le lien du second dossier :

[nas-host]

mkdir -p /media/nas1/Audio/LMS_Filtre_MusicIP
ln -s /media/nas1/Audio/Musique/Exclus_MusicIP \
      /media/nas1/Audio/LMS_Filtre_MusicIP/Exclus_MusicIP

Puis le contrôle, qui montre les liens et leurs cibles :

[nas-host]

ls -la /media/nas1/Audio/LMS/

Les permissions

Le compte de service lit la bibliothèque par son appartenance au groupe, pas par les droits « autres ». Il doit donc être membre du groupe propriétaire des fichiers, et ce groupe doit avoir la lecture.

⚠️ Le serveur a aussi besoin d’écrire, dans le dossier des listes de lecture uniquement — c’est là qu’il enregistre celles qu’on crée depuis l’interface.

La mécanique complète — bit setgid, ACL, masque, et l’ordre dans lequel chown, chmod et setfacl doivent s’enchaîner — est décrite dans INCUS – Hôte et conteneur & serveur NAS, qui en est la page propriétaire.

L’analyse

Le champ Analyser la bibliothèque multimédia de la même page offre plusieurs portées : chercher les nouveautés, chercher les nouveautés et les disparitions, ou effacer la base et tout reprendre. Le lien Afficher les détails de l’analyse précédente donne le compte rendu du dernier passage.

Sur cette installation, l’analyse complète traite environ 94 000 fichiers en quarante secondes, et elle est relancée chaque nuit. Une analyse complète est donc bon marché ici ; elle ne l’est pas sur une machine lente ou une bibliothèque distante.

⚠️ Une analyse en cours désactive une partie des fonctions de l’interface. Ce n’est pas une panne : il faut la laisser finir.

Ce qui n’est pas dans la base, et qui compte

Le catalogue se refabrique par une analyse. Ce qui ne se refabrique pas, ce sont les listes de lecture — des fichiers .m3u dans le dossier dédié — et l’historique d’écoute, qui vit dans une base à part. La section La sauvegarde y revient.


6. Le transcodage

Les utilitaires sont livrés avec le serveur

🎯 Il n’y a aucun paquet audio à installer, et c’est contre-intuitif. Le serveur apporte ses propres décodeurs dans /usr/share/squeezeboxserver/Bin/x86_64-linux :

BinaireCe qu’il décode
faadAAC
flacFLAC
soxconversion et rééchantillonnage
macMonkey’s Audio
wvunpackWavPack

[nas-host]

ls -l /usr/share/squeezeboxserver/Bin/x86_64-linux/

Installer le paquet système du même nom ne sert à rien — le serveur emploie le sien, pas celui du système. C’est une dépense inutile qu’on retrouve dans beaucoup de procédures.

Deux exceptions : lame, tiré par le paquet et utilisé depuis /usr/bin, et ffmpeg, employé par les règles personnalisées ci-dessous.

Les règles personnalisées

Le serveur livre son propre catalogue de conversions dans /etc/squeezeboxserver/convert.conf. 🔴 Ne jamais modifier ce fichier : il appartient au paquet et sera remplacé à la prochaine montée de version, en silence. Les ajouts vont dans custom-convert.conf, à côté, que le paquet ne touche pas.

Ici, trois règles ajoutent le MP4 et l’AAC par ffmpeg.

[nas-host]

sudo nano /etc/squeezeboxserver/custom-convert.conf

Contenu à coller dans l’éditeur ouvert :

mp4 mp3 * *
    # FRB:{BITRATE=-B %B}T:{START=-ss %s}
    [ffmpeg] -loglevel quiet  -f mp4 -i $FILE$ -f wav - | [lame] --silent -q $QUALITY$ $BITRATE$ - -

mp4 pcm * *
    # FRB:{BITRATE=-B %B}T:{START=-ss %s}
    [ffmpeg] -loglevel quiet  -f mp4 -i $FILE$ -f u16le -

mp4 flc * *
    # FRB:{BITRATE=-B %B}T:{START=-ss %s}
    [ffmpeg] -loglevel quiet -f mp4 $START$ -i $FILE$ -f flac -

Comment se lit une règle. La première ligne donne quatre champs : format d’entrée, format de sortie, modèle de platine, adresse de platine — les deux astérisques signifiant « n’importe laquelle ». La deuxième, en commentaire, déclare les capacités de la règle : F fichier, R flux, B débit variable, T démarrage à une position. La troisième est la commande, où [ffmpeg] et [lame] sont remplacés par les chemins réels et $FILE$ par le fichier.

⚠️ L’indentation est significative : les lignes de continuation commencent par une tabulation, pas par des espaces. Une règle indentée avec des espaces est ignorée sans message.

Après modification :

[nas-host]

sudo systemctl restart lyrionmusicserver

ℹ️ Le journal du serveur dit quelles règles ont été retenues, à chaque démarrage, sous la forme Checking formats for: … suivie de Found command: ou d’un rejet motivé. C’est le seul endroit où l’on voit qu’une règle a été écartée, et pourquoi.

Ce que le transcodage sert à faire, et à ne pas faire

Une platine moderne joue le FLAC haute résolution sans conversion. Le transcodage sert quand l’appareil en aval ne suit pas : une Squeezebox d’origine, un téléviseur, ou une écoute distante où l’on veut plafonner le débit.

⚠️ Le plafond de débit se règle par platine, pas globalement, dans les réglages du lecteur concerné. Une platine ainsi bridée affiche dans les informations de piste une mention du genre 5906 kbps VBR (Converti en 320 kbps MP3) — c’est le moyen le plus simple de vérifier ce qui se passe réellement. Le sujet appartient à la page des platines.


7. Le lecteur de disques compacts

Le greffon CDplayer fait apparaître le disque inséré comme une source de lecture ordinaire, et interroge une base de données en ligne pour en obtenir les titres.

Les outils de lecture

[nas-host]

sudo apt install cdparanoia icedax

ℹ️ cdda2wav n’est pas un paquet sur cette distribution : le binaire est fourni par icedax, qui en est la version maintenue. Chercher un paquet cdda2wav ne donne rien.

L’accès au lecteur

Le nœud de périphérique appartient au groupe cdrom ; le compte de service doit en être membre — c’est déjà fait à la section 4.

[nas-host]

ls -l /dev/sr0 /dev/cdrom

Attendu : /dev/sr0 en brw-rw---- root cdrom, et /dev/cdrom en lien symbolique vers lui.

⚠️ Si ces deux entrées n’existent pas, le problème n’est pas logiciel et aucun réglage ne le corrigera. Le module noyau sr_mod est intégré au noyau sur Ubuntu — il n’y a rien à charger, rien à mettre en liste noire, et donc rien à soupçonner de ce côté. Un lecteur absent de /dev est un lecteur que la machine ne voit pas électriquement : nappe de données, nappe d’alimentation, réglage du BIOS, ou lecteur mort. Le journal de démarrage le confirme en une commande :

[nas-host]

sudo dmesg | grep -iE 'ata[0-9]+:|ATAPI'

Un port sans appareil y annonce link down ou SStatus 0. Aucune ligne ATAPI signifie qu’aucun appareil optique ne s’est présenté.

Le réglage du greffon

Page Réglages → Extensions → CDplayer. Le champ qui compte est le nom du périphérique : /dev/cdrom, jamais /dev/sr0 directement — le lien survit à un changement de numérotation, pas le nœud.

Un changement d’appartenance de groupe n’atteint pas un processus en cours. Après avoir ajouté le compte au groupe cdrom, redémarrer le service — ou la machine si le lecteur vient d’être branché.


8. Les greffons

Livrés, ou téléchargés — la distinction qui compte

Les greffons livrés avec le paquet vivent dans /usr/share/perl5/Slim/Plugin/, un sous-dossier par greffon. Ils sont réinstallés à chaque montée de version et ne peuvent pas disparaître.

⚠️ Ce n’est pas sous /usr/share/squeezeboxserver/, où l’on pense d’abord à regarder — ce répertoire porte bien un dossier Plugins/, mais il est vide. Ce sont des modules Perl, et ils sont rangés là où Perl range les siens. Le paquet, lui, sait toujours ce qu’il a posé :

[nas-host]

dpkg -L lyrionmusicserver | sed -nE 's|.*/Slim/Plugin/([A-Za-z0-9]+)$|\1|p' | sort

ℹ️ Une quarantaine de noms en sortent, dont plusieurs répondent à des questions qu’on se pose ailleurs : ACLFiletest active la prise en compte des ACL sur la bibliothèque, MusicMagic est le greffon MusicIP sous son nom de code, LineIn et DigitalInput servent les entrées audio d’une platine matérielle.

Les greffons téléchargés vivent dans /var/lib/squeezeboxserver/cache/InstalledPlugins/Plugins/, un sous-dossier par greffon. Le serveur les tire lui-même depuis des dépôts, au démarrage ou sur demande.

🔴 C’est cette seconde catégorie qui est fragile, et de deux façons. Si le dossier est vidé, le serveur constate au démarrage qu’il est vide et efface sa propre liste de greffons activés — il ne se contente pas de ne pas les charger, il oublie qu’ils existaient. Et si un dépôt tiers disparaît d’Internet, le code n’est plus téléchargeable nulle part. C’est précisément ce que la sauvegarde décrite à la section 11 protège.

[nas-host]

ls -1 /var/lib/squeezeboxserver/cache/InstalledPlugins/Plugins/

Les dépôts

Page Réglages → Extensions, en bas :

La page des extensions et ses dépôts

Deux dépôts tiers sont déclarés ici :

http://www.herger.net/slim-plugins/repo.xml
https://raw.githubusercontent.com/HB64/lms-sugarcube/main/public.xml

L’avertissement de la page n’est pas décoratif : le serveur télécharge et exécute du code venu de ces adresses, automatiquement. Un dépôt tiers est une confiance accordée, pas une simple source de téléchargement.

La mise à jour automatique

La case Mettre à jour les plugins automatiquement est cochée. Le serveur cherche alors les mises à jour des greffons installés, les télécharge, et les applique au redémarrage suivant.

⚠️ La contrepartie mérite d’être connue : un greffon peut changer de comportement sans qu’on ait rien demandé, et le nombre de greffons installés évolue tout seul au fil des dépendances. Décochée, la case rend la main — au prix d’une mise à jour manuelle depuis cette même page.

⚠️ La case plugins non pris en charge ouvre la liste des greffons que leurs auteurs n’entretiennent plus. L’avertissement de la page est exact : l’un d’eux peut empêcher le serveur de démarrer. Elle reste décochée ici.

Ceux qui structurent cette installation

Une liste complète de greffons se périme en quelques mois et n’aide personne à reconstruire. Ceux-ci, en revanche, portent des fonctions dont le reste dépend :

GreffonCe qu’il apporte
Material Skinl’interface web par défaut, à la place de celle d’origine
Local Playerfait du serveur sa propre platine — voir la page des platines
CDplayerla lecture des disques compacts, section 7
MusicIP (livré, sous le nom MusicMagic), SugarCube, MIPMixerles listes de lecture par similarité acoustique — voir la page MusicIP
Client Cleanupretire de la liste des lecteurs une platine abandonnée ; la colonne de dernière apparition est le critère qui permet de trancher sans risque
WaveInputpermet d’ajouter une entrée audio de la machine comme source de lecture

Le reste — services de musique en ligne, radios, enrichissement des pochettes, listes de lecture dynamiques — s’ajoute et se retire sans rien casser.


9. Les journaux

Trois journaux, gouvernés séparément

C’est le sujet où l’on se trompe le plus, parce que le mot « journalisation » désigne trois mécanismes différents.

JournalÉcrit parRéglé par
server.logle serveurles catégories de la page Journalisation
scanner.logl’analyseur de bibliothèqueles mêmes catégories, celles en scan.
localplayer.logsqueezelite, quand le serveur est sa propre platineles champs du greffon, pas la page Journalisation

⚠️ Ramener les catégories au calme ne touche pas au troisième. localplayer.log dépend de deux champs du greffon Local Player, et la page des platines en est propriétaire. Un serveur ramené au silence peut continuer d’écrire cent kilo-octets à l’heure par cette voie sans que rien ne le signale.

[nas-host]

ls -lh /var/log/squeezeboxserver/

Régler les catégories

Page Réglages avancés → Journalisation :

La page de journalisation

La page donne l’emplacement des deux journaux du serveur, avec des liens qui en affichent les 100, 500 ou 1000 dernières lignes, la totalité, ou une archive ZIP — utile sur une machine sans écran, où c’est souvent le moyen le plus rapide de lire un journal.

En dessous, chaque catégorie porte un libellé explicite et une liste à trois niveaux. Les catégories qui bavardent le plus sont celles de la lecture et de l’analyse : player.source, player.streaming, player.streaming.direct et scan.scanner.

⚠️ Une catégorie de lecture laissée en débogage écrit une ligne par seconde et par platine. Sur six platines, c’est un demi-million de lignes par jour, et un journal qui atteint plusieurs dizaines de méga-octets entre deux rotations. Le niveau normal est Erreur partout.

🎯 Le réglage qui ne survit pas au redémarrage

Sur la même page, une case : « Enregistrer les réglages de journalisation pour une utilisation au prochain démarrage de l’application ».

Décochée, un niveau modifié ne vaut que pour la session en cours : rien n’est écrit sur le disque. Le serveur redémarre, relit son fichier de configuration, et retrouve les niveaux d’avant. C’est l’explication d’une catégorie qui « revient » toute seule en débogage après qu’on l’a corrigée.

Cochée, l’enregistrement réécrit log.conf — le fichier change de taille et porte l’heure de l’enregistrement — et les niveaux survivent au redémarrage.

Le geste : cocher la case avant d’enregistrer, quand le réglage doit tenir. La laisser décochée pour un diagnostic ponctuel, où l’on veut justement que le retour au calme soit automatique.

⚠️ Un réglage de journalisation vérifié une fois n’est pas un réglage acquis. Les deux moitiés — les catégories du serveur d’un côté, les champs du greffon de l’autre — se contrôlent séparément, et ce qui compte n’est pas ce que montre l’interface mais la taille du fichier quelques heures plus tard.

Le fichier, et où il est

⚠️ Les niveaux vivent dans /var/lib/squeezeboxserver/prefs/log.conf — avec les préférences, et non dans /etc/squeezeboxserver/ où l’on pense d’abord à regarder.

[nas-host]

ls -l /var/lib/squeezeboxserver/prefs/log.conf
grep logger /var/lib/squeezeboxserver/prefs/log.conf | grep -v ERROR

La date du fichier dit quand les niveaux ont été enregistrés pour de bon. La seconde commande n’imprime que les catégories qui ne sont pas au niveau Erreur — et quelques-unes ne le sont légitimement pas :

  • perfmon, le moniteur de performance, qui écrit dans son propre fichier ;
  • network.ws, désactivé, donc plus silencieux encore ;
  • les catégories des greffons, le plus souvent à Avertissement.

⚠️ Ce qui ne doit pas y figurer, ce sont les catégories de lecture et d’analyse : player.source, player.streaming, player.streaming.direct et scan.scanner. Ce sont elles qui écrivent une ligne par seconde et par platine.

La rotation

Le paquet en pose une pour les deux journaux du serveur, et elle suffit.

[nas-host]

cat /etc/logrotate.d/lyrionmusicserver
/var/log/squeezeboxserver/server.log {
  weekly
  rotate 5
  size 200k
  compress
  missingok

  postrotate
    # send USR1 to squeezebox PID to reset logging
    /bin/kill -USR1 `pgrep squeezeboxserve -n 2>/dev/null` 2>/dev/null || :
  endscript
}

/var/log/squeezeboxserver/scanner.log {
  weekly
  rotate 5
  size 200k
  compress
  missingok
}

Le postrotate est ce qui rend la rotation efficace : le serveur sait rouvrir son journal quand il reçoit ce signal. Sans lui, il continuerait d’écrire dans le fichier renommé, devenu invisible et toujours aussi gros.

⚠️ Le troisième journal n’est pas couvert par ce fichier, et il ne peut pas l’être de la même façon : squeezelite, lui, ne sait pas rouvrir son journal sur signal. Sa rotation est décrite sur la page des platines, avec l’explication de copytruncate.


10. La sécurité

Deux protections indépendantes

C’est leur indépendance qui fait le piège : chacune se règle sur la même page, et l’une peut être renseignée sans être active.

L’authentification demande un nom et un mot de passe à l’ouverture de l’interface.

Le filtre d’adresses refuse les connexions venant d’ailleurs que d’une liste d’adresses — avant que le formulaire de mot de passe s’affiche.

🔴 Une liste d’adresses renseignée pendant que le filtre est éteint ne fait rien du tout. Elle se lit comme une protection, elle n’en est pas une. C’est l’état par défaut après une migration ou une réinstallation, et rien ne le signale.

Les réglages

Page Réglages avancés → Sécurité :

La page de sécurité
ChampValeur
Protection par mot de passeProtection par mot de passe
Nom d’utilisateurcelui choisi à l’installation
Bloquer les connexions entrantesBloquer
Adresses IP autorisées192.168.0.*,10.6.0.*
Vérification contre CSRFMoyenne
Domaines autorisés via CORSvide
HTTPS non sécurisédécoché

Le bouton Enregistrer les réglages est en bas de page ; rien n’est appliqué tant qu’il n’est pas cliqué.

La syntaxe des adresses autorisées : des entrées séparées par des virgules, chacune pouvant porter un joker. 192.168.0.* couvre tout le réseau local ; 10.6.0.* couvre les adresses que distribue le tunnel WireGuard.

🎯 La seconde plage n’est pas un détail. Un appareil qui entre par le tunnel présente l’adresse du tunnel, pas celle qu’il aurait sur le réseau local. Un filtre limité au réseau local coupe donc l’accès distant, et le symptôme est déroutant : le tunnel fonctionne, tout le reste de la maison répond, et seul ce serveur reste muet.

Ce que chaque réglage protège

La vérification contre CSRF empêche une page web ouverte ailleurs dans le navigateur d’envoyer des commandes au serveur à l’insu de son utilisateur. Le niveau moyen convient à un usage domestique.

Les domaines autorisés via CORS, laissé vide, interdit à toute page d’un autre site de lire les réponses du serveur. Ne le remplir que pour un tableau de bord maison qu’on écrit soi-même.

La désactivation de la vérification des certificats ne sert qu’à contourner un service en ligne dont le certificat est défaillant. La laisser décochée.

L’accès depuis l’extérieur

🔴 Aucune redirection de port ne mène à ce serveur, et il n’y a pas lieu d’en ouvrir une. L’exposer derrière une simple authentification revient à confier toute la bibliothèque à la solidité d’un mot de passe transmis dans un formulaire en clair.

Deux voies remplacent la redirection :

  • un tunnel WireGuard, qui rend le réseau de la maison tel quel — les applications de télécommande et de lecture fonctionnent alors sans changer un réglage. C’est la seule voie acceptable pour la télécommande, dont le protocole passe en clair ;
  • un second serveur servi en HTTPS sur la même bibliothèque, pour l’écoute en mobilité où maintenir un tunnel n’est pas pratique.

ℹ️ L’historique des lecteurs d’un serveur qui a été exposé garde la trace des clients venus d’adresses publiques. C’est une trace, pas une intrusion en cours — mais c’est un bon rappel de ce que le filtre sert à empêcher.


11. La sauvegarde

Ce qui se refabrique, et ce qui ne se refabrique pas

Le cache est volumineux — environ trois giga-octets, dont la plus grande part en pochettes redimensionnées — et il se refabrique intégralement par une analyse. Le sauvegarder serait une dépense sans contrepartie.

Deux choses ne se refabriquent pas :

  • prefs/ — les réglages du serveur, l’identité et les réglages de chaque platine, les favoris, et l’historique d’écoute. Environ 78 Mo, dont 71 pour la seule base d’historique ;
  • cache/InstalledPlugins/ — le code des greffons téléchargés. C’est la seule exception au principe « le cache se refabrique » : un dépôt tiers peut disparaître, et le serveur efface sa propre liste de greffons s’il trouve ce dossier vide.

Le script

backup_lyrion.sh couvre ces deux périmètres, et il est écrit en entier dans Sauvegarde — stratégie et méthode, qui en est la page propriétaire. Trois de ses propriétés valent d’être connues depuis ici :

⚠️ Il tourne en root, et il refuse de tourner autrement. Les dossiers internes de certains greffons sont en mode 0701 : le propriétaire a tout, les autres peuvent traverser mais pas lister. Or une copie doit énumérer avant de copier. Sous un compte ordinaire, la sauvegarde contiendrait donc un greffon amputé de son binaire — qui, restauré, se chargerait et échouerait. C’est pire qu’un greffon franchement absent.

⚠️ Sa tâche planifiée ne vit pas dans la table des tâches d’un utilisateur mais dans /etc/cron.d/, pour cette raison. Une recherche qui ne regarde que les tables utilisateur conclut à tort que rien ne sauvegarde ce serveur.

La base d’historique est copiée par un vidage, pas par une copie de fichier. Le serveur la tient ouverte en permanence et ses transactions récentes vivent dans un fichier d’écriture anticipée : copier le fichier principal seul donnerait une base incohérente.

Restaurer

Arrêter le serveur, remettre les deux dossiers en place avec leurs propriétaires, redémarrer. La bibliothèque se réanalyse d’elle-même. Les platines retrouvent leurs réglages — nom, volume, égaliseur, listes — puisque ceux-ci vivent dans prefs/ et sont attachés à l’adresse matérielle de chaque platine.


12. Dépannage

Le serveur ne démarre pas. Le journal du système donne la ligne de démarrage et l’erreur.

[nas-host]

journalctl -u lyrionmusicserver -n 40 --no-pager

Une ligne Starting Lyrion Music Server (v…) signifie que le programme est parti ; ce qui suit dit s’il est allé au bout.

L’interface refuse la connexion depuis une machine du réseau. Vérifier d’abord le filtre d’adresses, section 10 : une adresse hors de la liste reçoit un refus, pas un formulaire.

Une machine qui entrait par le tunnel ne répond plus. Même cause, autre plage — l’adresse du tunnel doit figurer dans la liste.

Des pièces ont disparu de la bibliothèque. Trois causes, dans l’ordre où il faut les éprouver : un des deux dossiers multimédias n’est plus analysé ; un lien symbolique pointe vers un dossier absent, par exemple un disque non monté ; ou les permissions ont changé et le compte de service ne lit plus les fichiers. La troisième se vérifie directement :

[nas-host]

sudo -u squeezeboxserver ls /media/nas1/Audio/LMS/Flac | head -3

Le journal grossit vite. Section 9 — et se rappeler qu’il y a trois journaux, dont un que la page Journalisation ne gouverne pas.

Un format de fichier n’est pas joué. Le journal du serveur, au démarrage, dit quelle règle de conversion a été retenue pour chaque paire de formats et motive chaque rejet. Un Didn't find any command matches for type: y nomme le format en cause.

Le serveur est à jour mais un greffon a changé de comportement. La mise à jour automatique des greffons est active par défaut, section 8 : la version installée aujourd’hui n’est pas forcément celle d’hier.

La platine du serveur ne joue plus. Ce n’est pas un problème de serveur : voir la page des platines, qui traite la sortie audio, le compte de service et le groupe audio.