Comment migrer Jeedom d’une Debian 8.5 à 10.3

Dans ce tutoriel, je vais vous guider étape par étape dans l’installation de la plateforme domotique Jeedom en la migrant d’un ancien système Debian 8.5 vers une nouvelle machine virtuelle (VM) Debian 10.3. Je vais non seulement vous expliquer l’installation, mais je vais également vous montrer comment restaurer une sauvegarde Jeedom V3 entièrement fonctionnelle.

Je me suis lancé dans cette migration car, au fil du temps, les problèmes liés aux paquets et aux dépendances Python rendaient les mises à niveau Jeedom de plus en plus instables ou difficiles à réaliser, en particulier pour certains plugins Jeedom.

Attention, je n’ai pas spécialement choisi le moyen le plus simple pour installer et restaurer Jeedom 🙂

Étape 1 : Configuration de la machine virtuelle

Pour mes machines virtuelles, j’utilise VMWare vSphere 6.5 (édition gratuite) sur un Intel NUC, qui est parfaitement pris en charge (à l’exception de la carte son, mais nous n’en avons pas besoin pour cette utilisation).

Voici la configuration de mon Debian8.5 actuel :

Je vais d’abord déployer la version netinstall de Debian 10.3 sur mon datastore vSphere. Ensuite, je crée une nouvelle VM avec la même capacité que l’ancienne, qui fonctionnait parfaitement.

Notez que je n’utilise pas la dernière mise à jour vSphere… Debian 10 n’apparaît pas dans la liste déroulante. Ce n’est pas un problème.

Je vais utiliser mon magasin de données « datastore 1 », qui est un disque SSD.

Mêmes paramètres que l’ancienne machine virtuelle Debian 8.5. Notez que vous devez modifier la sélection dans la liste déroulante du lecteur CD/DVD afin d’utiliser le fichier ISO Debian que vous avez téléchargé et transféré précédemment sur votre banque de données vSphere.

Une fois créée, voici la liste de toutes mes machines virtuelles. J’ai fait un peu de ménage avant. Notez que je mets également à niveau ma machine virtuelle gekko trading bot de Debian 9.3 vers une nouvelle machine virtuelle 10.3. Maintenant, démarrons notre machine virtuelle Jeedom 10.3.

Étape 2 : Installation de Debian

Aucune installation graphique n’est nécessaire ; je vais procéder à l’installation en mode texte. Voici les options clés que j’ai choisies :

  • Langue, fuseau horaire, et clavier français
  • DEBIAN10-3-JEEDOM comme nom d’hôte
  • Domaine : home
  • Après avoir défini le mot de passe root, j’ai créé un nouvel utilisateur « jeedom ».
  • J’ai choisi LVM pour partitionner le disque. Je ne l’avais pas fait lors de mon installation précédente de la version 8.5 (je ne me souviens pas si cette option existait), mais cela facilitera les choses si dans le futur nous devons ajouter de l’espace disque ou modifier celui existant.
    • J’ai choisi de diviser /home, /var et /tmp en partitions distinctes. Cela permet d’éviter que les utilisateurs ou les applications ne saturent votre disque, par exemple en raison d’un nombre excessif de journaux dans /var/log ou d’un remplissage malveillant de /tmp par des applications malveillantes.
    • Je recommande d’allouer au moins 5 Go à var. Dans mon cas, comme mon ancienne base de données Jeedom est énorme, elle a complètement rempli le répertoire /var lorsque j’ai fait une première tentative avec les paramètres LVM par défaut.
  • Il suffit ensuite de suivre les instructions jusqu’à ce que le programme d’installation télécharge et installe tous les paquets requis.
  • Dans mon cas, je n’avais pas besoin d’un serveur proxy, ni d’environnement de bureau.
  • Cependant, je veille à installer à la fois un serveur web (Apache) et un serveur SSH.

Le processus d’installation va à nouveau télécharger et installer les paquets requis. Je vais choisir d’installer GRUB sur /dev/sda, car ce sera le seul système d’exploitation sur cette machine virtuelle.

Nous redémarrons maintenant. N’oubliez pas de supprimer l’ISO d’installation Debian de la configuration de la machine virtuelle dans vSphere.

Ensuite, je me connecterai à la VM avec la console VMWare et je mettrai à jour la VM avec :

su -
apt-get update
apt-get upgrade
apt-get install joe net-tools

L’installation du paquet « net-tools » nous permettra d’utiliser « ifconfig » pour obtenir notre adresse IP (vous pouvez bien sûr également vérifier votre serveur DHCP, probablement sur votre routeur ou votre box Internet).

Astuce : c’est le moment où vous devez définir cette adresse IP comme statique sur votre routeur afin qu’elle ne change pas à l’avenir. C’est indispensable pour Jeedom, car des équipements ou routines feront référence à votre système domotique en utilisant son adresse IP.

Nous souhaitons également installer les outils VMWare. Je n’installerai pas ceux de vSphere, car ils ne sont pas à jour. J’installerai les outils Open VM Tools.

apt-get install open-vm-tools

Lorsque vous y êtes invité, appuyez sur y pour continuer. Quelques dépendances seront installées. Une fois l’installation terminée, comme nous avons installé un certain nombre d’éléments, je vous suggère de redémarrer la machine virtuelle à l’aide de la commande suivante :

reboot -f

Remarquez la différence sur votre interface utilisateur vSphere : nous voyons désormais l’adresse IP, et vSphere détecte les outils VMWare installés. Parfait.

Vous devriez maintenant pouvoir vous connecter à votre machine virtuelle via SSH. J’utilise Putty depuis un ordinateur de bureau Windows.

Étape 3 : Installation de Jeedom

Ce qui suit est extrait de différentes parties du processus d’installation Debian tiré de la documentation Jeedom (§1 & §4 + quelques liens qui y figurent). Je ne suivrai pas exactement la documentation, car la procédure standard de Jeedom consiste à installer Jeedom dans le répertoire Debian /var/www par défaut, et j’ai modifié cela lors de mon installation précédente : l’ensemble du site web Jeedom sera en fait situé dans /home/jeedom (racine de mon utilisateur jeedom). C’est la première « complication », et oui, cela nécessitera quelques modifications dans le fichier de configuration httpd (Apache) par défaut. 

Nous allons d’abord installer quelques nouveaux utilitaires.

su -
apt-get install -y sudo fail2ban ffmpeg
usermod -aG sudo jeedom

Avec ces lignes, vous installerez sudo, fail2ban (pour limiter les tentatives de connexion abusives) et ffmpeg (nécessaire à Jeedom). L’ajout de l’utilisateur « jeedom » au groupe sudoers permet d’effectuer des actions administratives. Comme je ne souhaite pas que mes sudoers saisissent le mot de passe root, je vais modifier le fichier /etc/sudoers et changer (ou commenter) cette ligne :

%sudo ALL=(ALL:ALL) ALL

Avec celle-ci :

%sudo ALL=(ALL) NOPASSWD: ALL

Remarque : sachez que l’assouplissement des privilèges sudo ou MySQL, tel que la suppression des mots de passe ou l’octroi de droits SUPER, réduit la sécurité. N’appliquez ces modifications que dans des environnements fiables.

Maintenant, avec l’utilisateur jeedom, vous devriez pouvoir effectuer des actions root en utilisant (par exemple) « sudo ls -al /root ».

Ensuite, nous installerons Jeedom, et une fois cela fait, nous restaurerons notre sauvegarde.

su -
wget https://raw.githubusercontent.com/jeedom/core/master/install/install.sh
chmod +x install.sh
./install.sh

Remarque n° 1 : si vous installez Jeedom sur un système existant avec une version de MySQL déjà en cours d’exécution, sachez que vous pouvez passer des arguments au script (par exemple ./install.sh -w /home/jeedom/html -m Jeedom) pour le déployer directement dans /home/jeedom/html et éviter quelques opérations pour le déplacer plus tard comme je l’ai fait (notez aussi le -m pour forcer le nom d’utilisateur mysql que Jeedom doit utiliser).

Remarque n° 2 : si vous souhaitez réinitialiser les étapes d’installation précédentes de Jeedom et les réexécuter avec une base de données et un répertoire html cible propres, procédez comme suit sur la nouvelle machine virtuelle (PAS sur l’ancienne !) :

  1. Nettoyez le répertoire /var/www/html OU /home/jeedom/html si vous utilisez l’option de ligne de commande -m avec l’installateur Jeedom,
  2. Remove the Mysql jeedom database & user comme montré ci-dessous.
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| jeedom             |
| mysql              |
| performance_schema |
+--------------------+
4 rows in set (0.001 sec)

MariaDB [(none)]> drop database jeedom;
Query OK, 28 rows affected (0.102 sec)

MariaDB [(none)]> SELECT User,Host FROM mysql.user;
+--------+-----------+
| User   | Host      |
+--------+-----------+
| jeedom | localhost |
| root   | localhost |
+--------+-----------+
2 rows in set (0.000 sec)

MariaDB [(none)]> REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'jeedom'@'localhost';
Query OK, 0 rows affected (0.000 sec)

MariaDB [(none)]> DROP USER 'jeedom'@'localhost';
Query OK, 0 rows affected (0.001 sec)

L’exécution du script d’installation installera un ensemble de paquets : mysql, php, dépendances python, etc. À la fin, un message de réussite devrait s’afficher. Vous devez conserver en lieu sûr (et être en mesure de récupérer) le mot de passe root mysql affiché, au cas où vous n’auriez pas choisi de réutiliser une base de données ou un utilisateur existant comme indiqué ci-dessus.

Étape 4 : Tuning de MySQL

Cette étape est facultative si vous avez choisi précédemment de réutiliser un utilisateur et une base Mysql existants.

Restauration du mot de passe root et des privilèges

Nous allons maintenant modifier le mot de passe root pour mysql, afin de restaurer celui utilisé sur notre installation Debian8.5, et donner plus de privilèges à l’utilisateur jeedom (ceci est nécessaire pour restaurer certains éléments lors de la restauration de l’ancienne base de données Jeedom).

Astuce : vous pouvez trouver le mot de passe MySQL dans l’interface utilisateur Jeedom sous Debian 8.5, dans le menu de configuration, puis dans l’onglet OS/DB.

mysql -u root -p mysql

Vous devez ici utiliser le mot de passe root de la base de données Mysql que vous avez défini dans votre script d’installation ou noté après l’installation de Jeedom. Utilisez ensuite ces commandes pour modifier le mot de passe root (si vous le souhaitez) et attribuer tous les privilèges SUPER à l’utilisateur jeedom.

FLUSH PRIVILEGES;
SET PASSWORD FOR root@'localhost' = PASSWORD('YOUR NEW PASSWORD');
FLUSH PRIVILEGES;
GRANT ALL PRIVILEGES ON jeedom.* TO 'jeedom'@'localhost' WITH GRANT OPTION;
GRANT SUPER ON *.* TO 'jeedom'@'localhost';
FLUSH PRIVILEGES;

Déplacement des fichiers de base de données

Ensuite, je vais déplacer les fichiers de la base de données mysql par défaut du répertoire par défaut /var/lib/mysql vers mon répertoire personnel /home/jeedom, où il y a plus d’espace disque.

Tout d’abord, nous vérifions le répertoire de données MySQL par défaut utilisé pour stocker les données. Alors que vous êtes toujours connecté à MySQL, entrez cette commande. Elle affiche le chemin d’accès aux fichiers de la base de données.

MariaDB [(none)]> select @@datadir;
+-----------------+
| @@datadir       |
+-----------------+
| /var/lib/mysql/ |
+-----------------+
1 row in set (0.000 sec)

MariaDB [(none)]> exit;

Nous arrêtons mysql et vérifions qu’il est bien arrêté (recherchez la ligne « Status: MariaDB server is down » dans la sortie systemctl status).

systemctl stop mysql
systemctl status mysql

Nous allons copier le répertoire de la base de données existante vers le nouvel emplacement à l’aide de rsync. L’utilisation de l’option -a préserve les permissions et autres propriétés du répertoire, tandis que -v fournit une sortie détaillée afin que vous puissiez suivre la progression. Nous renommons l’ancienne base de données avec une extension .bak spécifique, afin de nous assurer que mysql ne puisse plus l’utiliser. Elle pourra être supprimée une fois la restauration terminée à 100 %.

rsync -av /var/lib/mysql /home/jeedom
mv /var/lib/mysql /var/lib/mysql.bak

Je vais maintenant modifier le fichier /etc/mysql/mariadb.conf.d/50-server.cnf (spécifique à Debian) afin de changer la directive datadir et de la pointer vers mon nouvel emplacement.

datadir=/home/jeedom/mysql

Et modifiez /etc/apparmor.d/tunables/alias pour créer un pointeur entre l’ancien répertoire mysql et le nouveau répertoire.

alias /var/lib/mysql/ -> /home/jeedom/mysql/,

Et nous redémarrons AppArmor.

systemctl restart apparmor

Avant de redémarrer mysql, nous devons créer une structure de répertoires de base dans l’ancien répertoire de fichiers, telle qu’elle est vérifiée par les scripts de démarrage par défaut de mysql.

mkdir -p /var/lib/mysql/mysql

Et nous devrons autoriser Mysql/MariaDB à être exécuté à partir des répertoires /home en ajoutant une autorisation.

systemctl edit mariadb

Ajoutez cette nouvelle section pour configurer une « substitution » à l’unité systemd MariaDB par défaut.

[Service]
ProtectHome=false

Ensuite, nous devons recharger les fichiers de configuration systemctl.

systemctl daemon-reload

Nous redémarrons Mysql et vérifions qu’il fonctionne correctement.

systemctl start mysql
systemctl status mysql

systemctl status mysql

root@DEBIAN10-3-JEEDOM:/home/jeedom# systemctl status mysql
● mariadb.service - MariaDB 10.3.22 database server
   Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
  Drop-In: /etc/systemd/system/mariadb.service.d
           └─jeedom.conf, override.conf
   Active: active (running) since Fri 2020-04-10 13:33:19 CEST; 51s ago
     Docs: man:mysqld(8)
           https://mariadb.com/kb/en/library/systemd/
 Main PID: 15792 (mysqld)
   Status: "Taking your SQL requests now..."
    Tasks: 33 (limit: 4915)
   Memory: 54.3M
   CGroup: /system.slice/mariadb.service
           └─15792 /usr/sbin/mysqld

avril 10 13:33:19 DEBIAN10-3-JEEDOM mysqld[15792]: 2020-04-10 13:33:19 0 [Note] /usr/sbin/mysqld (mysqld 10.3.22-MariaDB-0+deb10u1) starting as process 15792 ...
avril 10 13:33:19 DEBIAN10-3-JEEDOM systemd[1]: Started MariaDB 10.3.22 database server.
avril 10 13:33:19 DEBIAN10-3-JEEDOM /etc/mysql/debian-start[15827]: Upgrading MySQL tables if necessary.
avril 10 13:33:19 DEBIAN10-3-JEEDOM /etc/mysql/debian-start[15830]: /usr/bin/mysql_upgrade: the '--basedir' option is always ignored
avril 10 13:33:19 DEBIAN10-3-JEEDOM /etc/mysql/debian-start[15830]: Looking for 'mysql' as: /usr/bin/mysql
avril 10 13:33:19 DEBIAN10-3-JEEDOM /etc/mysql/debian-start[15830]: Looking for 'mysqlcheck' as: /usr/bin/mysqlcheck
avril 10 13:33:19 DEBIAN10-3-JEEDOM /etc/mysql/debian-start[15830]: Version check failed. Got the following error when calling the 'mysql' command line client
avril 10 13:33:19 DEBIAN10-3-JEEDOM /etc/mysql/debian-start[15830]: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
avril 10 13:33:19 DEBIAN10-3-JEEDOM /etc/mysql/debian-start[15830]: FATAL ERROR: Upgrade failed
avril 10 13:33:19 DEBIAN10-3-JEEDOM /etc/mysql/debian-start[15840]: Checking for insecure root accounts.
root@DEBIAN10-3-JEEDOM:/home/jeedom#

Bon, il y a quelques plaintes concernant la mise à jour de MySQL, mais elle est lancée et fonctionne. Nous devrons vérifier /etc/mysql/debian.cnf, il s’agit probablement d’un problème de synchronisation par défaut dû au changement de mot de passe pour l’utilisateur root, ou réactiver unix_sockets pour l’utilisateur root à l’aide des commandes MySQL :

ALTER USER 'root'@'localhost' IDENTIFIED WITH 'unix_socket';
FLUSH PRIVILEGES;

Maintenant, vérifiez rapidement dans mysql qu’il utilise bien le nouveau répertoire de données.

MariaDB [(none)]> select @@datadir;
+---------------------+
| @@datadir           |
+---------------------+
| /home/jeedom/mysql/ |
+---------------------+
1 row in set (0.000 sec)

Parfait. Nous pouvons maintenant supprimer notre ancien répertoire de base de données.

rm -Rf /var/lib/mysql.bak

Première connexion à Jeedom

Nous allons maintenant nous connecter à notre nouvelle interface utilisateur Jeedom (en utilisant http://) et procéder à l’installation graphique (désolé, mes captures d’écran sont en français). Le nom d’utilisateur et le mot de passe par défaut de Jeedom sont admin/admin.

The UI will ask to change the default password. I’ll reuse the one i’m using on the Jeedom installation i’m restoring to avoid any mistake. In next screen I’ll give Jeedom my login/pass for Jeedom’s market. If you don’t have one yet there is a link to create one, this is mandatory if you want to install plugins.

After validating the market account, Jeedom will display its start page, very empty but that’s normal.

So, at this stage, we have a working standard Jeedom V4 installation, listening on port 80 of our VM. Fine but not enough.

Étape 5 : Configuration d’Apache

Je vais modifier la configuration d’Apache2 pour que le répertoire par défaut soit /home/jeedom/html (OUI, j’aurais pu utiliser l’option d’installation -w /home/jeedom/html, cela aurait été plus simple), pour activer le protocole HTTPS et pour utiliser un certificat TLS personnel généré par mon hébergeur, le FAI Gandi.

Notez que si nous voulons obtenir plus d’informations dans les fichiers journaux Apache2, nous devons modifier la ligne « LogLevel warn » du fichier /etc/apache2/apache2.conf en « LogLevel debug ».

Dans /etc/apache2/apache2.conf, je dois ajouter les lignes suivantes :

# Sets the default security model of the Apache2 HTTPD server. It does
# not allow access to the root filesystem outside of /usr/share and /var/www.
# The former is used by web applications packaged in Debian,
# the latter may be used for local directories served by the web server. If
# your system is serving content from a sub-directory in /srv you must allow
# access here, or in any related virtual host.
<Directory />
        Options FollowSymLinks
        AllowOverride None
        Require all denied
</Directory>

<Directory /usr/share>
        AllowOverride None
        Require all granted
</Directory>

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

<Directory /home/jeedom/html/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

#<Directory /srv/>
#       Options Indexes FollowSymLinks
#       AllowOverride None
#       Require all granted
#</Directory>

Les lignes 24 à 28 permettent à Apache de servir des fichiers (y compris l’index si nécessaire) à partir de /home/jeedom/html/ afin qu’ils soient accessibles depuis le Web.

Je vérifie le fichier /etc/apache2/ports.conf pour vérifier le port d’écoute HTTPS par défaut.

# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf

Listen 80

<IfModule ssl_module>
        Listen 443
</IfModule>

<IfModule mod_gnutls.c>
        Listen 443
</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Les lignes 7 à 13 activent le listener HTTPS/SSL, si les modules ssl ou mod_gnutls sont chargés.

Je vais modifier la directive ErrorLog par défaut dans /etc/apache2/conf-available/security.conf afin qu’elle enregistre les informations dans /var/log/apache2, et non dans /var/www/html/logs. Cette directive aurait également pu être utilisée dans un VirtualHost dédié à Jeedom au lieu de modifier l’installation Apache2 par défaut, mais cette machine virtuelle est en réalité entièrement dédiée à Jeedom, donc…

ErrorLog ${APACHE_LOG_DIR}/error.log

Je modifie maintenant le fichier /etc/apache2/sites-available/000-default.conf pour utiliser /home/jeedom/html comme répertoire racine par défaut et modifier les fichiers journaux. Là encore, cette directive aurait pu être utilisée dans un VirtualHost. Notez que ce VirtualHost par défaut contient déjà des directives CustomLog et ErrorLog dédiées qui pointent également vers le répertoire par défaut /var/log. Tous les journaux d’erreurs Apache seront désormais enregistrés dans le même fichier.

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        DocumentRoot /home/jeedom/html
        CustomLog ${APACHE_LOG_DIR}/access.log combined
        ErrorLog ${APACHE_LOG_DIR}/error.log
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Je modifie le fichier /etc/apache2/sites-available/default-ssl.conf afin de configurer le listener HTTPS par défaut avec un certificat TLS personnel obtenu auprès de mon hébergeur Gandi, pour le nom de domaine complet (FQDN) de mon Jeedom.

<IfModule mod_ssl.c>
        <VirtualHost _default_:443>
                ServerAdmin webmaster@localhost

                DocumentRoot /home/jeedom/html

                # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
                # error, crit, alert, emerg.
                #LogLevel info ssl:warn

                ErrorLog ${APACHE_LOG_DIR}/errorSSL.log
                CustomLog ${APACHE_LOG_DIR}/accessSSL.log combined

                #   SSL Engine Switch:
                SSLEngine on

                #   Real certificate, replace with your files!
                SSLCertificateFile      /etc/ssl/certs/public_cert.2048.crt
                SSLCertificateKeyFile   /etc/ssl/private/private_key.2048.key
                SSLCertificateChainFile /etc/ssl/certs/GandiStandardSSLCA2.pem

                <FilesMatch ".(cgi|shtml|phtml|php)$">
                                SSLOptions +StdEnvVars
                </FilesMatch>
                <Directory /usr/lib/cgi-bin>
                                SSLOptions +StdEnvVars
                </Directory>
        </VirtualHost>
</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Notez que le VirtualHost HTTPS par défaut utilisera /home/jeedom/html comme racine ; nous pouvons également modifier les fichiers journaux SSL. De plus, trois lignes sont dédiées à pointer le certificat public (fichier CRT) dans lequel notre clé publique est intégrée, sa clé privée associée (fichier KEY) et la liste des autorités de confiance qui ont émis et signé numériquement notre certificat public. Ce sont les fichiers que je devrai ensuite sauvegarder depuis mon répertoire Debian8.5 Apache2 et restaurer sur ce Debian10.3 Apache2.

Nous allons également activer SSL à l’aide de la commande a2enmod apache, et rendre le fichier default-ssl.conf chargeable par Apache2 en le liant depuis sites-available vers sites-enabled :

a2enmod ssl
cd /etc/apache2/sites-enabled
ln -s /etc/apache2/sites-available/default-ssl.conf default-ssl.conf

Je sauvegarde les certificats SSL utilisés sur mon ancienne installation Jeedom, je les copie sur cette nouvelle VM et je les restaure. Sur l’ancienne VM Debian 8.5, j’archive les fichiers requis dans un fichier TAR GZ.

tar cvzpf /home/jeedom/certs.tgz /etc/ssl/certs/public_cert.2048.crt /etc/ssl/private/private_key.2048.key /etc/ssl/certs/GandiStandardSSLCA2.pem
chown jeedom:jeedom /home/jeedom/certs.tgz

J’utilise scp sur la nouvelle VM Debian10.3 pour télécharger l’archive :

scp <OLD_JEEDOM_IP>:/home/jeedom/certs.tgz /home/jeedom/
cd /
su -
tar zxvfp /home/jeedom/certs.tgz

Ensuite, je vérifie la configuration d’Apache et je redémarre Apache.

apache2ctl configtest
Syntax OK
service apache2 restart

Je vais maintenant vérifier si mes ports 80 et 443 sont ouverts :

netstat -anp | egrep '80|443'

Le résultat est bon, nous voyons qu’il y a des écouteurs sur les ports 80 et 443, à partir des processus apache2 :

tcp6       0      0 :::80                 :::*                    LISTEN      2198/apache2
tcp6       0      0 :::443                :::*                    LISTEN      2198/apache2

Essayons maintenant d’accéder à l’interface utilisateur Jeedom (en utilisant d’abord http://192.168.1.82) :

Et maintenant, en utilisant https://192.168.1.82 :

Cet avertissement est normal, car j’accède à l’interface utilisateur en utilisant l’adresse IP de la machine virtuelle, et non le nom de domaine complet défini dans le certificat TLS du serveur que j’ai demandé à Apache2 d’utiliser dans mon fichier default-ssl.conf. Lorsque je valide l’avertissement, je peux accéder à l’interface utilisateur de Jeedom. De plus, un autre test effectué depuis « l’extérieur » de mon réseau local (les tables de routage obscures de mon FAI ne me permettent pas d’effectuer ce test depuis l’intérieur), en utilisant son nom de domaine complet, fonctionne sans aucun avertissement.

Maintenant, comme mon FAI actuel ne me fournit toujours pas d’adresse IP externe statique et qu’elle change une ou deux fois par mois, je souhaite sauvegarder et restaurer le petit script utilisé pour mettre à jour mon enregistrement DNS dynamique afin de pouvoir accéder en permanence à Jeedom depuis l’extérieur, ainsi que d’autres petites choses. Ce script est basé sur un projet public et utilise les API publiques de Gandi.

Sur la machine Debian 8.5 :

tar cvzpf various.tgz gandi-live-dns philips_android_tv

Sur la machine Debian 10.3, je vais le copier avec scp, le décompresser et installer un paquet Python requis pour le faire fonctionner.

scp <OLD_JEEDOM_IP>:/home/jeedom/various.tgz ./
tar zxvfp various.tgz
sudo pip install requests

Ensuite, je dois ajouter une tâche crontab pour vérifier mon adresse IP et éventuellement la mettre à jour :

sudo crontab -e

Ensuite, j’ajoute cette ligne pour exécuter le script Python toutes les 30 minutes et afficher son journal dans un fichier /var/log.

*/30 * * * * /home/jeedom/gandi-live-dns/src/gandi-live-dns.py > /var/log/gandi-live-dns.log 2>&1

Étape 6 : Sauvegarde de la clé Aeotec Gen5 Zwave

Je vais maintenant sauvegarder la clé USB Aeotec Zwave toujours utilisée sur l’ancienne installation Jeedom fonctionnant sous Debian 8.5.

À propos de la clé ZWave Aeotec (merci à Nechry, contributeur actif de Jeedom, pour son article) :

  • Windows 10 disposera déjà du pilote ou celui-ci sera téléchargé automatiquement. Pour les autres systèmes d’exploitation ou pour obtenir les fichiers inf manuellement, cliquez ici.
  • Vous aurez besoin de la « clé réseau » ZWave pour la clé USB. Il s’agira probablement de la clé par défaut, mais en cas de doute, dans mon ancienne installation Jeedom, je vérifierai dans resources/openzwaved/ozwave/manager_utils.py. Il s’agira d’une suite de 16 valeurs hexadécimales (très sécurisées…) : « 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10 » qui devra être convertie en « 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 » dans l’utilitaire de sauvegarde.

Sur mon ordinateur W10, sur lequel je n’ai jamais branché cette clé USB, Windows configure automatiquement le périphérique, puis je lance l’utilitaire zwave_500.exe téléchargé depuis le site Web d’Aeotec.

This image has an empty alt attribute; its file name is Pasted-21.png
Utilitaire de sauvegarde Zstick

Je peux vérifier que la clé est bien détectée car un port COM s’affiche dans la barre de titre et le message « Load Zstick Success » apparaît dans la barre d’état en bas de la fenêtre. Je dois ensuite cocher « Enable Security », saisir ma clé réseau/sécurité et cliquer sur « set ».

Ensuite, je clique sur le bouton « Lire l’Eeprom » et je choisis l’emplacement où enregistrer le fichier de sauvegarde. Et je vais me faire un café…

Nous avons terminé. Ce fichier est précieux pour vous, veuillez le conserver avec soin : toutes les configurations des appareils appairés et la configuration du réseau ZWave sont stockées sur votre contrôleur ZWave. Si votre clé ZWave doit être remplacée, ce fichier est le seul moyen de restaurer l’intégralité de votre réseau ZWave sans avoir à réenregistrer chaque appareil ZWave. L’opération de sauvegarde/restauration de Jeedom ne concerne pas le réseau ZWave.

Attention : cette sauvegarde ne sera utilisable que sur une autre clé Aeotec similaire (elles fonctionnent très bien). Je vous recommande vivement d’en avoir toujours une de rechange à disposition.

Étape 7 : Sauvegarde et restauration de Jeedom

Sauvegarde de l’ancien Jeedom fonctionnel

Je dois sauvegarder l’intégralité de mon Jeedom fonctionnel, grâce à sa fonctionnalité de sauvegarde intégrée.

Restauration sur la nouvelle machine virtuelle

Tout d’abord, je vais retourner dans l’interface utilisateur d’administration vSphere pour réattribuer mon Aeotec Zstick et mon module Bluetooth à la nouvelle machine virtuelle. C’est très simple, il suffit de les désaffecter de l’ancienne machine virtuelle Debian8.5 et de les réaffecter en tant que nouveau périphérique USB à la nouvelle machine virtuelle.

Je copie la sauvegarde sur ma machine Debian 10.3, dans le répertoire standard html/backup de Jeedom dans son HOMEDIR modifié. Je modifie également ses permissions pour m’assurer qu’elle sera lisible par Jeedom et plus particulièrement par Apache avec son utilisateur www-data.

#on new VM
cd /home/jeedom/html/backup
sudo scp jeedom@<OLD_JEEDOM_IP>:/home/jeedom/backup/backup-Yetz_1-3.3.44-2020-04-10-11h42.tar.gz ./
sudo chown www-data:www-data backup-Yetz_1-3.3.44-2020-04-10-11h42.tar.gz

Ensuite, je vais le restaurer via l’interface utilisateur du « nouveau » Jeedom (ici, désolé, il s’agit d’une capture d’image de l’IHM des sauvegardes de Jeedom v3, j’ai oublié de prendre celle de la nouvelle V4… Mais c’est presque la même chose).

Ce sera une tâche longue, et l’interface utilisateur risque de ne pas se mettre à jour correctement, car des fichiers seront supprimés et restaurés. Vous devriez pouvoir suivre le processus de restauration grâce au fichier journal interne de Jeedom :

Bon, il y a manifestement eu une erreur MySQL/MariaDB, mais le résultat est tout de même correct… J’ai corrigé l’étape 4 de ce guide afin que cette erreur ne se reproduise plus : l’utilisateur Mysql jedom ne disposait pas des privilèges SUPER, ce qui peut poser problème si la sauvegarde contient des instructions « DEFINER= ». L’étape 4 comprend désormais une instruction GRANT SUPER ON *.* TO 'jeedom'@'localhost';.

Je vais maintenant éteindre correctement (shutdown -h now) l’ancien Jeedom Debian 8.5. Ce n’est pas obligatoire, car les deux machines virtuelles n’ont pas la même adresse IP, mais je préfère le faire.

Je procède à un redémarrage de sécurité sur le nouveau Jeedom, je me reconnecte à son interface utilisateur et je peux voir son tableau de bord.

À ce stade, Jeedom devrait être pleinement opérationnel. Les étapes restantes consistent principalement à restaurer les plugins, vérifier que tous les paramètres réseau sont corrects pour votre nouvelle box domotique, et que toutes les automatisations fonctionnent.

Étape 8 : dernières étapes

Quelques ajustements sont encore nécessaires.

Configuration réseau

Consultez le menu Jeedom > Santé.

Jeedom se plaindra probablement de la configuration du réseau externe. C’est normal, vous devez vérifier deux choses :

  • Dans le menu de configuration réseau dans Jeedom, où vous définissez les adresses internes et externes, vous devez vérifier si la configuration qui a été restaurée est toujours la bonne (dans mon cas, ce n’est pas le cas, car le nouveau Jeedom n’utilise pas la même adresse IP interne que l’ancien).
  • Sur votre routeur, où vous aviez probablement configuré une redirection de port afin que votre installation Jeedom soit accessible depuis l’extérieur, vous devez également utiliser la nouvelle adresse IP interne comme adresse IP cible.
  • Vous pouvez également attribuer l’adresse IP de votre ancienne machine virtuelle Jeedom à la nouvelle sur votre serveur DHCP.

Configuration du marché

Dans Jeedom > Centre de mise à jour, un message m’indique que j’ai trop de Jeedom déclarés. C’est normal, car j’utilise plusieurs installation de la version « gratuite » de Jeedom et je me connecte au market à partir du même compte, limité à 2 installations avec la version gratuite. Je me suis connecté au site Web du market, j’ai vérifié quelles étaient mes installations déclarées, j’ai supprimé l’ancienne, car je ne l’utiliserai plus après cette migration.

Réinstaller les dépendances des plugins

Vous devez réinstaller les dépendances pour tous vos plugins, ceci est TRÈS important : Bluetooth Advertisement, ZWave, KRoomba, etc. En utilisant cette installation Debian 10.3, je n’ai eu absolument AUCUN problème avec la création des dépendances, les modules fonctionnaient bien, aucune opération manuelle supplémentaire n’était nécessaire.

Conclusion & Next Steps

Tous mes scénarios et paramètres ont été parfaitement restaurés… J’ai passé quelques jours à créer ce tutoriel et à trouver les bons paramètres VM et le bon processus de restauration, mais c’était absolument nécessaire pour le bon fonctionnement de ma domotique. Maintenant que je connais un peu mieux Jeedom, je sais que les sections de réglage de Mysql et Apache peuvent être simplifiées, principalement en utilisant les options -m et -w dans l’installateur en ligne de commande de Jeedom.

Ce qui a un peu compliqué le processus, c’est que j’ai choisi de ne pas stocker Jeedom dans son répertoire par défaut /var/www/html et de placer le fichier de base de données MySQL/MariaDB dans un répertoire séparé. Ce ne sont pas des opérations standard et je préfère les documenter ici, cela pourrait être utile à d’autres personnes, du moins je l’espère.

La migration de Jeedom d’une machine virtuelle Debian à une autre est tout à fait réalisable avec une préparation minutieuse, notamment en séparant les répertoires home et database, en s’assurant d’avoir des sauvegardes et en restaurant soigneusement les utilisateurs et les privilèges. Dans ce guide, vous avez vu comment gérer les emplacements non standard (/home/jeedom, répertoire de données SQL personnalisé) et résoudre les problèmes d’autorisations/privilèges après la restauration.

N’oubliez pas :

  • Vérifiez toujours la page de Santé de Jeedom et les journaux après la migration.
  • Mettez à jour toutes les dépendances des plugins et vérifiez les scénarios d’automatisation.
  • Sauvegardez régulièrement à la fois votre configuration Jeedom et votre clé Zwave à des fins de reprise après sinistre.
  • Vérifiez à nouveau les privilèges utilisateur MySQL si des erreurs « SUPER » surviennent pendant la restauration de la sauvegarde.
  • Pour approfondir les questions spécifiques aux plugins ou des configurations avancées, consultez mes autres articles dont les liens figurent ci-dessous.

Articles connexes sur le blog :

Ressources externes recommandées :


Si vous avez trouvé ce guide utile, consultez d’autres articles dans les catégories Domotique ou Linux.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *


La période de vérification reCAPTCHA a expiré. Veuillez recharger la page.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.