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

Tags: #<Tag:0x00007f384ffbf368> #<Tag:0x00007f384ffbf228>

Mise à jour :
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: Ce tutoriel est également valable pour une installation autre que sur un NAS Synology :eight_spoked_asterisk:

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 va régler ses limitations.
L’accès à Jeedom se fera avec une adresse IP sur le réseau local

Mais sa mise en place ne peut pas se faire avec l’interface graphique du paquet Docker de Synology !
La mise en oeuvre devra se faire avec les commandes docker en ssh

:low_brightness: Attention :low_brightness: 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


------------------------------------------------------------------------------------
                                   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: Drivers USB jadahl/drivers_6.2/ installé. Installation manuelle depuis le Centre de paquet
: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++

:small_orange_diamond: et un peu de patience …


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

:small_blue_diamond: l’adresse 192.168.1.241 servira notamment pour ceux qui utilisent le plugin BLEA
avec la création d’une antenne [Tuto] Installation d'une antenne BLEA sur Synology avec Docker


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

FROM debian:10

LABEL version="1.0"

ENV SHELL_ROOT_PASSWORD password
ENV MYSQL_ROOT_PASSWD mysql-password

# Installation des paquets
# 	ccze : couleur pour les logs
# 	wget : téléchargement
# 	openssh-server : serveur ssh

RUN apt-get update && apt-get install -y \
	apt-utils \
	wget \
	ntp \
	openssh-server \
	locales \
	ccze \
	nano


# Serveur SSH
RUN mkdir /var/run/sshd
RUN echo "root:${SHELL_ROOT_PASSWORD}" | chpasswd && \
	sed -ri 's/^#?PermitRootLogin\s+.*/PermitRootLogin yes/' /etc/ssh/sshd_config && \
	sed -ri 's/^#?Port 22/Port 22/' /etc/ssh/sshd_config
RUN sed -i 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' /etc/pam.d/sshd

# 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 variables SHELL_ROOT_PASSWORD et MYSQL_ROOT_PASSWD sont créées pour personnaliser les mot de passe

:small_blue_diamond: Les paquets minimum sont installés et un serveur SSH est paramétré

: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 "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é

:small_blue_diamond: Cette version de init.sh est une version modifiée de la version sur github.com/jeedom https://github.com/jeedom/core/blob/V4-stable/install/OS_specific/Docker/init.sh

#!/bin/bash

MYSQL_ROOT_PASSWD=$MYSQL_ROOT_PASSWD

log_file='/root/init.log'
exec >> $log_file 2>&1

echo 'Start init'

if [ -f /var/www/html/core/config/common.config.php ]; then
	echo 'Jeedom is already install'
else
	echo 'Start jeedom installation'
	apt-get install -y apache2 apache2-utils libexpat1 ssl-cert
	service apache2 start
	rm -rf /tmp/install.sh
	wget https://raw.githubusercontent.com/jeedom/core/V4-stable/install/install.sh -O /tmp/install.sh
	chmod +x /tmp/install.sh
	/tmp/install.sh -m $MYSQL_ROOT_PASSWD
fi

echo 'Start atd'
service atd restart

if [ $(which mysqld | wc -l) -ne 0 ]; then
	echo 'Starting mysql'
	chown -R mysql:mysql /var/lib/mysql /var/run/mysqld
	service mysql restart
fi

if ! [ -f /.jeedom_backup_restore ]; then
	if [ ! -z "${RESTOREBACKUP}" ] && [ "${RESTOREBACKUP}" != 'NO' ]; then
		echo 'Need restore backup '${RESTOREBACKUP}
		wget ${RESTOREBACKUP} -O /tmp/backup.tar.gz
		php /var/www/html/install/restore.php backup=/tmp/backup.tar.gz
		rm /tmp/backup.tar.gz
		touch /.jeedom_backup_restore
		if [ ! -z "${UPDATEJEEDOM}" ] && [ "${UPDATEJEEDOM}" != 'NO' ]; then
			echo 'Need update jeedom'
			php /var/www/html/install/update.php
		fi
	fi
fi

echo 'All init complete'
chmod 777 /dev/tty*
chmod 777 -R /tmp
chmod 755 -R /var/www/html
chown -R www-data:www-data /var/www/html

echo 'Start sshd'
service ssh start

echo 'Start apache2'
service apache2 start

cron -f

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


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

version: '2'

networks:
    default:
        external:
             name: mymacvlan

services:
    jeedom:
        container_name: jeedom-v4
        build : ./
        privileged: false
        pid: "host"
        cap_add:
             - SYS_PTRACE
        tty: true
        hostname: jeedom
        mac_address: a0:ca:ab:cd:ef:02
        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/ttyUSB1"
             - "/dev/ttyACM0"
        restart: unless-stopped
        environment:
             - TZ=Europe/Paris
             - PUID=1032
             - PGID=101
             - SYSTEMD_IGNORE_CHROOT=yes
             - SHELL_ROOT_PASSWORD=password
             - MYSQL_ROOT_PASSWD=mysql-password
             - 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_blue_diamond: SHELL_ROOT_PASSWORD Mot de passe pour accès SSH
:small_blue_diamond: MYSQL_ROOT_PASSWD Mot de passe pour accès root à mariaDB

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


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

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


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

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

: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

image

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

image

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

image

: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

image

: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 avant de restaurer votre sauvegarde

      Merci pour votre attention :+1:

4 J'aimes
------------------------------------------------------------------------------------
                                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

image

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

image

:small_orange_diamond: Vérifier avec la commande docker images

image

: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

------------------------------------------------------------------------------------
                                   Bon à savoir
------------------------------------------------------------------------------------

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

Il faut créer un conteneur supplémentaire afin d’avoir une antenne BLEA sur le NAS | [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: La page santé indique mémoire disponible à 0%
      C’est tout à fait normal :wink:

3 J'aimes