diff --git a/sub_scripts/lxc_launcher.sh b/sub_scripts/lxc_launcher.sh index a46e926..f38861d 100755 --- a/sub_scripts/lxc_launcher.sh +++ b/sub_scripts/lxc_launcher.sh @@ -23,25 +23,47 @@ LXC_INIT () { LXC_START () { if [ "$no_lxc" -eq 0 ] then - # Démarrage de la machine - sudo lxc-start -n $LXC_NAME -d | tee -a "$RESULT" 2>&1 - for i in `seq 1 10` - do # Vérifie que la machine est accessible en ssh avant de commencer. Il lui faut le temps de démarrer. - echo -n . - if ssh $ARG_SSH $LXC_NAME "exit 0" > /dev/null 2>&1; then - break + for i in `seq 1 3` + do # Tente jusqu'à 3 fois de démarrer le conteneur + # Démarrage de la machine + sudo lxc-start -n $LXC_NAME -d | tee -a "$RESULT" 2>&1 + for j in `seq 1 10` + do # Vérifie que la machine est accessible en ssh avant de commencer. Il lui faut le temps de démarrer. + echo -n . + if ssh $ARG_SSH $LXC_NAME "exit 0" > /dev/null 2>&1; then + break + fi + sleep 1 + done + failstart=0 + sudo lxc-ls -f | grep $LXC_NAME | sed 's/- NO//' + if [ $(sudo lxc-info --name $LXC_NAME | grep -c "STOPPED") -ne 0 ]; then + ECHO_FORMAT "Le conteneur n'a pas démarré correctement...\n" "lred" "bold" + failstart=1 + if [ "$i" -ne 3 ]; then + echo "Redémarrage du conteneur..." + fi + LXC_STOP + elif ssh $ARG_SSH $LXC_NAME "ping -q -c 2 security.debian.org > /dev/null 2>&1; exit \$?"; then # Si le conteneur a démarré, test sa connectivité. + ECHO_FORMAT "Le conteneur ne parvient pas à accéder à internet...\n" "lred" "bold" + failstart=1 + if [ "$i" -ne 3 ]; then + echo "Redémarrage du conteneur..." + fi + LXC_STOP + else + break # Sort de la boucle for si le démarrage est réussi + fi + if [ "$i" -eq 3 ] && [ "$failstart" -eq 1 ]; then # Si le dernier démarrage est encore en erreur, stoppe le test + ECHO_FORMAT "Le conteneur a rencontré des erreurs 3 fois de suite...\nSi le problème persiste, utilisez le script lxc_check.sh pour vérifier et réparer le conteneur." "lred" "bold" + return 1 fi - sleep 1 done - sudo lxc-ls -f | grep $LXC_NAME | sed 's/- NO//' - if [ $(sudo lxc-info --name $LXC_NAME | grep -c "STOPPED") -ne 0 ]; then - ECHO_FORMAT "Le conteneur n'a pas démarré correctement...\nSi le problème persiste, utilisez le script lxc_check.sh pour vérifier et réparer le conteneur." "lred" "bold" - return 1 - fi scp -rq "$APP_CHECK" "$LXC_NAME": >> "$RESULT" 2>&1 ssh $ARG_SSH $LXC_NAME "$1 > /dev/null 2>> debug_output.log; exit \$?" >> "$RESULT" 2>&1 # Exécute la commande dans la machine LXC + returncode=$? sudo cat "/var/lib/lxc/$LXC_NAME/rootfs/home/pchecker/debug_output.log" >> "$OUTPUTD" # Récupère le contenu du OUTPUTD distant pour le réinjecter dans le local - return "$?" + return $returncode else # Sinon exécute la commande directement. eval "$1" > /dev/null 2>> "$OUTPUTD" fi diff --git a/sub_scripts/testing_process.sh b/sub_scripts/testing_process.sh old mode 100644 new mode 100755 index 5f45eda..3c16160 --- a/sub_scripts/testing_process.sh +++ b/sub_scripts/testing_process.sh @@ -42,23 +42,27 @@ CHECK_URL () { fi echo -e "$IP_CURL $DOMAIN #package_check\n$IP_CURL $SOUS_DOMAIN #package_check" | sudo tee -a /etc/hosts > /dev/null # Renseigne le hosts pour le domain à tester, pour passer directement sur localhost curl_error=0 - for i in 0 1 + http503=0 + i=1 + while [ "$i" -ne 3 ] # Tant que i vaut 1 ou 2, les tests continuent. do # 2 passes, pour effectuer un test avec le / final, et un autre sans. - if [ "$i" -eq 0 ]; then # Test sans / final. + if [ "$i" -eq 1 ]; then # Test sans / final. if [ "${CHECK_PATH:${#CHECK_PATH}-1}" == "/" ] # Si le dernier caractère est un / then MOD_CHECK_PATH="${CHECK_PATH:0:${#CHECK_PATH}-1}" # Supprime le / else MOD_CHECK_PATH=$CHECK_PATH fi + i=2 # La prochaine boucle passera au 2e test fi - if [ "$i" -eq 1 ]; then # Test avec / final. + if [ "$i" -eq 2 ]; then # Test avec / final. if [ "${CHECK_PATH:${#CHECK_PATH}-1}" != "/" ] # Si le dernier caractère n'est pas un / then MOD_CHECK_PATH="$CHECK_PATH/" # Ajoute / à la fin du path else MOD_CHECK_PATH=$CHECK_PATH fi + i=3 # La prochaine boucle terminera les tests fi rm -f "$script_dir/url_output" # Supprime le précédent fichier html si il est encore présent curl -LksS -w "%{http_code};%{url_effective}\n" $SOUS_DOMAIN$MOD_CHECK_PATH -o "$script_dir/url_output" > "$script_dir/curl_print" @@ -76,6 +80,19 @@ CHECK_URL () { then # Le code d'erreur 401 fait exception, si il y a 401 c'est en général l'application qui le renvoi. Donc l'install est bonne. curl_error=1 fi + if [ "${HTTP_CODE}" = "503" ] + then # Le code d'erreur 503 indique que la ressource est temporairement indisponible. On va le croire pour cette fois et lui donner une autre chance. + curl_error=0 + ECHO_FORMAT "Service temporairement indisponible...\n" "lyellow" "bold" + http503=$(( $http503 + 1 )) + if [ $http503 -eq 3 ]; then + curl_error=1 # Après 3 erreurs 503, le code est considéré définitivement comme une erreur + else + i=$(( $i - 1 )) # La boucle est décrémenté de 1 pour refaire le même test. + sleep 1 # Attend 1 seconde pour laisser le temps au service de se mettre en place. + continue # Retourne en début de boucle pour recommencer le test + fi + fi fi URL_TITLE=$(grep "" "$script_dir/url_output" | cut -d '>' -f 2 | cut -d '<' -f1) ECHO_FORMAT "Titre de la page: $URL_TITLE\n" "white" @@ -333,16 +350,20 @@ CHECK_UPGRADE () { # Installation de l'app SETUP_APP LOG_EXTRACTOR - ECHO_FORMAT "\nUpgrade sur la même version du package...\n" "white" "bold" - # Upgrade de l'app - COPY_LOG 1 - LXC_START "sudo yunohost --debug app upgrade $APPID -f \"$APP_PATH_YUNO\"" - YUNOHOST_RESULT=$? - COPY_LOG 2 - LOG_EXTRACTOR - # Test l'accès à l'app - CHECK_URL - tnote=$((tnote+1)) + if [ "$YUNOHOST_RESULT" -ne 0 ]; then + ECHO_FORMAT "\nInstallation échouée...\n" "lred" "bold" + else + ECHO_FORMAT "\nUpgrade sur la même version du package...\n" "white" "bold" + # Upgrade de l'app + COPY_LOG 1 + LXC_START "sudo yunohost --debug app upgrade $APPID -f \"$APP_PATH_YUNO\"" + YUNOHOST_RESULT=$? + COPY_LOG 2 + LOG_EXTRACTOR + # Test l'accès à l'app + CHECK_URL + tnote=$((tnote+1)) + fi if [ "$YUNOHOST_RESULT" -eq 0 ] && [ "$curl_error" -eq 0 ]; then ECHO_FORMAT "--- SUCCESS ---\n" "lgreen" "bold" note=$((note+1)) @@ -403,14 +424,18 @@ CHECK_BACKUP_RESTORE () { # Installation de l'app SETUP_APP LOG_EXTRACTOR - ECHO_FORMAT "\nBackup de l'application...\n" "white" "bold" - # Backup de l'app - COPY_LOG 1 - LXC_START "sudo yunohost --debug backup create -n Backup_test --apps $APPID --hooks $BACKUP_HOOKS" - YUNOHOST_RESULT=$? - COPY_LOG 2 - LOG_EXTRACTOR - tnote=$((tnote+1)) + if [ "$YUNOHOST_RESULT" -ne 0 ]; then + ECHO_FORMAT "\nInstallation échouée...\n" "lred" "bold" + else + ECHO_FORMAT "\nBackup de l'application...\n" "white" "bold" + # Backup de l'app + COPY_LOG 1 + LXC_START "sudo yunohost --debug backup create -n Backup_test --apps $APPID --hooks $BACKUP_HOOKS" + YUNOHOST_RESULT=$? + COPY_LOG 2 + LOG_EXTRACTOR + tnote=$((tnote+1)) + fi if [ "$YUNOHOST_RESULT" -eq 0 ]; then ECHO_FORMAT "--- SUCCESS ---\n" "lgreen" "bold" note=$((note+1)) @@ -735,9 +760,11 @@ CHECK_COMMON_ERROR () { LOG_EXTRACTOR if [ "$1" == "incorrect_path" ] || [ "$1" == "port_already_use" ]; then # Test l'accès à l'app - CHECK_URL - if [ "$curl_error" -ne 0 ]; then - YUNOHOST_RESULT=$curl_error + if [ "$YUNOHOST_RESULT" -eq 0 ]; then # Test l'url si l'installation à réussie. + CHECK_URL + if [ "$curl_error" -ne 0 ]; then + YUNOHOST_RESULT=$curl_error + fi fi fi tnote=$((tnote+1))