erplibre/.claude/skills/erplibre-deployment/SKILL.md
Mathieu Benoit 7a10f268df [FIX] démarrage : choisir un interpréteur capable de lire TODO
install.sh et make lançaient todo.py par son hashbang, donc par le python3 du
PATH, sans rien garantir de sa version : une syntaxe plus récente l'arrête en
SyntaxError au chargement, et le poste hors d'âge perd tout moyen de lancer
l'installation qui l'en sortirait. L'ordre est désormais le venv d'outillage,
sinon le python3 du PATH s'il suffit, sinon l'installation. TODO lui-même se
relance dans le venv, vérifie version et modules avant ses imports, et propose
l'installation en terminal — ce que « make » sur un clone neuf promet depuis
toujours sans le tenir.
Vérifié : venv à jour, venv périmé, systèmes en 3.10, 3.14 et 3.15 vont chacun
où il faut ; un import du module ne relance rien et lève comme avant.

--- EN ---

install.sh and make ran todo.py through its hashbang, so through the python3 of
the PATH, with no guarantee about its version: a newer syntax stops it with a
SyntaxError at load, and the ageing machine loses every way to start the
install that would rescue it. The order is now the tools venv, else the python3
of the PATH when it suffices, else the install. TODO itself relaunches in the
venv, checks version and modules before its imports, and offers the install in
a terminal — what "make" on a fresh clone has always promised without
keeping.
Checked: fresh venv, stale venv, systems on 3.10, 3.14 and 3.15 each go where
they should; importing the module relaunches nothing and raises as before.

Assisted-by: Claude Opus 5
2026-09-24 13:56:57 -04:00

3.8 KiB

name description
erplibre-deployment Déploiement ERPLibre : Docker, systemd, nginx, SSL, DNS, plateformes supportées, et le choix de l'interpréteur Python (EL_PYTHON_PROVIDER) comme du gestionnaire de paquets (EL_PIP_PROVIDER). À charger pour déployer, installer ou changer de fournisseur Python.
  • Docker : docker-compose.yml (PostgreSQL 18 + PostGIS 3.6)
  • Systemd : script/systemd/ pour les services
  • Nginx : script/nginx/ pour le reverse proxy
  • SSL : Certbot pour les certificats
  • DNS : script/deployment/update_dns_cloudflare.py
  • VPN : script/vpn/ — cinq pilotes (L2TP/IPsec PSK, WireGuard, OpenVPN, OpenConnect, sshuttle), profils en JSON et secrets dans un coffre KeePassXC. Mode d'emploi : script/vpn/README.md.

Plateformes supportées : Ubuntu 24.04 / 25.10 / 26.04, Linux Mint 22.3, Debian 12, AlmaLinux 9+, Rocky Linux 9+, openSUSE Leap 16 et Tumbleweed, Arch Linux, macOS (mise ou pyenv), Windows (WSL/Docker).

Ubuntu 20.04 et 22.04 sont abandonnées : pikepdf exige qpdf >= 12.2, compilé en C++20, quand focal livre GCC 9.

Interpréteur Python

EL_PYTHON_PROVIDER (dans env_var.sh) vaut auto, mise ou pyenv. auto reprend un interpréteur DÉJÀ posé, quel que soit le fournisseur ; sinon il préfère mise, qui pose un CPython précompilé, et retombe sur pyenv, qui le compile.

Un seul fichier décide : script/install/lib_python_provider.sh. mise n'est jamais installé automatiquement — make install_mise porte cette décision. Pas de binaire mise pour s390x à ce jour : cette architecture reste sur pyenv.

Le Python de l'outillage

conf/python-erplibre-version (3.14.7) donne l'interpréteur de .venv.erplibre, le venv d'outillage, distinct du venv Odoo (3.12.10 pour Odoo 18.0). C'est la seule version que script/ vise : là où une distribution ne la porte pas, pyenv la compile.

Le PATCH ne borne que le venv d'Odoo, dont le pyproject exige >=3.12.10,<3.13. Pour l'outillage, la majeure.mineure suffit : exiger le patch écarterait le Python d'une distribution d'un cran en retard — NixOS 25.11 livre 3.14.2 — et ferait compiler CPython pour rien.

install_erplibre.sh passe par install_venv.sh, donc par EL_PYTHON_PROVIDER. Un venv dont bin/python n'est pas compatible (même majeure.mineure, patch au moins égal) est DÉTRUIT puis rebâti : ce qui y avait été posé à la main part avec lui. Le venv d'Odoo, lui, n'est rebâti que s'il est HORS SERVICE : une simple différence de version le laisse en place, parce que le rebâtir refait une installation Poetry entière. Un répertoire sans pyvenv.cfg n'est jamais effacé.

make / make todo hors venv : TODO se relance dans .venv.erplibre ; si le venv manque, il propose install_erplibre.sh en terminal, ou nomme la commande.

Le hook pre-commit relaie script/analyse/check_python_version.py : il signale le source qui ne parse pas sous cette version, sans bloquer, et dit quand aucun interpréteur de cette version n'était là pour vérifier.

L'image Docker de production bâtit .venv.erplibre sur le Python d'Odoo de son image de base, et s'arrête si ce Python ne sait pas lire script/.

Paquets Python

EL_PIP_PROVIDER (dans env_var.sh) vaut auto, uv ou pip. auto prend uv s'il est présent et si le venv visé est en Python ≥ 3.8, sinon pip ; un échec d'uv retombe sur pip. Un seul fichier décide : script/install/lib_pip_provider.sh. uv n'est jamais installé automatiquement — make install_uv porte cette décision.

Portée réelle : le venv d'outils et l'amorçage de Poetry. poetry install n'est pas concerné — uv ne lit pas poetry.lock — et c'est pourtant l'étape qui domine. Sur s390x le gain est quasi nul : une trentaine de paquets sans roue se compilent, et uv n'enlève pas une seconde de gcc.