[Tuto] ⏩ Installation de Jeedom sur Synology avec Docker et réseau Macvlan

Mise à jour :
26/06/2024 : mise à jour avant suppression du tuto :stuck_out_tongue_winking_eye::joy:
14/01/2024 : refonte de la partie Création du réseau macvlan
13/03/2023 : nouveau lien pour drivers USB
08/03/2023 : nouvelle image
06/03/2023 : avertissement concernant Debian Bullseye
20/02/2023 : mise à jour suite à la nouvelle image jeedom/jeedom:V4-stable
18/06/2020 : mise à jour suite à la nouvelle image jeedom/jeedom:latest sur le docker-Hub
05/05/2020 : Tuto obsolète suite à la suppression de l’image latest sur le Docker Hub
21/04/2020 : Maj partie Routage de l’adresse IP
18/04/2020 : création du tuto


Bonjour :wave:

Voici un tutoriel pour installer Jeedom sur un NAS Synology à partir des images officielles disponibles sur de docker-Hub. https://hub.docker.com/r/jeedom/jeedom/tags

Le tutoriel explique également la création d’un réseau macvlan Docker.

Si vous ne souhaitez pas de réseau macvlan docker, veuillez suivre la documentation d’installation de Jeedom

:warning: Debian Bullseye n’est pas compatible avec les anciennes versions du noyau utilisée par Synology.

------------------------------------------------------------------------------------
                                   Introduction 
------------------------------------------------------------------------------------

Pourquoi un réseau macvlan ?

Il existe deux réseaux bien connus avec Docker. Le Bridge et le Host.

  • Le Bridge est un réseau isolé qui empêche des plugins, qui doivent « écouter » en mode broadcast comme BLEA, Homebridge, Xiaomi, etc., de fonctionner

  • Le Host est ouvert au réseau extérieur mais limite son utilisation notamment avec la commande sudo pour des raisons de sécurité.

Le réseau macvlan de Docker va régler ces limitations.
L’accès à Jeedom se fera avec une adresse IP dédiée sur le réseau local.

Mais sa mise en oeuvre ne peut pas se faire avec l’interface graphique du paquet Docker de Synology !
Il faudra utiliser les commandes docker en ssh.


------------------------------------------------------------------------------------
                                   Pré-requis
------------------------------------------------------------------------------------
Pré-requis

:small_blue_diamond: Avoir un accès en SSH à son NAS. (voir doc Synology)
:small_blue_diamond: Connaitre l’IP de sa box / routeur
:small_blue_diamond: Connaitre l’IP de son NAS
:small_blue_diamond: Paquet Docker installé sur un NAS compatible
:small_blue_diamond: Obsolète ! Drivers USB jadahl.
:small_blue_diamond: Drivers USB Installation manuelle depuis le Centre de paquet. SynoCommunity
:black_small_square: Suivant l’architecture du NAS De quel type de CPU mon Synology NAS est-il équipé ? - Synology Centre de connaissances
:black_small_square: Installation des drivers pour DSM 7 : voir ici Jeedom sur Synology sous Docker et mise à jour DSM7? - #24 par Didier3L
:small_blue_diamond: Créer un dossier jeedom-macvlan dans le dossier partagé docker de votre NAS
:small_blue_diamond: Créer un sous dossier \docker\jeedom-macvlan\html
:small_blue_diamond: Créer un sous dossier \docker\jeedom-macvlan4\db
:small_blue_diamond: Logiciel PuTTY
:small_blue_diamond: Logiciel notepad++

:small_orange_diamond: et un peu de patience …


------------------------------------------------------------------------------------
                           Création du réseau macvlan
------------------------------------------------------------------------------------
Création du réseau macvlan

En préambule, je remercie infiniment @shad et @bruno78 du forum NAS-Forum - Communauté Francophone des serveurs NAS Synology
Car ce sont eux qui m’ont donnés les éléments de ce qui suit :pray: :pray:

La création du réseau macvlan ne peut pas se faire avec l’interface graphique de Synology !
Nous allons utiliser le mode SSH et un logiciel comme PuTTY pour le créer.

Avant cela nous avons besoin de quelques données :

:small_blue_diamond: Connaitre l’IP de sa box / routeur :
Regarder dans votre box. En général c’est du genre 192.168.1.254

:small_blue_diamond: Connaitre le nom du réseau de notre NAS :
Lancer PuTTY
Connecter vous à votre NAS Synology avec votre nom utilisateur administrateur et saisissez votre mot de passe.
Lancer la commande sudo -i pour passer en mode root

Ressaisissez votre mot de passe
image

Lancer la commande ifconfig

image

Le nom du réseau est eth0 . Il est attaché à l’adresse IP de notre NAS


Voici les lignes de code pour créer notre nouveau réseau macvlan

docker network create \
-d macvlan \
--subnet=192.168.1.0/24 \
--ip-range=192.168.1.240/29 \
--gateway=192.168.1.254 \
--aux-address="host_bridge=192.168.1.241" \
-o parent=eth0 \
mymacvlan

Explication :

:small_blue_diamond: docker network create \ Commande docker pour créer un réseau
:small_blue_diamond: -d macvlan \ Utilisation du driver macvlan de Docker
:small_blue_diamond: --subnet=192.168.1.0/24 \ On utilise notre réseau existant
:small_blue_diamond: --ip-range=192.168.1.240/29 \ On attribue une plage d’adresse IP de
     192.168.1.240 à 192.168.1.247
:small_blue_diamond: --gateway=192.168.1.254 \ On utilise le réseau de notre box (certaine box utilise l’IP 192.168.1.1)
:small_blue_diamond: --aux-address="host_bridge=192.168.1.241" \ On réserve une adresse spécifique pour un evenuel Routage de l’adresse IP.

L’adresse 192.168.1.241 servira notamment pour ceux qui utilisent le plugin BLEA avec la création d’une antenne déportée ou d’autres containeur Docker qui doivent communiquer avec Jeedom.
[Tuto] ⏩ Installation d'une antenne BLEA sur Synology avec Docker

:small_blue_diamond: -o parent=eth0 \ On le jointe au nom du réseau du NAS
:small_blue_diamond: mymacvlan On donne un nom à notre réseau mymacvlan

:small_orange_diamond: Dans PuTTY, faite un copier-coller du code et taper sur Entrer

image

Si tout va bien vous verrez une ligne avec pleins de caractères …

:small_orange_diamond: Vérifions avec la commande docker network ls

image

:small_blue_diamond: Notre réseau est créé ! :slightly_smiling_face:

:warning: Les adresses suivantes ne devront pas être utilisées :warning:
:small_orange_diamond:192.168.1.240 Réservé pour le NAS
:small_orange_diamond:192.168.1.241 Réservé pour le NAS



------------------------------------------------------------------------------------
                    Création du fichier "docker-compose.yaml"
------------------------------------------------------------------------------------
Création du fichier "docker-compose.yaml"

Pour créer notre conteneur, nous allons utiliser la commande docker-compose et un fichier de configuration docker-compose.yaml

Voici le contenu du fichier docker-compose.yaml

version: '3'

networks:
    default:
    external: true
    name: mymacvlan

services:
  jeedom:
    container_name: jeedom-bullseye
#   build : ./
    image: jeedom/jeedom:latest
    privileged: false
    cap_add:
      - SYS_PTRACE
      - SYS_ADMIN
    tty: true
    hostname: jeedom
    mac_address: a0:ca:ab:cd:ef:04
    networks:
      default:
        ipv4_address: 192.168.1.242
    volumes:
      - "/volume1/docker/jeedom-macvlan/html:/var/www/html"
      - "/volume1/docker/jeedom-macvlan/db:/var/lib/mysql"
    devices:
      - "/dev/ttyUSB0:/dev/ttyUSB0"   # MyHome / cp210x
      - "/dev/ttyUSB1:/dev/ttyUSB1"   # RFLink / ch341-uart
      - "/dev/ttyACM0:/dev/ttyACM0"   # Zwave / ACM0
    restart: unless-stopped
    environment:
      - TZ=Europe/Paris
      - PUID=1026
      - PGID=101
      - SYSTEMD_IGNORE_CHROOT=yes
      - PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Explication :

networks: notre conteneur sera attaché à notre réseau mymacvlan

image: Image utilisée pour construire notre conteneur
Dans cette exemple on utilise jeedom/jeedom:latest / Debian Bullseye
https://hub.docker.com/r/jeedom/jeedom/tags

ipv4_address: 192.168.1.242 Adresse IP pour joindre Jeedom

volumes: Répertoire « miroir » où sera installé Jeedom

devices: Ce sont les ports USB utilisés pour vos clés Zwave, CP210X, etc …
Lancer la commande dmesg |grep tty pour voir vos ports USB utilisés.

:warning: Ne pas laisser les chemins vers les ports USB non utilisés car l’installation ne fonctionnera pas !

image

PUID et PGID ID de l’utilisateur propriétaire.
Lancer la commande id <votre nom utilisateur administrateur>
image

:small_orange_diamond: Lancer notepad++, faite un copier-coller du code et sauvegarder le fichier docker\jeedom-macvlan\docker-compose.yaml


------------------------------------------------------------------------------------
                           Création du conteneur Jeedom
------------------------------------------------------------------------------------
Création du conteneur Jeedom

Lancer la commande docker pull jeedom/jeedom:4.3-buster pour télécharger l’image de Jeedom

image

Lancer la commande cd /volume1/docker/jeedom-macvlan pour changer de répertoire

image

Lancer la commande ls pour visualiser le contenu du répertoire

image

Lancer la commande docker-compose up -d pour créer le contener

image


Pour vérifier, allez dans le paquet Docker de Synology
qoDmDfeEba


------------------------------------------------------------------------------------
                               Lancement de Jeedom
------------------------------------------------------------------------------------
Lancement de Jeedom

Saisissez dans votre navigateur 192.168.1.242
La page de jeedom doit s’afficher

La page de connexion s’ouvre
le Nom d’utilisateur est admin
le mot de passe est admin

:warning: Changer votre mot de passe admin :warning:


Dans Configuration / réseaux / Accès interne
Vérifier votre adresse IP

1 « J'aime »
------------------------------------------------------------------------------------
                                   Bon à savoir
------------------------------------------------------------------------------------

:small_blue_diamond: Installation du plugin Deconz


:small_blue_diamond: Si vous utilisez plusieurs dongle USB il faut les installer sur un hub USB alimenté 2.0


:small_blue_diamond: Mes clés USB ne fonctionnent plus :

:small_orange_diamond: Éteindre le NAS
:small_orange_diamond: Débrancher l’alimentation du Hub USB
:small_orange_diamond: Rebrancher l’alimentation du Hub USB
:small_orange_diamond: Allumer le NAS


:small_blue_diamond: Sur quels ports sont branchés mes périphériques USB ?
      dmesg | grep tty

:small_blue_diamond: Problème avec les ports USB :
      chmod 777 /dev/tty*

:small_blue_diamond: Pour voir les droits des ports USB
      ls -lh /dev/ttyUSB0


:small_blue_diamond: Utilisation du DNS jeedom

:small_orange_diamond: ajouter dans la partie cap_add:

cap_add:
             - SYS_PTRACE 
             - SYS_ADMIN
             - NET_ADMIN

:small_orange_diamond: Ajouter /dev/net/tun dans la partie devices:

devices:
            - "/dev/net/tun"

:small_orange_diamond: Script à lancer à l’aide du « planificateur de taches » de DSM pour pouvoir utiliser le DNS jeedom

#!/bin/sh

# Create the necessary file structure for /dev/net/tun
if ( [ ! -c /dev/net/tun ] ); then
  if ( [ ! -d /dev/net ] ); then
    mkdir -m 755 /dev/net
  fi
  mknod /dev/net/tun c 10 200
fi

# Load the tun module if not already loaded
if ( !(lsmod | grep -q "^tun\s") ); then
  insmod /lib/modules/tun.ko
fi

# Load iptables mangle is not already loaded
if ( !(lsmod |grep -q "^iptable_mangle\s") ); then
  insmod /lib/modules/iptable_mangle.ko
fi


:small_blue_diamond: La page santé indique mémoire disponible à 0%
      C’est tout à fait normal :wink:


------------------------------------------------------------------------------------
                                Sauvegarder le conteneur
------------------------------------------------------------------------------------

:low_brightness: A noter qu’il est plus simple de recréer un conteneur et de restaurer une sauvegarde Jeedom :low_brightness:

:small_blue_diamond: Vous pouvez faire une sauvegarde de votre conteneur pour une future restauration ou faire des test.
      Pour cela nous allons transformer notre conteneur en image.

:small_blue_diamond: L’image de sauvegarde comprendra :

  • le système d’exploitation
  • votre configuration de Jeedom
  • les plugins installés

:warning: il très important également de sauvegarder le fichier docker-compose.yaml. C’est ce fichier qui contient les paramêtres de création :warning:

:small_orange_diamond: Lancer la commande docker ps afin de connaitre le numéro ID de votre conteneur

:small_blue_diamond: Noter le n° du CONTAINER ID

:small_orange_diamond: Lancer la commande docker commit -p <id conteneur> <image/image:tag>

:gear: :custard: Patienter 5 minutes le temps de l’opération

:small_blue_diamond: Si tout va bien vous verrez une ligne avec pleins de caractères …

:small_orange_diamond: Vérifier avec la commande docker images

:small_blue_diamond: Notre image de sauvegarde est créé :+1:

:small_orange_diamond: Lancer la commande suivante pour sauvegarder l’image sur le NAS

docker save -o /volume1/docker/sauvegarde.tar didier/jeedom:v4

:small_orange_diamond: Lancer la commande docker load -i /volume1/docker/sauvegarde.tar pour restaurer l’image

Super tuto, merci à toi, j’avais justement abandonné mon installation sur un NAS Synology à cause des limitations que celle-ci imposait concernant les plugins compatibles.
Pour remédier à cela j’avais rapatrié ma configuration sur un raspberry 3 qui était resté longtemps dans un fond de tiroir.
Ce sera avec grand plaisir que je suivrait ce tuto lorsque je me lancerais dans une installation fraîche.
Encore un grand merci car les syno (d’un point de vue hard) peuvent sans soucis soutenir un Jeedom.

Bonjour,

Tuto très complet. Merci pour le boulot !

Moi, j’'ai immédiatement une erreur à la création du macvlan.

Voici mon ifconfig

Bizarre que mon réseau soit en ovs_eth0 non ?

C’est normal, car tu fais certainement virtual machine sur ton syno ?

Non, pas de VM, par contre j’ai un VPN ?

Du coup dans

-o parent=eth0 \

Je mets

-o parent=ovs_eth0 \

à la place ?

Oui tu mets —

ok merci. J’essaye ça

Ok, bingo !

1 « J'aime »

Bon, ok, je suis arrivé au bout. Jeedom est fonctionnel. J’ai récupéré ma sauvegarde.
Par contre j’ai un problème avec les USB. J’avais laissé les tiennes parce que lorsque je fais

dmesg |grep tty
Il me met ceci

image

Dans jeedom, mes ports usb ne fonctionnent pas.
Je viens de faire un dir du dossier /dev et il n’y a pas de ttyusb.
Pourtant mon syno en a 3, 2 derrière et une en face avant. Elles sont fonctionnelles, je les ai testé à l’instant avec un clé USB. Elle a été reconnue à chaque fois.
Aurais-tu une idée ?
Merci.

Bonjour,

Alors, ce matin j’ai redémarré mon Syno, et non seulement

dmesg |grep tty

ne retourne absolument rien, mais en plus jeedom n’est plus accessible. Voici la réponse de la page web

SQLSTATE[HY000] [2002] No route to host

Le conteneur est bien lancé dans Docker.
Je n’ai aucun message d’erreur dans le journal de Docker

Aurai-tu une ide du problème ?
Merci;

C’est tout à fait normal que tu ne puisse pas accéder à Jeedom
Le routage disparaît quand on redémarre le NAS

Il faut relancer les 5 commandes

Je mettre à jour le tuto …

Ah Ok ! Y’a t-il un moyen de lancer les instructions automatiquement ?

Et pour mon problème d’USB, une idée ?

Merci.

Oui il faut que je mette à jour le tuto

C’est quoi comme clé USB ?
Quand tu dis redémarré

tu as essayé avec une seule clé pour voir ?

Oui, absolument. C’est une cle de 64G que j’ai branchée alternativement dans chaque port puis éjectée proprement depuis DSM. Chaque fois elle apparaissait dans le gestionnaire de fichier. Je n’avait qu’elle branchée sur le syno en UB. Car par ailleurs, j’ai un disque de sauvegarde de 4T en usb. Je l’avais débranché pour les tests.

Peut-être que mes clés Zwave et RFXCom doivent réellement passer par un hub USB alimenté ?
Pourtant la clé zwave s’allume correctement…

Il faut faire un essai avec la clé zwave uniquement branché
Toutes les autres supprimées physiquement…

Stop tous les conteneurs
Éteins le nas
Redémarre le NAS
Démarre uniquement le conteneur Jeedom macvlan

Post une capture écran de la configuration des ports du plugin zwave

1 « J'aime »

J’ai un peu travaillé dessus cette nuit :scream:

En fait le syno reconnait l’interface RFXCom mais pas la cle zwave.
En fait en regardant à nouveau le tuto, j’ai vu que tu demandais que les drivers USB de Jadahl devaient être installés, ce qui est mon cas. Mais du coup je me suis dit qu’il y a peut-être un rapport. J’ai vu dans le paquet qu’il est indiquéde faire lsusb -v et usb-devices.

J’ai analysé mes ports USB. L’interface RFXCom est reconnue mais pas la clé ZWAVE, branchés directement sur le port avant.

Du coup, je viens d’acheter un hub alimenté pour voir. Peut-être qu’elle pompe trop.

Je n’ai pas d’autres docker en service.

Bon, j’avance doucement. Je vois que tu as fait la mise à jour avec le script. C’est super. Merci.

Comment peut-on modifier les devices dans le fichier docker-compose.yaml ?
Finalement j’arrive à avoir une ttyUSB0, une ttyACM0 et une ttyACM1.
Est-ce que modifier le fichier dans le répertoire docker/jeedom-macvlan suffit ?

Oui.
tu supprimes ton conteneur
Après modification du fichier tu lances la commande docker-compose up -d

ok :+1:

Merci beaucoup

1 « J'aime »