erplibre/script/install/install_dev.sh
Mathieu Benoit 70d9ad456c [ADD] install: mise as Python provider, pyenv as fallback
mise lays down a precompiled CPython where pyenv builds one: seconds
against one to three minutes, with no -dev package at all. The choice
lives in EL_PYTHON_PROVIDER -- auto, mise or pyenv -- and in a single
file, lib_python_provider.sh. The rest of the repository only knows venv
paths and needs to know none of this.

In auto mode an ALREADY installed interpreter wins, whichever provider put
it there. mise is never installed on its own, "curl | sh" commits too much
for a script to decide -- make install_mise carries that decision.
MISE_PYTHON_COMPILE=false forbids it from quietly compiling: without that
guard it would fall back to pyenv's own engine, giving us the slowness
without the tooling. That is also what stopped gcc from collapsing while
building CPython on a low-memory s390x guest, for nothing.

One real bug falls along the way: a failed venv did not stop the install,
which then went on and failed further down, far from the cause.

--- FR ---

mise pose un CPython précompilé là où pyenv en compile un : des secondes
contre une à trois minutes, et aucun paquet -dev. Le choix vit dans
EL_PYTHON_PROVIDER — auto, mise ou pyenv — et dans un seul fichier,
lib_python_provider.sh. Le reste du dépôt ne connaît que des chemins de
venv et n'a rien à savoir de tout cela.

En mode auto, un interpréteur DÉJÀ posé l'emporte, quel qu'en soit le
fournisseur. mise n'est jamais installé de lui-même, « curl | sh » engage
trop pour qu'un script en décide — make install_mise porte cette décision.
MISE_PYTHON_COMPILE=false lui interdit de compiler en silence : sans ce
garde, il retomberait sur le moteur de pyenv, et nous aurions sa lenteur
sans son outillage. C'est aussi ce qui a évité que gcc s'écroule en
bâtissant CPython sur une VM s390x à faible mémoire, inutilement.

Un vrai défaut tombe au passage : un venv raté n'arrêtait pas
l'installation, qui continuait et échouait plus loin, loin de la cause.

Assisted-by: Claude Opus 5
2026-08-16 23:33:49 -04:00

64 lines
3.3 KiB
Bash
Executable file

#!/usr/bin/env bash
# Le code de retour du script de distribution DOIT remonter : il est aujourd'hui
# la derniere commande executee, donc propage par accident. « set -e » le rend
# explicite, et update_env_version.py:818 s'en sert pour arreter l'installation
# au lieu d'enchainer sur un systeme sans compilateur.
set -e
# « $OSTYPE » ne decrit PAS le systeme : bash le fige au triplet avec lequel il
# a ete compile. openSUSE batit bash en « x86_64-suse-linux » et le renseigne
# donc a « linux », la ou Debian et Fedora donnent « linux-gnu ». Le test
# echouait, sans else, donc sans une ligne de sortie ni code d'erreur : AUCUNE
# dependance systeme n'etait posee, install_system() rendait 0, et
# l'installation s'arretait une heure plus tard sur « [Errno 2] ... 'cc' ».
# « uname -s » interroge le noyau et ne depend pas de la facon dont bash a ete
# bati. install_dev_extra_ubuntu.sh garde OSTYPE : il ne vise qu'Ubuntu.
OS_KERNEL="$(uname -s)"
if [[ "${OS_KERNEL}" == "Linux" ]]; then
source /etc/os-release
if [[ "${ID}" == "ubuntu" ]]; then
# 20.04 et 22.04 retirees : leur chaine d'outils ne suffit plus a ERPLibre
# (pikepdf exige qpdf >= 12.2, en C++20, quand focal livre GCC 9). Les
# versions intermediaires EOL (22.10, 23.04, 23.10, 25.04) partent avec.
if [[ "${VERSION_ID}" == "24.04" || "${VERSION_ID}" == "25.10" || "${VERSION_ID}" == "26.04" ]]; then
echo "\n---- linux-gnu installation process started ----"
./script/install/install_debian_dependency.sh
else
echo "Your version is not supported, only support 24.04, 25.10, 26.04 : ${VERSION_ID}"
exit 1
fi
elif [[ "${ID}" == "linuxmint" ]]; then
if [[ "${VERSION_ID}" == "22.3" ]]; then
echo "\n---- linux-gnu installation process started ----"
./script/install/install_debian_dependency.sh
else
echo "Your version is not supported, only support 22.3 : ${VERSION_ID}"
fi
elif [[ "${ID}" == "debian" ]]; then
./script/install/install_debian_dependency.sh
elif [[ "${ID}" == "arch" ]]; then
./script/install/install_arch_linux.sh
elif [[ "${ID}" == opensuse* || "${ID_LIKE}" == *"suse"* ]]; then
# openSUSE Tumbleweed / Leap, SLES : gestionnaire zypper.
echo "\n---- SUSE installation process started ----"
./script/install/install_suse_dependency.sh
elif [[ "${ID}" == "fedora" || "${ID_LIKE}" == *"fedora"* || "${ID_LIKE}" == *"rhel"* ]]; then
# AlmaLinux et Rocky declarent ID_LIKE="rhel centos fedora" : elles passent
# donc par ce meme script, qui aiguille dnf.
echo "\n---- Fedora/RHEL installation process started ----"
./script/install/install_fedora_dependency.sh
else
./script/install/install_debian_dependency.sh
echo "Your Linux system is not supported, only support Ubuntu 24.04, 25.10, 26.04, Linux Mint 22.3, Debian, Fedora, AlmaLinux, Rocky Linux, openSUSE, Arch."
fi
elif [[ "${OS_KERNEL}" == "Darwin" ]]; then
echo "\n---- Darwin installation process started ----"
./script/install/install_OSX_dependency.sh
else
# Un aiguillage muet qui rend 0 est le pire des cas : l'installation continue
# sur un systeme depourvu de tout. Meme sans savoir quoi poser, on le dit et
# on arrete.
echo "Systeme non reconnu (uname -s = ${OS_KERNEL}) : aucune dependance installee."
exit 1
fi