diff --git a/check_process b/check_process index 3487345..72edbb6 100644 --- a/check_process +++ b/check_process @@ -22,5 +22,5 @@ incorrect_path=1 corrupt_source=0 fail_download_source=0 - port_already_use=1 + port_already_use=1 (66) final_path_already_use=0 diff --git a/package_check.sh b/package_check.sh index e0106d8..ad30fa7 100755 --- a/package_check.sh +++ b/package_check.sh @@ -1,55 +1,129 @@ #!/bin/bash +# Arguments du script +# -b Mode bash, le script est autonome. Il ignore la valeur de $auto_remove +# --no-lxc N'utilise pas la virtualisation en conteneur lxc. La virtualisation est utilisée par défaut si disponible. +# --build-lxc Installe lxc et créer la machine si nécessaire. Incompatible avec -b en raison de la connexion ssh à valider lors du build. + +if [ "$#" -eq 0 ] +then + echo "Le script prend en argument le package à tester." + exit 1 +fi + +## Récupère les arguments +# --bash-mode +bash_mode=$(echo "$*" | grep -c -e "--bash-mode") # bash_mode vaut 1 si l'argument est présent. +# --no-lxc +no_lxc=$(echo "$*" | grep -c -e "--no-lxc") # no_lxc vaut 1 si l'argument est présent. +# --build-lxc +build_lxc=$(echo "$*" | grep -c -e "--build-lxc") # build_lxc vaut 1 si l'argument est présent. +arg_app=$(echo "$*" | sed 's/--bash-mode\|--no-lxc\|--build-lxc//g' | sed 's/^ *\| *$//g') # Supprime les arguments déjà lu pour ne garder que l'app. Et supprime les espaces au début et à la fin +# echo "arg_app=$arg_app." + USER_TEST=package_checker PASSWORD_TEST=checker_pwd PATH_TEST=/check -DOMAIN=$(sudo yunohost domain list -l 1 | cut -d" " -f 2) +LXC_NAME=$(cat sub_scripts/lxc_build.sh | grep LXC_NAME= | cut -d '=' -f2) + +if [ "$no_lxc" -eq 0 ] +then + DOMAIN=$(sudo cat /var/lib/lxc/$LXC_NAME/rootfs/etc/yunohost/current_host) +else + DOMAIN=$(sudo yunohost domain list -l 1 | cut -d" " -f 2) +fi +SOUS_DOMAIN="sous.$DOMAIN" abs_path=$(cd $(dirname $0); pwd) # Récupère le chemin absolu du script. +source $abs_path/sub_scripts/lxc_launcher.sh source $abs_path/sub_scripts/testing_process.sh source /usr/share/yunohost/helpers -# Vérifie l'existence de l'utilisateur de test -echo -e "\nVérification de l'existence de l'utilisateur de test..." -if ! ynh_user_exists "$USER_TEST" ; then # Si il n'existe pas, il faut le créer. - USER_TEST_CLEAN=${USER_TEST//"_"/""} - sudo yunohost user create --firstname "$USER_TEST_CLEAN" --mail "$USER_TEST_CLEAN@$DOMAIN" --lastname "$USER_TEST_CLEAN" --password "$PASSWORD_TEST" "$USER_TEST" - if [ "$?" -ne 0 ]; then - echo "La création de l'utilisateur de test a échoué. Impossible de continuer." +# Vérifie la connexion internet. +ping -q -c 2 yunohost.org > /dev/null 2>&1 +if [ "$?" -ne 0 ]; then # En cas d'échec de connexion, tente de pinger un autre domaine pour être sûr + ping -q -c 2 framasoft.org > /dev/null 2>&1 + if [ "$?" -ne 0 ]; then # En cas de nouvel échec de connexion. On considère que la connexion est down... + ECHO_FORMAT "Impossible d'établir une connexion à internet.\n" "red" exit 1 fi fi -# Vérifie l'existence du sous-domaine de test -echo "Vérification de l'existence de domaine de test..." -SOUS_DOMAIN="sous.$DOMAIN" -if [ "$(sudo yunohost domain list | grep -c "$SOUS_DOMAIN")" -eq 0 ] ; then # Si il n'existe pas, il faut le créer. - sudo yunohost domain add "$SOUS_DOMAIN" - if [ "$?" -ne 0 ]; then - echo "La création du sous-domain de test a échoué. Impossible de continuer." - exit 1 +if [ "$no_lxc" -eq 0 ] +then # Si le conteneur lxc est utilisé + lxc_ok=0 + # Vérifie la présence du virtualisateur en conteneur LXC + if dpkg-query -W -f '${Status}' "lxc" 2>/dev/null | grep -q "ok installed"; then + if sudo lxc-ls | grep -q "$LXC_NAME"; then # Si lxc est installé, vérifie la présence de la machine $LXC_NAME + lxc_ok=1 + fi + fi + if [ "$lxc_ok" -eq 0 ] + then + if [ "$build_lxc" -eq 1 ] + then + ./sub_scripts/lxc_build.sh # Lance la construction de la machine virtualisée. + else + ECHO_FORMAT "Lxc n'est pas installé, ou la machine $LXC_NAME n'est pas créée.\n" "red" + ECHO_FORMAT "Utilisez le script 'lxc_build.sh' pour installer lxc et créer la machine.\n" "red" + ECHO_FORMAT "Ou utilisez l'argument --no-lxc\n" "red" + exit 1 + fi + fi + # Stoppe toute activité éventuelle du conteneur, en cas d'arrêt incorrect précédemment + LXC_STOP + LXC_TURNOFF +else # Vérifie l'utilisateur et le domain si lxc n'est pas utilisé. + # Vérifie l'existence de l'utilisateur de test + echo -e "\nVérification de l'existence de l'utilisateur de test..." + if ! ynh_user_exists "$USER_TEST" + then # Si il n'existe pas, il faut le créer. + USER_TEST_CLEAN=${USER_TEST//"_"/""} + sudo yunohost user create --firstname "$USER_TEST_CLEAN" --mail "$USER_TEST_CLEAN@$DOMAIN" --lastname "$USER_TEST_CLEAN" --password "$PASSWORD_TEST" "$USER_TEST" + if [ "$?" -ne 0 ]; then + ECHO_FORMAT "La création de l'utilisateur de test a échoué. Impossible de continuer.\n" "red" + exit 1 + fi + fi + + # Vérifie l'existence du sous-domaine de test + echo "Vérification de l'existence du domaine de test..." + if [ "$(sudo yunohost domain list | grep -c "$SOUS_DOMAIN")" -eq 0 ]; then # Si il n'existe pas, il faut le créer. + sudo yunohost domain add "$SOUS_DOMAIN" + if [ "$?" -ne 0 ]; then + ECHO_FORMAT "La création du sous-domain de test a échoué. Impossible de continuer.\n" "red" + exit 1 + fi fi fi # Vérifie le type d'emplacement du package à tester GIT_PACKAGE=0 -if echo "$1" | grep -Eq "https?:\/\/" +if echo "$arg_app" | grep -Eq "https?:\/\/" then GIT_PACKAGE=1 - git clone $1 "../$(basename $1)" - APP_CHECK="../$(basename $1)" + git clone $arg_app "$(basename $arg_app)_check" else - APP_CHECK="$1" + # Si c'est un dossier local, il est copié dans le dossier du script. + sudo cp -a "$arg_app" "$(basename $arg_app)_check" fi +APP_CHECK="$(basename $arg_app)_check" +if [ ! -d "$APP_CHECK" ]; then + ECHO_FORMAT "Le dossier de l'application a tester est introuvable...\n" "red" + exit 1 +fi +sudo rm -rf $APP_CHECK/.git # Purge des fichiers de git # Vérifie l'existence du fichier check_process if [ ! -e $APP_CHECK/check_process ]; then - echo -e "\nImpossible de trouver le fichier check_process pour procéder aux tests." - echo "Merci d'ajouter un fichier check_process à la racine de l'app à tester." + ECHO_FORMAT "\nImpossible de trouver le fichier check_process pour procéder aux tests.\n" "red" + ECHO_FORMAT "Merci d'ajouter un fichier check_process à la racine de l'app à tester.\n" "red" exit 1 fi + + TEST_RESULTS () { ECHO_FORMAT "\n\nInstallation: " if [ "$GLOBAL_CHECK_SETUP" -eq 1 ]; then @@ -219,8 +293,28 @@ TEST_RESULTS () { elif [ "$GLOBAL_CHECK_RESTORE" -eq -1 ]; then ECHO_FORMAT "\t\t\t\tFAIL\n" "lred" else - ECHO_FORMAT "\t\t\t\tNot evaluated.\n\n" "white" + ECHO_FORMAT "\t\t\t\tNot evaluated.\n" "white" fi + ECHO_FORMAT "\t\t Notes de résultats: $note/$tnote - " "white" "bold" + note=$(( note * 20 / tnote )) + if [ $note -le 5 ]; then + color_note="red" + typo_note="bold" + elif [ $note -le 10 ]; then + color_note="red" + typo_note="" + elif [ $note -le 15 ]; then + color_note="lyellow" + typo_note="" + elif [ $note -gt 15 ]; then + color_note="lgreen" + typo_note="" + elif [ $note -eq 20 ]; then + color_note="lgreen" + typo_note="bold" + fi + ECHO_FORMAT "$note/20\n" "$color_note" "$typo_note" + ECHO_FORMAT "\t Ensemble de tests effectués: $tnote/19\n\n" "white" "bold" } INIT_VAR() { @@ -276,6 +370,13 @@ INIT_VAR() { INIT_VAR echo -n "" > $COMPLETE_LOG # Initialise le fichier de log +echo -n "" > $RESULT # Initialise le fichier des résulats d'analyse +note=0 +tnote=0 +all_test=0 +if [ "$no_lxc" -eq 0 ]; then + LXC_INIT +fi ## Parsing du fichier check_process de manière séquentielle. while read LIGNE @@ -288,7 +389,9 @@ do TESTING_PROCESS TEST_RESULTS INIT_VAR - read -p "Appuyer sur une touche pour démarrer le scénario de test suivant..." < /dev/tty + if [ "$bash_mode" -ne 1 ]; then + read -p "Appuyer sur une touche pour démarrer le scénario de test suivant..." < /dev/tty + fi fi PROCESS_NAME=${LIGNE#\#\# } IN_PROCESS=1 @@ -342,48 +445,98 @@ do then # Analyse des tests à effectuer sur ce scenario. if echo "$LIGNE" | grep -q "setup_sub_dir="; then # Test d'installation en sous-dossier setup_sub_dir=$(echo "$LIGNE" | cut -d '=' -f2) + if [ "$setup_sub_dir" -eq 1 ]; then + all_test=$((all_test+1)) + fi fi if echo "$LIGNE" | grep -q "setup_root="; then # Test d'installation à la racine setup_root=$(echo "$LIGNE" | cut -d '=' -f2) + if [ "$setup_root" -eq 1 ]; then + all_test=$((all_test+1)) + fi fi if echo "$LIGNE" | grep -q "setup_nourl="; then # Test d'installation sans accès par url setup_nourl=$(echo "$LIGNE" | cut -d '=' -f2) + if [ "$setup_nourl" -eq 1 ]; then + all_test=$((all_test+1)) + fi fi if echo "$LIGNE" | grep -q "setup_private="; then # Test d'installation en privé setup_private=$(echo "$LIGNE" | cut -d '=' -f2) + if [ "$setup_private" -eq 1 ]; then + all_test=$((all_test+1)) + fi fi if echo "$LIGNE" | grep -q "setup_public="; then # Test d'installation en public setup_public=$(echo "$LIGNE" | cut -d '=' -f2) + if [ "$setup_public" -eq 1 ]; then + all_test=$((all_test+1)) + fi fi if echo "$LIGNE" | grep -q "upgrade="; then # Test d'upgrade upgrade=$(echo "$LIGNE" | cut -d '=' -f2) + if [ "$upgrade" -eq 1 ]; then + all_test=$((all_test+1)) + fi fi if echo "$LIGNE" | grep -q "backup_restore="; then # Test de backup et restore backup_restore=$(echo "$LIGNE" | cut -d '=' -f2) + if [ "$backup_restore" -eq 1 ]; then + all_test=$((all_test+1)) + fi fi if echo "$LIGNE" | grep -q "multi_instance="; then # Test d'installation multiple multi_instance=$(echo "$LIGNE" | cut -d '=' -f2) + if [ "$multi_instance" -eq 1 ]; then + all_test=$((all_test+1)) + fi fi if echo "$LIGNE" | grep -q "wrong_user="; then # Test d'erreur d'utilisateur wrong_user=$(echo "$LIGNE" | cut -d '=' -f2) + if [ "$wrong_user" -eq 1 ]; then + all_test=$((all_test+1)) + fi fi if echo "$LIGNE" | grep -q "wrong_path="; then # Test d'erreur de path ou de domaine wrong_path=$(echo "$LIGNE" | cut -d '=' -f2) + if [ "$wrong_path" -eq 1 ]; then + all_test=$((all_test+1)) + fi fi if echo "$LIGNE" | grep -q "incorrect_path="; then # Test d'erreur de forme de path incorrect_path=$(echo "$LIGNE" | cut -d '=' -f2) + if [ "$incorrect_path" -eq 1 ]; then + all_test=$((all_test+1)) + fi fi if echo "$LIGNE" | grep -q "corrupt_source="; then # Test d'erreur sur source corrompue corrupt_source=$(echo "$LIGNE" | cut -d '=' -f2) + if [ "$corrupt_source" -eq 1 ]; then + all_test=$((all_test+1)) + fi fi if echo "$LIGNE" | grep -q "fail_download_source="; then # Test d'erreur de téléchargement de la source fail_download_source=$(echo "$LIGNE" | cut -d '=' -f2) + if [ "$fail_download_source" -eq 1 ]; then + all_test=$((all_test+1)) + fi fi if echo "$LIGNE" | grep -q "port_already_use="; then # Test d'erreur de port port_already_use=$(echo "$LIGNE" | cut -d '=' -f2) + if echo "$LIGNE" | grep -q "([0-9]*)" + then # Le port est mentionné ici. + MANIFEST_PORT="$(echo "$LIGNE" | cut -d '(' -f2 | cut -d ')' -f1)" # Récupère le numéro du port; Le numéro de port est précédé de # pour indiquer son absence du manifest. + port_already_use=${port_already_use:0:1} # Garde uniquement la valeur de port_already_use + fi + if [ "$port_already_use" -eq 1 ]; then + all_test=$((all_test+1)) + fi fi if echo "$LIGNE" | grep -q "final_path_already_use="; then # Test sur final path déjà utilisé. final_path_already_use=$(echo "$LIGNE" | cut -d '=' -f2) + if [ "$final_path_already_use" -eq 1 ]; then + all_test=$((all_test+1)) + fi fi fi @@ -391,12 +544,13 @@ do done < "$APP_CHECK/check_process" TESTING_PROCESS +if [ "$no_lxc" -eq 0 ]; then + LXC_TURNOFF +fi TEST_RESULTS echo "Le log complet des installations et suppressions est disponible dans le fichier $COMPLETE_LOG" # Clean rm -f debug_output temp_Test_results.log url_output -if [ "$GIT_PACKAGE" -eq 1 ]; then - sudo rm -r "$APP_CHECK" -fi +sudo rm -rf "$APP_CHECK" diff --git a/sub_scripts/log_extractor.sh b/sub_scripts/log_extractor.sh index 8ed9b83..11008b3 100644 --- a/sub_scripts/log_extractor.sh +++ b/sub_scripts/log_extractor.sh @@ -36,9 +36,10 @@ COPY_LOG () { if [ "$1" -eq 1 ]; then log_line=$(sudo wc -l "$YUNOHOST_LOG" | cut -d ' ' -f 1) # Compte le nombre de ligne du fichier de log Yunohost log_line=$(( $log_line + 1 )) # Ignore la première ligne, reprise de l'ancien log. + echo -n "" > "$OUTPUTD" # Efface le fichier de log temporaire fi if [ "$1" -eq 2 ]; then - sudo tail -n +$log_line "$YUNOHOST_LOG" > "$OUTPUTD" # Copie le fichier de log à partir de la dernière ligne du log préexistant + sudo tail -n +$log_line "$YUNOHOST_LOG" >> "$OUTPUTD" # Copie le fichier de log à partir de la dernière ligne du log préexistant fi } @@ -78,6 +79,11 @@ LOG_EXTRACTOR () { echo -n ">ERROR: " >> "temp_$RESULT" echo "$LOG_LIGNE" | sed 's/^.* ERROR *//' >> "temp_$RESULT" fi + if echo "$LOG_LIGNE" | grep -q "yunohost.*: error:"; then # Récupère aussi les erreurs de la moulinette + echo -n ">ERROR: " >> "temp_$RESULT" + echo "$LOG_LIGNE" >> "temp_$RESULT" + fi + if echo "$LOG_LIGNE" | grep -q " WARNING "; then echo -n ">WARNING: " >> "temp_$RESULT" echo "$LOG_LIGNE" | sed 's/^.* WARNING *//' >> "temp_$RESULT" diff --git a/sub_scripts/lxc_build.sh b/sub_scripts/lxc_build.sh new file mode 100755 index 0000000..6bd1da9 --- /dev/null +++ b/sub_scripts/lxc_build.sh @@ -0,0 +1,125 @@ +#!/bin/bash + +LOG_BUILD_LXC="Build_lxc.log" +PLAGE_IP="10.1.4" +ARG_SSH="-t" +DOMAIN=domain.tld +YUNO_PWD=admin +LXC_NAME=pchecker_lxc + +# Check root +CHECK_ROOT=$EUID +if [ -z "$CHECK_ROOT" ];then CHECK_ROOT=0;fi +if [ $CHECK_ROOT -eq 0 ] +then # $EUID est vide sur une exécution avec sudo. Et vaut 0 pour root + echo "Le script ne doit pas être exécuté avec les droits root" + exit 1 +fi + + +echo "Update et install lxc lxctl" | tee "$LOG_BUILD_LXC" +sudo apt-get update >> "$LOG_BUILD_LXC" 2>&1 +sudo apt-get install -y lxc lxctl >> "$LOG_BUILD_LXC" 2>&1 + +echo "Création d'une machine debian jessie minimaliste" | tee -a "$LOG_BUILD_LXC" +sudo lxc-create -n $LXC_NAME -t debian -- -r jessie >> "$LOG_BUILD_LXC" 2>&1 + +echo "Autoriser l'ip forwarding, pour router vers la machine virtuelle." | tee -a "$LOG_BUILD_LXC" +echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/lxc_pchecker.conf >> "$LOG_BUILD_LXC" 2>&1 +sudo sysctl -p /etc/sysctl.d/lxc_pchecker.conf >> "$LOG_BUILD_LXC" 2>&1 + +echo "Ajoute un brige réseau pour la machine virtualisée" | tee -a "$LOG_BUILD_LXC" +echo | sudo tee /etc/network/interfaces.d/lxc-pchecker <> "$LOG_BUILD_LXC" 2>&1 +auto lxc-pchecker +iface lxc-pchecker inet static + address $PLAGE_IP.1/24 + bridge_ports none + bridge_fd 0 + bridge_maxwait 0 +EOF + +echo "Active le bridge réseau" | tee -a "$LOG_BUILD_LXC" +sudo ifup lxc-pchecker >> "$LOG_BUILD_LXC" 2>&1 + +echo "Configuration réseau du conteneur" | tee -a "$LOG_BUILD_LXC" +sudo sed -i 's/^lxc.network.type = empty$/lxc.network.type = veth\nlxc.network.flags = up\nlxc.network.link = lxc-pchecker\nlxc.network.name = eth0\nlxc.network.veth.pair = $LXC_NAME\nlxc.network.hwaddr = 00:FF:AA:00:00:01/' /var/lib/lxc/$LXC_NAME/config >> "$LOG_BUILD_LXC" 2>&1 + +echo "Configuration réseau de la machine virtualisée" | tee -a "$LOG_BUILD_LXC" +sudo sed -i "s@iface eth0 inet dhcp@iface eth0 inet static\n\taddress $PLAGE_IP.2/24\n\tgateway $PLAGE_IP.1@" /var/lib/lxc/$LXC_NAME/rootfs/etc/network/interfaces >> "$LOG_BUILD_LXC" 2>&1 + +echo "Configure le parefeu" | tee -a "$LOG_BUILD_LXC" +sudo iptables -A FORWARD -i lxc-pchecker -o eth0 -j ACCEPT >> "$LOG_BUILD_LXC" 2>&1 +sudo iptables -A FORWARD -i eth0 -o lxc-pchecker -j ACCEPT >> "$LOG_BUILD_LXC" 2>&1 +sudo iptables -t nat -A POSTROUTING -s $PLAGE_IP.0/24 -j MASQUERADE >> "$LOG_BUILD_LXC" 2>&1 + +echo "Démarrage de la machine" | tee -a "$LOG_BUILD_LXC" +sudo lxc-start -n $LXC_NAME -d >> "$LOG_BUILD_LXC" 2>&1 +sleep 3 +sudo lxc-ls -f >> "$LOG_BUILD_LXC" 2>&1 + +echo "Update et install tasksel sudo git" | tee -a "$LOG_BUILD_LXC" +sudo lxc-attach -n $LXC_NAME -- apt-get update +sudo lxc-attach -n $LXC_NAME -- apt-get install -y tasksel sudo git +echo "Installation des paquets standard et ssh-server" | tee -a "$LOG_BUILD_LXC" +sudo lxc-attach -n $LXC_NAME -- tasksel install standard ssh-server + +echo "Renseigne /etc/hosts sur l'invité" | tee -a "$LOG_BUILD_LXC" +sudo lxc-attach -n $LXC_NAME -- echo "127.0.0.1 $LXC_NAME" | sudo tee -a /var/lib/lxc/$LXC_NAME/rootfs/etc/hosts >> "$LOG_BUILD_LXC" 2>&1 + +echo "Ajoute l'user pchecker" | tee -a "$LOG_BUILD_LXC" +sudo lxc-attach -n $LXC_NAME -- useradd -m -p pchecker pchecker >> "$LOG_BUILD_LXC" 2>&1 + +echo "Autorise pchecker à utiliser sudo sans mot de passe" | tee -a "$LOG_BUILD_LXC" +echo "pchecker ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee -a /var/lib/lxc/$LXC_NAME/rootfs/etc/sudoers >> "$LOG_BUILD_LXC" 2>&1 + +echo "Mise en place de la connexion ssh vers l'invité." | tee -a "$LOG_BUILD_LXC" +ssh-keygen -t dsa -f $HOME/.ssh/$LXC_NAME -P '' >> "$LOG_BUILD_LXC" 2>&1 +sudo mkdir /var/lib/lxc/$LXC_NAME/rootfs/home/pchecker/.ssh >> "$LOG_BUILD_LXC" 2>&1 +sudo cp $HOME/.ssh/$LXC_NAME.pub /var/lib/lxc/$LXC_NAME/rootfs/home/pchecker/.ssh/authorized_keys >> "$LOG_BUILD_LXC" 2>&1 +sudo lxc-attach -n $LXC_NAME -- chown pchecker: -R /home/pchecker/.ssh >> "$LOG_BUILD_LXC" 2>&1 + +echo | tee -a $HOME/.ssh/config <> "$LOG_BUILD_LXC" 2>&1 +# ssh $LXC_NAME +Host $LXC_NAME +Hostname $PLAGE_IP.2 +User pchecker +IdentityFile $HOME/.ssh/$LXC_NAME +EOF + +ssh $ARG_SSH $LXC_NAME "exit 0" # Initie une premier connexion SSH pour valider la clé. +if [ "$?" -ne 0 ]; then # Si l'utilisateur tarde trop, la connexion sera refusée... ??? + ssh $ARG_SSH $LXC_NAME "exit 0" # Initie une premier connexion SSH pour valider la clé. +fi + +ssh $ARG_SSH $LXC_NAME "git clone https://github.com/YunoHost/install_script /tmp/install_script" >> "$LOG_BUILD_LXC" 2>&1 +echo "Installation de Yunohost..." | tee -a "$LOG_BUILD_LXC" +ssh $ARG_SSH $LXC_NAME "cd /tmp/install_script; sudo ./install_yunohost -a" | tee -a "$LOG_BUILD_LXC" 2>&1 +echo "Post install Yunohost" | tee -a "$LOG_BUILD_LXC" +ssh $ARG_SSH $LXC_NAME "sudo yunohost tools postinstall --domain $DOMAIN --password $YUNO_PWD" | tee -a "$LOG_BUILD_LXC" 2>&1 + +USER_TEST=$(cat ../package_check.sh | grep USER_TEST= | cut -d '=' -f2) +PASSWORD_TEST=$(cat ../package_check.sh | grep PASSWORD_TEST= | cut -d '=' -f2) +SOUS_DOMAIN="sous.$DOMAIN" +echo "Le mot de passe Yunohost est \'$YUNO_PWD\'" +echo "Ajout du sous domaine de test" | tee -a "$LOG_BUILD_LXC" +ssh $ARG_SSH $LXC_NAME "sudo yunohost domain add \"$SOUS_DOMAIN\"" +USER_TEST_CLEAN=${USER_TEST//"_"/""} +echo "Ajout de l'utilisateur de test" | tee -a "$LOG_BUILD_LXC" +ssh $ARG_SSH $LXC_NAME "sudo yunohost user create --firstname \"$USER_TEST_CLEAN\" --mail \"$USER_TEST_CLEAN@$DOMAIN\" --lastname \"$USER_TEST_CLEAN\" --password \"$PASSWORD_TEST\" \"$USER_TEST\"" + +echo -e "\nVérification de l'état de Yunohost" | tee -a "$LOG_BUILD_LXC" +ssh $ARG_SSH $LXC_NAME "sudo yunohost -v" | tee -a "$LOG_BUILD_LXC" 2>&1 + + +echo "Arrêt de la machine virtualisée" | tee -a "$LOG_BUILD_LXC" +sudo lxc-stop -n $LXC_NAME >> "$LOG_BUILD_LXC" 2>&1 + +echo "Suppression des règles de parefeu" | tee -a "$LOG_BUILD_LXC" +sudo iptables -D FORWARD -i lxc-pchecker -o eth0 -j ACCEPT >> "$LOG_BUILD_LXC" 2>&1 +sudo iptables -D FORWARD -i eth0 -o lxc-pchecker -j ACCEPT >> "$LOG_BUILD_LXC" 2>&1 +sudo iptables -t nat -D POSTROUTING -s $PLAGE_IP.0/24 -j MASQUERADE >> "$LOG_BUILD_LXC" 2>&1 +sudo ifdown lxc-pchecker >> "$LOG_BUILD_LXC" 2>&1 + +echo "Création d'un snapshot" | tee -a "$LOG_BUILD_LXC" +sudo lxc-snapshot -n $LXC_NAME >> "$LOG_BUILD_LXC" 2>&1 +# Il sera nommé snap0 et stocké dans /var/lib/lxcsnaps/$LXC_NAME/snap0/ diff --git a/sub_scripts/lxc_launcher.sh b/sub_scripts/lxc_launcher.sh new file mode 100755 index 0000000..bdd4f80 --- /dev/null +++ b/sub_scripts/lxc_launcher.sh @@ -0,0 +1,85 @@ +#!/bin/bash + +ARG_SSH="-t" +PLAGE_IP=$(cat sub_scripts/lxc_build.sh | grep PLAGE_IP= | cut -d '"' -f2) + +echo -e "\nChargement des fonctions de lxc_launcher.sh" + +LXC_INIT () { + # Activation du bridge réseau + echo "Initialisation du réseau pour le conteneur." + sudo ifup lxc-pchecker | tee -a $RESULT 2>&1 + + # Activation des règles iptables + sudo iptables -A FORWARD -i lxc-pchecker -o eth0 -j ACCEPT | tee -a $RESULT 2>&1 + sudo iptables -A FORWARD -i eth0 -o lxc-pchecker -j ACCEPT | tee -a $RESULT 2>&1 + sudo iptables -t nat -A POSTROUTING -s $PLAGE_IP.0/24 -j MASQUERADE | tee -a $RESULT 2>&1 + + if [ "$no_lxc" -eq 0 ]; then + YUNOHOST_LOG=/var/lib/lxc/$LXC_NAME/rootfs$YUNOHOST_LOG #Prend le log de la machine lxc plutôt que celui de l'hôte + fi +} + +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 + 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...\n" "lred" "bold" + return 1 + fi + scp -rq "$APP_CHECK" "$LXC_NAME": >> $RESULT 2>&1 + ssh $ARG_SSH $LXC_NAME "$1 > /dev/null 2>> \"$OUTPUTD\"; exit \$?" >> $RESULT 2>&1 # Exécute la commande dans la machine LXC + sudo cat "/var/lib/lxc/$LXC_NAME/rootfs/home/pchecker/$OUTPUTD" >> "$OUTPUTD" # Récupère le contenu du OUTPUTD distant pour le réinjecter dans le local + return "$?" + else # Sinon exécute la commande directement. + command=$(echo "$1" | sed "s@\"@@g") # Remplace les guillemets doubles par des simples + $command > /dev/null 2>> "$OUTPUTD" + fi +} + +LXC_STOP () { + if [ "$no_lxc" -eq 0 ] + then + # Arrêt de la machine virtualisée + if [ $(sudo lxc-info --name $LXC_NAME | grep -c "STOPPED") -eq 0 ]; then + echo "Arrêt du conteneur LXC" | tee -a $RESULT + sudo lxc-stop -n $LXC_NAME | tee -a $RESULT 2>&1 + fi + # Restaure le snapshot. + echo "Restauration du snapshot de la machine lxc" | tee -a $RESULT + sudo rsync -aEAX --delete -i /var/lib/lxcsnaps/$LXC_NAME/snap0/rootfs/ /var/lib/lxc/$LXC_NAME/rootfs/ >> $RESULT 2>&1 + fi +} + +LXC_TURNOFF () { + echo "Arrêt du réseau pour le conteneur." + # Suppression des règles de parefeu + if sudo iptables -D FORWARD -i lxc-pchecker -o eth0 -j ACCEPT 2> /dev/null + then + sudo iptables -D FORWARD -i lxc-pchecker -o eth0 -j ACCEPT >> $RESULT 2>&1 + fi + if sudo iptables -C FORWARD -i eth0 -o lxc-pchecker -j ACCEPT 2> /dev/null + then + sudo iptables -D FORWARD -i eth0 -o lxc-pchecker -j ACCEPT | tee -a $RESULT 2>&1 + fi + if sudo iptables -t nat -C POSTROUTING -s $PLAGE_IP.0/24 -j MASQUERADE 2> /dev/null + then + sudo iptables -t nat -D POSTROUTING -s $PLAGE_IP.0/24 -j MASQUERADE | tee -a $RESULT 2>&1 + fi + # Et arrêt du bridge + if sudo ifquery lxc-pchecker --state > /dev/null + then + sudo ifdown lxc-pchecker | tee -a $RESULT 2>&1 + fi +} diff --git a/sub_scripts/lxc_remove.sh b/sub_scripts/lxc_remove.sh new file mode 100755 index 0000000..08e17a3 --- /dev/null +++ b/sub_scripts/lxc_remove.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +LXC_NAME=$(cat sub_scripts/lxc_build.sh | grep LXC_NAME= | cut -d '=' -f2) + +# Check root +CHECK_ROOT=$EUID +if [ -z "$CHECK_ROOT" ];then CHECK_ROOT=0;fi +if [ $CHECK_ROOT -eq 0 ] +then # $EUID est vide sur une exécution avec sudo. Et vaut 0 pour root + echo "Le script ne doit pas être exécuté avec les droits root" + exit 1 +fi + +echo "Retire l'ip forwarding." +sudo rm /etc/sysctl.d/lxc_pchecker.conf +sudo sysctl -p + +echo "Désactive le bridge réseau" +sudo ifdown lxc-pchecker + +echo "Supprime le brige réseau" +sudo rm /etc/network/interfaces.d/lxc-pchecker + +echo "Suppression de la machine et de son snapshots" +sudo lxc-snapshot -n $LXC_NAME -d snap0 +sudo rm -f /var/lib/lxcsnaps/$LXC_NAME/snap0.tar.gz +sudo lxc-destroy -n $LXC_NAME -f + +echo "Remove lxc lxctl" +sudo apt-get remove lxc lxctl + +echo "Suppression des lignes de pchecker_lxc dans .ssh/config" +BEGIN_LINE=$(cat $HOME/.ssh/config | grep -n "^# ssh pchecker_lxc$" | cut -d':' -f 1) +sed -i "$BEGIN_LINE,/^IdentityFile/d" $HOME/.ssh/config diff --git a/sub_scripts/lxc_upgrade.sh b/sub_scripts/lxc_upgrade.sh new file mode 100644 index 0000000..d1a28ce --- /dev/null +++ b/sub_scripts/lxc_upgrade.sh @@ -0,0 +1,49 @@ +#!/bin/bash + +PLAGE_IP=$(cat sub_scripts/lxc_build.sh | grep PLAGE_IP= | cut -d '"' -f2) +LXC_NAME=$(cat sub_scripts/lxc_build.sh | grep LXC_NAME= | cut -d '=' -f2) + +echo "Active le bridge réseau" +sudo ifup lxc-pchecker + +echo "Configure le parefeu" +sudo iptables -A FORWARD -i lxc-pchecker -o eth0 -j ACCEPT +sudo iptables -A FORWARD -i eth0 -o lxc-pchecker -j ACCEPT +sudo iptables -t nat -A POSTROUTING -s $PLAGE_IP.0/24 -j MASQUERADE + +echo "Démarrage de la machine" +sudo lxc-start -n $LXC_NAME -d +sleep 3 +sudo lxc-ls -f + +echo "Update" +sudo lxc-attach -n $LXC_NAME -- apt-get update +sudo lxc-attach -n $LXC_NAME -- apt-get dist-upgrade --dry-run | grep -q "^Inst " # Vérifie si il y aura des mises à jour. +if [ "$?" -eq 0 ]; then + update_apt=1 +fi +echo "update_apt=$update_apt" +echo "Upgrade" +sudo lxc-attach -n $LXC_NAME -- apt-get dist-upgrade +echo "Clean" +sudo lxc-attach -n $LXC_NAME -- apt-get autoremove +sudo lxc-attach -n $LXC_NAME -- apt-get autoclean + +echo "Arrêt de la machine virtualisée" +sudo lxc-stop -n $LXC_NAME + +echo "Suppression des règles de parefeu" +sudo iptables -D FORWARD -i lxc-pchecker -o eth0 -j ACCEPT +sudo iptables -D FORWARD -i eth0 -o lxc-pchecker -j ACCEPT +sudo iptables -t nat -D POSTROUTING -s $PLAGE_IP.0/24 -j MASQUERADE +sudo ifdown lzc-pchecker + + +if [ "$update_apt" -eq 1 ] +then + echo "Archivage du snapshot" + sudo tar -czf --acls --xattrs /var/lib/lxcsnaps/$LXC_NAME/snap0.tar.gz /var/lib/lxcsnaps/$LXC_NAME/snap0 + echo "Remplacement du snapshot" + sudo lxc-snapshot -n $LXC_NAME -d snap0 + sudo lxc-snapshot -n $LXC_NAME +fi diff --git a/sub_scripts/testing_process.sh b/sub_scripts/testing_process.sh index 19ad0f5..e75a9b6 100644 --- a/sub_scripts/testing_process.sh +++ b/sub_scripts/testing_process.sh @@ -7,31 +7,37 @@ echo -e "\nChargement des fonctions de testing_process.sh" source $abs_path/sub_scripts/log_extractor.sh -echo -n "" > $RESULT # Initialise le fichier des résulats d'analyse - SETUP_APP () { # echo -e "MANIFEST_ARGS=$MANIFEST_ARGS_MOD" COPY_LOG 1 - sudo yunohost --debug app install $APP_CHECK -a "$MANIFEST_ARGS_MOD" > /dev/null 2>&1 + LXC_START "sudo yunohost --debug app install $APP_CHECK -a \"$MANIFEST_ARGS_MOD\"" YUNOHOST_RESULT=$? COPY_LOG 2 - APPID=$(grep -o "YNH_APP_INSTANCE_NAME=[^ ]*" "$OUTPUTD" | cut -d '=' -f2) # Récupère le nom de l'app au moment de l'install. Pour pouvoir le réutiliser dans les commandes yunohost. La regex matche tout ce qui suit le =, jusqu'à l'espace. + APPID=$(grep -o -m1 "YNH_APP_INSTANCE_NAME=[^ ]*" "$OUTPUTD" | cut -d '=' -f2) # Récupère le nom de l'app au moment de l'install. Pour pouvoir le réutiliser dans les commandes yunohost. La regex matche tout ce qui suit le =, jusqu'à l'espace. } REMOVE_APP () { - if [ "$auto_remove" -eq 0 ]; then # Si l'auto_remove est désactivée. Marque une pause avant de continuer. + if [ "$auto_remove" -eq 0 ] && [ "$bash_mode" -ne 1 ]; then # Si l'auto_remove est désactivée. Marque une pause avant de continuer. + if [ "$no_lxc" -eq 0 ]; then + echo "Utilisez ssh pour vous connecter au conteneur LXC. 'ssh $ARG_SSH $LXC_NAME'" + fi read -p "Appuyer sur une touche pour supprimer l'application et continuer les tests..." < /dev/tty fi ECHO_FORMAT "\nSuppression...\n" "white" "bold" COPY_LOG 1 - sudo yunohost --debug app remove $APPID > /dev/null 2>&1 + LXC_START "sudo yunohost --debug app remove \"$APPID\"" YUNOHOST_REMOVE=$? COPY_LOG 2 } CHECK_URL () { ECHO_FORMAT "\nAccès par l'url...\n" "white" "bold" - echo "127.0.0.1 $SOUS_DOMAIN #package_check" | sudo tee -a /etc/hosts > /dev/null # Renseigne le hosts pour le domain à tester, pour passer directement sur localhost + if [ "$no_lxc" -eq 0 ]; then + IP_CURL="$(cat sub_scripts/lxc_build.sh | grep PLAGE_IP= | cut -d '"' -f2).2" + else + IP_CURL="127.0.0.1" + fi + echo "$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 -LksS $SOUS_DOMAIN/$CHECK_PATH -o url_output URL_TITLE=$(grep "" url_output | cut -d '>' -f 2 | cut -d '<' -f1) ECHO_FORMAT "Titre de la page: $URL_TITLE\n" "white" @@ -45,12 +51,15 @@ CHECK_URL () { grep "<body" -A 20 url_output | sed 1d | tee -a $RESULT echo -e "\e[0m" fi - sudo sed -i '/#package_check/d' /etc/hosts # Supprime la ligne dans le hosts + if [ "$no_lxc" -eq 0 ]; then + sudo sed -i '/#package_check/d' /etc/hosts # Supprime la ligne dans le hosts + fi } CHECK_SETUP_SUBDIR () { # Test d'installation en sous-dossier - ECHO_FORMAT "\n\n>> Installation en sous-dossier...\n" "white" "bold" + ECHO_FORMAT "\n\n>> Installation en sous-dossier... [Test $cur_test/$all_test]\n" "white" "bold" + cur_test=$((cur_test+1)) if [ -z "$MANIFEST_DOMAIN" ]; then echo "Clé de manifest pour 'domain' introuvable dans le fichier check_process. Impossible de procéder à ce test" return @@ -74,8 +83,11 @@ CHECK_SETUP_SUBDIR () { # Installation de l'app SETUP_APP LOG_EXTRACTOR + tnote=$((tnote+2)) + install_pass=1 if [ "$YUNOHOST_RESULT" -eq 0 ]; then ECHO_FORMAT "--- SUCCESS ---\n" "lgreen" "bold" + note=$((note+2)) GLOBAL_CHECK_SETUP=1 # Installation réussie GLOBAL_CHECK_SUB_DIR=1 # Installation en sous-dossier réussie else @@ -93,8 +105,11 @@ CHECK_SETUP_SUBDIR () { if [ "$YUNOHOST_RESULT" -eq 0 ] # Si l'installation a été un succès. On teste la suppression then LOG_EXTRACTOR + tnote=$((tnote+2)) + install_pass=2 if [ "$YUNOHOST_REMOVE" -eq 0 ]; then ECHO_FORMAT "--- SUCCESS ---\n" "lgreen" "bold" + note=$((note+2)) GLOBAL_CHECK_REMOVE_SUBDIR=1 # Suppression en sous-dossier réussie GLOBAL_CHECK_REMOVE=1 # Suppression réussie else @@ -109,7 +124,8 @@ CHECK_SETUP_SUBDIR () { CHECK_SETUP_ROOT () { # Test d'installation à la racine - ECHO_FORMAT "\n\n>> Installation à la racine...\n" "white" "bold" + ECHO_FORMAT "\n\n>> Installation à la racine... [Test $cur_test/$all_test]\n" "white" "bold" + cur_test=$((cur_test+1)) if [ -z "$MANIFEST_DOMAIN" ]; then echo "Clé de manifest pour 'domain' introuvable dans le fichier check_process. Impossible de procéder à ce test" return @@ -133,8 +149,18 @@ CHECK_SETUP_ROOT () { # Installation de l'app SETUP_APP LOG_EXTRACTOR + if [ "$install_pass" -gt 0 ]; then + tnote=$((tnote+1)) + else + tnote=$((tnote+2)) + fi if [ "$YUNOHOST_RESULT" -eq 0 ]; then ECHO_FORMAT "--- SUCCESS ---\n" "lgreen" "bold" + if [ "$GLOBAL_CHECK_SETUP" -eq 1 ]; then + note=$((note+1)) + else + note=$((note+2)) + fi GLOBAL_CHECK_SETUP=1 # Installation réussie GLOBAL_CHECK_ROOT=1 # Installation à la racine réussie else @@ -152,8 +178,19 @@ CHECK_SETUP_ROOT () { if [ "$YUNOHOST_RESULT" -eq 0 ] # Si l'installation a été un succès. On teste la suppression then LOG_EXTRACTOR + if [ "$install_pass" -eq 2 ]; then + tnote=$((tnote+1)) + else + tnote=$((tnote+2)) + fi + install_pass=3 if [ "$YUNOHOST_REMOVE" -eq 0 ]; then ECHO_FORMAT "--- SUCCESS ---\n" "lgreen" "bold" + if [ "$GLOBAL_CHECK_REMOVE" -eq 0 ]; then + note=$((note+2)) + else + note=$((note+1)) + fi GLOBAL_CHECK_REMOVE_ROOT=1 # Suppression à la racine réussie GLOBAL_CHECK_REMOVE=1 # Suppression réussie else @@ -164,17 +201,25 @@ CHECK_SETUP_ROOT () { GLOBAL_CHECK_REMOVE_ROOT=-1 # Suppression à la racine échouée fi fi + install_pass=$((install_pass+1)) } CHECK_SETUP_NO_URL () { # Test d'installation sans accès par url - ECHO_FORMAT "\n\n>> Installation sans accès par url...\n" "white" "bold" + ECHO_FORMAT "\n\n>> Installation sans accès par url... [Test $cur_test/$all_test]\n" "white" "bold" + cur_test=$((cur_test+1)) MANIFEST_ARGS_MOD=$MANIFEST_ARGS # Copie des arguments # Installation de l'app SETUP_APP LOG_EXTRACTOR + if [ "$install_pass" -eq 0 ]; then + tnote=$((tnote+1)) + fi if [ "$YUNOHOST_RESULT" -eq 0 ]; then ECHO_FORMAT "--- SUCCESS ---\n" "lgreen" "bold" + if [ "$GLOBAL_CHECK_SETUP" -eq 0 ]; then + note=$((note+1)) + fi GLOBAL_CHECK_SETUP=1 # Installation réussie else ECHO_FORMAT "--- FAIL ---\n" "lred" "bold" @@ -187,8 +232,14 @@ CHECK_SETUP_NO_URL () { if [ "$YUNOHOST_RESULT" -eq 0 ] # Si l'installation a été un succès. On teste la suppression then LOG_EXTRACTOR + if [ "$install_pass" -eq 1 ] || [ "$install_pass" -eq 3 ]; then + tnote=$((tnote+1)) + fi if [ "$YUNOHOST_REMOVE" -eq 0 ]; then ECHO_FORMAT "--- SUCCESS ---\n" "lgreen" "bold" + if [ "$GLOBAL_CHECK_REMOVE_ROOT" -eq 0 ]; then + note=$((note+1)) + fi GLOBAL_CHECK_REMOVE_ROOT=1 # Suppression réussie else ECHO_FORMAT "--- FAIL ---\n" "lred" "bold" @@ -202,7 +253,8 @@ CHECK_SETUP_NO_URL () { CHECK_UPGRADE () { # Test d'upgrade - ECHO_FORMAT "\n\n>> Upgrade...\n" "white" "bold" + ECHO_FORMAT "\n\n>> Upgrade... [Test $cur_test/$all_test]\n" "white" "bold" + cur_test=$((cur_test+1)) if [ "$GLOBAL_CHECK_SETUP" -ne 1 ]; then echo "L'installation a échouée, impossible d'effectuer ce test..." return; @@ -231,12 +283,14 @@ CHECK_UPGRADE () { ECHO_FORMAT "\nUpgrade sur la même version du package...\n" "white" "bold" # Upgrade de l'app COPY_LOG 1 - sudo yunohost --debug app upgrade $APPID -f $APP_CHECK > /dev/null 2>&1 + LXC_START "sudo yunohost --debug app upgrade $APPID -f $APP_CHECK" YUNOHOST_RESULT=$? COPY_LOG 2 LOG_EXTRACTOR + tnote=$((tnote+1)) if [ "$YUNOHOST_RESULT" -eq 0 ]; then ECHO_FORMAT "--- SUCCESS ---\n" "lgreen" "bold" + note=$((note+1)) GLOBAL_CHECK_UPGRADE=1 # Upgrade réussie else ECHO_FORMAT "--- FAIL ---\n" "lred" "bold" @@ -244,13 +298,16 @@ CHECK_UPGRADE () { fi # Test l'accès à l'app CHECK_URL - # Suppression de l'app - REMOVE_APP + if [ "$no_lxc" -ne 0 ]; then + # Suppression de l'app si lxc n'est pas utilisé. + REMOVE_APP + fi } CHECK_BACKUP_RESTORE () { # Test de backup - ECHO_FORMAT "\n\n>> Backup...\n" "white" "bold" + ECHO_FORMAT "\n\n>> Backup... [Test $cur_test/$all_test]\n" "white" "bold" + cur_test=$((cur_test+1)) if [ "$GLOBAL_CHECK_SETUP" -ne 1 ]; then echo "L'installation a échouée, impossible d'effectuer ce test..." fi @@ -278,12 +335,14 @@ CHECK_BACKUP_RESTORE () { ECHO_FORMAT "\nBackup de l'application...\n" "white" "bold" # Backup de l'app COPY_LOG 1 - sudo yunohost --debug backup create -n Backup_test --apps $APPID --hooks $BACKUP_HOOKS > /dev/null 2>&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" -eq 0 ]; then ECHO_FORMAT "--- SUCCESS ---\n" "lgreen" "bold" + note=$((note+1)) GLOBAL_CHECK_BACKUP=1 # Backup réussi else ECHO_FORMAT "--- FAIL ---\n" "lred" "bold" @@ -294,12 +353,14 @@ CHECK_BACKUP_RESTORE () { ECHO_FORMAT "\nRestauration de l'application...\n" "white" "bold" # Restore de l'app COPY_LOG 1 - sudo yunohost --debug backup restore Backup_test --force --apps $APPID > /dev/null 2>&1 + LXC_START "sudo yunohost --debug backup restore Backup_test --force --apps $APPID" YUNOHOST_RESULT=$? COPY_LOG 2 LOG_EXTRACTOR + tnote=$((tnote+1)) if [ "$YUNOHOST_RESULT" -eq 0 ]; then ECHO_FORMAT "--- SUCCESS ---\n" "lgreen" "bold" + note=$((note+1)) GLOBAL_CHECK_RESTORE=1 # Restore réussi else ECHO_FORMAT "--- FAIL ---\n" "lred" "bold" @@ -307,20 +368,23 @@ CHECK_BACKUP_RESTORE () { fi # Test l'accès à l'app CHECK_URL - # Suppression de l'app - REMOVE_APP - # Suppression de l'archive - sudo yunohost backup delete Backup_test > /dev/null 2>&1 + if [ "$no_lxc" -ne 0 ]; then + # Suppression de l'app si lxc n'est pas utilisé. + REMOVE_APP + # Suppression de l'archive + sudo yunohost backup delete Backup_test > /dev/null + fi } CHECK_PUBLIC_PRIVATE () { # Test d'installation en public/privé if [ "$1" == "private" ]; then - ECHO_FORMAT "\n\n>> Installation privée...\n" "white" "bold" + ECHO_FORMAT "\n\n>> Installation privée... [Test $cur_test/$all_test]\n" "white" "bold" fi if [ "$1" == "public" ]; then - ECHO_FORMAT "\n\n>> Installation publique...\n" "white" "bold" + ECHO_FORMAT "\n\n>> Installation publique... [Test $cur_test/$all_test]\n" "white" "bold" fi + cur_test=$((cur_test+1)) if [ "$GLOBAL_CHECK_SETUP" -ne 1 ]; then echo "L'installation a échouée, impossible d'effectuer ce test..." return @@ -373,8 +437,10 @@ CHECK_PUBLIC_PRIVATE () { fi fi LOG_EXTRACTOR + tnote=$((tnote+1)) if [ "$YUNOHOST_RESULT" -eq 0 ]; then ECHO_FORMAT "--- SUCCESS ---\n" "lgreen" "bold" + note=$((note+1)) if [ "$1" == "private" ]; then GLOBAL_CHECK_PRIVATE=1 # Installation privée réussie fi @@ -390,13 +456,16 @@ CHECK_PUBLIC_PRIVATE () { GLOBAL_CHECK_PUBLIC=-1 # Installation publique échouée fi fi - # Suppression de l'app - REMOVE_APP + if [ "$no_lxc" -ne 0 ]; then + # Suppression de l'app si lxc n'est pas utilisé. + REMOVE_APP + fi } CHECK_MULTI_INSTANCE () { # Test d'installation en multi-instance - ECHO_FORMAT "\n\n>> Installation multi-instance...\n" "white" "bold" + ECHO_FORMAT "\n\n>> Installation multi-instance... [Test $cur_test/$all_test]\n" "white" "bold" + cur_test=$((cur_test+1)) if [ "$GLOBAL_CHECK_SETUP" -ne 1 ]; then echo "L'installation a échouée, impossible d'effectuer ce test..." return @@ -426,8 +495,10 @@ CHECK_MULTI_INSTANCE () { CHECK_PATH="$PATH_TEST-2" SETUP_APP LOG_EXTRACTOR + tnote=$((tnote+1)) if [ "$YUNOHOST_RESULT" -eq 0 ] && [ "$YUNOHOST_RESULT_first" -eq 0 ]; then ECHO_FORMAT "--- SUCCESS ---\n" "lgreen" "bold" + note=$((note+1)) GLOBAL_CHECK_MULTI_INSTANCE=1 # Installation multi-instance réussie else ECHO_FORMAT "--- FAIL ---\n" "lred" "bold" @@ -439,38 +510,41 @@ CHECK_MULTI_INSTANCE () { # Test l'accès à la 2e instance de l'app CHECK_PATH="$PATH_TEST-2" CHECK_URL - # Suppression de la 2e app - REMOVE_APP - # Suppression de la 1ère app - APPID=$APPID_first - REMOVE_APP + if [ "$no_lxc" -ne 0 ]; then + # Suppression de la 2e app si lxc n'est pas utilisé. + REMOVE_APP + # Suppression de la 1ère app + APPID=$APPID_first + REMOVE_APP + fi } CHECK_COMMON_ERROR () { # Test d'erreur depuis le manifest if [ "$1" == "wrong_user" ]; then - ECHO_FORMAT "\n\n>> Erreur d'utilisateur...\n" "white" "bold" + ECHO_FORMAT "\n\n>> Erreur d'utilisateur... [Test $cur_test/$all_test]\n" "white" "bold" fi if [ "$1" == "wrong_path" ]; then - ECHO_FORMAT "\n\n>> Erreur de domaine...\n" "white" "bold" + ECHO_FORMAT "\n\n>> Erreur de domaine... [Test $cur_test/$all_test]\n" "white" "bold" fi if [ "$1" == "incorrect_path" ]; then - ECHO_FORMAT "\n\n>> Path mal formé...\n" "white" "bold" + ECHO_FORMAT "\n\n>> Path mal formé... [Test $cur_test/$all_test]\n" "white" "bold" fi if [ "$1" == "port_already_use" ]; then - ECHO_FORMAT "\n\n>> Port déjà utilisé...\n" "white" "bold" + ECHO_FORMAT "\n\n>> Port déjà utilisé... [Test $cur_test/$all_test]\n" "white" "bold" if [ -z "$MANIFEST_PORT" ]; then - echo "Clé de manifest pour 'port' introuvable dans le fichier check_process. Impossible de procéder à ce test" + echo "Clé de manifest pour 'port' introuvable ou port non renseigné dans le fichier check_process. Impossible de procéder à ce test" return fi fi + cur_test=$((cur_test+1)) if [ "$GLOBAL_CHECK_SETUP" -ne 1 ]; then echo "L'installation a échouée, impossible d'effectuer ce test..." return fi MANIFEST_ARGS_MOD=$MANIFEST_ARGS # Copie des arguments if [ "$1" == "wrong_path" ]; then # Force un domaine incorrect - MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s/$MANIFEST_DOMAIN=[a-Z./-$]*\&/$MANIFEST_DOMAIN=domain.tld\&/") + MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s/$MANIFEST_DOMAIN=[a-Z./-$]*\&/$MANIFEST_DOMAIN=domainenerreur.rien\&/") else MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s/$MANIFEST_DOMAIN=[a-Z./-$]*\&/$MANIFEST_DOMAIN=$SOUS_DOMAIN\&/") fi @@ -498,12 +572,19 @@ CHECK_COMMON_ERROR () { MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s/$MANIFEST_PUBLIC=[a-Z]*\&/$MANIFEST_PUBLIC=$MANIFEST_PUBLIC_public\&/") fi if [ "$1" == "port_already_use" ]; then # Force un port déjà utilisé - MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s@$MANIFEST_PORT=[0-9$]*\&@$MANIFEST_PORT=6660\&@") - sudo yunohost firewall allow Both 6660 > /dev/null 2>&1 + if [ "${MANIFEST_PORT:0:1}" == "#" ] # Si le premier caractère de $MANIFEST_PORT est un #, c'est un numéro de port. Absent du manifest + then + check_port="${MANIFEST_PORT:1}" # Récupère le numéro de port + else + MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s@$MANIFEST_PORT=[0-9$]*\&@$MANIFEST_PORT=6660\&@") + check_port=6660 # Sinon fixe le port à 6660 dans le manifest + fi + LXC_START "sudo yunohost firewall allow Both $check_port" fi # Installation de l'app SETUP_APP LOG_EXTRACTOR + tnote=$((tnote+1)) if [ "$YUNOHOST_RESULT" -eq 0 ]; then # wrong_user et wrong_path doivent aboutir à échec de l'installation. C'est l'inverse pour incorrect_path et port_already_use. if [ "$1" == "wrong_user" ]; then ECHO_FORMAT "--- FAIL ---\n" "lred" "bold" @@ -515,19 +596,23 @@ CHECK_COMMON_ERROR () { fi if [ "$1" == "incorrect_path" ]; then ECHO_FORMAT "--- SUCCESS ---\n" "lgreen" "bold" + note=$((note+1)) GLOBAL_CHECK_PATH=1 # Installation privée réussie fi if [ "$1" == "port_already_use" ]; then ECHO_FORMAT "--- SUCCESS ---\n" "lgreen" "bold" + note=$((note+1)) GLOBAL_CHECK_PORT=1 # Installation privée réussie fi else if [ "$1" == "wrong_user" ]; then ECHO_FORMAT "--- SUCCESS ---\n" "lgreen" "bold" + note=$((note+1)) GLOBAL_CHECK_ADMIN=1 # Installation privée échouée fi if [ "$1" == "wrong_path" ]; then ECHO_FORMAT "--- SUCCESS ---\n" "lgreen" "bold" + note=$((note+1)) GLOBAL_CHECK_DOMAIN=1 # Installation privée échouée fi if [ "$1" == "incorrect_path" ]; then @@ -543,16 +628,19 @@ CHECK_COMMON_ERROR () { # Test l'accès à l'app CHECK_URL fi - # Suppression de l'app - REMOVE_APP - if [ "$1" == "port_already_use" ]; then # Libère le port ouvert pour le test - sudo yunohost firewall disallow Both 6660 > /dev/null + if [ "$no_lxc" -ne 0 ]; then + # Suppression de l'app si lxc n'est pas utilisé. + REMOVE_APP + if [ "$1" == "port_already_use" ]; then # Libère le port ouvert pour le test + sudo yunohost firewall disallow Both $check_port > /dev/null + fi fi } CHECK_CORRUPT () { # Test d'erreur sur source corrompue - ECHO_FORMAT "\n\n>> Source corrompue après téléchargement...\n" "white" "bold" + ECHO_FORMAT "\n\n>> Source corrompue après téléchargement... [Test $cur_test/$all_test]\n" "white" "bold" + cur_test=$((cur_test+1)) if [ "$GLOBAL_CHECK_SETUP" -ne 1 ]; then echo "L'installation a échouée, impossible d'effectuer ce test..." fi @@ -561,7 +649,8 @@ echo -n "Non implémenté" } CHECK_DL () { # Test d'erreur de téléchargement de la source - ECHO_FORMAT "\n\n>> Erreur de téléchargement de la source...\n" "white" "bold" + ECHO_FORMAT "\n\n>> Erreur de téléchargement de la source... [Test $cur_test/$all_test]\n" "white" "bold" + cur_test=$((cur_test+1)) if [ "$GLOBAL_CHECK_SETUP" -ne 1 ]; then echo "L'installation a échouée, impossible d'effectuer ce test..." fi @@ -570,7 +659,8 @@ echo -n "Non implémenté" } CHECK_FINALPATH () { # Test sur final path déjà utilisé. - ECHO_FORMAT "\n\n>> Final path déjà utilisé...\n" "white" "bold" + ECHO_FORMAT "\n\n>> Final path déjà utilisé... [Test $cur_test/$all_test]\n" "white" "bold" + cur_test=$((cur_test+1)) if [ "$GLOBAL_CHECK_SETUP" -ne 1 ]; then echo "L'installation a échouée, impossible d'effectuer ce test..." fi @@ -580,50 +670,66 @@ echo -n "Non implémenté" TESTING_PROCESS () { # Lancement des tests + cur_test=1 ECHO_FORMAT "\nScénario de test: $PROCESS_NAME\n" "white" "underlined" if [ "$setup_sub_dir" -eq 1 ]; then CHECK_SETUP_SUBDIR # Test d'installation en sous-dossier + LXC_STOP fi if [ "$setup_root" -eq 1 ]; then CHECK_SETUP_ROOT # Test d'installation à la racine du domaine + LXC_STOP fi if [ "$setup_nourl" -eq 1 ]; then CHECK_SETUP_NO_URL # Test d'installation sans accès par url + LXC_STOP fi if [ "$upgrade" -eq 1 ]; then CHECK_UPGRADE # Test d'upgrade + LXC_STOP fi if [ "$setup_private" -eq 1 ]; then CHECK_PUBLIC_PRIVATE private # Test d'installation en privé + LXC_STOP fi if [ "$setup_public" -eq 1 ]; then CHECK_PUBLIC_PRIVATE public # Test d'installation en public + LXC_STOP fi if [ "$multi_instance" -eq 1 ]; then CHECK_MULTI_INSTANCE # Test d'installation multiple + LXC_STOP fi if [ "$wrong_user" -eq 1 ]; then CHECK_COMMON_ERROR wrong_user # Test d'erreur d'utilisateur + LXC_STOP fi if [ "$wrong_path" -eq 1 ]; then CHECK_COMMON_ERROR wrong_path # Test d'erreur de path ou de domaine + LXC_STOP fi if [ "$incorrect_path" -eq 1 ]; then CHECK_COMMON_ERROR incorrect_path # Test d'erreur de forme de path + LXC_STOP fi if [ "$port_already_use" -eq 1 ]; then CHECK_COMMON_ERROR port_already_use # Test d'erreur de port + LXC_STOP fi if [ "$corrupt_source" -eq 1 ]; then CHECK_CORRUPT # Test d'erreur sur source corrompue -> Comment je vais provoquer ça!? + LXC_STOP fi if [ "$fail_download_source" -eq 1 ]; then CHECK_DL # Test d'erreur de téléchargement de la source -> Comment!? + LXC_STOP fi if [ "$final_path_already_use" -eq 1 ]; then CHECK_FINALPATH # Test sur final path déjà utilisé. + LXC_STOP fi if [ "$backup_restore" -eq 1 ]; then CHECK_BACKUP_RESTORE # Test de backup puis de Restauration + LXC_STOP fi }