Demande d'aide : debian 12 + docker compose

Bonjour,

C’est assez rare mais je vais avoir besoin de votre pour faire des tests. J’ai récemment commencer a faire des tests sur debian 12 (donc php8). Globalement le core en alpha/beta ne pose pas de soucis tout marche, j’ai pas vu non plus de soucis sur les plugins que j’utilise au niveau php. Il est plus strict (une méthode appelé en static doit être en static par exemple). Mais bon php8 ne pose pas de gros soucis (d’ailleurs le market et tous les autres site jeedom y sont passé sans probleme).

Les soucis viennent (comme souvent j’ai envie de dire) de python. En debian 12 pip ne marche plus par défaut a moins d’etre en venv. Il faut donc passer par les packages python3-xyz (ex python3-requests), ya du boulot la mais c’est faisable sauf que souvent les packages existe pas avec cette méthode. J’arrive a contourner en intégrant directement le packages dans le plugin (c’est pas bien sur le papier mais en vrai vous allez voir que c’est utile). Par contre il y a un point assez genant c’est la crypto. Pycrypto n’existe plus depuis longtemps et est remplacé par pycryptodome, sous debian 12 il faut donc python3-pycryptodome. Jusque la pas de soucis sauf qu’ils ont changé le nom de module python ensuite de Crypto en Cryptodome. Il faut donc dans tous les plugins utilisant Crypto remplacé par Cryptodome, d’ou l’avantage de mettre les packages directement dans le plugin.

Tous ça pour dire que jusque la j’ai réussi a m’en sortir, va avoir du boulot mais c’est faisable et c’est pas la dessus que j’ai besoin d’aide. Mon soucis est plus ensuite. N’ayant que un Synology (et pas un foudre de guerre) je test tout en docker et je me suis dit que j’allais (enfin) faire ça propre en passant par docker compose donc avec un service db et un service http. Pas de soucis j’ai fait un docker spécial pour ça marche :

services:
  db:
    image: mariadb:latest
    command: 
      - "--default-authentication-plugin=mysql_native_password"
      - "--skip-name-resolve"
      - "--key_buffer_size=16M"
      - "--thread_cache_size=16"
      - "--tmp_table_size=48M"
      - "--max_heap_table_size=48M"
      - "--query_cache_type=1"
      - "--query_cache_size=32M"
      - "--query_cache_limit=2M"
      - "--query_cache_min_res_unit=3K"
      - "--innodb_flush_method=O_DIRECT"
      - "--innodb_flush_log_at_trx_commit=2"
      - "--innodb_log_file_size=32M"
      - "--innodb_large_prefix=on"
    volumes:
      - db:/var/lib/mysql
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=TODO
      - MYSQL_DATABASE=jeedom
      - MYSQL_USER=jeedom
      - MYSQL_PASSWORD=TODO
    expose:
      - 3306
  http:
    image: jeedom/jeedom:4.4-http-bookworm
    volumes:
      - http:/var/www/html
    tmpfs:
      - /tmp/jeedom
    ports:
      - 52080:80
    restart: always
    environment:
      - DB_HOST=db
      - DB_USERNAME=jeedom
      - DB_PASSWORD=TODO
      - DB_NAME=jeedom
volumes:
  db:
  http:

Jeedom démarre bien, j’ai pu remettre mon backup et dans l’ensemble ça tourne (au passage aucun gain de perf du a php8). Par contre ensuite ça se complique :

  • j’ai des messages qui indique la classe ajax introuvable, mais pas tout le temps… J’arrive pas a comprendre pourquoi dans le même code des fois il l’a trouve et desfois non. Surement un truc php8
  • plus gênant j’ai des erreurs de timeout d’accès a la db

Pour c’est 2 soucis j’aimerais savoir si certain d’entre vous pouvez tester (en dev bien sur) et me dire si ils reproduisent car je soupçonne fortement un soucis plutôt coté synology (en particulier pour le timeout sur la db).

En vous remerciant d’avance

Salut,

bon je sais que tu demandais plus de l’aide sur la partie docker mais vu que tu parles aussi de python je me permet un point: je n’ai pas testé ni rien lu mais la syntaxe python3 -m pip ... au lieu de juste pip ...ne fonctionne pas non plus?

sinon ca c’est bien aussi :wink:

il suffit de se créer un dossier (pour le plugin dans resources/venv par exemple, disons qu’il est dans la variable $VENV_DIR)
puis

apt-get install -y python3 python3-pip python3-venv
python3 -m venv $VENV_DIR
$VENV_DIR/bin/python3 -m pip install --upgrade pip wheel

et donc ensuite on install les dépendances comme avant (si cette syntaxe fonctionne sous debian 12)

$VENV_DIR/bin/python3 -m pip ...

et chaque fois lancer python (et donc les démons) depuis $VENV_DIR/bin/python3

il ne faut pas « activer » le venv sinon par défaut python3 du système va pointer sur celui-ci, ce qu’on ne veut pas sinon tous les démons du plugins tourneraient sur un même venv

Merci je vais noter ca précieusement et surement migrer les plugins la dessus pour avoir moins de soucis, de toute façon pas le choix en debian 12. Je vais tester python3 -m pip mais de mémoire j’avais essayé et debian m’engeule quand meme que on fait plus ca maintenant a moins d’etre en venv.

Bonjour Loïc, j’ai commencé pour mon plugin à migrer sur Venv aussi. Par contre j’avoue que je me suis un peu cassé la tête pour le démon et la communication avec jeedom. Je ne sais pas si c’est la meilleure méthode mais j’ai appelé d’abord le script Jeedom.py et puis t le script de mon démon.

Au lieu de venv, il y a aussi pyenv. MyModbus bêta l’utilise.

Hello,

J’ai déjà fait la modification sur mon plugin et passer sur VENV pour le plugin plugin-rainbird car j’avais un conflit avec plugin-zigbee justement avec Crypto

Le mieux tout les plugins qui utilise Python de passer sur VENV pour être indépendant du core et des plugins

Sinon pour revenir sur la VM, il y a ça qui peux t’intéresser [tuto] dev et debug de Jeedom sous windows avec VSCode et Docker

Cordialement

Hello

Quel genre de message ? côté browser (javascript) ou bien php ? ça pourrait être un load-balencer, tu a un nginx ou autre reverse-proxy ou bien tu es sur jeedom directement ?
Je suis en vacances :slight_smile: mais je regarderais en aout, et aussi pour générer une image jeedom sur debian 12 via le workflow github.

Bonjour
Pour l’image debian 12 sur le workflow c’est bon normalement (enfin ça fait une image en tout cas j’ai même réussi à rajouter un paramètre pour ne pas inclure la partie mariadb-server).

Pour l’erreur c’est dans php en gros il me dit qu’il trouve pas la class Ajax (qui est das core/class/ajax.class.php) dans le fichier core/ajax/event.ajax.php (https://github.com/jeedom/core/blob/alpha/core/ajax/event.ajax.php#L36).

Après je vais creuser mais j’aimerais que certain test pour savoir si vous reproduisez, savoir si c’est un soucis général ou un problème chez moi du a mon architecture.

Hello Loïc,

J’avais un peu de temps ce matin pour re garder ce problème de plus près.
As-tu des logs sur ces timeouts ?
Peux-tu préciser quand ils se produisent ?

J’ai vu dans ton compose que tu n’as pas lié le démarrage de Jeedom à celui de MariaDB.
Si les timeouts se produisent au démarrage de Jeedom, essaye voir de rajouter ça au service http :

    depends_on:
      - db

Tu peux aussi rajouter ça à http pour avoir un health check sur le container :

    healthcheck:
      test: ["CMD", "curl", "-fs", "-S", "--max-time", "2", "http://localhost:80"]
      interval: 30s
      timeout: 10s
      retries: 5

Autre point, concernant Python et ton contournement :

Certains packages intègrant du C, notamment Pycrypto et pycryptodome, sont compilés à la volée et les sources dépendants fortement du système sur lequel ils sont installés. Je pense que le contournement fonctionnera dans certains cas, mais sera vite une galère supplémentaire.

Pourquoi ne pas rajouter une « directive » au fichier package.json pour gérer automatiquement la création et le maintient du venv ? Par exemple :

{
  "venv": {
   "dependencies": "resources/requirements.txt", /* mandatory parameter */
   "folder": "resources/venv" /* mandatory parameter */
  }
}

Dans la même veine, une nouvelle « directive » pour utiliser dynamiquement composer serait un plus :

{
  "composer": {
   "dependencies": "resources/composer.json", /* mandatory parameter */
   "folder": "resources/php-deps" /* mandatory parameter */
  }
}

Qu’en dis-tu ?

Bad

Bonjour
Pour les timeout non c’est pas au démarrage c’est pendant l’utilisation ça arrive une fois toute les 3 a 5min quand on est sur le dashboard. Tout comme le soucis de class qui arrive lui un peu plus souvent mais pas tout le temps, 99% du temps pas de soucis ça marche.

Pour lier les 2 conteneurs et le health check bonne idée je vais l’ajouter demain.

Pour la partie venv et composer c’est sur ma todolist donc ça arrivera un jour mais ça prend du temps. Pour venv je connais pas donc faut déjà que je joue avec. Pour composer là c’est plus l’installation qui est pas en package système et avec toutes les archis jeedom ça complique un peu la tâche.

Merci pour ta réponse,

Tu peux t’inspirer de ce fichier pour le venv et compose.
Pour vérifier l’état des dépendances (des 2), ça se passe ici.

Je viens d’essayer d’installer Debian 12.1 sur ma VMM pour te faire un retour mais sans succes :

  • la premiere image classique j’ai pas le menu graphique pour l’installation mais à la fin une fois le reboot ca reste sur un message clean et rien,
  • et la seconde fois avec la full image DVD je récupére bien le menu graphique pour l’installation mais ensuite au reboot a la fin de l’installation pareil que sur la premiere image j’ai le message clean basique puis rien

J’ai essayé de réinstaller, de mettre en démarrage recovery mais au final ca marche pas. Pourtant j’en ai installé plusieurs de DEbian de 8 à 11. ptt du à la nouvelle version du DSM 7.2 sur syno

Oui ça sent un soucis d’ui côté Synology la, ils ont pas mal de soucis là dessus

oui tu as raison, apres un tour sur les forum synology jai vu que c’était un pb de drivers graphique, jeedom est entrain de s’installer tranquillement

UP : ca bloque lors de l’installation de Jeedom à la phase 7 donc avant la page blanche sur la partie MariaDB, j’ai essayé plusieurs dois sans succès


---------------------------------------------------------------------
Starting step 7 - mariadb customization
● mariadb.service - MariaDB 10.11.3 database server
     Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; preset: enabled)
    Drop-In: /usr/lib/systemd/system/mariadb.service.d
             └─override.conf
     Active: activating (auto-restart) (Result: exit-code) since Tue 2023-07-25 15:14:49 CEST; 77ms ago
       Docs: man:mariadbd(8)
             https://mariadb.com/kb/en/library/systemd/
    Process: 5452 ExecStartPre=/usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld (code=exited, status=0/SUCCESS)
    Process: 5453 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
    Process: 5455 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= ||   VAR=`cd /usr/bin/..; /usr/bin/galera_recovery`; [ $? -eq 0 ]   && systemctl set-environment _WSREP_START_POSITION=$VAR || >
    Process: 5553 ExecStart=/usr/sbin/mariadbd $MYSQLD_OPTS $_WSREP_NEW_CLUSTER $_WSREP_START_POSITION (code=exited, status=1/FAILURE)
   Main PID: 5553 (code=exited, status=1/FAILURE)
     Status: "MariaDB server is down"

une idée ?

Si je tappe http://IP-jeedom/install/setup.php j’ai droit à la page de connexion formulaire à la BDD

Bonjour,
Ca ressemble au bug que j’ai quand on supprime les ib_log file de la db (c’est nouveau d’ailleurs ce soucis dans les derniere version de mariadb avant ca le gené pas). Mais normalement je ne le fais plus, je viens de regarder dans tous le code de jeedom et ya plus ce type de suppression.

Tu as pas plus d’info ailleurs sur le soucis ?

Non cest tout ce que me donne les logs du script d’installation. Peux ton contourner cela ? Je suis étonné que je sois le seul a avoir eu ca sur l’installation de mariadb sur debian12

Que puis je te donner comme log ?

Non mais la le soucis est pas niveau jeedom mais niveau mariadb, le script d’installation ne donnera rien c’est pas lui le soucis.

La c’est vraiment un truc interne mariadb donc faudrait regarder les logs de mariadb, peut etre /var/log/mysql/error.log ou /var/log/mariadb/error.log. Mais pour avoir eu le soucis en docker j’ai jamais trouvé de log qui indique d’ou vient le probleme…

ils sont vides ?
j’ai essayé ca

root@jeedom12:/var/log# journalctl -u mariadb.service -n 40
juil. 25 16:58:00 jeedom12 systemd[1]: Starting mariadb.service - MariaDB 10.11.3 database server...
juil. 25 16:58:00 jeedom12 mariadbd[30101]: 2023-07-25 16:58:00 0 [Note] Starting MariaDB 10.11.3-MariaDB-1 source revision  as process 30101
juil. 25 16:58:01 jeedom12 mariadbd[30101]: 2023-07-25 16:58:01 0 [Note] InnoDB: Compressed tables use zlib 1.2.13
juil. 25 16:58:01 jeedom12 mariadbd[30101]: 2023-07-25 16:58:01 0 [Note] InnoDB: Number of transaction pools: 1
juil. 25 16:58:01 jeedom12 mariadbd[30101]: 2023-07-25 16:58:01 0 [Note] InnoDB: Using crc32 + pclmulqdq instructions
juil. 25 16:58:01 jeedom12 mariadbd[30101]: 2023-07-25 16:58:01 0 [Note] InnoDB: Using liburing
juil. 25 16:58:01 jeedom12 mariadbd[30101]: 2023-07-25 16:58:01 0 [Note] InnoDB: Initializing buffer pool, total size = 128.000MiB, chunk size = 2.000MiB
juil. 25 16:58:01 jeedom12 mariadbd[30101]: 2023-07-25 16:58:01 0 [Note] InnoDB: Completed initialization of buffer pool
juil. 25 16:58:01 jeedom12 mariadbd[30101]: 2023-07-25 16:58:01 0 [ERROR] InnoDB: File ./ib_logfile0 was not found
juil. 25 16:58:01 jeedom12 mariadbd[30101]: 2023-07-25 16:58:01 0 [ERROR] InnoDB: Plugin initialization aborted with error Generic error
juil. 25 16:58:01 jeedom12 mariadbd[30101]: 2023-07-25 16:58:01 0 [Note] InnoDB: Starting shutdown...
juil. 25 16:58:01 jeedom12 mariadbd[30101]: 2023-07-25 16:58:01 0 [ERROR] Plugin 'InnoDB' init function returned error.
juil. 25 16:58:01 jeedom12 mariadbd[30101]: 2023-07-25 16:58:01 0 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
juil. 25 16:58:01 jeedom12 mariadbd[30101]: 2023-07-25 16:58:01 0 [Note] Plugin 'FEEDBACK' is disabled.
juil. 25 16:58:01 jeedom12 mariadbd[30101]: 2023-07-25 16:58:01 0 [ERROR] Unknown/unsupported storage engine: InnoDB
juil. 25 16:58:01 jeedom12 mariadbd[30101]: 2023-07-25 16:58:01 0 [ERROR] Aborting
juil. 25 16:58:01 jeedom12 systemd[1]: mariadb.service: Main process exited, code=exited, status=1/FAILURE
juil. 25 16:58:01 jeedom12 systemd[1]: mariadb.service: Failed with result 'exit-code'.
juil. 25 16:58:01 jeedom12 systemd[1]: Failed to start mariadb.service - MariaDB 10.11.3 database server.
juil. 25 16:58:12 jeedom12 systemd[1]: mariadb.service: Scheduled restart job, restart counter is at 149.
juil. 25 16:58:12 jeedom12 systemd[1]: Stopped mariadb.service - MariaDB 10.11.3 database server.
juil. 25 16:58:12 jeedom12 systemd[1]: Starting mariadb.service - MariaDB 10.11.3 database server...
juil. 25 16:58:12 jeedom12 mariadbd[30128]: 2023-07-25 16:58:12 0 [Note] Starting MariaDB 10.11.3-MariaDB-1 source revision  as process 30128
juil. 25 16:58:12 jeedom12 mariadbd[30128]: 2023-07-25 16:58:12 0 [Note] InnoDB: Compressed tables use zlib 1.2.13
juil. 25 16:58:12 jeedom12 mariadbd[30128]: 2023-07-25 16:58:12 0 [Note] InnoDB: Number of transaction pools: 1
juil. 25 16:58:12 jeedom12 mariadbd[30128]: 2023-07-25 16:58:12 0 [Note] InnoDB: Using crc32 + pclmulqdq instructions
juil. 25 16:58:12 jeedom12 mariadbd[30128]: 2023-07-25 16:58:12 0 [Note] InnoDB: Using liburing
juil. 25 16:58:12 jeedom12 mariadbd[30128]: 2023-07-25 16:58:12 0 [Note] InnoDB: Initializing buffer pool, total size = 128.000MiB, chunk size = 2.000MiB
juil. 25 16:58:12 jeedom12 mariadbd[30128]: 2023-07-25 16:58:12 0 [Note] InnoDB: Completed initialization of buffer pool
juil. 25 16:58:12 jeedom12 mariadbd[30128]: 2023-07-25 16:58:12 0 [ERROR] InnoDB: File ./ib_logfile0 was not found
juil. 25 16:58:12 jeedom12 mariadbd[30128]: 2023-07-25 16:58:12 0 [ERROR] InnoDB: Plugin initialization aborted with error Generic error
juil. 25 16:58:12 jeedom12 mariadbd[30128]: 2023-07-25 16:58:12 0 [Note] InnoDB: Starting shutdown...
juil. 25 16:58:12 jeedom12 mariadbd[30128]: 2023-07-25 16:58:12 0 [ERROR] Plugin 'InnoDB' init function returned error.
juil. 25 16:58:12 jeedom12 mariadbd[30128]: 2023-07-25 16:58:12 0 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
juil. 25 16:58:12 jeedom12 mariadbd[30128]: 2023-07-25 16:58:12 0 [Note] Plugin 'FEEDBACK' is disabled.
juil. 25 16:58:13 jeedom12 mariadbd[30128]: 2023-07-25 16:58:13 0 [ERROR] Unknown/unsupported storage engine: InnoDB
juil. 25 16:58:13 jeedom12 mariadbd[30128]: 2023-07-25 16:58:13 0 [ERROR] Aborting
juil. 25 16:58:13 jeedom12 systemd[1]: mariadb.service: Main process exited, code=exited, status=1/FAILURE
juil. 25 16:58:13 jeedom12 systemd[1]: mariadb.service: Failed with result 'exit-code'.
juil. 25 16:58:13 jeedom12 systemd[1]: Failed to start mariadb.service - MariaDB 10.11.3 database server.

Puis


root@jeedom12:/var/log# systemctl status mariadb.service
● mariadb.service - MariaDB 10.11.3 database server
     Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; preset: enabled)
    Drop-In: /usr/lib/systemd/system/mariadb.service.d
             └─override.conf
     Active: activating (auto-restart) (Result: exit-code) since Tue 2023-07-25 16:59:46 CEST; 9s ago
       Docs: man:mariadbd(8)
             https://mariadb.com/kb/en/library/systemd/
    Process: 30254 ExecStartPre=/usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld (code=exited, status=0/SUCCESS)
    Process: 30255 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
    Process: 30257 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= ||   VAR=`cd /usr/bin/..; /usr/bin/galera_recovery`; [ $? -eq 0 ]   && systemctl set-environment _WSREP_START_POSITION=$VAR || exit 1 (code=exited, status=0/SUCCESS)
    Process: 30265 ExecStart=/usr/sbin/mariadbd $MYSQLD_OPTS $_WSREP_NEW_CLUSTER $_WSREP_START_POSITION (code=exited, status=1/FAILURE)
   Main PID: 30265 (code=exited, status=1/FAILURE)
     Status: "MariaDB server is down"
        CPU: 289ms

juil. 25 16:59:46 jeedom12 systemd[1]: mariadb.service: Main process exited, code=exited, status=1/FAILURE
juil. 25 16:59:46 jeedom12 systemd[1]: mariadb.service: Failed with result 'exit-code'.
juil. 25 16:59:46 jeedom12 systemd[1]: Failed to start mariadb.service - MariaDB 10.11.3 database server.

Je peux faire quoi a ton avis ?

C’est bien ca la suppression des ib_file par contre je sais d’ou ca vient tu as utilisé quel script d’installation ? La la seule solution c’est de refaire une vm.

j’ai utilisé le script classique :

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