From 338cd5bff5a6f7caa7a1e447e5c9599aa6223000 Mon Sep 17 00:00:00 2001 From: lapatatedouce Date: Sat, 26 Jul 2025 22:52:32 +0200 Subject: [PATCH] =?UTF-8?q?fest:=20Divers=20corrections/am=C3=A9liorations?= =?UTF-8?q?=20-=20Am=C3=A9liorations=20install=5FGaming.sh=20-=20Probl?= =?UTF-8?q?=C3=A8me=20r=C3=A9solu=20pour=20mettre=20le=20scripte=20sur=20l?= =?UTF-8?q?e=20bureau?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- files_to_inject/preseeds/default.preseed | 17 +- files_to_inject/preseeds/install_gaming.sh | 1235 ++++++++++++++------ 2 files changed, 919 insertions(+), 333 deletions(-) diff --git a/files_to_inject/preseeds/default.preseed b/files_to_inject/preseeds/default.preseed index 28c9865..d372677 100755 --- a/files_to_inject/preseeds/default.preseed +++ b/files_to_inject/preseeds/default.preseed @@ -75,9 +75,9 @@ d-i grub-installer/only_debian boolean true d-i grub-installer/with_other_os boolean true # Choix manuel du périphérique d'installation GRUB -d-i grub-installer/bootdev seen false +d-i grub-installer/bootdev string manual -# Configuration post-installation : suppression navigateurs par défaut et installation Firefox Mozilla ainsi que fish dans le bashrc +# Configuration post-installation : suppression navigateurs par défaut et installation Firefox Mozilla ainsi que fish d-i preseed/late_command string \ in-target apt-get remove --purge -y firefox-esr konqueror ; \ in-target mkdir -p /etc/apt/keyrings ; \ @@ -89,12 +89,17 @@ d-i preseed/late_command string \ in-target update-alternatives --install /usr/bin/x-www-browser x-www-browser /usr/bin/firefox 200 ; \ in-target update-alternatives --set x-www-browser /usr/bin/firefox ; \ in-target timeout 30 flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo ; \ - in-target apt-get install -y fish ; \ - in-target sh -c "for u in \$(awk -F: '\$3 == 1000 { print \$1 }' /etc/passwd); do chsh -s /usr/bin/fish \$u 2>/dev/null; done" ; \ + in-target sh -c "for u in \`awk -F: '\\\$3 == 1000 { print \\\$1 }' /etc/passwd\`; do chsh -s /usr/bin/fish \$u 2>/dev/null; done" ; \ in-target dpkg --add-architecture i386 ; \ in-target apt-get update ; \ - cp /cdrom/preseeds/install_gaming.sh /target/home/\$(awk -F: '\$3 == 1000 { print \$1; exit }' /target/etc/passwd)/Desktop/install_gaming.sh ; \ - chmod +x /target/home/\$(awk -F: '\$3 == 1000 { print \$1; exit }' /target/etc/passwd)/Desktop/install_gaming.sh ; \ + sh -c 'user=\`awk -F: "\\\\\$3 == 1000 { print \\\\\$1; exit }" /target/etc/passwd\` ; \ + if [ -n "\$user" ]; then \ + in-target su - \$user -c "mkdir -p \\\`xdg-user-dir DESKTOP\\\`" ; \ + desktop_dir=\`in-target su - \$user -c "xdg-user-dir DESKTOP"\` ; \ + cp /cdrom/preseeds/install_gaming.sh /target\$desktop_dir/install_gaming.sh ; \ + chmod +x /target\$desktop_dir/install_gaming.sh ; \ + chown \$user:\$user /target\$desktop_dir/install_gaming.sh ; \ + fi' # Finalisation : redémarrage automatique d-i finish-install/reboot_in_progress note \ No newline at end of file diff --git a/files_to_inject/preseeds/install_gaming.sh b/files_to_inject/preseeds/install_gaming.sh index ae99ccb..1baa8f8 100755 --- a/files_to_inject/preseeds/install_gaming.sh +++ b/files_to_inject/preseeds/install_gaming.sh @@ -16,11 +16,50 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -# Script d'installation gaming avec interface graphique pour Debian +# Gaming Debian Installateur - Script d'installation gaming avec interface graphique pour Debian # Permet à l'utilisateur de choisir quoi installer via une fenêtre # Configuration des logs d'erreur -LOG_FILE="/tmp/gaming_installer_$(date +%Y%m%d_%H%M%S).log" +LOG_FILE="./gaming_installer_$(date +%Y%m%d_%H%M%S).log" + +# Variable globale pour stocker le mot de passe sudo +GLOBAL_SUDO_PASSWORD="" + +# Variables pour l'installation groupée +BATCH_INSTALL_MODE=false +BATCH_TOTAL_APPS=0 +BATCH_CURRENT_APP=0 + +# Initialiser le fichier de log +initialize_log() { + # Vérifier les permissions d'écriture sur le répertoire + if [ ! -w "$(dirname "$LOG_FILE")" ]; then + echo "ERREUR: Pas de permission d'écriture sur $(dirname "$LOG_FILE")" >&2 + return 1 + fi + + # Créer le fichier de log avec du contenu initial + { + echo "=== Gaming Debian Installateur Log - Démarré le $(date) ===" + echo "Fichier de log: $LOG_FILE" + echo "Utilisateur: $(whoami)" + echo "Répertoire de travail: $(pwd)" + echo "" + } > "$LOG_FILE" + + # Forcer l'écriture sur le disque + sync + + # Vérifier que le fichier a été créé avec du contenu + if [ -f "$LOG_FILE" ] && [ -s "$LOG_FILE" ]; then + echo "Log initialisé avec succès: $LOG_FILE ($(wc -c < "$LOG_FILE") octets)" >&2 + return 0 + else + echo "ERREUR: Échec de l'initialisation du log: $LOG_FILE" >&2 + echo "Permissions du répertoire: $(ls -ld "$(dirname "$LOG_FILE")")" >&2 + return 1 + fi +} # Configuration des timeouts pour éviter les boucles infinies TIMEOUT_DOWNLOAD=300 # 5 minutes pour les téléchargements @@ -37,22 +76,29 @@ show_error_logs() { if [ "$show_logs" = "true" ] && [ -f "$LOG_FILE" ]; then if zenity --question --title="Voir les logs" --text="Voulez-vous consulter les logs d'erreur pour plus de détails ?"; then - # Afficher les 20 dernières lignes du log dans une fenêtre scrollable - tail -n 20 "$LOG_FILE" | zenity --text-info \ - --title="Logs d'erreur - $error_message" \ - --width=800 --height=400 \ - --text="Dernières lignes du fichier de log :\n\n$(tail -n 20 "$LOG_FILE")" \ - --no-wrap - - # Proposer d'ouvrir le fichier complet - if zenity --question --title="Voir logs complets" --text="Voulez-vous ouvrir le fichier de log complet ?\n\n$LOG_FILE"; then - if command -v gedit &> /dev/null; then - gedit "$LOG_FILE" & - elif command -v nano &> /dev/null; then - gnome-terminal -- nano "$LOG_FILE" & + # Vérifier si le fichier de log existe et contient des données + if [ -f "$LOG_FILE" ] && [ -s "$LOG_FILE" ]; then + # Afficher les logs dans une fenêtre scrollable avec le contenu complet + zenity --text-info \ + --title="Logs d'erreur - $error_message" \ + --filename="$LOG_FILE" \ + --width=800 --height=550 \ + --no-wrap + else + # Informations de débogage pour le fichier de log + local log_info="" + if [ ! -f "$LOG_FILE" ]; then + log_info="Le fichier de log n'existe pas." + elif [ ! -s "$LOG_FILE" ]; then + log_info="Le fichier de log existe mais est vide." else - zenity --info --title="Fichier de log" --text="Fichier de log complet :\n$LOG_FILE" + log_info="Problème inconnu avec le fichier de log." fi + + log_info="$log_info\n\nFichier de log : $LOG_FILE" + log_info="$log_info\nTaille du fichier : $(ls -la "$LOG_FILE" 2>/dev/null || echo "N/A")" + + zenity --info --title="Logs vides" --text="$log_info" fi fi fi @@ -60,11 +106,38 @@ show_error_logs() { # Fonction de logging log_error() { + # S'assurer que le fichier de log existe + if [ ! -f "$LOG_FILE" ]; then + initialize_log + fi echo "[$(date '+%Y-%m-%d %H:%M:%S')] ERREUR: $1" >> "$LOG_FILE" + # S'assurer que le fichier est synchronisé + sync } log_info() { + # S'assurer que le fichier de log existe + if [ ! -f "$LOG_FILE" ]; then + initialize_log + fi echo "[$(date '+%Y-%m-%d %H:%M:%S')] INFO: $1" >> "$LOG_FILE" + # S'assurer que le fichier est synchronisé + sync +} + +# Fonction pour capturer et logger les erreurs de commandes +log_command() { + local command="$1" + local description="$2" + echo "[$(date '+%Y-%m-%d %H:%M:%S')] COMMANDE: $description" >> "$LOG_FILE" + echo "[$(date '+%Y-%m-%d %H:%M:%S')] EXECUTE: $command" >> "$LOG_FILE" + eval "$command" >> "$LOG_FILE" 2>&1 + local exit_code=$? + if [ $exit_code -ne 0 ]; then + echo "[$(date '+%Y-%m-%d %H:%M:%S')] ERREUR: La commande a échoué avec le code $exit_code" >> "$LOG_FILE" + fi + sync + return $exit_code } # Fonction pour vérifier le succès d'une commande apt @@ -94,6 +167,139 @@ check_sudo_password() { return 0 } +# Fonction pour demander et stocker le mot de passe sudo globalement +get_global_sudo_password() { + local app_list="$1" + + # Si le mot de passe est déjà stocké et valide, ne pas le redemander + if [ -n "$GLOBAL_SUDO_PASSWORD" ]; then + if check_sudo_password "$GLOBAL_SUDO_PASSWORD"; then + return 0 + fi + fi + + # Demander le mot de passe sudo pour toutes les installations + GLOBAL_SUDO_PASSWORD=$(zenity --password --title="Authentification - Gaming Debian Installateur" --text="Mot de passe sudo requis pour installer :\n$app_list") + + if [ $? -eq 1 ]; then + return 1 + fi + + # Vérifier le mot de passe sudo + if ! check_sudo_password "$GLOBAL_SUDO_PASSWORD"; then + GLOBAL_SUDO_PASSWORD="" + return 1 + fi + + log_info "Authentification sudo réussie pour les installations multiples" + return 0 +} + +# Fonction pour vérifier si l'utilisateur veut utiliser le mot de passe global ou en demander un nouveau +use_global_password_or_ask() { + local app_name="$1" + + # Si le mot de passe global n'est pas défini, demander un nouveau + if [ -z "$GLOBAL_SUDO_PASSWORD" ]; then + password=$(zenity --password --title="Authentification - Installation $app_name" --text="Mot de passe sudo requis pour installer $app_name:") + + if [ $? -eq 1 ]; then + return 1 + fi + + # Vérifier le mot de passe sudo + if ! check_sudo_password "$password"; then + return 1 + fi + else + # Utiliser le mot de passe global + password="$GLOBAL_SUDO_PASSWORD" + fi + + return 0 +} + +# Fonctions pour l'installation groupée +start_batch_install() { + local app_count=$1 + local app_list="$2" + + BATCH_INSTALL_MODE=true + BATCH_TOTAL_APPS=$app_count + BATCH_CURRENT_APP=0 + + log_info "Mode installation groupée activé pour $app_count applications" + + # Afficher une notification de début au lieu d'une barre de progression complexe + zenity --info --timeout=3 \ + --title="Gaming Debian Installateur" \ + --text="Installation de $app_count applications en cours...\n\nApplications sélectionnées:$app_list" & +} + +update_batch_progress() { + local app_name="$1" + local step_message="$2" + local step_percent="$3" + + if [ "$BATCH_INSTALL_MODE" = "true" ]; then + # Simplement logger le progrès + log_info "[$((BATCH_CURRENT_APP + 1))/$BATCH_TOTAL_APPS] $app_name: $step_message" + fi +} + +next_batch_app() { + local app_name="$1" + if [ "$BATCH_INSTALL_MODE" = "true" ]; then + BATCH_CURRENT_APP=$((BATCH_CURRENT_APP + 1)) + log_info "Application $BATCH_CURRENT_APP/$BATCH_TOTAL_APPS terminée: $app_name" + fi +} + +end_batch_install() { + if [ "$BATCH_INSTALL_MODE" = "true" ]; then + BATCH_INSTALL_MODE=false + BATCH_TOTAL_APPS=0 + BATCH_CURRENT_APP=0 + + log_info "Mode installation groupée terminé" + fi +} + +# Fonction pour gérer l'affichage de progression (individuelle ou groupée) +show_progress() { + local app_name="$1" + local percent="$2" + local message="$3" + + if [ "$BATCH_INSTALL_MODE" = "true" ]; then + # Mode groupé: utiliser la progression globale + update_batch_progress "$app_name" "$message" "$percent" + else + # Mode individuel: afficher la progression normale + echo "$percent" + echo "# $message" + fi +} + +# Fonction wrapper pour zenity progress en mode individuel +run_individual_progress() { + local app_name="$1" + local commands="$2" + + if [ "$BATCH_INSTALL_MODE" = "true" ]; then + # En mode groupé, exécuter directement les commandes sans zenity progress + eval "$commands" + else + # En mode individuel, utiliser zenity progress + eval "$commands" | zenity --progress \ + --title="Installation de $app_name" \ + --text="Initialisation..." \ + --percentage=0 \ + --width=400 \ + --auto-close + fi +} + # Vérifier si zenity est installé, sinon l'installer check_zenity() { if ! command -v zenity &> /dev/null; then @@ -103,11 +309,40 @@ check_zenity() { fi } +# Vérifier et configurer les sources Flathub si nécessaire +ensure_flathub_sources() { + log_info "Vérification des sources Flathub" + + # Vérifier si Flatpak est installé + if ! command -v flatpak &> /dev/null; then + log_info "Flatpak n'est pas installé, installation en cours..." + echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get update >> "$LOG_FILE" 2>&1 + echo "$password" | timeout $TIMEOUT_INSTALL sudo -S apt-get install -y flatpak >> "$LOG_FILE" 2>&1 + if ! check_apt_success $? "flatpak" "installation"; then + log_error "Échec de l'installation de Flatpak" + return 1 + fi + fi + + # Vérifier si Flathub est configuré + if ! flatpak remotes --show-details | grep -q "flathub" 2>/dev/null; then + log_info "Configuration des sources Flathub" + echo "$password" | timeout $TIMEOUT_INSTALL sudo -S flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo >> "$LOG_FILE" 2>&1 + if [ $? -ne 0 ]; then + log_error "Échec de la configuration de Flathub" + return 1 + fi + fi + + log_info "Sources Flathub configurées avec succès" + return 0 +} + # Fonction pour afficher la fenêtre de sélection d'installation show_install_selection() { zenity --list --checklist \ - --title="Gaming Debian - Installation" \ + --title="Gaming Debian Installateur" \ --text="Sélectionnez les composants à installer :" \ --column="Installer" --column="Composant" --column="Description" \ --width=600 --height=450 \ @@ -116,21 +351,24 @@ show_install_selection() { FALSE "steam" "🎮 Steam - Plateforme gaming Valve" \ FALSE "heroic" "🎮 Heroic - Epic Games & GOG" \ FALSE "lutris" "🎮 Lutris - Gestionnaire de jeux" \ + FALSE "utils" "⚡ Utilitaires Gaming - Performance & monitoring" \ FALSE "wine" "🍷 Wine + Winetricks - Compatibilité Windows" \ - FALSE "bottles" "🍷 Bottles - Gestionnaire Wine moderne" \ - FALSE "retroarch" "🕹️ RetroArch - Multi-émulateur" \ - FALSE "discord" "💬 Discord - Chat vocal & texte" \ - FALSE "teamspeak" "💬 TeamSpeak - Communication vocale" \ + FALSE "bottles" "🍷 Bottles - Gestionnaire Wine moderne (Flatpak)" \ + FALSE "retroarch" "🕹️ RetroArch - Multi-émulateur (Flatpak)" \ + FALSE "discord" "💬 Discord - Chat vocal & texte (Flatpak)" \ + FALSE "vesktop" "💬 Vesktop - Client Discord alternatif (Flatpak)" \ + FALSE "teamspeak" "💬 TeamSpeak - Communication vocale (Flatpak)" \ + FALSE "mumble" "💬 Mumble - Communication vocale libre" \ FALSE "flatpak" "📦 Flatpak + Flathub - Magasin d'applications" \ - FALSE "gearlever" "📦 Gear Lever - Gestionnaire AppImage" \ - FALSE "nvidia" "💻 NVIDIA + CUDA - Pilotes graphiques" \ - FALSE "utils" "⚡ Utilitaires Gaming - Performance & monitoring" + FALSE "flatseal" "📦 Flatseal - Gestionnaire permissions Flatpak" \ + FALSE "gearlever" "📦 Gear Lever - Gestionnaire AppImage (Flatpak)" \ + FALSE "nvidia" "💻 NVIDIA + CUDA - Pilotes graphiques" } # Fonction pour afficher la fenêtre de sélection de désinstallation show_uninstall_selection() { zenity --list --checklist \ - --title="Gaming Debian - Désinstallation" \ + --title="Gaming Debian Installateur - Désinstallation" \ --text="Sélectionnez les composants à désinstaller :" \ --column="Désinstaller" --column="Composant" --column="Description" \ --width=850 --height=550 \ @@ -138,15 +376,18 @@ show_uninstall_selection() { FALSE "steam" "🎮 Steam - Plateforme gaming Valve" \ FALSE "heroic" "🎮 Heroic - Epic Games & GOG" \ FALSE "lutris" "🎮 Lutris - Gestionnaire de jeux" \ + FALSE "utils" "⚡ Utilitaires Gaming - Performance & monitoring" \ FALSE "wine" "🍷 Wine + Winetricks - Compatibilité Windows" \ - FALSE "bottles" "🍷 Bottles - Gestionnaire Wine moderne" \ - FALSE "retroarch" "🕹️ RetroArch - Multi-émulateur" \ - FALSE "discord" "💬 Discord - Chat vocal & texte" \ - FALSE "teamspeak" "💬 TeamSpeak - Communication vocale" \ + FALSE "bottles" "🍷 Bottles - Gestionnaire Wine moderne (Flatpak)" \ + FALSE "retroarch" "🕹️ RetroArch - Multi-émulateur (Flatpak)" \ + FALSE "discord" "💬 Discord - Chat vocal & texte (Flatpak)" \ + FALSE "vesktop" "💬 Vesktop - Client Discord alternatif (Flatpak)" \ + FALSE "teamspeak" "💬 TeamSpeak - Communication vocale (Flatpak)" \ + FALSE "mumble" "💬 Mumble - Communication vocale libre" \ FALSE "flatpak" "📦 Flatpak + Flathub - Magasin d'applications" \ - FALSE "gearlever" "📦 Gear Lever - Gestionnaire AppImage" \ - FALSE "nvidia" "💻 NVIDIA + CUDA - Pilotes graphiques" \ - FALSE "utils" "⚡ Utilitaires Gaming - Performance & monitoring" + FALSE "flatseal" "📦 Flatseal - Gestionnaire permissions Flatpak" \ + FALSE "gearlever" "📦 Gear Lever - Gestionnaire AppImage (Flatpak)" \ + FALSE "nvidia" "💻 NVIDIA + CUDA - Pilotes graphiques" } # Fonction d'installation Steam @@ -156,86 +397,97 @@ install_steam() { # Vérifier si steam-installer est déjà installé if dpkg -l | grep -q "^ii.*steam-installer"; then log_info "steam-installer déjà installé" - zenity --info --title="Déjà installé" --text="steam-installer est déjà installé sur le système." + if [ "$BATCH_INSTALL_MODE" != "true" ]; then + zenity --info --title="Déjà installé" --text="steam-installer est déjà installé sur le système." + fi return fi - # Demander le mot de passe sudo pour cette installation - password=$(zenity --password --title="Authentification - Installation steam-installer" --text="Mot de passe sudo requis pour installer steam-installer:") - - if [ $? -eq 1 ]; then + # Utiliser le mot de passe global ou demander un nouveau + if ! use_global_password_or_ask "steam-installer"; then return fi - # Vérifier le mot de passe sudo - if ! check_sudo_password "$password"; then - return - fi - - ( - echo "10" ; echo "# Mise à jour des sources..." + # Fonction interne pour l'installation + install_steam_steps() { + show_progress "Steam" 10 "Mise à jour des sources..." + log_info "Début mise à jour des sources pour Steam" echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get update >> "$LOG_FILE" 2>&1 - if ! check_apt_success $? "sources" "mise à jour"; then - echo "# Erreur lors de la mise à jour des sources" - exit 1 + local result=$? + log_info "Résultat apt-get update: $result" + if ! check_apt_success $result "sources" "mise à jour"; then + log_error "Échec mise à jour des sources pour Steam" + return 1 fi - echo "30" ; echo "# Installation des dépendances..." + show_progress "Steam" 30 "Installation des dépendances..." echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get install -y wget curl >> "$LOG_FILE" 2>&1 if ! check_apt_success $? "wget curl" "installation"; then - echo "# Erreur lors de l'installation des dépendances" - exit 1 + return 1 fi - echo "40" ; echo "# Ajout de l'architecture 32-bit..." + show_progress "Steam" 50 "Ajout de l'architecture 32-bit..." echo "$password" | timeout $TIMEOUT_APT sudo -S dpkg --add-architecture i386 >> "$LOG_FILE" 2>&1 if ! check_apt_success $? "architecture i386" "ajout"; then - echo "# Erreur lors de l'ajout de l'architecture i386" - exit 1 + return 1 fi - echo "50" ; echo "# Activation des dépôts non-free..." - echo "$password" | timeout $TIMEOUT_APT sudo -S apt-add-repository non-free -y >> "$LOG_FILE" 2>&1 - if ! check_apt_success $? "dépôt non-free" "ajout"; then - echo "# Erreur lors de l'ajout du dépôt non-free" - exit 1 - fi - - echo "60" ; echo "# Mise à jour des sources..." + show_progress "Steam" 70 "Mise à jour des sources..." echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get update >> "$LOG_FILE" 2>&1 - if ! check_apt_success $? "sources après non-free" "mise à jour"; then - echo "# Erreur lors de la mise à jour après ajout non-free" - exit 1 + if ! check_apt_success $? "sources" "mise à jour"; then + return 1 fi - echo "80" ; echo "# Installation de steam-installer..." + show_progress "Steam" 90 "Installation de steam-installer..." echo "$password" | timeout $TIMEOUT_INSTALL sudo -S apt-get install -y steam-installer >> "$LOG_FILE" 2>&1 if ! check_apt_success $? "steam-installer" "installation"; then - echo "# Erreur lors de l'installation de steam-installer" - exit 1 + return 1 fi - echo "100" ; echo "# Vérification de l'installation..." - ) | zenity --progress \ - --title="Installation de steam-installer" \ - --text="Initialisation..." \ - --percentage=0 \ - --width=400 \ - --auto-close + show_progress "Steam" 100 "Vérification de l'installation..." + return 0 + } - # Vérifier le code de sortie du processus - if [ ${PIPESTATUS[0]} -ne 0 ]; then - show_error_logs "Échec de l'installation de steam-installer" - return + # Exécuter l'installation selon le mode + if [ "$BATCH_INSTALL_MODE" = "true" ]; then + # Mode groupé: exécution directe + if ! install_steam_steps; then + log_error "Échec de l'installation de Steam" + return 1 + fi + else + # Mode individuel: avec zenity progress + ( + install_steam_steps + if [ $? -ne 0 ]; then + echo "# Erreur lors de l'installation" + exit 1 + fi + ) | zenity --progress \ + --title="Installation de steam-installer" \ + --text="Initialisation..." \ + --percentage=0 \ + --width=400 \ + --auto-close + + if [ ${PIPESTATUS[0]} -ne 0 ]; then + show_error_logs "Échec de l'installation de steam-installer" + return 1 + fi fi # Vérifier si l'installation a réussi if dpkg -l | grep -q "^ii.*steam-installer"; then log_info "Installation steam-installer réussie" - zenity --info --title="Succès" --text="steam-installer a été installé avec succès !" + if [ "$BATCH_INSTALL_MODE" != "true" ]; then + zenity --info --title="Succès" --text="steam-installer a été installé avec succès !" + fi else log_error "steam-installer non trouvé après installation" - show_error_logs "steam-installer non trouvé après installation" + if [ "$BATCH_INSTALL_MODE" != "true" ]; then + show_error_logs "steam-installer non trouvé après installation" + fi + return 1 fi } @@ -250,15 +502,8 @@ install_lutris() { return fi - # Demander le mot de passe sudo pour cette installation - password=$(zenity --password --title="Authentification - Installation Lutris" --text="Mot de passe sudo requis pour installer Lutris:") - - if [ $? -eq 1 ]; then - return - fi - - # Vérifier le mot de passe sudo - if ! check_sudo_password "$password"; then + # Utiliser le mot de passe global ou demander un nouveau + if ! use_global_password_or_ask "Lutris"; then return fi @@ -271,35 +516,27 @@ install_lutris() { fi echo "20" ; echo "# Installation des dépendances..." - echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get install -y wget curl software-properties-common >> "$LOG_FILE" 2>&1 + echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get install -y wget curl >> "$LOG_FILE" 2>&1 if ! check_apt_success $? "dépendances" "installation"; then echo "# Erreur lors de l'installation des dépendances" exit 1 fi - echo "40" ; echo "# Ajout de l'architecture 32-bit..." + echo "50" ; echo "# Ajout de l'architecture 32-bit..." echo "$password" | timeout $TIMEOUT_APT sudo -S dpkg --add-architecture i386 >> "$LOG_FILE" 2>&1 if ! check_apt_success $? "architecture i386" "ajout"; then echo "# Erreur lors de l'ajout de l'architecture i386" exit 1 fi - echo "50" ; echo "# Activation des dépôts non-free et contrib..." - echo "$password" | timeout $TIMEOUT_APT sudo -S apt-add-repository non-free -y >> "$LOG_FILE" 2>&1 - echo "$password" | timeout $TIMEOUT_APT sudo -S apt-add-repository contrib -y >> "$LOG_FILE" 2>&1 - if ! check_apt_success $? "dépôts non-free/contrib" "ajout"; then - echo "# Erreur lors de l'ajout des dépôts" - exit 1 - fi - - echo "60" ; echo "# Mise à jour des sources..." + echo "70" ; echo "# Mise à jour des sources..." echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get update >> "$LOG_FILE" 2>&1 - if ! check_apt_success $? "sources après ajout dépôts" "mise à jour"; then - echo "# Erreur lors de la mise à jour après ajout des dépôts" + if ! check_apt_success $? "sources" "mise à jour"; then + echo "# Erreur lors de la mise à jour des sources" exit 1 fi - echo "80" ; echo "# Installation de Lutris..." + echo "90" ; echo "# Installation de Lutris..." echo "$password" | timeout $TIMEOUT_INSTALL sudo -S apt-get install -y lutris >> "$LOG_FILE" 2>&1 if ! check_apt_success $? "lutris" "installation"; then echo "# Erreur lors de l'installation de Lutris" @@ -341,38 +578,15 @@ install_bottles() { return fi - # Demander le mot de passe sudo pour cette installation - password=$(zenity --password --title="Authentification - Installation Bottles" --text="Mot de passe sudo requis pour installer Bottles:") - - if [ $? -eq 1 ]; then - return - fi - - # Vérifier le mot de passe sudo - if ! check_sudo_password "$password"; then + # Utiliser le mot de passe global ou demander un nouveau + if ! use_global_password_or_ask "Bottles"; then return fi ( - echo "10" ; echo "# Mise à jour des sources..." - echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get update >> "$LOG_FILE" 2>&1 - if ! check_apt_success $? "sources" "mise à jour"; then - echo "# Erreur lors de la mise à jour des sources" - exit 1 - fi - - echo "20" ; echo "# Installation de Flatpak..." - echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get install -y flatpak >> "$LOG_FILE" 2>&1 - if ! check_apt_success $? "flatpak" "installation"; then - echo "# Erreur lors de l'installation de Flatpak" - exit 1 - fi - - echo "40" ; echo "# Ajout du dépôt Flathub..." - echo "$password" | timeout $TIMEOUT_APT sudo -S flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo >> "$LOG_FILE" 2>&1 - if [ $? -ne 0 ]; then - log_error "Échec de l'ajout du dépôt Flathub" - echo "# Erreur lors de l'ajout de Flathub" + echo "40" ; echo "# Vérification des sources Flathub..." + if ! ensure_flathub_sources; then + echo "# Erreur lors de la configuration de Flathub" exit 1 fi @@ -422,15 +636,8 @@ install_wine() { return fi - # Demander le mot de passe sudo pour cette installation - password=$(zenity --password --title="Authentification - Installation Wine + Winetricks" --text="Mot de passe sudo requis pour installer Wine + Winetricks:") - - if [ $? -eq 1 ]; then - return - fi - - # Vérifier le mot de passe sudo - if ! check_sudo_password "$password"; then + # Utiliser le mot de passe global ou demander un nouveau + if ! use_global_password_or_ask "Wine + Winetricks"; then return fi @@ -443,7 +650,7 @@ install_wine() { fi echo "10" ; echo "# Installation des dépendances..." - echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get install -y wget curl software-properties-common >> "$LOG_FILE" 2>&1 + echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get install -y wget curl >> "$LOG_FILE" 2>&1 if ! check_apt_success $? "dépendances" "installation"; then echo "# Erreur lors de l'installation des dépendances" exit 1 @@ -546,38 +753,15 @@ install_retroarch() { return fi - # Demander le mot de passe sudo pour cette installation - password=$(zenity --password --title="Authentification - Installation RetroArch" --text="Mot de passe sudo requis pour installer RetroArch:") - - if [ $? -eq 1 ]; then - return - fi - - # Vérifier le mot de passe sudo - if ! check_sudo_password "$password"; then + # Utiliser le mot de passe global ou demander un nouveau + if ! use_global_password_or_ask "RetroArch"; then return fi ( - echo "10" ; echo "# Mise à jour des sources..." - echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get update >> "$LOG_FILE" 2>&1 - if ! check_apt_success $? "sources" "mise à jour"; then - echo "# Erreur lors de la mise à jour des sources" - exit 1 - fi - - echo "20" ; echo "# Installation de Flatpak..." - echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get install -y flatpak >> "$LOG_FILE" 2>&1 - if ! check_apt_success $? "flatpak" "installation"; then - echo "# Erreur lors de l'installation de Flatpak" - exit 1 - fi - - echo "40" ; echo "# Ajout du dépôt Flathub..." - echo "$password" | timeout $TIMEOUT_APT sudo -S flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo >> "$LOG_FILE" 2>&1 - if [ $? -ne 0 ]; then - log_error "Échec de l'ajout du dépôt Flathub" - echo "# Erreur lors de l'ajout de Flathub" + echo "40" ; echo "# Vérification des sources Flathub..." + if ! ensure_flathub_sources; then + echo "# Erreur lors de la configuration de Flathub" exit 1 fi @@ -627,15 +811,8 @@ install_flatpak() { return fi - # Demander le mot de passe sudo pour cette installation - password=$(zenity --password --title="Authentification - Installation Flatpak" --text="Mot de passe sudo requis pour installer Flatpak + Flathub:") - - if [ $? -eq 1 ]; then - return - fi - - # Vérifier le mot de passe sudo - if ! check_sudo_password "$password"; then + # Utiliser le mot de passe global ou demander un nouveau + if ! use_global_password_or_ask "Flatpak + Flathub"; then return fi @@ -693,6 +870,89 @@ install_flatpak() { fi } +# Fonction d'installation Flatseal +install_flatseal() { + log_info "Début de l'installation de Flatseal" + + # Vérifier si Flatseal est déjà installé via Flatpak + if flatpak list | grep -q "com.github.tchx84.Flatseal" 2>/dev/null; then + log_info "Flatseal déjà installé via Flatpak" + if [ "$BATCH_INSTALL_MODE" != "true" ]; then + zenity --info --title="Déjà installé" --text="Flatseal est déjà installé via Flatpak sur le système." + fi + return + fi + + # Utiliser le mot de passe global ou demander un nouveau + if ! use_global_password_or_ask "Flatseal"; then + return + fi + + # Fonction interne pour l'installation + install_flatseal_steps() { + show_progress "Flatseal" 40 "Vérification des sources Flathub..." + if ! ensure_flathub_sources; then + log_error "Échec de la configuration de Flathub pour Flatseal" + return 1 + fi + + show_progress "Flatseal" 70 "Installation de Flatseal via Flatpak..." + log_info "Installation de Flatseal via Flatpak" + echo "$password" | timeout $TIMEOUT_INSTALL sudo -S flatpak install -y flathub com.github.tchx84.Flatseal >> "$LOG_FILE" 2>&1 + local result=$? + log_info "Résultat installation Flatseal: $result" + if [ $result -ne 0 ]; then + log_error "Échec de l'installation de Flatseal via Flatpak" + return 1 + fi + + show_progress "Flatseal" 100 "Vérification de l'installation..." + return 0 + } + + # Exécuter l'installation selon le mode + if [ "$BATCH_INSTALL_MODE" = "true" ]; then + # Mode groupé: exécution directe + if ! install_flatseal_steps; then + log_error "Échec de l'installation de Flatseal" + return 1 + fi + else + # Mode individuel: avec zenity progress + ( + install_flatseal_steps + if [ $? -ne 0 ]; then + echo "# Erreur lors de l'installation" + exit 1 + fi + ) | zenity --progress \ + --title="Installation de Flatseal" \ + --text="Initialisation..." \ + --percentage=0 \ + --width=400 \ + --auto-close + + if [ ${PIPESTATUS[0]} -ne 0 ]; then + show_error_logs "Échec de l'installation de Flatseal" + return 1 + fi + fi + + # Vérifier si l'installation a réussi + if flatpak list | grep -q "com.github.tchx84.Flatseal" 2>/dev/null; then + log_info "Installation Flatseal réussie" + if [ "$BATCH_INSTALL_MODE" != "true" ]; then + zenity --info --title="Succès" --text="Flatseal a été installé avec succès via Flatpak !\n\nUtilisez-le pour gérer les permissions de vos applications Flatpak." + fi + else + log_error "Flatseal non trouvé après installation" + if [ "$BATCH_INSTALL_MODE" != "true" ]; then + show_error_logs "Flatseal non trouvé après installation" + fi + return 1 + fi +} + # Fonction d'installation Gear Lever (AppImage Manager) install_gearlever() { log_info "Début de l'installation de Gear Lever" @@ -704,38 +964,15 @@ install_gearlever() { return fi - # Demander le mot de passe sudo pour cette installation - password=$(zenity --password --title="Authentification - Installation Gear Lever" --text="Mot de passe sudo requis pour installer Gear Lever:") - - if [ $? -eq 1 ]; then - return - fi - - # Vérifier le mot de passe sudo - if ! check_sudo_password "$password"; then + # Utiliser le mot de passe global ou demander un nouveau + if ! use_global_password_or_ask "Gear Lever"; then return fi ( - echo "10" ; echo "# Mise à jour des sources..." - echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get update >> "$LOG_FILE" 2>&1 - if ! check_apt_success $? "sources" "mise à jour"; then - echo "# Erreur lors de la mise à jour des sources" - exit 1 - fi - - echo "20" ; echo "# Installation de Flatpak..." - echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get install -y flatpak >> "$LOG_FILE" 2>&1 - if ! check_apt_success $? "flatpak" "installation"; then - echo "# Erreur lors de l'installation de Flatpak" - exit 1 - fi - - echo "40" ; echo "# Ajout du dépôt Flathub..." - echo "$password" | timeout $TIMEOUT_APT sudo -S flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo >> "$LOG_FILE" 2>&1 - if [ $? -ne 0 ]; then - log_error "Échec de l'ajout du dépôt Flathub" - echo "# Erreur lors de l'ajout de Flathub" + echo "40" ; echo "# Vérification des sources Flathub..." + if ! ensure_flathub_sources; then + echo "# Erreur lors de la configuration de Flathub" exit 1 fi @@ -782,38 +1019,15 @@ install_discord() { return fi - # Demander le mot de passe sudo pour cette installation - password=$(zenity --password --title="Authentification - Installation Discord" --text="Mot de passe sudo requis pour installer Discord:") - - if [ $? -eq 1 ]; then - return - fi - - # Vérifier le mot de passe sudo - if ! check_sudo_password "$password"; then + # Utiliser le mot de passe global ou demander un nouveau + if ! use_global_password_or_ask "Discord"; then return fi ( - echo "10" ; echo "# Mise à jour des sources..." - echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get update >> "$LOG_FILE" 2>&1 - if ! check_apt_success $? "sources" "mise à jour"; then - echo "# Erreur lors de la mise à jour des sources" - exit 1 - fi - - echo "20" ; echo "# Installation de Flatpak..." - echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get install -y flatpak >> "$LOG_FILE" 2>&1 - if ! check_apt_success $? "flatpak" "installation"; then - echo "# Erreur lors de l'installation de Flatpak" - exit 1 - fi - - echo "40" ; echo "# Ajout du dépôt Flathub..." - echo "$password" | timeout $TIMEOUT_APT sudo -S flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo >> "$LOG_FILE" 2>&1 - if [ $? -ne 0 ]; then - log_error "Échec de l'ajout du dépôt Flathub" - echo "# Erreur lors de l'ajout de Flathub" + echo "40" ; echo "# Vérification des sources Flathub..." + if ! ensure_flathub_sources; then + echo "# Erreur lors de la configuration de Flathub" exit 1 fi @@ -849,71 +1063,92 @@ install_discord() { fi } -# Fonction d'installation TeamSpeak -install_teamspeak() { - log_info "Début de l'installation de TeamSpeak" +# Fonction d'installation Vesktop +install_vesktop() { + log_info "Début de l'installation de Vesktop via Flatpak" - # Vérifier si TeamSpeak est déjà installé - if dpkg -l | grep -q "^ii.*teamspeak" || command -v teamspeak3 &> /dev/null; then - log_info "TeamSpeak déjà installé" - zenity --info --title="Déjà installé" --text="TeamSpeak est déjà installé sur le système." + # Vérifier si Vesktop est déjà installé via Flatpak + if flatpak list | grep -q "dev.vencord.Vesktop" 2>/dev/null; then + log_info "Vesktop déjà installé via Flatpak" + zenity --info --title="Déjà installé" --text="Vesktop est déjà installé via Flatpak sur le système." return fi - # Demander le mot de passe sudo pour cette installation - password=$(zenity --password --title="Authentification - Installation TeamSpeak" --text="Mot de passe sudo requis pour installer TeamSpeak:") - - if [ $? -eq 1 ]; then - return - fi - - # Vérifier le mot de passe sudo - if ! check_sudo_password "$password"; then + # Utiliser le mot de passe global ou demander un nouveau + if ! use_global_password_or_ask "Vesktop"; then return fi ( - echo "10" ; echo "# Mise à jour des sources..." - echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get update >> "$LOG_FILE" 2>&1 - if ! check_apt_success $? "sources" "mise à jour"; then - echo "# Erreur lors de la mise à jour des sources" + echo "40" ; echo "# Vérification des sources Flathub..." + if ! ensure_flathub_sources; then + echo "# Erreur lors de la configuration de Flathub" exit 1 fi - echo "20" ; echo "# Installation des dépendances..." - echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get install -y wget curl >> "$LOG_FILE" 2>&1 - if ! check_apt_success $? "dépendances" "installation"; then - echo "# Erreur lors de l'installation des dépendances" - exit 1 - fi - - echo "40" ; echo "# Téléchargement de TeamSpeak..." - TEAMSPEAK_URL="https://files.teamspeak-services.com/releases/client/3.6.2/TeamSpeak3-Client-linux_amd64-3.6.2.run" - timeout $TIMEOUT_DOWNLOAD wget "$TEAMSPEAK_URL" -O /tmp/teamspeak.run >> "$LOG_FILE" 2>&1 + echo "70" ; echo "# Installation de Vesktop via Flatpak..." + echo "$password" | timeout $TIMEOUT_INSTALL sudo -S flatpak install -y flathub dev.vencord.Vesktop >> "$LOG_FILE" 2>&1 if [ $? -ne 0 ]; then - log_error "Échec du téléchargement de TeamSpeak" - echo "# Erreur lors du téléchargement" + log_error "Échec de l'installation de Vesktop via Flatpak" + echo "# Erreur lors de l'installation de Vesktop" exit 1 fi - echo "60" ; echo "# Préparation de l'installation..." - chmod +x /tmp/teamspeak.run + echo "100" ; echo "# Vérification de l'installation..." + ) | zenity --progress \ + --title="Installation de Vesktop" \ + --text="Initialisation..." \ + --percentage=0 \ + --width=400 \ + --auto-close + + # Vérifier le code de sortie du processus + if [ ${PIPESTATUS[0]} -ne 0 ]; then + show_error_logs "Échec de l'installation de Vesktop" + return + fi + + # Vérifier si l'installation a réussi + if flatpak list | grep -q "dev.vencord.Vesktop" 2>/dev/null; then + log_info "Installation Vesktop réussie" + zenity --info --title="Succès" --text="Vesktop a été installé avec succès via Flatpak !\n\nLancez-le depuis le menu des applications ou avec :\nflatpak run dev.vencord.Vesktop" + else + log_error "Vesktop non trouvé après installation" + show_error_logs "Vesktop non trouvé après installation" + fi +} + +# Fonction d'installation TeamSpeak +install_teamspeak() { + log_info "Début de l'installation de TeamSpeak via Flatpak" + + # Vérifier si TeamSpeak est déjà installé via Flatpak + if flatpak list | grep -q "com.teamspeak.TeamSpeak3" 2>/dev/null; then + log_info "TeamSpeak déjà installé via Flatpak" + zenity --info --title="Déjà installé" --text="TeamSpeak est déjà installé via Flatpak sur le système." + return + fi + + # Utiliser le mot de passe global ou demander un nouveau + if ! use_global_password_or_ask "TeamSpeak"; then + return + fi + + ( + echo "20" ; echo "# Vérification des sources Flathub..." + if ! ensure_flathub_sources; then + echo "# Erreur lors de la configuration de Flathub" + exit 1 + fi - echo "80" ; echo "# Installation de TeamSpeak..." - # Installation silencieuse dans /opt/teamspeak3-client - echo "$password" | timeout $TIMEOUT_INSTALL sudo -S /tmp/teamspeak.run --target /opt/teamspeak3-client --noexec --nox11 >> "$LOG_FILE" 2>&1 + echo "70" ; echo "# Installation de TeamSpeak via Flatpak..." + echo "$password" | timeout $TIMEOUT_INSTALL sudo -S flatpak install -y flathub com.teamspeak.TeamSpeak3 >> "$LOG_FILE" 2>&1 if [ $? -ne 0 ]; then - log_error "Échec de l'installation de TeamSpeak" + log_error "Échec de l'installation de TeamSpeak via Flatpak" echo "# Erreur lors de l'installation de TeamSpeak" exit 1 fi - echo "90" ; echo "# Création du lien symbolique..." - echo "$password" | timeout $TIMEOUT_APT sudo -S ln -sf /opt/teamspeak3-client/ts3client_runscript.sh /usr/local/bin/teamspeak3 >> "$LOG_FILE" 2>&1 - - echo "95" ; echo "# Nettoyage..." - rm -f /tmp/teamspeak.run - echo "100" ; echo "# Vérification de l'installation..." ) | zenity --progress \ --title="Installation de TeamSpeak" \ @@ -929,15 +1164,102 @@ install_teamspeak() { fi # Vérifier si l'installation a réussi - if [ -d "/opt/teamspeak3-client" ] && [ -f "/usr/local/bin/teamspeak3" ]; then + if flatpak list | grep -q "com.teamspeak.TeamSpeak3" 2>/dev/null; then log_info "Installation TeamSpeak réussie" - zenity --info --title="Succès" --text="TeamSpeak a été installé avec succès !\n\nLancez-le avec la commande: teamspeak3" + zenity --info --title="Succès" --text="TeamSpeak a été installé avec succès via Flatpak !\n\nLancez-le depuis le menu des applications ou avec :\nflatpak run com.teamspeak.TeamSpeak3" else log_error "TeamSpeak non trouvé après installation" show_error_logs "TeamSpeak non trouvé après installation" fi } +# Fonction d'installation Mumble +install_mumble() { + log_info "Début de l'installation de Mumble" + + # Vérifier si Mumble est déjà installé + if dpkg -l | grep -q "^ii.*mumble" || command -v mumble &> /dev/null; then + log_info "Mumble déjà installé" + if [ "$BATCH_INSTALL_MODE" != "true" ]; then + zenity --info --title="Déjà installé" --text="Mumble est déjà installé sur le système." + fi + return + fi + + # Utiliser le mot de passe global ou demander un nouveau + if ! use_global_password_or_ask "Mumble"; then + return + fi + + # Fonction interne pour l'installation + install_mumble_steps() { + show_progress "Mumble" 20 "Mise à jour des sources..." + log_info "Début mise à jour des sources pour Mumble" + echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get update >> "$LOG_FILE" 2>&1 + local result=$? + log_info "Résultat apt-get update: $result" + if ! check_apt_success $result "sources" "mise à jour"; then + log_error "Échec mise à jour des sources pour Mumble" + return 1 + fi + + show_progress "Mumble" 70 "Installation de Mumble..." + log_info "Installation du paquet Mumble" + echo "$password" | timeout $TIMEOUT_INSTALL sudo -S apt-get install -y mumble >> "$LOG_FILE" 2>&1 + local result=$? + log_info "Résultat installation Mumble: $result" + if ! check_apt_success $result "mumble" "installation"; then + log_error "Échec installation Mumble" + return 1 + fi + + show_progress "Mumble" 100 "Vérification de l'installation..." + return 0 + } + + # Exécuter l'installation selon le mode + if [ "$BATCH_INSTALL_MODE" = "true" ]; then + # Mode groupé: exécution directe + if ! install_mumble_steps; then + log_error "Échec de l'installation de Mumble" + return 1 + fi + else + # Mode individuel: avec zenity progress + ( + install_mumble_steps + if [ $? -ne 0 ]; then + echo "# Erreur lors de l'installation" + exit 1 + fi + ) | zenity --progress \ + --title="Installation de Mumble" \ + --text="Initialisation..." \ + --percentage=0 \ + --width=400 \ + --auto-close + + if [ ${PIPESTATUS[0]} -ne 0 ]; then + show_error_logs "Échec de l'installation de Mumble" + return 1 + fi + fi + + # Vérifier si l'installation a réussi + if dpkg -l | grep -q "^ii.*mumble" || command -v mumble &> /dev/null; then + log_info "Installation Mumble réussie" + if [ "$BATCH_INSTALL_MODE" != "true" ]; then + zenity --info --title="Succès" --text="Mumble a été installé avec succès !\n\nLancez-le depuis le menu des applications." + fi + else + log_error "Mumble non trouvé après installation" + if [ "$BATCH_INSTALL_MODE" != "true" ]; then + show_error_logs "Mumble non trouvé après installation" + fi + return 1 + fi +} + # Fonction d'installation Heroic Game Launcher install_heroic() { log_info "Début de l'installation de Heroic Game Launcher" @@ -949,15 +1271,8 @@ install_heroic() { return fi - # Demander le mot de passe sudo pour cette installation - password=$(zenity --password --title="Authentification - Installation Heroic Game Launcher" --text="Mot de passe sudo requis pour installer Heroic Game Launcher:") - - if [ $? -eq 1 ]; then - return - fi - - # Vérifier le mot de passe sudo - if ! check_sudo_password "$password"; then + # Utiliser le mot de passe global ou demander un nouveau + if ! use_global_password_or_ask "Heroic Game Launcher"; then return fi @@ -1038,15 +1353,8 @@ install_nvidia() { return fi - # Demander le mot de passe sudo pour cette installation - password=$(zenity --password --title="Authentification - Installation drivers NVIDIA" --text="Mot de passe sudo requis pour installer les drivers NVIDIA:") - - if [ $? -eq 1 ]; then - return - fi - - # Vérifier le mot de passe sudo - if ! check_sudo_password "$password"; then + # Utiliser le mot de passe global ou demander un nouveau + if ! use_global_password_or_ask "drivers NVIDIA"; then return fi @@ -1144,15 +1452,8 @@ install_utils() { return fi - # Demander le mot de passe sudo pour cette installation - password=$(zenity --password --title="Authentification - Installation utilitaires gaming" --text="Mot de passe sudo requis pour installer les utilitaires gaming:") - - if [ $? -eq 1 ]; then - return - fi - - # Vérifier le mot de passe sudo - if ! check_sudo_password "$password"; then + # Utiliser le mot de passe global ou demander un nouveau + if ! use_global_password_or_ask "utilitaires gaming"; then return fi @@ -1654,14 +1955,75 @@ uninstall_discord() { fi } +# Fonction de désinstallation Vesktop +uninstall_vesktop() { + log_info "Début de la désinstallation de Vesktop via Flatpak" + + # Vérifier si Vesktop est installé via Flatpak + if ! flatpak list | grep -q "dev.vencord.Vesktop" 2>/dev/null; then + log_info "Vesktop non installé via Flatpak" + zenity --info --title="Non installé" --text="Vesktop n'est pas installé via Flatpak sur le système." + return + fi + + # Demander confirmation + if ! zenity --question --title="Confirmation" --text="Êtes-vous sûr de vouloir désinstaller Vesktop ?"; then + return + fi + + # Demander le mot de passe sudo + password=$(zenity --password --title="Authentification - Désinstallation Vesktop" --text="Mot de passe sudo requis pour désinstaller Vesktop:") + + if [ $? -eq 1 ]; then + return + fi + + # Vérifier le mot de passe sudo + if ! check_sudo_password "$password"; then + return + fi + + ( + echo "50" ; echo "# Désinstallation de Vesktop via Flatpak..." + echo "$password" | timeout $TIMEOUT_APT sudo -S flatpak uninstall -y dev.vencord.Vesktop >> "$LOG_FILE" 2>&1 + if [ $? -ne 0 ]; then + log_error "Échec de la désinstallation de Vesktop via Flatpak" + echo "# Erreur lors de la désinstallation de Vesktop" + exit 1 + fi + + echo "100" ; echo "# Vérification de la désinstallation..." + ) | zenity --progress \ + --title="Désinstallation de Vesktop" \ + --text="Initialisation..." \ + --percentage=0 \ + --width=400 \ + --auto-close + + # Vérifier le code de sortie du processus + if [ ${PIPESTATUS[0]} -ne 0 ]; then + show_error_logs "Échec de la désinstallation de Vesktop" + return + fi + + # Vérifier si la désinstallation a réussi + if ! flatpak list | grep -q "dev.vencord.Vesktop" 2>/dev/null; then + log_info "Désinstallation Vesktop réussie" + zenity --info --title="Succès" --text="Vesktop a été désinstallé avec succès !" + else + log_error "Échec de la désinstallation de Vesktop" + show_error_logs "Échec de la désinstallation de Vesktop" + fi +} + # Fonction de désinstallation TeamSpeak uninstall_teamspeak() { - log_info "Début de la désinstallation de TeamSpeak" + log_info "Début de la désinstallation de TeamSpeak via Flatpak" - # Vérifier si TeamSpeak est installé - if [ ! -d "/opt/teamspeak3-client" ] && ! command -v teamspeak3 &> /dev/null; then - log_info "TeamSpeak non installé" - zenity --info --title="Non installé" --text="TeamSpeak n'est pas installé sur le système." + # Vérifier si TeamSpeak est installé via Flatpak + if ! flatpak list | grep -q "com.teamspeak.TeamSpeak3" 2>/dev/null; then + log_info "TeamSpeak non installé via Flatpak" + zenity --info --title="Non installé" --text="TeamSpeak n'est pas installé via Flatpak sur le système." return fi @@ -1683,14 +2045,11 @@ uninstall_teamspeak() { fi ( - echo "30" ; echo "# Suppression du lien symbolique..." - echo "$password" | timeout $TIMEOUT_APT sudo -S rm -f /usr/local/bin/teamspeak3 >> "$LOG_FILE" 2>&1 - - echo "70" ; echo "# Suppression du dossier TeamSpeak..." - echo "$password" | timeout $TIMEOUT_APT sudo -S rm -rf /opt/teamspeak3-client >> "$LOG_FILE" 2>&1 + echo "50" ; echo "# Désinstallation de TeamSpeak via Flatpak..." + echo "$password" | timeout $TIMEOUT_APT sudo -S flatpak uninstall -y com.teamspeak.TeamSpeak3 >> "$LOG_FILE" 2>&1 if [ $? -ne 0 ]; then - log_error "Échec de la suppression du dossier TeamSpeak" - echo "# Erreur lors de la suppression du dossier TeamSpeak" + log_error "Échec de la désinstallation de TeamSpeak via Flatpak" + echo "# Erreur lors de la désinstallation de TeamSpeak" exit 1 fi @@ -1709,7 +2068,7 @@ uninstall_teamspeak() { fi # Vérifier si la désinstallation a réussi - if [ ! -d "/opt/teamspeak3-client" ] && ! command -v teamspeak3 &> /dev/null; then + if ! flatpak list | grep -q "com.teamspeak.TeamSpeak3" 2>/dev/null; then log_info "Désinstallation TeamSpeak réussie" zenity --info --title="Succès" --text="TeamSpeak a été désinstallé avec succès !" else @@ -1718,6 +2077,130 @@ uninstall_teamspeak() { fi } +# Fonction de désinstallation Mumble +uninstall_mumble() { + log_info "Début de la désinstallation de Mumble" + + # Vérifier si Mumble est installé + if ! dpkg -l | grep -q "^ii.*mumble" && ! command -v mumble &> /dev/null; then + log_info "Mumble non installé" + zenity --info --title="Non installé" --text="Mumble n'est pas installé sur le système." + return + fi + + # Demander confirmation + if ! zenity --question --title="Confirmation" --text="Êtes-vous sûr de vouloir désinstaller Mumble ?"; then + return + fi + + # Demander le mot de passe sudo + password=$(zenity --password --title="Authentification - Désinstallation Mumble" --text="Mot de passe sudo requis pour désinstaller Mumble:") + + if [ $? -eq 1 ]; then + return + fi + + # Vérifier le mot de passe sudo + if ! check_sudo_password "$password"; then + return + fi + + ( + echo "50" ; echo "# Désinstallation de Mumble..." + echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get purge -y mumble >> "$LOG_FILE" 2>&1 + if ! check_apt_success $? "mumble" "désinstallation"; then + echo "# Erreur lors de la désinstallation de Mumble" + exit 1 + fi + + echo "80" ; echo "# Nettoyage des paquets orphelins..." + echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get autoremove -y >> "$LOG_FILE" 2>&1 + + echo "100" ; echo "# Vérification de la désinstallation..." + ) | zenity --progress \ + --title="Désinstallation de Mumble" \ + --text="Initialisation..." \ + --percentage=0 \ + --width=400 \ + --auto-close + + # Vérifier le code de sortie du processus + if [ ${PIPESTATUS[0]} -ne 0 ]; then + show_error_logs "Échec de la désinstallation de Mumble" + return + fi + + # Vérifier si la désinstallation a réussi + if ! dpkg -l | grep -q "^ii.*mumble" && ! command -v mumble &> /dev/null; then + log_info "Désinstallation Mumble réussie" + zenity --info --title="Succès" --text="Mumble a été désinstallé avec succès !" + else + log_error "Échec de la désinstallation de Mumble" + show_error_logs "Échec de la désinstallation de Mumble" + fi +} + +# Fonction de désinstallation Flatseal +uninstall_flatseal() { + log_info "Début de la désinstallation de Flatseal via Flatpak" + + # Vérifier si Flatseal est installé via Flatpak + if ! flatpak list | grep -q "com.github.tchx84.Flatseal" 2>/dev/null; then + log_info "Flatseal non installé via Flatpak" + zenity --info --title="Non installé" --text="Flatseal n'est pas installé via Flatpak sur le système." + return + fi + + # Demander confirmation + if ! zenity --question --title="Confirmation" --text="Êtes-vous sûr de vouloir désinstaller Flatseal ?"; then + return + fi + + # Demander le mot de passe sudo + password=$(zenity --password --title="Authentification - Désinstallation Flatseal" --text="Mot de passe sudo requis pour désinstaller Flatseal:") + + if [ $? -eq 1 ]; then + return + fi + + # Vérifier le mot de passe sudo + if ! check_sudo_password "$password"; then + return + fi + + ( + echo "50" ; echo "# Désinstallation de Flatseal via Flatpak..." + echo "$password" | timeout $TIMEOUT_APT sudo -S flatpak uninstall -y com.github.tchx84.Flatseal >> "$LOG_FILE" 2>&1 + if [ $? -ne 0 ]; then + log_error "Échec de la désinstallation de Flatseal via Flatpak" + echo "# Erreur lors de la désinstallation de Flatseal" + exit 1 + fi + + echo "100" ; echo "# Vérification de la désinstallation..." + ) | zenity --progress \ + --title="Désinstallation de Flatseal" \ + --text="Initialisation..." \ + --percentage=0 \ + --width=400 \ + --auto-close + + # Vérifier le code de sortie du processus + if [ ${PIPESTATUS[0]} -ne 0 ]; then + show_error_logs "Échec de la désinstallation de Flatseal" + return + fi + + # Vérifier si la désinstallation a réussi + if ! flatpak list | grep -q "com.github.tchx84.Flatseal" 2>/dev/null; then + log_info "Désinstallation Flatseal réussie" + zenity --info --title="Succès" --text="Flatseal a été désinstallé avec succès !" + else + log_error "Échec de la désinstallation de Flatseal" + show_error_logs "Échec de la désinstallation de Flatseal" + fi +} + # Fonction de désinstallation Lutris uninstall_lutris() { log_info "Début de la désinstallation de Lutris" @@ -2009,20 +2492,32 @@ uninstall_utils() { # Vérifier et installer zenity si nécessaire (sans sudo) check_zenity_user() { if ! command -v zenity &> /dev/null; then - echo "Zenity n'est pas installé. Installation requise pour l'interface graphique." - password=$(zenity --password --title="Installation de zenity" --text="Mot de passe sudo requis pour installer zenity:" 2>/dev/null || echo "") - if [ -z "$password" ]; then - echo "Interface graphique non disponible. Veuillez installer zenity manuellement: sudo apt-get install zenity" + echo "Zenity n'est pas installé. Installation requise pour l'interface graphique..." + echo "Veuillez entrer votre mot de passe sudo pour installer zenity:" + sudo apt-get update > /dev/null 2>&1 + sudo apt-get install -y zenity + if ! command -v zenity &> /dev/null; then + echo "Erreur: Impossible d'installer zenity. Interface graphique non disponible." exit 1 fi - echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get update > /dev/null 2>&1 - echo "$password" | timeout $TIMEOUT_APT sudo -S apt-get install -y zenity > /dev/null 2>&1 + echo "Zenity installé avec succès!" fi } # Vérifier et installer zenity si nécessaire check_zenity_user +# Initialiser le fichier de log +initialize_log + +# Tester le système de logging +log_info "Script démarré avec succès" +log_info "Vérification du système de logging" +log_info "Fichier de log créé dans: $(pwd)/$(basename "$LOG_FILE")" + +# Afficher le chemin du log à l'utilisateur en cas de debug +echo "Fichier de log: $(pwd)/$(basename "$LOG_FILE")" >&2 + # Afficher le menu d'installation avec bouton désinstaller selection=$(show_install_selection) exit_code=$? @@ -2074,9 +2569,18 @@ if [ $exit_code -eq 1 ] && [ "$selection" = "Désinstaller" ]; then "discord") uninstall_discord ;; + "vesktop") + uninstall_vesktop + ;; "teamspeak") uninstall_teamspeak ;; + "mumble") + uninstall_mumble + ;; + "flatseal") + uninstall_flatseal + ;; "nvidia") uninstall_nvidia ;; @@ -2096,8 +2600,45 @@ else exit 0 fi - # Traiter les sélections d'installation + # Créer la liste des applications sélectionnées pour l'affichage IFS='|' read -ra SELECTED <<< "$selection" + app_list="" + for component in "${SELECTED[@]}"; do + case $component in + "steam") app_list="$app_list\n• Steam" ;; + "heroic") app_list="$app_list\n• Heroic Game Launcher" ;; + "lutris") app_list="$app_list\n• Lutris" ;; + "bottles") app_list="$app_list\n• Bottles" ;; + "wine") app_list="$app_list\n• Wine + Winetricks" ;; + "retroarch") app_list="$app_list\n• RetroArch" ;; + "flatpak") app_list="$app_list\n• Flatpak + Flathub" ;; + "gearlever") app_list="$app_list\n• Gear Lever" ;; + "discord") app_list="$app_list\n• Discord" ;; + "vesktop") app_list="$app_list\n• Vesktop" ;; + "teamspeak") app_list="$app_list\n• TeamSpeak" ;; + "mumble") app_list="$app_list\n• Mumble" ;; + "flatseal") app_list="$app_list\n• Flatseal" ;; + "nvidia") app_list="$app_list\n• NVIDIA + CUDA" ;; + "utils") app_list="$app_list\n• Utilitaires Gaming" ;; + esac + done + + # Demander le mot de passe sudo une seule fois pour toutes les installations + if ! get_global_sudo_password "$app_list"; then + exit 0 + fi + + # Activer le mode installation groupée si plusieurs applications sont sélectionnées + if [ ${#SELECTED[@]} -gt 1 ]; then + start_batch_install ${#SELECTED[@]} "$app_list" + + # Afficher une notification au début + zenity --info --timeout=5 \ + --title="Gaming Debian Installateur - Installation Multiple" \ + --text="Installation de ${#SELECTED[@]} applications en cours...\n\nCeci peut prendre plusieurs minutes.\nVeuillez patienter..." & + fi + + # Traiter les sélections d'installation for component in "${SELECTED[@]}"; do case $component in "steam") @@ -2127,9 +2668,18 @@ else "discord") install_discord ;; + "vesktop") + install_vesktop + ;; "teamspeak") install_teamspeak ;; + "mumble") + install_mumble + ;; + "flatseal") + install_flatseal + ;; "nvidia") install_nvidia ;; @@ -2137,7 +2687,38 @@ else install_utils ;; esac + + # Marquer l'application comme terminée dans le mode groupé + if [ "$BATCH_INSTALL_MODE" = "true" ]; then + case $component in + "steam") next_batch_app "Steam" ;; + "heroic") next_batch_app "Heroic Game Launcher" ;; + "lutris") next_batch_app "Lutris" ;; + "bottles") next_batch_app "Bottles" ;; + "wine") next_batch_app "Wine + Winetricks" ;; + "retroarch") next_batch_app "RetroArch" ;; + "flatpak") next_batch_app "Flatpak + Flathub" ;; + "gearlever") next_batch_app "Gear Lever" ;; + "discord") next_batch_app "Discord" ;; + "vesktop") next_batch_app "Vesktop" ;; + "teamspeak") next_batch_app "TeamSpeak" ;; + "mumble") next_batch_app "Mumble" ;; + "flatseal") next_batch_app "Flatseal" ;; + "nvidia") next_batch_app "NVIDIA + CUDA" ;; + "utils") next_batch_app "Utilitaires Gaming" ;; + esac + fi done + + # Terminer le mode installation groupée + if [ "$BATCH_INSTALL_MODE" = "true" ]; then + end_batch_install + + # Afficher un récapitulatif final + zenity --info --title="Gaming Debian Installateur - Installation terminée" \ + --text="Toutes les applications sélectionnées ont été installées avec succès !\n\n$app_list" \ + --width=400 + fi fi exit 0 \ No newline at end of file