#!/usr/bin/env bash # Lancement local de la carte LiDAR en une commande (GPU facultatif). # # ./start.sh construit l'image et démarre la carte (port 8973) # ./start.sh stop arrête la carte # ./start.sh logs suit le journal du serveur # ./start.sh process [opts] traitement ponctuel des dalles de input/ # (options passées au pipeline, ex. --file NOM) # # Sans GPU NVIDIA utilisable par Docker, docker-compose.cpu.yml est ajouté # automatiquement (le pipeline tourne alors sur le CPU, plus lentement). set -euo pipefail cd "$(dirname "$0")" # input/ et output/ créés au nom de l'utilisateur : créés par Docker, ils # appartiendraient à root et le conteneur (uid 1000) ne pourrait pas y écrire. mkdir -p input output for d in input output; do if [ ! -w "$d" ]; then echo "Erreur : $d/ n'est pas accessible en écriture (propriétaire : $(stat -c %U "$d"))." >&2 echo "Corrigez avec : sudo chown -R $(id -u):$(id -g) $d" >&2 exit 1 fi done if [ "$(id -u)" != "1000" ]; then echo "Attention : les conteneurs tournent sous l'uid 1000, vous êtes $(id -u) :" >&2 echo "input/ et output/ doivent rester accessibles en écriture à l'uid 1000." >&2 fi # GPU : nvidia-smi présent ET Docker capable de le donner à un conteneur. compose=(docker compose -f docker-compose.yml) if command -v nvidia-smi >/dev/null 2>&1 && nvidia-smi >/dev/null 2>&1 \ && docker run --rm --gpus all --entrypoint true busybox >/dev/null 2>&1; then echo "GPU NVIDIA détecté : traitement accéléré." else echo "Pas de GPU utilisable : traitement sur le CPU (plus lent)." compose+=(-f docker-compose.cpu.yml) fi case "${1:-up}" in up) "${compose[@]}" up -d --build serve echo "Carte : http://localhost:8973/" echo "Journal : ./start.sh logs — arrêt : ./start.sh stop" ;; stop) "${compose[@]}" down ;; logs) "${compose[@]}" logs -f serve ;; process) shift if [ $# -gt 0 ]; then # Des options remplacent la commande par défaut du service : la # reprendre en entier (entrée, sortie, 0,2 m, tous les GPU). "${compose[@]}" run --rm --build process \ python3 -m lidar_pipeline /data/input -o /data/output -r 0.2 -g all "$@" else "${compose[@]}" run --rm --build process fi ;; *) sed -n '2,10p' "$0" | sed 's/^# \{0,1\}//' exit 1 ;; esac