#!/usr/bin/env bash export TERM="${TERM:-xterm}" set -Eeuo pipefail clear || true # ───────────────────────────────────────────────────────────── # PinCabOS - 03-install-check.sh # Check final + cleanup dépôt + suppression flags traînants # Branding: Karots Sugarpie # ───────────────────────────────────────────────────────────── ORANGE=$'\033[38;5;208m' RED=$'\033[1;31m' CYAN=$'\033[38;5;51m' GREEN=$'\033[1;32m' YELLOW=$'\033[1;33m' RESET=$'\033[0m' SCRIPT_NAME="$(basename "$0")" TS="$(date +%Y%m%d-%H%M%S)" INSTALL_DIR="/opt/pincabos/install" LOG_DIR="/opt/pincabos/logs" STATE_DIR="/opt/pincabos/state" FLAG_DIR="${STATE_DIR}/go-pincabos-flags" SCRIPT_99="${INSTALL_DIR}/99-clean-depot.sh" LOG="${LOG_DIR}/03-install-check-${TS}.log" mkdir -p "$LOG_DIR" "$STATE_DIR" "$FLAG_DIR" exec > >(tee -a "$LOG") 2>&1 pco_line() { printf "${CYAN}────────────────────────────────────────────────────────────────${RESET}\n" } pco_split_step() { local raw="${1:-}" PCO_STEP_NUM="**" PCO_STEP_TITLE="$raw" if [[ "$raw" =~ ^([0-9]+)\)\ (.*)$ ]]; then PCO_STEP_NUM="${BASH_REMATCH[1]}" PCO_STEP_TITLE="${BASH_REMATCH[2]}" fi } pco_title() { local raw="$1" pco_split_step "$raw" printf "\n${CYAN}─[%s]─►${ORANGE} %s ${CYAN}◄────${RESET}\n\n" "$PCO_STEP_NUM" "$PCO_STEP_TITLE" } pco_step() { local step="$1" PCO_CURRENT_STEP="$step" PCO_STEPS+=("$step") PCO_STATUS+=("RUNNING") pco_title "$step" } pco_check() { local step="$1" local i pco_split_step "$step" for i in "${!PCO_STEPS[@]}"; do if [ "${PCO_STEPS[$i]}" = "$step" ]; then PCO_STATUS[$i]="OK" fi done printf "${GREEN}─[%s]─► %s ◄──── Check [√]${RESET}\n" "$PCO_STEP_NUM" "$PCO_STEP_TITLE" } pco_warn() { printf "${YELLOW}WARN:${RESET} %s\n" "$1" } pco_fail_current() { local i if [ -n "${PCO_CURRENT_STEP:-}" ]; then for i in "${!PCO_STEPS[@]}"; do if [ "${PCO_STEPS[$i]}" = "$PCO_CURRENT_STEP" ]; then PCO_STATUS[$i]="FAIL" fi done fi } pco_final_summary() { local exit_code="${1:-0}" local i local failed=0 if [ "${PCO_FINAL_SUMMARY_DONE:-0}" -eq 1 ]; then return 0 fi PCO_FINAL_SUMMARY_DONE=1 echo pco_line printf "${ORANGE}Résumé complet des checks PinCabOS - %s${RESET}\n" "$(basename "$0")" pco_line for i in "${!PCO_STEPS[@]}"; do pco_split_step "${PCO_STEPS[$i]}" case "${PCO_STATUS[$i]}" in OK) printf "${GREEN}─[%s]─► %s ◄──── Check [√]${RESET}\n" "$PCO_STEP_NUM" "$PCO_STEP_TITLE" ;; FAIL|RUNNING) failed=1 printf "${RED}─[%s]─► %s ◄──NOGOOD [X]${RESET}\n" "$PCO_STEP_NUM" "$PCO_STEP_TITLE" ;; *) failed=1 printf "${RED}─[%s]─► %s ◄──NOGOOD [X]${RESET}\n" "$PCO_STEP_NUM" "$PCO_STEP_TITLE" ;; esac done pco_line if [ "$failed" -eq 0 ] && [ "$exit_code" -eq 0 ]; then printf "${GREEN}Tous les checks sont réussis. PinCabOS install-check OK.${RESET}\n" else printf "${RED}Un ou plusieurs checks ont échoué. Code retour: %s${RESET}\n" "$exit_code" fi pco_line echo } pco_on_error() { local exit_code="$?" pco_fail_current pco_final_summary "$exit_code" exit "$exit_code" } trap pco_on_error ERR trap 'pco_final_summary "$?"' EXIT PCO_CURRENT_STEP="" PCO_STEPS=() PCO_STATUS=() PCO_FINAL_SUMMARY_DONE=0 perl -CS -Mutf8 -e ' binmode(STDOUT, ":utf8"); my $orange = "\033[38;5;208m"; my $purple = "\033[38;5;93m"; my $reset = "\033[0m"; my @logo = ( "██████╗ ██╗███╗ ██╗ ██████╗ █████╗ ██████╗ ██████╗ ███████╗", "██╔══██╗██║████╗ ██║██╔════╝██╔══██╗██╔══██╗██╔═══██╗██╔════╝", "██████╔╝██║██╔██╗ ██║██║ ███████║██████╔╝██║ ██║███████╗", "██╔═══╝ ██║██║╚██╗██║██║ ██╔══██║██╔══██╗██║ ██║╚════██║", "██║ ██║██║ ╚████║╚██████╗██║ ██║██████╔╝╚██████╔╝███████║", "╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═════╝╚═╝ ╚═╝╚═════╝ ╚═════╝ ╚══════╝" ); for my $line (@logo) { $line =~ s/(█+)/$orange$1$reset/g; $line =~ s/([╔╗╚╝═║]+)/$purple$1$reset/g; print "$line\n"; } ' 2>/dev/null || true echo printf "${ORANGE} Ultimate VPinball Linux Cabinet System${RESET}\n" printf "${CYAN} VPX • VPinFE • DOF • WebApp${RESET}\n" echo printf "${CYAN}────────────────────────────────────────────────────────────────${RESET}\n" printf "${GRAY} Script :${RESET} ${WHITE}%s${RESET}\n" "$(basename "$0")" printf "${GRAY} By :${RESET} ${WHITE}Karots Sugarpie${RESET}\n" printf "${GRAY} Hostname :${RESET} %s\n" "$(hostname)" printf "${GRAY} User :${RESET} %s\n" "$(whoami)" printf "${CYAN}────────────────────────────────────────────────────────────────${RESET}\n" echo if [ "$(id -u)" -ne 0 ]; then echo "${RED}ERREUR: ce script doit être lancé en root.${RESET}" exit 1 fi pco_line printf "${ORANGE}PinCabOS - 03-install-check.sh${RESET}\n" pco_line echo "Date : $(date)" echo "Host : $(hostname)" echo "Log : $LOG" echo pco_step "1) Validation scripts install" for f in \ "$INSTALL_DIR/00-install-admin.sh" \ "$INSTALL_DIR/01-install-system.sh" \ "$INSTALL_DIR/02-install-engine.sh" \ "$INSTALL_DIR/03-install-check.sh" \ "$INSTALL_DIR/99-clean-depot.sh" do if [ -s "$f" ]; then chmod +x "$f" 2>/dev/null || true bash -n "$f" echo "Check [√] $f" else pco_warn "Absent ou vide: $f" fi done pco_check "1) Validation scripts install" pco_step "2) Validation services et binaires principaux" echo "--- systemd default target ---" systemctl get-default || true echo echo "--- nginx ---" if command -v nginx >/dev/null 2>&1; then nginx -v || true nginx -t || true systemctl is-enabled nginx 2>/dev/null || true systemctl is-active nginx 2>/dev/null || true else pco_warn "nginx absent" fi echo echo "--- LightDM ---" systemctl is-enabled lightdm 2>/dev/null || true systemctl is-active lightdm 2>/dev/null || true echo echo "--- Chrome ---" command -v google-chrome 2>/dev/null || true google-chrome --version 2>/dev/null || true echo echo "--- VPX ---" command -v pincabos-vpx 2>/dev/null || true ls -lah /usr/local/bin/pincabos-vpx 2>/dev/null || true echo echo "--- VPinFE ---" command -v pincabos-vpinfe 2>/dev/null || true ls -lah /usr/local/bin/pincabos-vpinfe 2>/dev/null || true systemctl is-enabled pincabos-vpinfe.service 2>/dev/null || true echo pco_check "2) Validation services et binaires principaux" pco_step "3) Validation dépôt Google Chrome actif" GOOGLE_SOURCES="/etc/apt/sources.list.d/google-chrome.sources" GOOGLE_LIST="/etc/apt/sources.list.d/google-chrome.list" if [ -s "$GOOGLE_SOURCES" ]; then echo "Check [√] Dépôt Google Chrome trouvé: $GOOGLE_SOURCES" grep -nE 'URIs:|Suites:|Components:|Signed-By:' "$GOOGLE_SOURCES" || true elif [ -s "$GOOGLE_LIST" ]; then echo "Check [√] Ancien dépôt Google Chrome trouvé: $GOOGLE_LIST" cat "$GOOGLE_LIST" || true else echo "WARN: dépôt Google Chrome absent." echo "Ce n'est pas bloquant dans 03-install-check:" echo "- Chrome peut être désinstallé volontairement;" echo "- le système peut être en mode clean;" echo "- 99-clean-depot.sh ne doit jamais échouer pour ça." fi pco_check "3) Validation dépôt Google Chrome actif" pco_step "4) Exécution 99-clean-depot.sh final" if [ -s "$SCRIPT_99" ]; then chmod +x "$SCRIPT_99" bash -n "$SCRIPT_99" "$SCRIPT_99" pco_check "4) Exécution 99-clean-depot.sh final" else pco_warn "99-clean-depot.sh absent, nettoyage final ignoré." pco_check "4) Nettoyage final ignoré" fi pco_step "5) Suppression flags go-pincabos possibles" echo "Flags avant nettoyage:" find "$STATE_DIR" -maxdepth 3 -type f -name '*go-pincabos*' -o -path "$FLAG_DIR/*" 2>/dev/null | sort || true echo # On garde volontairement le state courant si go-pincabos.sh est encore en exécution. # On supprime les flags de reprise qui peuvent traîner; go-pincabos remettra son dernier stage au besoin. rm -f "$FLAG_DIR"/stage-*.flag 2>/dev/null || true rm -f "$FLAG_DIR"/done-*.flag 2>/dev/null || true rm -f "$FLAG_DIR"/force-console-next-boot.flag 2>/dev/null || true rm -f "$STATE_DIR"/go-pincabos.runid 2>/dev/null || true # Nettoyer aussi les vieux flags possibles ailleurs. find /opt/pincabos -type f \( \ -name '*firstboot*.flag' \ -o -name '*install*.flag' \ -o -name '*reboot*.flag' \ -o -name '*go-pincabos*.flag' \ \) -print -delete 2>/dev/null || true mkdir -p "$FLAG_DIR" echo echo "Flags après nettoyage:" find "$STATE_DIR" -maxdepth 3 -type f -name '*go-pincabos*' -o -path "$FLAG_DIR/*" 2>/dev/null | sort || true pco_check "5) Suppression flags go-pincabos possibles" pco_step "6) Résumé final 03-install-check" echo "03-install-check terminé." echo "Log local : $LOG" echo "Espace utilisé système : $(df -h / | awk 'NR==2 {print $3}')" echo "Espace disponible : $(df -h / | awk 'NR==2 {print $4}')" echo "Utilisation système : $(df -h / | awk 'NR==2 {print $5}')" pco_check "6) Résumé final 03-install-check" pco_line printf "${GREEN}Tous les checks 03-install-check sont terminés.${RESET}\n" pco_line