69 lines
2.5 KiB
Bash
Executable File
69 lines
2.5 KiB
Bash
Executable File
#!/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
|