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
81 lines
3.8 KiB
Markdown
81 lines
3.8 KiB
Markdown
---
|
|
name: erplibre-deployment
|
|
description: >-
|
|
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.
|