2026-03-25 00:04:20 +01:00
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
|
|
cat << 'EOF'
|
|
|
|
|
|
|
|
|
|
_______ ________ ___ ___ _______ ________
|
|
|
|
|
|\ ___ \ |\ __ \|\ \|\ \|\ ___ \ |\ ____\
|
|
|
|
|
\ \ __/|\ \ \|\ \ \ \\\ \ \ __/|\ \ \___|
|
|
|
|
|
\ \ \_|/_\ \ ____\ \ __ \ \ \_|/_\ \ \
|
|
|
|
|
\ \ \_|\ \ \ \___|\ \ \ \ \ \ \_|\ \ \ \____
|
|
|
|
|
\ \_______\ \__\ \ \__\ \__\ \_______\ \_______\
|
|
|
|
|
\|_______|\|__| \|__|\|__|\|_______|\|_______|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
EOF
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# ==============================================
|
|
|
|
|
# Script de configuration automatique Raspberry Pi - Projet IoT
|
|
|
|
|
# ==============================================
|
|
|
|
|
|
|
|
|
|
set -euo pipefail
|
|
|
|
|
|
|
|
|
|
SEPARATOR="=============================================="
|
|
|
|
|
|
|
|
|
|
print_step() {
|
|
|
|
|
echo ""
|
|
|
|
|
echo "$SEPARATOR"
|
|
|
|
|
echo " $1"
|
|
|
|
|
echo "$SEPARATOR"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Vérification des droits sudo
|
|
|
|
|
if [ "$EUID" -ne 0 ]; then
|
2026-03-25 00:10:32 +01:00
|
|
|
echo " Ce script doit être exécuté avec sudo"
|
2026-03-25 00:04:20 +01:00
|
|
|
echo " Utilisation : sudo ./main.sh"
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
|
2026-03-25 00:10:32 +01:00
|
|
|
print_step " Lancement du programme de configuration IoT"
|
2026-03-25 00:05:49 +01:00
|
|
|
print_step " Lancement du programme de configuration IoT"
|
2026-03-25 00:04:20 +01:00
|
|
|
sleep 1
|
|
|
|
|
|
|
|
|
|
# ----------------------------
|
|
|
|
|
# 1. Mise à jour du système
|
|
|
|
|
# ----------------------------
|
2026-03-25 00:05:49 +01:00
|
|
|
print_step " Mise à jour du système (apt update & upgrade)"
|
2026-03-25 00:10:32 +01:00
|
|
|
print_step " Mise à jour du système (apt update & upgrade)"
|
2026-03-25 00:04:20 +01:00
|
|
|
if ! apt update && apt upgrade -y; then
|
2026-03-25 00:10:32 +01:00
|
|
|
echo " Erreur lors de la mise à jour du système"
|
2026-03-25 00:04:20 +01:00
|
|
|
exit 1
|
|
|
|
|
fi
|
2026-03-25 00:10:32 +01:00
|
|
|
echo "Système mis à jour"
|
2026-03-25 00:04:20 +01:00
|
|
|
sleep 1
|
|
|
|
|
|
|
|
|
|
# ----------------------------
|
|
|
|
|
# 2. Installation de Python
|
|
|
|
|
# ----------------------------
|
2026-03-25 00:10:32 +01:00
|
|
|
print_step "Vérification / Installation de Python3"
|
2026-03-25 00:04:20 +01:00
|
|
|
if ! apt install python3 python3-pip python3-venv -y; then
|
2026-03-25 00:10:32 +01:00
|
|
|
echo "Erreur lors de l'installation de Python3"
|
2026-03-25 00:04:20 +01:00
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
PYTHON_VERSION=$(python3 --version 2>&1)
|
2026-03-25 00:05:49 +01:00
|
|
|
echo " $PYTHON_VERSION installé"
|
2026-03-25 00:10:32 +01:00
|
|
|
echo " $PYTHON_VERSION installé"
|
2026-03-25 00:04:20 +01:00
|
|
|
sleep 1
|
|
|
|
|
|
|
|
|
|
# ----------------------------
|
|
|
|
|
# 3. Recherche des venvs existants
|
|
|
|
|
# ----------------------------
|
2026-03-25 00:10:32 +01:00
|
|
|
print_step "Recherche des environnements virtuels (venv) existants..."
|
2026-03-25 00:04:20 +01:00
|
|
|
|
|
|
|
|
SEARCH_DIRS=("$(pwd)")
|
|
|
|
|
VENV_LIST=()
|
|
|
|
|
|
|
|
|
|
for dir in "${SEARCH_DIRS[@]}"; do
|
|
|
|
|
if [ -d "$dir" ]; then
|
|
|
|
|
# Un venv valide contient bin/activate et bin/python
|
|
|
|
|
while IFS= read -r -d '' activate_path; do
|
|
|
|
|
venv_dir=$(dirname "$(dirname "$activate_path")")
|
|
|
|
|
if [ -f "$venv_dir/bin/python" ]; then
|
|
|
|
|
VENV_LIST+=("$venv_dir")
|
|
|
|
|
fi
|
|
|
|
|
done < <(find "$dir" -name "activate" -path "*/bin/activate" 2>/dev/null -print0)
|
|
|
|
|
fi
|
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
echo ""
|
|
|
|
|
if [ ${#VENV_LIST[@]} -eq 0 ]; then
|
2026-03-25 00:10:32 +01:00
|
|
|
echo " Aucun environnement virtuel trouvé dans : $(pwd)"
|
2026-03-25 00:04:20 +01:00
|
|
|
else
|
2026-03-25 00:10:32 +01:00
|
|
|
echo "${#VENV_LIST[@]} environnement(s) virtuel(s) trouvé(s) :"
|
2026-03-25 00:04:20 +01:00
|
|
|
for i in "${!VENV_LIST[@]}"; do
|
|
|
|
|
venv="${VENV_LIST[$i]}"
|
|
|
|
|
python_ver=$("$venv/bin/python" --version 2>&1)
|
|
|
|
|
echo ""
|
|
|
|
|
echo " [$((i+1))] Chemin : $venv"
|
|
|
|
|
echo " Python : $python_ver"
|
|
|
|
|
echo " ▶ Activer : source $venv/bin/activate"
|
|
|
|
|
done
|
|
|
|
|
SELECTED_VENV="${VENV_LIST[0]}"
|
|
|
|
|
echo "$SELECTED_VENV" > ./.venv_path
|
|
|
|
|
echo ""
|
2026-03-25 00:10:32 +01:00
|
|
|
echo "Venv sélectionné et enregistré : $SELECTED_VENV"
|
2026-03-25 00:04:20 +01:00
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# ----------------------------
|
|
|
|
|
# 4. Créer un nouveau venv ?
|
|
|
|
|
# ----------------------------
|
2026-03-25 00:14:27 +01:00
|
|
|
print_step " Créer un nouvel environnement virtuel ?"
|
2026-03-25 00:04:20 +01:00
|
|
|
echo "Voulez-vous créer un nouveau venv ? (o/n)"
|
|
|
|
|
read -r CREATE_VENV
|
|
|
|
|
|
|
|
|
|
if [[ "$CREATE_VENV" =~ ^[oO]$ ]]; then
|
|
|
|
|
VENV_PATH="$SEARCH_DIRS/venv"
|
|
|
|
|
if python3 -m venv $SEARCH_DIRS/venv; then
|
|
|
|
|
echo ""
|
2026-03-25 00:10:32 +01:00
|
|
|
echo "Venv créé avec succès !"
|
2026-03-25 00:04:20 +01:00
|
|
|
echo " Chemin : $VENV_PATH"
|
|
|
|
|
echo " ▶ Activer : source $VENV_PATH/bin/activate"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
echo "$VENV_PATH" > ./.venv_path
|
2026-03-25 00:10:32 +01:00
|
|
|
echo "Chemin enregistré dans .venv_path"
|
2026-03-25 00:04:20 +01:00
|
|
|
|
2026-03-25 00:14:27 +01:00
|
|
|
|
2026-03-25 00:04:20 +01:00
|
|
|
"$VENV_PATH/bin/pip" install --upgrade pip
|
|
|
|
|
|
2026-03-25 00:14:27 +01:00
|
|
|
|
2026-03-25 00:04:20 +01:00
|
|
|
if [ -f "./requirements.txt" ]; then
|
2026-03-25 00:10:32 +01:00
|
|
|
echo "Installation des dépendances depuis requirements.txt..."
|
2026-03-25 00:04:20 +01:00
|
|
|
"$VENV_PATH/bin/pip" install -r ./requirements.txt
|
2026-03-25 00:05:49 +01:00
|
|
|
echo " Dépendances installées"
|
2026-03-25 00:10:32 +01:00
|
|
|
echo " Dépendances installées"
|
2026-03-25 00:04:20 +01:00
|
|
|
else
|
2026-03-25 00:05:49 +01:00
|
|
|
echo " Aucun requirements.txt trouvé, installation des dépendances ignorée"
|
2026-03-25 00:10:32 +01:00
|
|
|
echo " Aucun requirements.txt trouvé, installation des dépendances ignorée"
|
2026-03-25 00:04:20 +01:00
|
|
|
fi
|
|
|
|
|
else
|
2026-03-25 00:10:32 +01:00
|
|
|
echo " Erreur lors de la création du venv à : $VENV_PATH"
|
2026-03-25 00:05:49 +01:00
|
|
|
echo " Erreur lors de la création du venv à : $VENV_PATH"
|
2026-03-25 00:04:20 +01:00
|
|
|
exit 1
|
|
|
|
|
|
|
|
|
|
fi
|
|
|
|
|
else
|
2026-03-25 00:05:49 +01:00
|
|
|
echo " Création ignorée"
|
2026-03-25 00:10:32 +01:00
|
|
|
echo " Création ignorée"
|
2026-03-25 00:04:20 +01:00
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# ----------------------------
|
|
|
|
|
# Fin
|
|
|
|
|
# ----------------------------
|
2026-03-25 00:05:49 +01:00
|
|
|
print_step " Configuration terminée"
|
2026-03-25 00:10:32 +01:00
|
|
|
print_step " Configuration terminée"
|
2026-03-25 00:04:20 +01:00
|
|
|
echo ""
|
|
|
|
|
if [ -f "./.venv_path" ]; then
|
2026-03-25 00:10:32 +01:00
|
|
|
echo "Venv configuré : $(cat ./.venv_path)"
|
2026-03-25 00:04:20 +01:00
|
|
|
echo " Pour l'activer manuellement : source $(cat ./.venv_path)/bin/activate"
|
|
|
|
|
else
|
2026-03-25 00:10:32 +01:00
|
|
|
echo " Aucun venv enregistré — relancez le script et créez un venv"
|
2026-03-25 00:04:20 +01:00
|
|
|
fi
|
|
|
|
|
echo ""
|