# 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](https://blog.infolaf.ca/wp-content/uploads/2026/09/logo-lyrion.png) **Le fichier `.md` de cette page :** [ouvrir le `.md`](https://blog.infolaf.ca/wp-content/uploads/fichiers/guide-lyrion-serveur-public.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](https://blog.infolaf.ca/wiki/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](https://blog.infolaf.ca/wiki/musicip-analyse-acoustique-listes-de-lecture-lyrion/)** — le moteur d'empreintes acoustiques qui alimente les listes de lecture automatiques, et les greffons qui l'interrogent. - **[Icecast2 – Ices2](https://blog.infolaf.ca/wiki/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 | Canal | Ce que c'est | |---|---| | *Latest Release* | la dernière version publiée | | *Stable Nightly* | la 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]** ```bash 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]** ```bash 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]** ```bash 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](https://blog.infolaf.ca/wp-content/uploads/2026/09/screen_server-info.png) ℹ️ **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]** ```bash 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 : | Groupe | Ce qu'il ouvre | |---|---| | `audio` | la carte son, quand le serveur est aussi sa propre platine | | `cdrom` | le lecteur de disques | | `sambashare` | la bibliothèque musicale, dont les fichiers appartiennent à ce groupe | **[nas-host]** ```bash 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](https://blog.infolaf.ca/wp-content/uploads/2026/09/screen_server-dir.png) | Champ | Valeur | |---|---| | **Langue** | Franç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](https://blog.infolaf.ca/wiki/musicip-analyse-acoustique-listes-de-lecture-lyrion/). ### 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. ```bash 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]** ```bash 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]** ```bash 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](https://blog.infolaf.ca/wiki/incus-hote-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` : | Binaire | Ce qu'il décode | |---|---| | `faad` | AAC | | `flac` | FLAC | | `sox` | conversion et rééchantillonnage | | `mac` | Monkey's Audio | | `wvunpack` | WavPack | **[nas-host]** ```bash 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]** ```bash 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]** ```bash 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](https://blog.infolaf.ca/wiki/les-platines-squeezelite/). --- ## 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]** ```bash 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]** ```bash 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]** ```bash 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]** ```bash 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]** ```bash 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](https://blog.infolaf.ca/wp-content/uploads/2026/09/screen_server-manageplugins.png) 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 : | Greffon | Ce qu'il apporte | |---|---| | **Material Skin** | l'interface web par défaut, à la place de celle d'origine | | **Local Player** | fait du serveur sa propre platine — voir la [page des platines](https://blog.infolaf.ca/wiki/les-platines-squeezelite/) | | **CDplayer** | la lecture des disques compacts, section 7 | | **MusicIP** (livré, sous le nom `MusicMagic`), **SugarCube**, **MIPMixer** | les listes de lecture par similarité acoustique — voir la [page MusicIP](https://blog.infolaf.ca/wiki/musicip-analyse-acoustique-listes-de-lecture-lyrion/) | | **Client Cleanup** | retire 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 | | **WaveInput** | permet 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 par | Réglé par | |---|---|---| | `server.log` | le serveur | les catégories de la page *Journalisation* | | `scanner.log` | l'analyseur de bibliothèque | les mêmes catégories, celles en `scan.` | | `localplayer.log` | squeezelite, quand le serveur est sa propre platine | **les 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](https://blog.infolaf.ca/wiki/les-platines-squeezelite/) 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]** ```bash ls -lh /var/log/squeezeboxserver/ ``` ### Régler les catégories Page *Réglages avancés → Journalisation* : ![La page de journalisation](https://blog.infolaf.ca/wp-content/uploads/2026/09/screen_server-log.png) 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]** ```bash 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]** ```bash 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é](https://blog.infolaf.ca/wp-content/uploads/2026/09/screen_server-security.png) | Champ | Valeur | |---|---| | **Protection par mot de passe** | Protection par mot de passe | | **Nom d'utilisateur** | celui choisi à l'installation | | **Bloquer les connexions entrantes** | Bloquer | | **Adresses IP autorisées** | `192.168.0.*,10.6.0.*` | | **Vérification contre CSRF** | Moyenne | | **Domaines autorisés via CORS** | vide | | **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](https://blog.infolaf.ca/wiki/sauvegarde-strategie-methode/)**, 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]** ```bash 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]** ```bash 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](https://blog.infolaf.ca/wiki/les-platines-squeezelite/), qui traite la sortie audio, le compte de service et le groupe `audio`.