Aller au contenu

.Shad.

Membres
  • Compteur de contenus

    6532
  • Inscription

  • Dernière visite

  • Jours gagnés

    145

Tout ce qui a été posté par .Shad.

  1. 1. Préambule Mopidy est un serveur musical open source et modulaire permettant de streamer localement votre musique, ainsi que d'intégrer un nombre conséquent de services de streaming audio tels que Soundcloud, Youtube, Youtube Music, Tidal, etc... (Spotify n'est plus pris en charge actuellement). Il intègre également de nombreux protocoles de communication : mqtt, json rpc, tcp, etc... et le rend donc adapté à un large panel d'utilisations. Iris est une extension web de Mopidy, qui fournit une interface graphique moderne et l'intégration de différentes extensions de Mopidy et autre protocoles. Snapcast, enfin, qui est un logiciel permettant la diffusion de musique par le réseau. C'est une alternative libre et bon marché à des systèmes tels que ceux proposés par Sonos ou Apple. C'est un tutoriel que j'essaie de rédiger depuis un petit temps déjà, mais : je ne voyais pas comment présenter ça de façon simple et compréhensible par tous je n'étais pas satisfait des images Docker existantes l'intégration de Snapcast avec Iris n'était pas heureuse via Docker Depuis, une image Docker facilitant l'interconfiguration des services a été publiée, et me permet aujourd'hui de vous présenter cette pépite. 2. Objectifs Si vous naviguez un peu sur le site de Mopidy, vous verrez qu'un nombre conséquent d'intégrations sont possibles, de fait, je ne vais pas m'étendre sur tout ce qu'on peut réaliser, mais plutôt sur la fonctionnalité diffusion multiroom, qui n'est pas forcément bien documentée que ce soit sur le Github d'Iris ou de Snapcast. Encore moins dans le cadre d'un NAS, qui est pourtant une idée relativement logique dans le cadre d'un serveur de musique centralisé. Ce qui sera abordé dans ce tutoriel : L'installation et la configuration de deux instances de Mopidy (à multiplier suivant le nombre de flux différents que vous souhaitez pouvoir diffuser) La diffusion de bibliothèque musicale locale La configuration des clients Ce qui sera abordé dans un second temps si engouement pour le sujet : L'utilisation d'un proxy inversé avec Iris => quelques bugs que je trouve personnellement gênants mais certains y tiendront sûrement 😉 L'intégration des différents services de streaming online supportés par Mopidy (voir extensions) => chaque extension possède sa propre manière d'être configurée, voir la doc associée ; dans tous les cas cela passe par la modification des fichiers mopidy.conf et l'ajout de fichiers supplémentaires parfois 3. Principe de fonctionnement Configuration du système : Une seule interface pour accéder aux différentes instances, à laquelle on accède depuis PC, mobile, tablette, etc... Des clients Le NAS, qui hébergera les différents services Remarque : Un client statique est un client de type "headless", qui n'accèdera pas à l'interface d'Iris mais recevra uniquement le flux depuis Snapcast. Un client dynamique peut être le smartphone avec lequel vous ajoutez des morceaux en liste de lecture, il peut également devenir un périphérique recevant des informations de Snapcast. 5. Prérequis Difficulté : Moyenne Un NAS compatible Docker Des clients Ports 1780, 6600, 6700, 6680 et 6780 (si deuxième instance) du NAS accessibles aux clients 6. Hypothèses IP du NAS : 192.168.100.100 FQDN (nom d'hôte avec domaine) du NAS : nas.xxxxxx.synology.me => à adapter à votre domaine utilisé en local (voir tutoriel sur la mise en place d'un serveur DNS local) 7. Installation 7-A. Fichier compose L'installation se fera principalement en SSH. Avec la version 7.2 de DSM, il est possible de rédiger le fichier compose via l'interface de Container Manager (nouveau nom du paquet Docker), restent certaines commandes qui ne peuvent être accomplies que par terminal, à vous de voir ce que vous préférez, si vous savez le faire en lignes de commande vous n'aurez aucune difficulté à le faire via Container Manager. Vous pouvez consulter mon tutoriel introductif à Docker pour plus d'informations sur les étapes qui vont suivre. Et maintenant, c'est parti ! On crée le dossier pour Iris dans le dossier partagé docker : mkdir -p /volume1/docker/iris Puis on crée le fichier compose : nano /volume1/docker/iris/docker-compose.yml Remarques : On regroupe tout dans une seule stack, les services n'ayant pas vocation à fonctionner individuellement On se place sur l'hôte directement, pour faciliter la détection en broadcast sur le réseau local // IMPORTANT \\ On ne peut pas directement monter le dossier partagé "music" dans le conteneur, c'est valable pour tout autre dossier partagé a fortiori. Et ce, pour des raisons de permission : en effet les dossiers partagés ne sont pas soumis aux ACL de DSM Donc par exemple, créer un dossier intermédiaire, "bibliothèque" dans mon cas // IMPORTANT \\ On différencie l'emplacement des playlists qu'on va créer de l'emplacement des musiques car : on va chowner le dossier contenant les playlists Mopidy, on évite de faire ça sur un dossier utilisé par d'autre programmes on va monter notre médiathèque en lecture seule pour éviter toute modification accidentelle, ce qui en revanche posera problème pour des playlists qu'on sera amené à modifier J'ai nommé mes instances "iris-instance1" et "iris-instance2", à adapter à votre guise dans la suite du tutoriel. Je crée un dossier "local" commun, qui contiendra les métadonnées des morceaux scannés, ça m'évitera de devoir scanner pour chaque instance. Si pour une raison ou une autre, vous ne souhaitez pas disposer de la même bibliothèque sur l'une et l'autre des instances, créez deux dossiers "local" dans instance1 et instance2. La variable d'environnement PIP_PACKAGES est utile pour installer des extensions Mopidy supplémentaires, commentée par défaut car intégrations non traîtées ici. 7-B. Préparation des dossiers et fichiers 7-B-1. Dossiers de configuration Pas spécialement adapté pour s'installer sur un NAS, OS base Linux avec ses restrictions, on va créer en amont les dossiers dont les services auront besoin lors de la création de la stack. En SSH, connectez-vous avec un utilisateur disposant des droits d'écriture dans le dossier partagé docker : mkdir -p /volume1/docker/iris/instance1/config \ /volume1/docker/iris/instance1/data \ /volume1/docker/iris/instance2/config \ /volume1/docker/iris/instance2/data \ /volume1/docker/iris/snapserver \ /volume1/docker/iris/local \ /volume1/docker/iris/playlists On va maintenant changer la propriété des dossiers pour respectivement : pouvoir télécharger les métadonnées de nos morceaux, albums, artistes, etc... écrire et modifier des playlists Mopidy ajouter des token d'identification pour les services de stream online (non traîté ici) sudo chown 105:users /volume1/docker/iris/instance1/config \ /volume1/docker/iris/instance1/data \ /volume1/docker/iris/instance2/config \ /volume1/docker/iris/instance2/data \ /volume1/docker/iris/local \ /volume1/docker/iris/playlists Remarque : L'utilisateur d'ID 105 est celui qui écrira dans ces dossiers, or il n'est évidemment pas repris par les ACL DSM, donc pour ne pas toucher aux ACL Synology et garantir l'accès aux dossiers en question, on ne chmod pas mais on chown. 7-B-2. Fichiers de configuration On va créer un fichier de configuration qui écrasera les paramètres par défaut du serveur Mopidy, pour l'adapter à notre besoin. 7-B-2-a. Instance1 nano /volume1/docker/iris/instance1/config/mopidy.conf 7-B-2-b. Instance2 nano /volume1/docker/iris/instance2/config/mopidy.conf Remarques : Dans instance1, on pense à modifier nas.xxxxxx.synology.me par son nom de domaine Dans instance2, on a modifié le port de l'instance pour éviter la collision avec la première, on utilise le port 6780 7-B-2-b. Snapserver On va télécharger le fichier de configuration depuis le Github : wget https://raw.githubusercontent.com/badaix/snapcast/master/server/etc/snapserver.conf -P /volume1/docker/iris/snapserver/ qu'on édite ensuite : nano /volume1/docker/iris/snapserver/snapserver.conf en commentant la ligne (on ajoute un # devant) : source = pipe:///tmp/snapfifo?name=default et on ajoute les lignes suivantes directement à la suite : source = pipe:///tmp/stream1_fifo?name=STREAM1&controlscript=meta_mopidy.py&controlscriptparams=--mopidy-host=nas.xxxxxx.synology.me source = pipe:///tmp/stream2_fifo?name=STREAM2&controlscript=meta_mopidy.py&controlscriptparams=--mopidy-host=nas.xxxxxx.synology.me%20--mopidy-port=6780 Remarque : On pense à modifier nas.xxxxxx.synology.me par son nom de domaine On va également télécharger le script python faisant le lien entre Iris et Snapcast : wget https://raw.githubusercontent.com/badaix/snapcast/master/server/etc/plug-ins/meta_mopidy.py -P /volume1/docker/iris/snapserver/ 7-B-3. Dossiers de stream On crée un dossier qui accueillera nos fifo de stream Snapcast, et je les rends accessible par tous en écriture : mkdir -p /tmp/snapserver && sudo chmod 777 /tmp/snapserver 7-C. Création de la stack On est prêt, plus qu'à lancer la stack : sudo docker-compose -f /volume1/docker/iris/docker-compose.yml up -d && sudo docker-compose -f /volume1/docker/iris/docker-compose.yml logs -f Les logs devraient donner quelque chose de la sorte : 8. Interface IRIS 8-A. Configuration générale et Instance1 On se rend maintenant à l'adresse http://nas.xxxxxx.synology.me:6680: On se dirige ensuite vers les Settings, catégorie Server, et on renomme l'instance : On va ensuite dans Services configurer Snapcast, on modifie localhost pour le nom d'hôte de notre NAS, et on coche Enabled : On peut également se connecter à LastFM pour récupérer les vignettes des artistes, et à Genius pour que les paroles des chansons défilent pendant la lecture. // IMPORTANT \\ La librairie utilisée pour Mopidy n'est plus supportée par Spotify, évitez donc de vous y connecter. Dans Interface, j'aime bien généralement cocher "Wide scrollbars". 8-B. Instance2 On va maintenant rajouter notre seconde instance, vers laquelle on pourra facilement switcher d'un clic, on retourne dans Server, on clique sur "+ Add New Server" : Si tout s'est correctement exécuté auparavant, vous devriez obtenir le statut Connected, vous remarquerez également que les réglages des autres catégories persistent. 8-C. Exportation et sauvegarde de la configuration sur le serveur Afin d'éviter de répéter la majorité de ces étapes pour les prochains clients dynamiques, on peut aller dans la catégorie Advanced -> Share configuration => Export/share : Vous pourrez dorénavant importer la configuration depuis le serveur (il faut prélablement se connecter à une des instances depuis un nouveau périphérique) en cliquant sur Import from server. Cela ne fonctionne que pour les paramètres généraux, la deuxième instance devra être ajoutée comme initialement. 8-D. Indexation des morceaux On va maintenant lancer l'indexation des morceaux, on peut le faire par l'interface, suivant le CPU ça peut prendre plus ou moins de temps, comptez environ 1m30 par 1000 morceaux. Pour cela, deux méthodes : via le terminal : sudo docker exec -it iris-instance1 mopidy local scan Ou si je veux faire un test avec un nombre réduit de morceaux : sudo docker exec -it iris-instance1 mopidy local scan --limit 100 via l'interface, dans Advanced, on clique sur Start local scan (full scan par contre) : Une fois le scan terminé, je peux aller dans l'onglet Albums, et cliquer sur Refresh tout en haut à droite de la fenêtre : On va faire clic droit sur un album -> Add to queue, les morceaux sont maintenant dans l'onglet Now playing, en attente d'un ordre de lecture. 8-E. Lecture synchronisée Voilà, il ne reste plus qu'à tester, oui mais où ? et bien sur notre périphérique ! on retourne dans Settings -> Services -> Snapcast -> on coche Streaming enabled : Je peux renommer mon groupe, rez-de-chaussée (RDC) par exemple, et lui dire qu'il diffusera le flux Snapcast STREAM1, émis par Instance1. Dans ce groupe, j'ai renommé mon périphérique appelé par défaut "Snapweb client" en PC, plus parlant. Je vais maintenant ajouter un deuxième périphérique, par exemple mon smartphone, je vais donc importer les données de configuration précédemment enregistrées sur le serveur. En cliquant sur Streaming enabled, un nouveau groupe apparaît (j'ai renommé mon périphérique du nom de mon smartphone) : Allons maintenant dans Now playing, et lançons la musique depuis la barre de lecture en bas de page. Si tout se passe bien, vous devriez entendre la musique jouée conjointement, et en parfaite synchronisation, depuis les deux clients ! Pourquoi ne pas, par exemple, les mettre dans le même groupe ? On clique sur Group dans la tuile correspondant au 2ème périphérique (voir impression d'écran ci-dessus), et on choisit RDC. Maintenant, on peut contrôler le volume général du groupe depuis Volume (barre horizontale) et le volume individuel de chaque périphérique sinon (barre verticale). Si je ne veux plus qu'ils soient groupés, je reclique sur Group, puis New Group. Je peux également changer le flux lu par un groupe depuis Stream. Pas tout à fait synchronisés ? la barre de Latency est là pour ça, on peut ajuster le décalage en avance ou retard de phase des périphériques indépendamment. C'est notamment une fonction utile pour les périphériques clients qui diffusent via Bluetooth. 8-F. Playlists 8-F-1. Playlist locale Pour créer une playlist, je clic droit sur un morceau, Add to playlist -> je crée une nouvelle playlist ou j'en choisis une existante. Il faudra ensuite aller dans l'onglet Playlists et cliquer sur Refresh comme pour les albums pour les voir apparaître. 8-F-1. Radios Je vais vider ma liste d'attente, pour cela je clique sur Clear : Dans cette page, je clique ensuite sur Add en haut à droite, je vais ajouter l'URL d'une radio, par exemple M Disney : Je dois cliquer sur + Add à droite avant de cliquer Add en bas, la radio apparaît ensuite dans la liste des morceaux en attente, et je peux cliquer droit (ou ...) pour lancer la lecture ou pour l'ajouter à une playlist. 9. Configuration des clients statiques Nous allons maintenant voir comment configurer des clients statiques, par exemple sous Linux. sudo apt-get install snapclient Puis : sudo nano /etc/default/snapclient # Start the client, used only by the init.d script START_SNAPCLIENT=true # Additional command line options that will be passed to snapclient # note that user/group should be configured in the init.d script or the systemd unit file # For a list of available options, invoke "snapclient --help" SNAPCLIENT_OPTS="--host nas.xxxxxx.synology.me" Je lance le service : sudo systemctl start snapclient.service Je fais en sorte qu'il se lance au démarrage : sudo systemctl enable snapclient.service Entre temps, vous devriez voir un nouveau périphérique parmi les clients Snapcast dans votre interface Iris. 10. Quelques commandes utiles Pour supprimer la base de métadonnées : sudo docker exec -it <nom du conteur iris> mopidy local clear Pour vérifier la configuration utilisée par une instance (celle-ci affichera tous les champs, ceux par défaut et ceux que vous avez écrasés dans votre fichier de configuration) : sudo docker exec -it <nom du conteur iris> mopidy config 11. Conclusion Je ne couvre dans ce tutoriel qu'une petite partie des fonctionnalités disponibles, on peut trier les recherches suivant les sources, ce qui prend son importance si l'on commence à intégrer différents services de streaming. Il existe une extension MopiQTT(non officielle) qui prend en charge MQTT, ou encore la possibilité de créer des webhooks via Commands => Add : Ainsi qu'un module HomeAssistant : https://github.com/bushvin/hass-integrations Pour ceux qui sont un peu initiés, les possibilités domotiques sont énormes. MàJ : 06/06/2023
  2. Ok, je ne dénigrais pas ta proposition. Si tu penses que c'est fiable et viable dans le temps, why not, je ne suis pas encore concerné par l'obsolescence, même si ça a l'air de se rapprocher à marche forcée pour la série 18 au vu des dernières annonces. Je n'ai jamais dit que tu avais la place, pour ma part j'ai un disque externe qui traine, je pense que je vais télécharger les plus anciennes versions jusqu'à le remplir.
  3. Oui, pour le côté théorique un reverse proxy TCP peut aussi le faire, mais c'est de l'ordre de l'anecdote. Parce que 6690 ou 443, ça reste le même niveau de sécurité, chiffrement TLS et possibilité de limiter la surface d'exposition. Mon port 6690 est ouvert à l'extérieur depuis 5 ans, je n'ai jamais eu le moindre souci.
  4. @Mic13710 Rien ne garantit que le site sera toujours disponible, de plus hier soir il était hyper lent. Apparemment la bande passante est limitée à dessein, de ce que j'ai pu lire à droite à gauche. Certaines personnes ici ont plusieurs dizaines de To disponibles, je pense qu'il serait sage que quelques membres actifs du forum aient les fichiers sous le coude. On peut espérer que Synology remette ces fichiers à disposition mais je n'y crois pas vraiment.
  5. Du nouveau, quelqu'un a fait un backup datant de fin janvier des fichiers présents sur le site de Synology, je ne sais pas trop comment jouer avec ces extensions CDX, mais je pense qu'il faut bondir dessus. J'ai une connexion un peu asthmatique pour autant de données, si des volontaires fibrés et avec 2 To de libres veulent s'en charger : https://archive.org/download/synology-grab-2023-01
  6. Hello @firlin Je ne vois pas trop ce qu'un proxy inversé vient faire entre deux NAS utilisant Sharesync. Sharesync établit un pont sécurisé sur le port 6690 pour le transfert des données entre les NAS. Ca signifie : - Chaque box doit rediriger les requêtes sur son port TCP 6690 vers leur NAS respectif. - Chaque NAS doit autoriser l'accès au port TCP 6690 depuis l'IP distante (si IP source fixe, sinon ouvrir au pays concerné). - Tu te connectes à l'autre NAS via chaque nom de domaine : ndd1.fr:6690 ndd2.fr:6690 Là où un proxy inversé peut intervenir c'est pour se connecter à l'interface Drive de chacun des NAS, mais je ne pense pas que ce soit ce à quoi tu pensais.
  7. Si ça ne devait pas marcher, n'importe quel petit raspberry 3B+ ou 4 feront largement l'affaire pour faire tourner Docker.
  8. @loli71 Bon, voici mes conclusions de ce que j'ai pu tester : J'ai testé sur le NAS d'un ami (tjs planter le NAS d'un ami avant de planter le sien 😄), sa configuration : - Un seul réseau bridge, créé via docker-compose en SSH. - Deux conteneurs adjoints à ce réseau - VPN Server installé avec OpenVPN => Même problème, impossible de sélectionner une interface, donc à ce stade-là, j'en conclus que ce n'est pas proprement lié au réseau macvlan, car il n'y en a jamais eu sur son NAS. La commande : synonet --show m'a renvoyé la même erreur que toi. System network interface list: Host Name: GARRUS Network interface: br_net-dsp Lastest SynoErr=[file_get_key_value.c:80] synonet.c:295 SYNONetGetCard1 failed, synoerr=[0x2000] Je subodore que DSM réalise des ajustements supplémentaires quand il bridge ses interfaces (à l'installation de VMM par exemple avec OpenVSwitch, ou quand on crée un réseau bridge en dehors de l'interface => docker-compose ou cli). Plus probablement, il passe des options type : ... -o "com.docker.network.bridge.host_binding_ipv4"="0.0.0.0" \ -o "com.docker.network.bridge.enable_icc"="true" \ -o "com.docker.network.driver.mtu"="1500" \ -o "com.docker.network.bridge.name"="lxcbr1" \ -o "com.docker.network.bridge.enable_ip_masquerade"="true" \ ... En revanche, ce que j'ai fait ensuite : - J'ai arrêté les conteneurs - J'ai supprimé le réseau bridge - Je l'ai recréé via l'interface Docker de DSM - J'ai relancé les conteneurs Cette fois-ci, la commande synonet --show me renvoie : System network interface list: Host Name: GARRUS Network interface: eth0 DHCP IP: 192.168.0.50 Mask: 255.255.255.0 Gateway: 192.168.0.1 DNS: 192.168.0.1 MTU Setting: 1500 Et les interfaces apparaissent dans les Paramètres généraux de VPN Server : Solutions possibles au final : - Trouver des logs qui décrivent ce que DSM fait quand il crée un réseau via l'UI, voir les options passées éventuellement pour assurer la compatibilité avec les autres services. Je n'ai malheureusement pas accès au dit-NAS en SSH pour vérifier si je trouve quelque chose dans les logs, peut-être peux-tu y jeter un oeil ? je ne sais pas où les logs de Docker se situent. - Espérer que Container Manager de DSM 7.2 permette la création de réseau macvlan, mais ça m'étonnerait. - Si tu n'utilises pas DNS Server sur ton NAS, il y a une solution facile, elle te fera juste perdre la page de blocage pour les pages en HTTP, qu'on ne trouve plus nulle part de toute façon : Tu utilises la variable WEB_PORT dans ton fichier compose : Tu peux donc passer le conteneur en mode host ou en mode bridge mais en pensant à faire la translation de ports pour les port 53 et 9880 (exemple de port pour WEB_PORT, à ta guise).
  9. @loli71 Ca me parle car à une époque je pense que j'avais eu ce souci, sauf que ça fait belle lurette que je n'utilise plus VPN Server... Je vais voir si je trouve des infos à ce sujet.
  10. @loli71 Si tu supprimes temporairement le réseau macvlan, ça fonctionne ?
  11. .Shad.

    Bonjour

    Bienvenue dans la communauté
  12. .Shad.

    Hello world !

    Bienvenue parmi nous ! On peut être gamer et geek réseau 🤪 je pratique les deux assidûment 🙂
  13. Par quelle adresse accèdes-tu à Drive ? via DSM ? ou un port personnalisé pour Drive ? DDNS ?
  14. .Shad.

    Jino prez

    Bienvenue parmi nous !
  15. .Shad.

    Salut à Tous

    Bienvenue ravis qu'on ait pu t'aider dans ton choix
  16. Pour cette utilisation, avec 4 Go de mémoire tu seras déjà à l'aise. EDIT : Doublé par @Mic13710
  17. Je disais ça car j'ai fréquemment des problèmes si je fais une impression PDF d'un fichier office en écrasant un PDF déjà existant, je me retrouve avec une impression qui semble s'être déroulée sans accroc mais avec un fichier PDF vide. Ici ça a l'air différent du coup. Rien dans /var/log/messages ou /var/log/syslog ?
  18. .Shad.

    Bonjour,

    Bienvenue parmi nous !
  19. .Shad.

    Présentation Alsace

    Bienvenue parmi nous Alsace ! Oups... Patrick 🙂 N'hésite pas à ouvrir un sujet dédié à ton problème dans la catégorie adéquate.
  20. @CoolRaoul Question bête, est-ce que ces PDF sont issus d'une impression PDF d'un fichier Office par exemple ?
  21. .Shad.

    Problème sur mon NAS

    Il y a transcodage uniquement si le client ne sait pas lire le fichier en question. Ma Shield lit sans problème tous les fichiers en H265, ça n'a rien à voir avec la nature du fichier, mais avec les capacités du lecteur. Si transcodage il doit y avoir, il faut un Plex Pass, tu as bien ça ?
  22. .Shad.

    Prez Oliver

    Bienvenue parmi nous !
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.