Installer Jeedom dans un Container LXC

Pourquoi faire ?

Tout le monde n’a pas envie d’acheter un Raspberry pi et tous ses accessoires pour se construire un serveur domotique. L’investissement est tout de même conséquent (Raspberry, boitier, alimentation, disque dur externe), le packaging risque d’être assez bordélique et quand on dispose comme moi d’un ancien PC au format mini-ITX qui consomme peu, autant en profiter !

Le moyen le plus simple d’installer Jeedom sur un PC est de l’installer directement sur une Debian Jessie (la seule distribution actuellement supportée par ses développeurs). Cependant, Jeedom pour fonctionner a besoin d’avoir les privilèges d’administration de la machine (root). Ce n’est pas forcément une bonne idée, surtout quand la machine est directement accessible sur internet (port 80, 443 et 22). De plus, se servir du PC pour héberger autre chose que Jeedom devient hasardeux : rien n’empêche Jeedom de pourrir la config du serveur Web ou du serveur de mail etc… Et il n’est pas garanti que les mises à jour systèmes soient compatibles avec Jeedom dans cette version ou une autre.

Je me suis donc penché sur des techniques alternatives d’installation:

  • installer Jeedom dans une VM
  • installer Jeedom dans un container Docker
  • installer Jeedom dans un container LXC faisant tourner Debian Jessie

La VM : trop consommatrice de ressource.

Docker, pas super fan, il faut déployer 2 containers, un pour Jeedom, un pour Mysql. De plus, la documentation de Jeedom laisse planer le doute sur l’utilisation de leur image en production:

« Pour découvrir Jeedom vous pouvez aussi le faire tourner dans un conteneur Docker »

Comment fonctionnent les mises à jours sur cette image Docker, est-ce que les plugins fonctionnent correctement ? Et la config réseau ? Bref ça sent la galère 😉

Installation sur Ubuntu via LXD

Depuis quelques temps, Canonical est très impliqué dans le développement de son propre système de container disponible en backport depuis Ubuntu 14.04 et en standart depuis 15.04.

L’idée de ce système est de faire tourner une vraie distribution dans un container, ainsi, Jeedom sera content de croire qu’il tourne dans Debian Jessie. Il pourra casser tout le système sans compromettre l’intégrité du serveur hôte !

Aller, un peu de code, pour démarrer une image Debian Jessie et y installer Jeedom sur une machine Ubuntu :

# instancie un nouveau container qui aura pour nom jeedom
lxc launch images:debian/jessie/amd64 jeedom
# lance un shell dans le container jeedom
lxc exec jeedom /bin/bash
# lance l'installation de Jeedom
apt-get update && apt-get upgrade
apt-get install wget
wget https://raw.githubusercontent.com/jeedom/core/stable/install/install.sh
chmod +x install.sh
./install.sh

Voilà, Jeedom est installé

 Comment accéder à Jeedom ?

J’ai choisi d’utiliser des container isolé de mon LAN, leur IP est privée et n’est accessible que depuis le serveur sur lequel il est installé (configuration par défaut du bridge de lxd).

J’utilise donc un proxy HTTP pour accéder à Jeedom, en l’occurence nginx.

server {
	server_name jeedom.mamaison.fr ;
        location / {
		 proxy_pass http://jeedom/;
        }
}

Je déconseille vivement cette solution, car au redémarrage du server, nginx est lancé avant que le container de Jeedom soit démarré et ainsi, il ne se lance pas car il n’arrive pas à résoudre le nom d’hôte « jeedom ». (lxd fournit un serveur dns qui fait cette résolution, mais uniquement lorsque que le container a une adresse IP, ce qui n’est pas le cas au démarrage de la machine)

Il est préférable d’utiliser un logiciel proxy plus tolérant comme HAProxy (ou Apache HTTPD).

Configuration de périphériques USB (ex: une clé Z-Wave)

Je vais prendre comme exemple ici le configuration d’une clé Aeotec Z-Stick Gen5 (ZW090)

Tout d’abord, il faut fixer le nom du device associé à la clé. Editer/etc/udev/rules.d/98-usb-serial.rules et ajouter : 

SUBSYSTEM=="tty", ATTRS{idVendor}=="0658", ATTRS{idProduct}=="0200", SYMLINK+="ttyUSB-ZStick-5G", MODE="066

Au redémarrage du système, quand la clé usb Z-Wave est branchée, alors un lien symbolique vers le bon device est créé : /dev/ttyUSB-ZStick-5G

Ensuite, il faut mapper ce device dans le container jeedom, pour ce faire, il faut éditer la configuration du container

lxc config edit jeedom

Dans la section device, ajouter:

  /dev/ttyUSB-ZStick-5G:
    path: /dev/ttyUSB-ZStick-5G
    type: unix-char

Elle doit désormais ressembler à ça:

devices:
  /dev/ttyUSB-ZStick-5G:
    path: /dev/ttyUSB-ZStick-5G
    type: unix-char
  root:
    path: /
    type: disk

Redémarrer le container :

lxc stop jeedom
lxc start jeedom

Et voilà ! La clé usb Z-Wave est accessible par Jeedom !

2 thoughts on “Installer Jeedom dans un Container LXC

  • 17 août 2016 at 18 h 11 min
    Permalink

    Merci beaucoup pour ce post. Moi aussi j’utilise Jeedom avec un conteneur LXC mais par contre je n’ai pas réussi à faire fonctionner le module bluetooth avec le conteneur. Est-ce que tu aurais des pistes sur le sujet ?

    Reply
    • 17 août 2016 at 21 h 56 min
      Permalink

      J’imagine qu’il faut donner accès au container au contrôler bluetooth de la même façon que je donne accès à la clé usb zwave. Je n’ai pas de bluetooth sur mon ordi, donc je ne peux pas tester.

      Reply

Laisser un commentaire

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