[FIX] systemd : lancer run.sh par bash, contre les echecs 203/EXEC
erplibre.service mourait en 3 ms sur openSUSE s390x, « status=203/EXEC », sans jamais entrer dans le script. Ce code ne dit pas que run.sh a echoue : il dit que systemd n'a pas pu l'EXECUTER. Quatre causes le produisent — bit x absent, shebang qui ne resout pas, /home monte noexec, SELinux refusant l'execve (Leap 16 est passe a SELinux). Les distinguer demande un acces a la machine ; les traiter ensemble ne le demande pas. Passe a « /bin/bash run.sh », le fichier n'est plus qu'une donnee lue : noexec et SELinux ne portent que sur l'execve, et le bit x devient sans objet. Mesure : un script en 644 refuse en direct, execute par bash. Les trois generateurs ecrivaient la meme ligne, les trois sont corriges. Le venv n'y est pour rien — odoo_bin.sh l'active deja, et c'est celui d'Odoo, pas celui des outils. --- EN --- erplibre.service died in 3 ms on openSUSE s390x, "status=203/EXEC", never entering the script. That code does not say run.sh failed: it says systemd could not EXECUTE it. Four causes produce it — missing x bit, unresolvable shebang, /home mounted noexec, SELinux denying execve (Leap 16 switched to SELinux). Telling them apart needs access to the machine; handling them together does not. Run as "/bin/bash run.sh", the file is merely data being read: noexec and SELinux only cover execve, and the x bit becomes moot. Measured: a 644 script refused directly, executed fine through bash. All three generators wrote the same line; all three are fixed. The venv is not involved — odoo_bin.sh already activates it, and it is Odoo's, not the tooling one. Assisted-by: Claude Opus 5 (cherry picked from commit 6f8cee84b72fd016fa188d204f280b011594627c)
This commit is contained in:
parent
2b27ad73c8
commit
95d71df204
3 changed files with 18 additions and 3 deletions
|
|
@ -9,6 +9,20 @@ import subprocess
|
|||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
# « ExecStart=/bin/bash …/run.sh » et non le script seul.
|
||||
#
|
||||
# Lancé seul, systemd doit EXÉCUTER le fichier, et l'échoue en « 203/EXEC »
|
||||
# dans quatre cas au moins : bit x absent, shebang qui ne résout pas, /home
|
||||
# monté noexec, SELinux refusant l'execve. Vécu sur openSUSE s390x — le
|
||||
# processus mourait en 3 ms, sans jamais entrer dans le script, ce qui rend le
|
||||
# diagnostic très pénible : aucune sortie, et un code qui ressemble à une
|
||||
# erreur d'application.
|
||||
#
|
||||
# Passé à bash, run.sh n'est plus qu'une DONNÉE lue : les quatre causes
|
||||
# disparaissent ensemble, y compris noexec et SELinux, qui ne portent que sur
|
||||
# l'execve. Rien n'est perdu au passage — le shebang du script désigne déjà
|
||||
# bash. C'est aussi ce que font install_daemon.sh et le générateur de todo.py,
|
||||
# les trois écrivant la même unité.
|
||||
UNIT_TEMPLATE = """[Unit]
|
||||
Description=ERPLibre for {user}
|
||||
Requires=postgresql.service
|
||||
|
|
@ -23,7 +37,8 @@ Group={user}
|
|||
Restart=always
|
||||
RestartSec=5
|
||||
PIDFile={home_erplibre}/.venv.erplibre/service.pid
|
||||
ExecStart={home_erplibre}/run.sh{EXEC_PARAM}
|
||||
# bash explicite : voir install_daemon.py (evite 203/EXEC).
|
||||
ExecStart=/bin/bash {home_erplibre}/run.sh{EXEC_PARAM}
|
||||
WorkingDirectory={home_erplibre}
|
||||
StandardOutput=journal+console
|
||||
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ Group=${EL_USER}
|
|||
Restart=always
|
||||
RestartSec=5
|
||||
PIDFile=${EL_HOME_ERPLIBRE}/.venv.erplibre/service.pid
|
||||
ExecStart=${EL_HOME_ERPLIBRE}/run.sh
|
||||
ExecStart=/bin/bash ${EL_HOME_ERPLIBRE}/run.sh
|
||||
WorkingDirectory=${EL_HOME_ERPLIBRE}
|
||||
StandardOutput=journal+console
|
||||
|
||||
|
|
|
|||
|
|
@ -5421,7 +5421,7 @@ class TODO:
|
|||
"Group=$SVC_GROUP\n"
|
||||
"Restart=always\n"
|
||||
"RestartSec=5\n"
|
||||
"ExecStart=$SVC_DIR/run.sh\n"
|
||||
"ExecStart=/bin/bash $SVC_DIR/run.sh\n"
|
||||
"WorkingDirectory=$SVC_DIR\n"
|
||||
"StandardOutput=journal+console\n"
|
||||
"$SELINUX_LINE\n"
|
||||
|
|
|
|||
Loading…
Reference in a new issue