[Tuto] ⏩ Installation de Jeedom sur Synology / docker / debian buster / réseau macvlan

Mise à jour :
14/01/2024 : refonte de la partie Création du réseau macvlan
13/03/2023 : nouveau lien pour drivers USB
06/03/2023 : maj Bon à savoir avec script DNS jeedom
20/02/2023 : lien vers tuto jeedom/jeedom:V4-stable
05/02/2023 : mise à jour des liens vers GitHub pour les fichiers d’installation.
04/01/2022 : ajout remarque concernant fichier init.sh pour DSM7. Merci @Babasile. Ajout info Drivers jadahl pour DSM 7.
20/06/2021 : :white_check_mark: New maj du tuto suite nouveau fichier d’installation sur le github Jeedom
31/12/2020 : ajout remarques Drivers jadahl. Merci @Stef74. Modif du fichier docker-compose.yaml partie devices. ajout remarque pour Logiciel notepad++
21/10/2020 : Précision limitation utilisation périphérique Bluetooth
06/09/2020 : ajout remarque pour ports USB non utilisés et réseau gateway. Merci @maxiime
27/06/2020 : modif du fichier docker-compose.yaml et partie Pré-requis
Répertoire « miroir » où sera installé Jeedom et la base de donnée Mysql
23/05/2020 : modif du fichier docker-compose.yaml
22/05/2020 : Ajout info pour sauvegarder le conteneur
21/05/2020 : Ajout info pour antenne plugin BLEA
17/05/2020 : Création du tuto


Bonjour :wave:

Voici un tutoriel pour installer Jeedom sur un NAS Synology avec docker
:small_blue_diamond: Système Debian buster
:small_blue_diamond: Jeedom v4 stable officiel
:small_blue_diamond: Réseau macvlan


:eight_spoked_asterisk: Si vous souhaitez installer Jeedom avec l’image docker proposée par Jeedom et avec plus de simplicité dans sa mise œuvre, utiliser le Tutoriel suivant : :eight_spoked_asterisk:




------------------------------------------------------------------------------------
                                   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 votre version de DSM 6 De quel type de CPU mon Synology NAS est-il équipé ? - Synology Centre de connaissances
:black_small_square: 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-v4 dans le dossier partagé docker de votre NAS
:small_blue_diamond: Créer un sous dossier \docker\jeedom-v4\html
:small_blue_diamond: Créer un sous dossier \docker\jeedom-v4\db
:small_blue_diamond: Créer un sous dossier \docker\jeedom-v4\install\OS_specific\Docker
:small_blue_diamond: Logiciel PuTTY
:small_blue_diamond: Logiciel notepad++ configuré en format « UNIX (LF) »

:small_orange_diamond: et un peu de patience …


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

:+1: En préambule, je remercie infiniment @shad et @bruno78 du forum https://www.nas-forum.com/forum Car ce sont eux qui m’ont donnés les éléments pour la création d’un réseau macvlan :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 connaitre 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 :

:small_orange_diamond: Lancer PuTTY
      Connecter vous à votre NAS Synology avec votre nom utilisateur administrateur et saisissez votre mot de passe.

:small_orange_diamond: Lancer la commande sudo -i pour passer en mode root

:small_orange_diamond: Ressaisissez votre mot de passe

image

:small_orange_diamond: Lancer la commande ifconfig

image

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


:small_blue_diamond: 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 "Dockerfile"
------------------------------------------------------------------------------------
Création du fichier "Dockerfile"

Avant de créer notre conteneur, nous allons au préalable créer une image à l’aide d’un fichier de configuration Dockerfile

:small_blue_diamond: Le fichier Dockerfile ne possède pas d’extension

Voici le contenu du fichier Dockerfile

:white_check_mark: New Dockerfile

FROM debian:10

LABEL version="1.0"

# Installation des paquets
#  ccze : couleur pour les logs
#  nano : editeur de fichier

RUN apt-get update && apt-get install -y \
	locales \
	ccze \
	nano

# Copie du fichier d'installation
ADD install/install-alpha.sh /tmp/install.sh
RUN chmod +x /tmp/install.sh
RUN sh /tmp/install.sh

# Initialisation 
ADD install/OS_specific/Docker/init.sh /root/init.sh
RUN chmod +x /root/init.sh
CMD ["sh", "/root/init.sh"]

Explication :
:small_blue_diamond: Notre image sera créée avec un système Debian 10 (Buster)

:small_blue_diamond: Les paquets minimum sont installés

:small_blue_diamond: L’étape de l’installation de Jeedom est créé avec le fichier init.sh

:small_orange_diamond: Lancer notepad++, faite un copier-coller du code et sauvegarder le fichier docker\jeedom-v4\Dockerfile


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

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

:small_blue_diamond: Voici le contenu du fichier docker-compose.yaml

:white_check_mark: New docker-compose.yaml

version: '2'

networks:
     default:
         external:
             name: mymacvlan

services:
    jeedom:
         container_name: jeedom-v41
         build : ./
         privileged: false
         pid: "host"
         cap_add:
             - SYS_PTRACE
             - SYS_ADMIN
         tty: true
         hostname: jeedom
         mac_address: a0:ca:ab:cd:ef:03
         networks:
             default:
                 ipv4_address: 192.168.1.243
         volumes:
             - "/volume1/docker/jeedom-v4/html:/var/www/html"
             - "/volume1/docker/jeedom-v4/db:/var/lib/mysql"
         devices:
             - "/dev/ttyUSB0:/dev/ttyUSB0"
             - "/dev/ttyUSB1:/dev/ttyUSB1"
             - "/dev/ttyACM0:/dev/ttyACM0"
         restart: unless-stopped
         environment:
             - TZ=Europe/Paris
             - PUID=1032
             - PGID=101
             - SYSTEMD_IGNORE_CHROOT=yes
             - PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin      

Explication :

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

:small_blue_diamond: ipv4_address: 192.168.1.243 Adresse IP pour joindre Jeedom

:small_blue_diamond: volumes: Répertoire « miroir » où sera installé Jeedom et la base de donnée Mysql

:small_blue_diamond: devices: Ce sont les ports USB utilisés pour vos clés Zwave, CP210X, etc …

:small_orange_diamond: 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 :warning:

image

:small_blue_diamond: PUID et PGID ID de l’utilisateur propriétaire.
:small_orange_diamond: 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-v4\docker-compose.yaml


------------------------------------------------------------------------------------
                              Fichier "init.sh"
------------------------------------------------------------------------------------

Fichier "init.sh"

:small_blue_diamond: Le fichier init.sh permet de :

  • Lancer l’installation de Jeedom au démarrage du conteneur si il n’est pas déjà installé.
  • Lancer les services lors des redémarrages du conteneur quand Jeedom est installé

:white_check_mark: init.sh

core/install/OS_specific/Docker/init.sh at 5687e4c65b69d2a9eb370e40f0e05c3986a8e019 · jeedom/core · GitHub

https://raw.githubusercontent.com/jeedom/core/5687e4c65b69d2a9eb370e40f0e05c3986a8e019/install/OS_specific/Docker/init.sh

:small_orange_diamond: Lancer notepad++, faite un copier-coller du code et sauvegarder le fichier docker\jeedom-v4\install\OS_specific\Docker\init.sh

:warning: Pour DSM 7 modifier la ligne 63 du code :warning:

echo 'Start apache2'
service apache2 start

Par

echo 'Start apache2'
sudo apachectl -f apache2.conf

------------------------------------------------------------------------------------
                              Fichier "install-alpha.sh"
------------------------------------------------------------------------------------


Fichier "install-alpha.sh"

:white_check_mark: New install-alpha.sh 12 févr. 2021

core/install/install.sh at 7cf606f9420cae5263a8eb4dc69cc3e9bc20d1c2 · jeedom/core · GitHub

https://raw.githubusercontent.com/jeedom/core/7cf606f9420cae5263a8eb4dc69cc3e9bc20d1c2/install/install.sh

:small_orange_diamond: Lancer notepad++, faite un copier-coller du code et sauvegarder le fichier docker\jeedom-v4\install\install-alpha.sh


------------------------------------------------------------------------------------
                           Vérification préalable
------------------------------------------------------------------------------------
Vérification préalable

:small_blue_diamond: Vérifier que tous les fichiers sont créés dans les bons répertoires
Jul2TDxG9i


------------------------------------------------------------------------------------
                    Création de l'image "jeedom-v4_jeedom:latest"
------------------------------------------------------------------------------------
Création de l'image "jeedom-v4_jeedom:latest"

:small_orange_diamond: Lancer PuTTY

:small_orange_diamond: Connecter vous à votre NAS Synology avec votre nom utilisateur administrateur et saisissez votre mot de passe.

:small_orange_diamond: Lancer la commande sudo -i pour passer en mode root

:small_orange_diamond: Ressaisissez votre mot de passe
image

:small_orange_diamond: Lancer la commande cd /volume1/docker/jeedom-v4 pour changer de répertoire

:small_orange_diamond: Lancer la commande docker-compose build

image

:small_blue_diamond: Vous allez voir les lignes de log défiler

tsiRvfFnZP

:gear: L’installation dure environ 30 minutes :gear:

:custard: :beer:
Lors du message Installation done. Reboot required. Laissez faire … et ne toucher à rien.

image

:small_blue_diamond: A la fin du processus, vous devriez avoir ce type de message

image

Votre image jeedom-v4_jeedom:latest est créé :+1:


------------------------------------------------------------------------------------
                         Création du conteneur "jeedom-v4"
------------------------------------------------------------------------------------
Création du conteneur "jeedom-v4"

:small_orange_diamond: Lancer la commande docker-compose up -d

image

:small_blue_diamond: Votre conteneur jeedom-v4 est créé :+1:

Le conteneur jeedom-v4 et le processus d’installation de Jeedom se sont lancée automatiquement


------------------------------------------------------------------------------------
              Vérification du processus de l'installation de Jeedom
------------------------------------------------------------------------------------

:white_check_mark: New Cette étape n’est plus necessaire avec la nouvelle version

Ancienne version

Ancienne version

:small_blue_diamond: Pour vérifier que l’installation de Jeedom s’exécute correctement nous allons « rentrer » à l’intérieur de notre conteneur

:small_orange_diamond: Lancer la commande sudo docker exec -it jeedom-v4 /bin/bash

:small_orange_diamond: Lancer la commande tail -n +1 /root/init.log && tail -f /root/init.log | ccze -A

:small_blue_diamond: Vous devriez voir les lignes de log défiler

cB5klWZoev

:gear: L’installation dure environ 30 minutes :gear:

:custard: :beer: Laissez faire …

:small_blue_diamond: A la fin du processus d’installation, Jeedom nous indique si tout c’est bien passé
      Le mot de passe choisi pour Mysql / mariaDB a bien été repris
      Le démarrage des différents services sont terminés

:small_blue_diamond: L’installation est terminée :+1:

:small_orange_diamond: Lancer la commande Ctrl+c
:small_orange_diamond: Lancer la commande exit pour sortir du conteneur


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

:small_orange_diamond: Saisissez dans votre navigateur 192.168.1.243

:small_blue_diamond: 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:


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

:small_blue_diamond: Restaurer une sauvegarde Jeedom si vous en avez une
      Si vous avez beaucoup de plugin, installer vos plugins et les dépendances avant de restaurer votre sauvegarde

      Merci pour votre attention :+1:

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

:small_blue_diamond: Installation du plugin Deconz


:small_blue_diamond: Ma clé USB Bluetooth n’est pas reconnu par le plugin BLEA

Un conteneur Docker en réseau macvlan, ne peut pas « voir » un périphérique Bluetooth branché sur un port USB.
Si vous souhaitez utiliser le plugin BLEA, il faudra créer un second conteneur avec un réseau Host :
[Tuto] ⏩ Installation d'une antenne BLEA sur Synology avec Docker


: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

7 « J'aime »