1+ #! /bin/bash
2+
3+ # Script d'installation de Minion
4+ # Usage: curl {{.BaseURL}}/install_minion.sh | sh
5+
6+ set -e
7+
8+ # Couleurs pour l'affichage
9+ RED=' \033[0;31m'
10+ GREEN=' \033[0;32m'
11+ YELLOW=' \033[1;33m'
12+ NC=' \033[0m' # No Color
13+
14+ # Configuration
15+ BASE_URL=" {{.BaseURL}}"
16+ BINARY_NAME=" minion"
17+
18+ # Fonction pour afficher les messages
19+ log_info () {
20+ echo -e " ${GREEN} [INFO]${NC} $1 "
21+ }
22+
23+ log_warn () {
24+ echo -e " ${YELLOW} [WARN]${NC} $1 "
25+ }
26+
27+ log_error () {
28+ echo -e " ${RED} [ERROR]${NC} $1 "
29+ }
30+
31+ # Fonction pour détecter l'OS
32+ detect_os () {
33+ case " $( uname -s) " in
34+ Linux* ) OS=" linux" ;;
35+ Darwin* ) OS=" darwin" ;;
36+ CYGWIN* |MINGW* |MSYS* ) OS=" windows" ;;
37+ * ) OS=" unknown" ;;
38+ esac
39+
40+ if [ " $OS " = " unknown" ]; then
41+ log_error " OS non supporté: $( uname -s) "
42+ exit 1
43+ fi
44+
45+ log_info " OS détecté: $OS "
46+ }
47+
48+ # Fonction pour détecter l'architecture
49+ detect_arch () {
50+ ARCH=$( uname -m)
51+
52+ case " $ARCH " in
53+ x86_64|amd64) ARCH=" amd64" ;;
54+ aarch64|arm64) ARCH=" arm64" ;;
55+ armv7l) ARCH=" arm" ;;
56+ i386|i686) ARCH=" 386" ;;
57+ * )
58+ log_error " Architecture non supportée: $ARCH "
59+ exit 1
60+ ;;
61+ esac
62+
63+ log_info " Architecture détectée: $ARCH "
64+ }
65+
66+ # Fonction pour construire le nom du binaire
67+ build_binary_name () {
68+ local suffix=" "
69+
70+ # Déterminer le suffixe selon la plateforme
71+ case " $OS " in
72+ linux)
73+ if [ " $ARCH " = " amd64" ]; then
74+ suffix=" -linux"
75+ fi
76+ ;;
77+ windows)
78+ suffix=" .exe"
79+ if [ " $ARCH " = " amd64" ]; then
80+ suffix=" -windows.exe"
81+ fi
82+ ;;
83+ darwin)
84+ if [ " $ARCH " = " amd64" ]; then
85+ suffix=" -darwin"
86+ fi
87+ ;;
88+ esac
89+
90+ BINARY_FILE=" ${BINARY_NAME}${suffix} "
91+ DOWNLOAD_URL=" ${BASE_URL} /download/minion/${OS} -${ARCH}${suffix} "
92+
93+ log_info " Binaire cible: $BINARY_FILE "
94+ log_info " URL de téléchargement: $DOWNLOAD_URL "
95+ }
96+
97+ # Fonction pour télécharger le binaire
98+ download_binary () {
99+ local temp_file=" /tmp/${BINARY_FILE} "
100+
101+ log_info " Téléchargement du binaire..."
102+
103+ # Utiliser curl ou wget selon ce qui est disponible
104+ if command -v curl > /dev/null 2>&1 ; then
105+ if ! curl -L -o " $temp_file " " $DOWNLOAD_URL " ; then
106+ log_error " Échec du téléchargement avec curl"
107+ exit 1
108+ fi
109+ elif command -v wget > /dev/null 2>&1 ; then
110+ if ! wget -O " $temp_file " " $DOWNLOAD_URL " ; then
111+ log_error " Échec du téléchargement avec wget"
112+ exit 1
113+ fi
114+ else
115+ log_error " curl ou wget requis pour le téléchargement"
116+ exit 1
117+ fi
118+
119+ # Vérifier que le fichier a été téléchargé
120+ if [ ! -f " $temp_file " ]; then
121+ log_error " Le fichier n'a pas été téléchargé"
122+ exit 1
123+ fi
124+
125+ # Vérifier la taille du fichier
126+ if [ ! -s " $temp_file " ]; then
127+ log_error " Le fichier téléchargé est vide"
128+ rm -f " $temp_file "
129+ exit 1
130+ fi
131+
132+ log_info " Téléchargement terminé avec succès"
133+
134+ # Déplacer le binaire vers le répertoire de destination
135+ local install_dir=" /usr/local/bin"
136+ local final_path=" ${install_dir} /${BINARY_NAME} "
137+
138+ # Créer le répertoire s'il n'existe pas
139+ if [ ! -d " $install_dir " ]; then
140+ log_warn " Création du répertoire $install_dir "
141+ sudo mkdir -p " $install_dir "
142+ fi
143+
144+ # Copier et rendre exécutable
145+ log_info " Installation du binaire vers $final_path "
146+ sudo cp " $temp_file " " $final_path "
147+ sudo chmod +x " $final_path "
148+
149+ # Nettoyer le fichier temporaire
150+ rm -f " $temp_file "
151+
152+ log_info " Installation terminée avec succès"
153+ }
154+
155+ # Fonction pour vérifier l'installation
156+ verify_installation () {
157+ if command -v " $BINARY_NAME " > /dev/null 2>&1 ; then
158+ log_info " Vérification de l'installation..."
159+ local version_output
160+ if version_output=$( " $BINARY_NAME " --version 2> /dev/null) ; then
161+ log_info " Version installée: $version_output "
162+ else
163+ log_warn " Impossible d'obtenir la version, mais le binaire est installé"
164+ fi
165+ return 0
166+ else
167+ log_error " Le binaire n'est pas accessible dans le PATH"
168+ return 1
169+ fi
170+ }
171+
172+ # Fonction pour exécuter le binaire
173+ run_minion () {
174+ log_info " Démarrage de Minion..."
175+
176+ # Vérifier si des paramètres ont été passés via des variables d'environnement
177+ local minion_args=" "
178+
179+ if [ -n " $NEXUS_SERVER " ]; then
180+ minion_args=" $minion_args --server $NEXUS_SERVER "
181+ fi
182+
183+ if [ -n " $MINION_NAME " ]; then
184+ minion_args=" $minion_args --name $MINION_NAME "
185+ fi
186+
187+ if [ -n " $MINION_TAGS " ]; then
188+ minion_args=" $minion_args --tags $MINION_TAGS "
189+ fi
190+
191+ if [ -z " $minion_args " ]; then
192+ log_info " Aucune configuration fournie. Utilisation des paramètres par défaut."
193+ log_info " Variables d'environnement disponibles:"
194+ log_info " NEXUS_SERVER - Adresse du serveur Nexus"
195+ log_info " MINION_NAME - Nom du minion"
196+ log_info " MINION_TAGS - Tags du minion"
197+ log_info " "
198+ log_info " Exemple:"
199+ log_info " NEXUS_SERVER=nexus.example.com:8080 MINION_NAME=web-server-01 $0 "
200+ fi
201+
202+ # Exécuter le minion
203+ log_info " Commande exécutée: $BINARY_NAME $minion_args "
204+ exec " $BINARY_NAME " $minion_args
205+ }
206+
207+ # Fonction principale
208+ main () {
209+ log_info " === Installation de Minion ==="
210+
211+ # Vérifier les prérequis
212+ if [ " $EUID " -eq 0 ]; then
213+ log_warn " Attention: exécution en tant que root"
214+ fi
215+
216+ # Détecter l'environnement
217+ detect_os
218+ detect_arch
219+
220+ # Construire les informations de téléchargement
221+ build_binary_name
222+
223+ # Télécharger et installer
224+ download_binary
225+
226+ # Vérifier l'installation
227+ if verify_installation; then
228+ log_info " === Installation réussie ==="
229+
230+ # Exécuter le minion
231+ run_minion
232+ else
233+ log_error " === Échec de l'installation ==="
234+ exit 1
235+ fi
236+ }
237+
238+ # Exécuter le script principal
239+ main " $@ "
0 commit comments