#!/bin/sh set -eu SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd) REPO_ROOT=$(dirname -- "$SCRIPT_DIR") PYTHON_BIN="${PYTHON_BIN:-python3}" PYTHON_SCRIPT="${1:-$SCRIPT_DIR/main.py}" REQUIREMENTS_FILE="$REPO_ROOT/requirements.txt" if [ ! -f "$PYTHON_SCRIPT" ]; then echo "Python script not found: $PYTHON_SCRIPT" >&2 exit 1 fi # 1. On définit proprement le PYTHONPATH pour tout le script export PYTHONPATH="$REPO_ROOT" cd "$SCRIPT_DIR" # 2. On lance Docker en arrière-plan echo "Démarrage des conteneurs Docker..." docker compose pull docker compose up -d --remove-orphans # 3. Installation des dépendances (sans '--user' si on est déjà root sous systemd) if [ -f "$REQUIREMENTS_FILE" ]; then echo "Vérification des dépendances Python..." if [ "$(id -u)" -eq 0 ]; then "$PYTHON_BIN" -m pip install -r "$REQUIREMENTS_FILE" else "$PYTHON_BIN" -m pip install --user -r "$REQUIREMENTS_FILE" fi fi # 4. Sécurité anti-conflit : On vérifie si Docker n'a pas verrouillé le port USB de la LA66 PORT="/dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0" if [ -e "$PORT" ]; then echo "Vérification de la disponibilité du port série..." # Si le port est occupé, on force sa libération en tuant le processus docker/screen persistant if lsof "$PORT" >/dev/null 2>&1; then echo "Le port série est occupé ! Libération en cours..." fuser -k "$PORT" || true sleep 1 fi fi # 5. Lancement propre du script Python echo "Launching Python script: $PYTHON_SCRIPT" cd "$REPO_ROOT" exec "$PYTHON_BIN" "$PYTHON_SCRIPT"