first commit
This commit is contained in:
@@ -0,0 +1,276 @@
|
||||
#!/bin/bash
|
||||
# =============================================================================
|
||||
# setup-photobooth.sh - Installation et deploiement complet du photomaton
|
||||
# =============================================================================
|
||||
# Usage: bash setup-photobooth.sh
|
||||
# A executer sur un Raspberry Pi 4 fraichement installe
|
||||
# =============================================================================
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
CYAN='\033[0;36m'
|
||||
NC='\033[0m'
|
||||
|
||||
log_info() { echo -e "${GREEN}[INFO]${NC} $1"; }
|
||||
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
|
||||
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
|
||||
log_step() { echo -e "\n${CYAN}=== $1 ===${NC}\n"; }
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
|
||||
REAL_USER="${SUDO_USER:-$(logname 2>/dev/null || whoami)}"
|
||||
USER_HOME=$(eval echo "~$REAL_USER")
|
||||
|
||||
echo "============================================="
|
||||
echo " Installation complete du Photomaton"
|
||||
echo " Raspberry Pi 4 - 2 Go RAM"
|
||||
echo "============================================="
|
||||
echo ""
|
||||
echo " Utilisateur: $REAL_USER"
|
||||
echo " Home: $USER_HOME"
|
||||
echo " Projet: $PROJECT_DIR"
|
||||
echo ""
|
||||
|
||||
# Verifier qu'on est root pour certaines operations
|
||||
NEED_SUDO=false
|
||||
if [ "$EUID" -ne 0 ]; then
|
||||
log_warn "Certaines etapes necessitent sudo. Vous serez peut-etre invite a entrer le mot de passe."
|
||||
NEED_SUDO=true
|
||||
fi
|
||||
|
||||
# ===================================================================
|
||||
# ETAPE 1: Optimisation systeme
|
||||
# ===================================================================
|
||||
log_step "1/7 - Optimisation systeme"
|
||||
|
||||
if [ "$EUID" -eq 0 ]; then
|
||||
bash "$SCRIPT_DIR/optimize-system.sh"
|
||||
else
|
||||
log_warn "Lancez optimize-system.sh separement avec sudo:"
|
||||
echo " sudo bash $SCRIPT_DIR/optimize-system.sh"
|
||||
fi
|
||||
|
||||
# ===================================================================
|
||||
# ETAPE 2: Installation des dependances
|
||||
# ===================================================================
|
||||
log_step "2/7 - Installation des dependances"
|
||||
|
||||
sudo apt-get update -qq
|
||||
sudo apt-get install -y -qq \
|
||||
python3 \
|
||||
python3-pip \
|
||||
python3-venv \
|
||||
python3-picamera2 \
|
||||
libcamera-apps \
|
||||
libcap-dev \
|
||||
curl \
|
||||
unclutter \
|
||||
chromium \
|
||||
git \
|
||||
cups \
|
||||
printer-driver-gutenprint \
|
||||
cups-client
|
||||
|
||||
log_info "Dependances installees"
|
||||
|
||||
# ===================================================================
|
||||
# ETAPE 3: Installation de photobooth-app
|
||||
# ===================================================================
|
||||
log_step "3/7 - Installation de photobooth-app"
|
||||
|
||||
# Creer le dossier de donnees
|
||||
su - "$REAL_USER" -c "mkdir -p $USER_HOME/photobooth-data"
|
||||
|
||||
# Installer photobooth-app via pip (mode utilisateur)
|
||||
su - "$REAL_USER" -c "pip install --user --upgrade photobooth-app" || {
|
||||
log_warn "pip install --user a echoue, essai avec pipx..."
|
||||
su - "$REAL_USER" -c "pip install --user pipx && pipx install photobooth-app" || {
|
||||
log_warn "pipx a echoue, essai avec venv..."
|
||||
su - "$REAL_USER" -c "
|
||||
python3 -m venv $USER_HOME/photobooth-venv
|
||||
$USER_HOME/photobooth-venv/bin/pip install photobooth-app
|
||||
"
|
||||
log_info "photobooth-app installe dans un venv: $USER_HOME/photobooth-venv"
|
||||
log_warn "Adapter le chemin dans le service systemd (ExecStart)"
|
||||
}
|
||||
}
|
||||
|
||||
log_info "photobooth-app installe"
|
||||
|
||||
# ===================================================================
|
||||
# ETAPE 4: Configuration du service systemd
|
||||
# ===================================================================
|
||||
log_step "4/7 - Configuration des services systemd"
|
||||
|
||||
# Service photobooth-app (service utilisateur)
|
||||
su - "$REAL_USER" -c "mkdir -p $USER_HOME/.config/systemd/user/"
|
||||
|
||||
# Copier le service utilisateur
|
||||
cp "$PROJECT_DIR/systemd/photobooth-app.service" \
|
||||
"$USER_HOME/.config/systemd/user/photobooth-app.service"
|
||||
chown "$REAL_USER:$REAL_USER" "$USER_HOME/.config/systemd/user/photobooth-app.service"
|
||||
|
||||
# Activer le linger pour que les services utilisateur demarrent au boot
|
||||
loginctl enable-linger "$REAL_USER" 2>/dev/null || true
|
||||
|
||||
# Activer le service
|
||||
su - "$REAL_USER" -c "
|
||||
systemctl --user daemon-reload
|
||||
systemctl --user enable photobooth-app
|
||||
"
|
||||
|
||||
log_info "Service photobooth-app configure"
|
||||
|
||||
# Services systeme (watchdog + maintenance)
|
||||
# Adapter les chemins dans les services
|
||||
SCRIPTS_PATH="$PROJECT_DIR/scripts"
|
||||
|
||||
sed "s|/home/pi/photomaton/scripts|$SCRIPTS_PATH|g" \
|
||||
"$PROJECT_DIR/systemd/photobooth-watchdog.service" \
|
||||
> /etc/systemd/system/photobooth-watchdog.service
|
||||
|
||||
cp "$PROJECT_DIR/systemd/photobooth-watchdog.timer" \
|
||||
/etc/systemd/system/photobooth-watchdog.timer
|
||||
|
||||
sed "s|/home/pi/photomaton/scripts|$SCRIPTS_PATH|g" \
|
||||
"$PROJECT_DIR/systemd/photobooth-maintenance.service" \
|
||||
> /etc/systemd/system/photobooth-maintenance.service
|
||||
|
||||
cp "$PROJECT_DIR/systemd/photobooth-maintenance.timer" \
|
||||
/etc/systemd/system/photobooth-maintenance.timer
|
||||
|
||||
# Rendre les scripts executables
|
||||
chmod +x "$SCRIPTS_PATH"/*.sh
|
||||
|
||||
systemctl daemon-reload
|
||||
systemctl enable photobooth-watchdog.timer
|
||||
systemctl enable photobooth-maintenance.timer
|
||||
|
||||
log_info "Watchdog et maintenance configures"
|
||||
|
||||
# ===================================================================
|
||||
# ETAPE 5: Configuration de l'imprimante
|
||||
# ===================================================================
|
||||
log_step "5/7 - Configuration imprimante"
|
||||
|
||||
if [ "$EUID" -eq 0 ]; then
|
||||
bash "$SCRIPT_DIR/setup-printer.sh"
|
||||
else
|
||||
log_warn "Lancez setup-printer.sh separement avec sudo:"
|
||||
echo " sudo bash $SCRIPT_DIR/setup-printer.sh"
|
||||
fi
|
||||
|
||||
# ===================================================================
|
||||
# ETAPE 6: Configuration de l'auto-login et kiosk
|
||||
# ===================================================================
|
||||
log_step "6/7 - Configuration auto-login et mode kiosk"
|
||||
|
||||
# Activer l'auto-login en mode graphique
|
||||
# (depand de la config actuelle, peut necessiter raspi-config)
|
||||
if command -v raspi-config &>/dev/null; then
|
||||
# Mode desktop auto-login
|
||||
raspi-config nonint do_boot_behaviour B4 2>/dev/null || true
|
||||
log_info "Auto-login graphique configure via raspi-config"
|
||||
fi
|
||||
|
||||
# Creer le fichier .desktop pour le kiosk Chromium
|
||||
# Sur RPi OS Trixie (Wayland), le fichier va dans ~/Desktop/
|
||||
DESKTOP_DIR="$USER_HOME/Desktop"
|
||||
su - "$REAL_USER" -c "mkdir -p $DESKTOP_DIR"
|
||||
|
||||
# Detecter chromium
|
||||
CHROMIUM_BIN=$(command -v chromium || command -v chromium-browser || echo "chromium")
|
||||
|
||||
cat > "$DESKTOP_DIR/photobooth-app.desktop" << EOF
|
||||
[Desktop Entry]
|
||||
X-GNOME-Autostart-enabled=true
|
||||
X-GNOME-Autostart-Delay=120
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Name=Photobooth-App
|
||||
Exec=bash -c "sleep 60 && $CHROMIUM_BIN --kiosk --accept-lang=fr-FR --incognito --password-store=basic --disable-features=Translate,OverscrollHistoryNavigation --noerrdialogs --disable-infobars --no-first-run --ozone-platform=wayland --enable-features=OverlayScrollbar --start-maximized --process-per-site --js-flags='--max-old-space-size=128' --renderer-process-limit=1 --disable-dev-shm-usage http://127.0.0.1:8083/"
|
||||
StartupNotify=false
|
||||
EOF
|
||||
|
||||
chown "$REAL_USER:$REAL_USER" "$DESKTOP_DIR/photobooth-app.desktop"
|
||||
|
||||
log_info "Mode kiosk configure (Wayland, ~/Desktop/photobooth-app.desktop)"
|
||||
|
||||
# ===================================================================
|
||||
# ETAPE 7: Configuration finale et verification
|
||||
# ===================================================================
|
||||
log_step "7/7 - Verification finale"
|
||||
|
||||
echo ""
|
||||
echo "=== Verification des composants ==="
|
||||
echo ""
|
||||
|
||||
# Verifier photobooth-app
|
||||
if su - "$REAL_USER" -c "which photobooth" &>/dev/null || \
|
||||
[ -f "$USER_HOME/photobooth-venv/bin/photobooth" ]; then
|
||||
echo -e " photobooth-app: ${GREEN}INSTALLE${NC}"
|
||||
else
|
||||
echo -e " photobooth-app: ${RED}NON TROUVE${NC}"
|
||||
fi
|
||||
|
||||
# Verifier CUPS
|
||||
if systemctl is-active cups &>/dev/null; then
|
||||
echo -e " CUPS: ${GREEN}ACTIF${NC}"
|
||||
else
|
||||
echo -e " CUPS: ${YELLOW}INACTIF${NC}"
|
||||
fi
|
||||
|
||||
# Verifier les imprimantes
|
||||
printers=$(lpstat -p 2>/dev/null | grep -c "printer" || echo "0")
|
||||
echo -e " Imprimantes: ${printers} detectee(s)"
|
||||
|
||||
# Verifier la camera
|
||||
if libcamera-hello --list-cameras 2>/dev/null | grep -q "Available"; then
|
||||
echo -e " Camera: ${GREEN}DETECTEE${NC}"
|
||||
elif [ -e /dev/video0 ]; then
|
||||
echo -e " Camera: ${GREEN}/dev/video0${NC}"
|
||||
else
|
||||
echo -e " Camera: ${YELLOW}NON DETECTEE (verifier apres reboot)${NC}"
|
||||
fi
|
||||
|
||||
# Verifier la memoire
|
||||
mem_total=$(awk '/MemTotal/ {printf "%.0f", $2/1024}' /proc/meminfo)
|
||||
mem_available=$(awk '/MemAvailable/ {printf "%.0f", $2/1024}' /proc/meminfo)
|
||||
echo -e " RAM: ${mem_available}Mo disponible / ${mem_total}Mo total"
|
||||
|
||||
# Verifier le swap
|
||||
swap_total=$(awk '/SwapTotal/ {printf "%.0f", $2/1024}' /proc/meminfo)
|
||||
echo -e " Swap: ${swap_total}Mo"
|
||||
|
||||
echo ""
|
||||
echo "============================================="
|
||||
echo " Installation terminee !"
|
||||
echo "============================================="
|
||||
echo ""
|
||||
echo "Prochaines etapes:"
|
||||
echo ""
|
||||
echo " 1. REBOOTER le Raspberry Pi:"
|
||||
echo " sudo reboot"
|
||||
echo ""
|
||||
echo " 2. Apres reboot, acceder a l'admin photobooth:"
|
||||
echo " http://localhost:8083/admin"
|
||||
echo ""
|
||||
echo " 3. Configurer dans l'admin:"
|
||||
echo " - Camera: Backends -> picamera2"
|
||||
echo " - GPIO: hardwareinput -> activer GPIO"
|
||||
echo " - Photo trigger: GPIO 27 (ou votre GPIO relay)"
|
||||
echo " - Impression: Share & Print -> ajouter une action Print"
|
||||
echo " Commande: /home/pi/photobooth-data/script/script_print.sh \"{filename}\" \"{media_type}\" \"{action_config_name}\" \"{copies}\""
|
||||
echo " - QR Share: configurer le service QR"
|
||||
echo ""
|
||||
echo " 4. Si vous utilisez encore Node-RED pour le bouton:"
|
||||
echo " -> Envisagez de passer au GPIO natif de photobooth-app"
|
||||
echo " -> Gain: ~200 Mo de RAM en desactivant Node-RED"
|
||||
echo " -> sudo systemctl disable nodered.service"
|
||||
echo ""
|
||||
echo " 5. Verifier que tout fonctionne:"
|
||||
echo " bash $SCRIPT_DIR/health-check.sh"
|
||||
echo ""
|
||||
Reference in New Issue
Block a user