From 78dd3df1a659c453eb96cc1b8cef7a3f2a2d94a7 Mon Sep 17 00:00:00 2001 From: Maniack Crudelis Date: Thu, 7 Jul 2016 14:20:29 +0200 Subject: [PATCH] Test package_linter, exec hors dossier, maj auto + divers corrections --- README.md | 3 + check_process | 1 + package_check.sh | 164 +++++++++++++++++++++++---------- sub_scripts/log_extractor.sh | 37 ++++---- sub_scripts/lxc_build.sh | 74 ++++++++------- sub_scripts/lxc_launcher.sh | 36 ++++---- sub_scripts/lxc_remove.sh | 17 ++-- sub_scripts/lxc_upgrade.sh | 35 +++---- sub_scripts/testing_process.sh | 112 ++++++++++++++++------ 9 files changed, 312 insertions(+), 167 deletions(-) mode change 100644 => 100755 sub_scripts/log_extractor.sh mode change 100644 => 100755 sub_scripts/lxc_upgrade.sh diff --git a/README.md b/README.md index 6583c3d..0e70afa 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ Le script `package_check.sh` effectue une succession de test sur un package afin Le résultats des tests est affiché directement et stocké dans le fichier Test_results.log Le script est capable d'effectuer les tests suivant: +- Vérification du package avec [package linter](https://github.com/YunoHost/package_linter) - Installation en sous-dossier - Installation à la racine du domaine - Installation sans accès par url (Pour les applications n'ayant pas d'interface web) @@ -48,6 +49,7 @@ Il est nécessaire de fournir, à la racine du package de l'app à tester, un fi password="$PASSWORD" (PASSWORD) port="666" (PORT) ; Checks + pkg_linter=1 setup_sub_dir=1 setup_root=1 setup_nourl=0 @@ -85,6 +87,7 @@ Certaines clés de manifest sont indispensables au script pour effectuer certain Ensemble des tests à effectuer. Chaque test marqué à 1 sera effectué par le script. Si un test est absent de la liste, il sera ignoré. Cela revient à le noter à 0. +- `pkg_linter`: Vérification du package avec [package linter](https://github.com/YunoHost/package_linter) - `setup_sub_dir`: Installation dans le path /check. - `setup_root`: Installation à la racine du domaine. - `setup_nourl`: Installation sans accès http. Ce test ne devrait être choisi que pour les applications ne disposant pas d'une interface web. diff --git a/check_process b/check_process index 56efd70..a91975e 100644 --- a/check_process +++ b/check_process @@ -10,6 +10,7 @@ password="pass" (PASSWORD) port="666" (PORT) ; Checks + pkg_linter=1 setup_sub_dir=1 setup_root=1 setup_nourl=0 diff --git a/package_check.sh b/package_check.sh index 324f6a1..4e1d149 100755 --- a/package_check.sh +++ b/package_check.sh @@ -5,6 +5,56 @@ # --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. +echo "" + +# 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 + +# Récupère le dossier du script +if [ "${0:0:1}" == "/" ]; then script_dir="$(dirname "$0")"; else script_dir="$PWD/$(dirname "$0" | cut -d '.' -f2)"; fi + +version_script="$(git ls-remote https://github.com/YunoHost/package_check | cut -f 1 | head -n1)" +if [ -e "$script_dir/package_version" ] +then + if [ "$version_script" != "$(cat "$script_dir/package_version")" ]; then # Si le dernier commit sur github ne correspond pas au commit enregistré, il y a une mise à jour. + # Écrit le script de mise à jour, qui sera exécuté à la place de ce script, pour le remplacer et le relancer après. + echo "Mise à jour de Package check..." + echo -e "#!/bin/bash\n" > "$script_dir/upgrade_script.sh" + echo "git clone --quiet https://github.com/YunoHost/package_check \"$script_dir/upgrade\"" >> "$script_dir/upgrade_script.sh" + echo "sudo cp -a \"$script_dir/upgrade/.\" \"$script_dir/.\"" >> "$script_dir/upgrade_script.sh" + echo "sudo rm -r \"$script_dir/upgrade\"" >> "$script_dir/upgrade_script.sh" + echo "echo \"$version_script\" > \"$script_dir/package_version\"" >> "$script_dir/upgrade_script.sh" + echo "exec \"$script_dir/package_check.sh\" \"$*\"" >> "$script_dir/upgrade_script.sh" + chmod +x "$script_dir/upgrade_script.sh" + exec "$script_dir/upgrade_script.sh" #Exécute le script de mise à jour. + fi +else + echo "$version_script" > "$script_dir/package_version" +fi + +version_plinter="$(git ls-remote https://github.com/YunoHost/package_linter | cut -f 1 | head -n1)" +if [ -e "$script_dir/plinter_version" ] +then + if [ "$version_plinter" != "$(cat "$script_dir/plinter_version")" ]; then # Si le dernier commit sur github ne correspond pas au commit enregistré, il y a une mise à jour. + echo "Mise à jour de package_linter..." + git clone --quiet https://github.com/YunoHost/package_linter "$script_dir/package_linter_tmp" + sudo cp -a "$script_dir/package_linter_tmp/." "$script_dir/package_linter/." + sudo rm -r "$script_dir/package_linter_tmp" + fi +else # Si le fichier de version n'existe pas, il est créé. + echo "$version_plinter" > "$script_dir/plinter_version" + echo "Installation de package_linter." + git clone --quiet https://github.com/YunoHost/package_linter "$script_dir/package_linter" +fi +echo "$version_plinter" > "$script_dir/plinter_version" + if [ "$#" -eq 0 ] then echo "Le script prend en argument le package à tester." @@ -24,7 +74,7 @@ arg_app=$(echo "$*" | sed 's/--bash-mode\|--no-lxc\|--build-lxc//g' | sed 's/^ * USER_TEST=package_checker PASSWORD_TEST=checker_pwd PATH_TEST=/check -LXC_NAME=$(cat sub_scripts/lxc_build.sh | grep LXC_NAME= | cut -d '=' -f2) +LXC_NAME=$(cat "$script_dir/sub_scripts/lxc_build.sh" | grep LXC_NAME= | cut -d '=' -f2) if [ "$no_lxc" -eq 0 ] then @@ -34,22 +84,10 @@ else 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 "$script_dir/sub_scripts/lxc_launcher.sh" +source "$script_dir/sub_scripts/testing_process.sh" source /usr/share/yunohost/helpers -# 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 - if [ "$no_lxc" -eq 0 ] then # Si le conteneur lxc est utilisé lxc_ok=0 @@ -63,7 +101,7 @@ then # Si le conteneur lxc est utilisé then if [ "$build_lxc" -eq 1 ] then - ./sub_scripts/lxc_build.sh # Lance la construction de la machine virtualisée. + "$script_dir/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" @@ -99,24 +137,33 @@ else # Vérifie l'utilisateur et le domain si lxc n'est pas utilisé. fi # Vérifie le type d'emplacement du package à tester +echo "Récupération du package à tester." +sudo rm -rf "$APP_CHECK" GIT_PACKAGE=0 if echo "$arg_app" | grep -Eq "https?:\/\/" then GIT_PACKAGE=1 - git clone $arg_app "$(basename $arg_app)_check" + git clone $arg_app "$script_dir/$(basename "$arg_app")_check" else # Si c'est un dossier local, il est copié dans le dossier du script. - sudo cp -a --remove-destination "$arg_app" "$(basename $arg_app)_check" + sudo cp -a --remove-destination "$arg_app" "$script_dir/$(basename "$arg_app")_check" fi -APP_CHECK="$(basename $arg_app)_check" +APP_CHECK="$script_dir/$(basename "$arg_app")_check" +if [ "$no_lxc" -eq 0 ] +then # En cas d'exécution dans LXC, l'app sera dans le home de l'user LXC. + APP_PATH_YUNO="$(basename "$arg_app")_check" +else + APP_PATH_YUNO="$APP_CHECK" +fi + 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 +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 +if [ ! -e "$APP_CHECK/check_process" ]; then 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 @@ -125,7 +172,15 @@ fi TEST_RESULTS () { - ECHO_FORMAT "\n\nInstallation: " + ECHO_FORMAT "\n\nPackage linter: " + if [ "$GLOBAL_LINTER" -eq 1 ]; then + ECHO_FORMAT "\t\t\tSUCCESS\n" "lgreen" + elif [ "$GLOBAL_LINTER" -eq -1 ]; then + ECHO_FORMAT "\t\t\tFAIL\n" "lred" + else + ECHO_FORMAT "\t\t\t\tNot evaluated.\n" "white" + fi + ECHO_FORMAT "Installation: " if [ "$GLOBAL_CHECK_SETUP" -eq 1 ]; then ECHO_FORMAT "\t\t\t\tSUCCESS\n" "lgreen" elif [ "$GLOBAL_CHECK_SETUP" -eq -1 ]; then @@ -251,32 +306,32 @@ TEST_RESULTS () { ECHO_FORMAT "\t\t\tNot evaluated.\n" "white" fi - ECHO_FORMAT "Source corrompue: " - if [ "$GLOBAL_CHECK_CORRUPT" -eq 1 ]; then - ECHO_FORMAT "\t\t\tSUCCESS\n" "lgreen" - elif [ "$GLOBAL_CHECK_CORRUPT" -eq -1 ]; then - ECHO_FORMAT "\t\t\tFAIL\n" "lred" - else - ECHO_FORMAT "\t\t\tNot evaluated.\n" "white" - fi +# ECHO_FORMAT "Source corrompue: " +# if [ "$GLOBAL_CHECK_CORRUPT" -eq 1 ]; then +# ECHO_FORMAT "\t\t\tSUCCESS\n" "lgreen" +# elif [ "$GLOBAL_CHECK_CORRUPT" -eq -1 ]; then +# ECHO_FORMAT "\t\t\tFAIL\n" "lred" +# else +# ECHO_FORMAT "\t\t\tNot evaluated.\n" "white" +# fi - ECHO_FORMAT "Erreur de téléchargement de la source: " - if [ "$GLOBAL_CHECK_DL" -eq 1 ]; then - ECHO_FORMAT "\tSUCCESS\n" "lgreen" - elif [ "$GLOBAL_CHECK_DL" -eq -1 ]; then - ECHO_FORMAT "\tFAIL\n" "lred" - else - ECHO_FORMAT "\tNot evaluated.\n" "white" - fi +# ECHO_FORMAT "Erreur de téléchargement de la source: " +# if [ "$GLOBAL_CHECK_DL" -eq 1 ]; then +# ECHO_FORMAT "\tSUCCESS\n" "lgreen" +# elif [ "$GLOBAL_CHECK_DL" -eq -1 ]; then +# ECHO_FORMAT "\tFAIL\n" "lred" +# else +# ECHO_FORMAT "\tNot evaluated.\n" "white" +# fi - ECHO_FORMAT "Dossier déjà utilisé: " - if [ "$GLOBAL_CHECK_FINALPATH" -eq 1 ]; then - ECHO_FORMAT "\t\t\tSUCCESS\n" "lgreen" - elif [ "$GLOBAL_CHECK_FINALPATH" -eq -1 ]; then - ECHO_FORMAT "\t\t\tFAIL\n" "lred" - else - ECHO_FORMAT "\t\t\tNot evaluated.\n" "white" - fi +# ECHO_FORMAT "Dossier déjà utilisé: " +# if [ "$GLOBAL_CHECK_FINALPATH" -eq 1 ]; then +# ECHO_FORMAT "\t\t\tSUCCESS\n" "lgreen" +# elif [ "$GLOBAL_CHECK_FINALPATH" -eq -1 ]; then +# ECHO_FORMAT "\t\t\tFAIL\n" "lred" +# else +# ECHO_FORMAT "\t\t\tNot evaluated.\n" "white" +# fi ECHO_FORMAT "Backup: " if [ "$GLOBAL_CHECK_BACKUP" -eq 1 ]; then @@ -323,10 +378,11 @@ TEST_RESULTS () { smiley="\o/" fi ECHO_FORMAT "$note/20 $smiley\n" "$color_note" "$typo_note" - ECHO_FORMAT "\t Ensemble de tests effectués: $tnote/19\n\n" "white" "bold" + ECHO_FORMAT "\t Ensemble de tests effectués: $tnote/17\n\n" "white" "bold" } INIT_VAR() { + GLOBAL_LINTER=0 GLOBAL_CHECK_SETUP=0 GLOBAL_CHECK_SUB_DIR=0 GLOBAL_CHECK_ROOT=0 @@ -364,6 +420,7 @@ INIT_VAR() { MANIFEST_PASSWORD="null" MANIFEST_PORT="null" + pkg_linter=0 setup_sub_dir=0 setup_root=0 setup_nourl=0 @@ -382,13 +439,14 @@ INIT_VAR() { } INIT_VAR -echo -n "" > $COMPLETE_LOG # Initialise le fichier de log -echo -n "" > $RESULT # Initialise le fichier des résulats d'analyse +echo -n "" > "$COMPLETE_LOG" # Initialise le fichier de log +echo -n "" > "$RESULT" # Initialise le fichier des résulats d'analyse if [ "$no_lxc" -eq 0 ]; then LXC_INIT fi ## Parsing du fichier check_process de manière séquentielle. +echo "Parsing du fichier check_process" while read <&4 LIGNE do LIGNE=$(echo $LIGNE | sed 's/^ *"//g') # Efface les espaces en début de ligne @@ -460,6 +518,12 @@ do fi if [ "$CHECKS" -eq 1 ] then # Analyse des tests à effectuer sur ce scenario. + if echo "$LIGNE" | grep -q "^pkg_linter="; then # Test d'installation en sous-dossier + pkg_linter=$(echo "$LIGNE" | cut -d '=' -f2) + if [ "$pkg_linter" -eq 1 ]; then + all_test=$((all_test+1)) + fi + fi 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 @@ -568,6 +632,6 @@ 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 +rm -f "$OUTPUTD" "$temp_RESULT" "$script_dir/url_output" "$script_dir/curl_print" sudo rm -rf "$APP_CHECK" diff --git a/sub_scripts/log_extractor.sh b/sub_scripts/log_extractor.sh old mode 100644 new mode 100755 index b2054b6..83961cd --- a/sub_scripts/log_extractor.sh +++ b/sub_scripts/log_extractor.sh @@ -1,8 +1,9 @@ #!/bin/bash -OUTPUTD="debug_output" +OUTPUTD="$script_dir/debug_output.log" YUNOHOST_LOG="/var/log/yunohost/yunohost-cli.log" -COMPLETE_LOG="Complete.log" +COMPLETE_LOG="$script_dir/Complete.log" +temp_RESULT="$script_dir/temp_result.log" echo "Chargement des fonctions de log_extractor.sh" @@ -30,7 +31,7 @@ ECHO_FORMAT () { fi copy_log=-- if [ "$4" == "clog" ]; then - copy_log=$COMPLETE_LOG + copy_log="$COMPLETE_LOG" fi echo -en "$1" | tee -a "$RESULT" "$copy_log" echo -en "\e[0m" @@ -60,37 +61,37 @@ PARSE_LOG () { ECHO_FORMAT "Warning:" "lyellow" "underlined" ECHO_FORMAT " $(echo "$LOG_LIGNE_TEMP\n" | sed 's/^>WARNING: //')" "lyellow" fi - done < "temp_$RESULT" + done < "$temp_RESULT" } CLEAR_LOG () { # Élimine les warning parasites connus et identifiables facilement. - sed -i '/^>WARNING: yunohost\.hook - \[[0-9.]*\] ?$/d' "temp_$RESULT" # Ligne de warning vide précédant et suivant la progression d'un wget - sed -i '/^>WARNING: yunohost\.hook - \[[0-9.]*\] *[0-9]*K \.* /d' "temp_$RESULT" # Ligne de warning de progression d'un wget - sed -i '/% Total % Received % Xferd/d' "temp_$RESULT" # Ligne de warning des statistiques d'un wget - sed -i '/Dload Upload Total Spent/d' "temp_$RESULT" # 2e ligne de warning des statistiques d'un wget - sed -i '/--:--:-- --:--:-- --:--:--/d' "temp_$RESULT" # 3e ligne de warning des statistiques d'un wget - sed -i '/^>WARNING: yunohost.backup backup_restore - \[[0-9.]*\] YunoHost est déjà installé$/d' "temp_$RESULT" # Ligne de warning du backup car Yunohost est déjà installé - sed -i '/^$/d' "temp_$RESULT" # Retire les lignes vides + sed -i '/^>WARNING: yunohost\.hook - \[[0-9.]*\] ?$/d' "$temp_RESULT" # Ligne de warning vide précédant et suivant la progression d'un wget + sed -i '/^>WARNING: yunohost\.hook - \[[0-9.]*\] *[0-9]*K \.* /d' "$temp_RESULT" # Ligne de warning de progression d'un wget + sed -i '/% Total % Received % Xferd/d' "$temp_RESULT" # Ligne de warning des statistiques d'un wget + sed -i '/Dload Upload Total Spent/d' "$temp_RESULT" # 2e ligne de warning des statistiques d'un wget + sed -i '/--:--:-- --:--:-- --:--:--/d' "$temp_RESULT" # 3e ligne de warning des statistiques d'un wget + sed -i '/^>WARNING: yunohost.backup backup_restore - \[[0-9.]*\] YunoHost est déjà installé$/d' "$temp_RESULT" # Ligne de warning du backup car Yunohost est déjà installé + sed -i '/^$/d' "$temp_RESULT" # Retire les lignes vides } LOG_EXTRACTOR () { - echo -n "" > temp_$RESULT # Initialise le fichier des résulats d'analyse + echo -n "" > "$temp_RESULT" # Initialise le fichier des résulats d'analyse cat "$OUTPUTD" >> "$COMPLETE_LOG" while read LOG_LIGNE do # Lit le log pour extraire les warning et les erreurs. if echo "$LOG_LIGNE" | grep -q " ERROR "; then - echo -n ">ERROR: " >> "temp_$RESULT" - echo "$LOG_LIGNE" | sed 's/^.* ERROR *//' >> "temp_$RESULT" + 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" + 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" + echo -n ">WARNING: " >> "$temp_RESULT" + echo "$LOG_LIGNE" | sed 's/^.* WARNING *//' >> "$temp_RESULT" fi done < "$OUTPUTD" CLEAR_LOG diff --git a/sub_scripts/lxc_build.sh b/sub_scripts/lxc_build.sh index 6bd1da9..ed9b11a 100755 --- a/sub_scripts/lxc_build.sh +++ b/sub_scripts/lxc_build.sh @@ -1,6 +1,9 @@ #!/bin/bash -LOG_BUILD_LXC="Build_lxc.log" +# Récupère le dossier du script +if [ "${0:0:1}" == "/" ]; then script_dir="$(dirname "$0")"; else script_dir="$PWD/$(dirname "$0" | cut -d '.' -f2)"; fi + +LOG_BUILD_LXC="$script_dir/Build_lxc.log" PLAGE_IP="10.1.4" ARG_SSH="-t" DOMAIN=domain.tld @@ -16,19 +19,18 @@ then # $EUID est vide sur une exécution avec sudo. Et vaut 0 pour root exit 1 fi - -echo "Update et install lxc lxctl" | tee "$LOG_BUILD_LXC" +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" +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 "> 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 "> 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 @@ -38,41 +40,49 @@ iface lxc-pchecker inet static bridge_maxwait 0 EOF -echo "Active le bridge réseau" | tee -a "$LOG_BUILD_LXC" +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" +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" +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" +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" +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" +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" +echo "> Installation des paquets standard et ssh-server" | tee -a "$LOG_BUILD_LXC" +tasksell_exit=1 +while [ "$tasksell_exit" -ne 0 ] +do + sudo lxc-attach -n $LXC_NAME -- tasksel install standard ssh-server + tasksell_exit=$? +done +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" +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 "> 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" +echo "> Mise en place de la connexion ssh vers l'invité." | tee -a "$LOG_BUILD_LXC" +if [ -e $HOME/.ssh/$LXC_NAME ]; then + rm -f $HOME/.ssh/$LXC_NAME $HOME/.ssh/$LXC_NAME.pub + ssh-keygen -f $HOME/.ssh/known_hosts -R $PLAGE_IP.2 +fi 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 @@ -92,34 +102,34 @@ if [ "$?" -ne 0 ]; then # Si l'utilisateur tarde trop, la connexion sera refusé 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" +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" +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) +USER_TEST=$(cat "$(dirname "$script_dir")/package_check.sh" | grep USER_TEST= | cut -d '=' -f2) +PASSWORD_TEST=$(cat "$(dirname "$script_dir")/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\"" +# 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\" --admin-password=\"$YUNO_PWD\"" 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 "> 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\" --admin-password=\"$YUNO_PWD\"" -echo -e "\nVérification de l'état de Yunohost" | tee -a "$LOG_BUILD_LXC" +echo -e "\n> Vé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" +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" +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" +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 index b636471..c3e5b46 100755 --- a/sub_scripts/lxc_launcher.sh +++ b/sub_scripts/lxc_launcher.sh @@ -1,19 +1,19 @@ #!/bin/bash ARG_SSH="-t" -PLAGE_IP=$(cat sub_scripts/lxc_build.sh | grep PLAGE_IP= | cut -d '"' -f2) +PLAGE_IP=$(cat "$script_dir/sub_scripts/lxc_build.sh" | grep PLAGE_IP= | cut -d '"' -f2) -echo -e "\nChargement des fonctions de lxc_launcher.sh" +echo -e "Chargement 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 + 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 + 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 @@ -24,7 +24,7 @@ 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 + 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 . @@ -38,9 +38,9 @@ LXC_START () { 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 + 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 + 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 "$?" else # Sinon exécute la commande directement. command=$(echo "$1" | sed "s@\"@@g") # Remplace les guillemets doubles par des simples @@ -53,12 +53,12 @@ LXC_STOP () { 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 + 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/ > /dev/null 2>> $RESULT + 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/ > /dev/null 2>> "$RESULT" fi } @@ -67,19 +67,19 @@ LXC_TURNOFF () { # 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 + 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 + 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 + 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 + sudo ifdown lxc-pchecker | tee -a "$RESULT" 2>&1 fi } diff --git a/sub_scripts/lxc_remove.sh b/sub_scripts/lxc_remove.sh index 08e17a3..3adc0c0 100755 --- a/sub_scripts/lxc_remove.sh +++ b/sub_scripts/lxc_remove.sh @@ -1,6 +1,9 @@ #!/bin/bash -LXC_NAME=$(cat sub_scripts/lxc_build.sh | grep LXC_NAME= | cut -d '=' -f2) +# Récupère le dossier du script +if [ "${0:0:1}" == "/" ]; then script_dir="$(dirname "$0")"; else script_dir="$PWD/$(dirname "$0" | cut -d '.' -f2)"; fi + +LXC_NAME=$(cat "$script_dir/lxc_build.sh" | grep LXC_NAME= | cut -d '=' -f2) # Check root CHECK_ROOT=$EUID @@ -11,24 +14,24 @@ then # $EUID est vide sur une exécution avec sudo. Et vaut 0 pour root exit 1 fi -echo "Retire l'ip forwarding." +echo "> Retire l'ip forwarding." sudo rm /etc/sysctl.d/lxc_pchecker.conf sudo sysctl -p -echo "Désactive le bridge réseau" +echo "> Désactive le bridge réseau" sudo ifdown lxc-pchecker -echo "Supprime le brige réseau" +echo "> Supprime le brige réseau" sudo rm /etc/network/interfaces.d/lxc-pchecker -echo "Suppression de la machine et de son snapshots" +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" +echo "> Remove lxc lxctl" sudo apt-get remove lxc lxctl -echo "Suppression des lignes de pchecker_lxc dans .ssh/config" +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 old mode 100644 new mode 100755 index 034c20d..1cbfd7c --- a/sub_scripts/lxc_upgrade.sh +++ b/sub_scripts/lxc_upgrade.sh @@ -1,15 +1,18 @@ #!/bin/bash -PLAGE_IP=$(cat lxc_build.sh | grep PLAGE_IP= | cut -d '"' -f2) -LXC_NAME=$(cat lxc_build.sh | grep LXC_NAME= | cut -d '=' -f2) +# Récupère le dossier du script +if [ "${0:0:1}" == "/" ]; then script_dir="$(dirname "$0")"; else script_dir="$PWD/$(dirname "$0" | cut -d '.' -f2)"; fi -echo "Active le bridge réseau" +PLAGE_IP=$(cat "$script_dir/lxc_build.sh" | grep PLAGE_IP= | cut -d '"' -f2) +LXC_NAME=$(cat "$script_dir/lxc_build.sh" | grep LXC_NAME= | cut -d '=' -f2) + +echo "> Active le bridge réseau" if ! sudo ifquery lxc-pchecker --state > /dev/null then sudo ifup lxc-pchecker fi -echo "Configure le parefeu" +echo "> Configure le parefeu" if ! sudo iptables -D FORWARD -i lxc-pchecker -o eth0 -j ACCEPT 2> /dev/null then sudo iptables -A FORWARD -i lxc-pchecker -o eth0 -j ACCEPT @@ -23,46 +26,46 @@ then sudo iptables -t nat -A POSTROUTING -s $PLAGE_IP.0/24 -j MASQUERADE fi -echo "Démarrage de la machine" +echo "> Démarrage de la machine" if [ $(sudo lxc-info --name $LXC_NAME | grep -c "STOPPED") -eq 0 ]; then # Si la machine n'est pas à l'arrêt. sudo lxc-stop -n $LXC_NAME # Arrête la machine LXC fi # Restaure le snapshot -sudo rsync -aEAX --delete -i /var/lib/lxcsnaps/$LXC_NAME/snap0/rootfs/ /var/lib/lxc/$LXC_NAME/rootfs/ # Pour être sûr! +sudo rsync -aEAX --delete -i /var/lib/lxcsnaps/$LXC_NAME/snap0/rootfs/ /var/lib/lxc/$LXC_NAME/rootfs/ > /dev/null # Pour être sûr! sudo lxc-start -n $LXC_NAME -d sleep 3 sudo lxc-ls -f -echo "Update" +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. +update_apt=0 if [ "$?" -eq 0 ]; then update_apt=1 fi -echo "update_apt=$update_apt" -echo "Upgrade" +echo "> Upgrade" sudo lxc-attach -n $LXC_NAME -- apt-get dist-upgrade -echo "Clean" +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" +echo "> Arrêt de la machine virtualisée" sudo lxc-stop -n $LXC_NAME -echo "Suppression des règles de parefeu" +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 +sudo ifdown lxc-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" + echo "> Archivage du snapshot" + sudo tar -cz --acls --xattrs -f /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 1122599..e688f89 100644 --- a/sub_scripts/testing_process.sh +++ b/sub_scripts/testing_process.sh @@ -1,17 +1,17 @@ #!/bin/bash -RESULT="Test_results.log" +RESULT="$script_dir/Test_results.log" BACKUP_HOOKS="conf_ssowat data_home conf_ynh_firewall conf_cron" # La liste des hooks disponible pour le backup se trouve dans /usr/share/yunohost/hooks/backup/ -echo -e "\nChargement des fonctions de testing_process.sh" +echo -e "Chargement des fonctions de testing_process.sh" -source $abs_path/sub_scripts/log_extractor.sh +source "$script_dir/sub_scripts/log_extractor.sh" SETUP_APP () { # echo -e "MANIFEST_ARGS=$MANIFEST_ARGS" # echo -e "MANIFEST_ARGS_MOD=$MANIFEST_ARGS_MOD" COPY_LOG 1 - LXC_START "sudo yunohost --debug app install $APP_CHECK -a \"$MANIFEST_ARGS_MOD\"" + LXC_START "sudo yunohost --debug app install \"$APP_PATH_YUNO\" -a \"$MANIFEST_ARGS_MOD\"" YUNOHOST_RESULT=$? COPY_LOG 2 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. @@ -32,34 +32,46 @@ REMOVE_APP () { } CHECK_URL () { - ECHO_FORMAT "\nAccès par l'url...\n" "white" "bold" - rm -f url_output # Supprime le précédent fichier html si il est encore présent - if [ "$no_lxc" -eq 0 ]; then - IP_CURL="$(cat sub_scripts/lxc_build.sh | grep PLAGE_IP= | cut -d '"' -f2).2" + if [ "$use_curl" -eq 1 ] + then + ECHO_FORMAT "\nAccès par l'url...\n" "white" "bold" + rm -f "$script_dir/url_output" # Supprime le précédent fichier html si il est encore présent + if [ "$no_lxc" -eq 0 ]; then + IP_CURL="$(cat "$script_dir/sub_scripts/lxc_build.sh" | grep PLAGE_IP= | cut -d '"' -f2).2" + else + IP_CURL="127.0.0.1" + 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 + curl -LksS -w "%{http_code};%{url_effective}\n" $SOUS_DOMAIN$CHECK_PATH -o "$script_dir/url_output" > "$script_dir/curl_print" + if [ "$?" -ne 0 ]; then + ECHO_FORMAT "Erreur de connexion...\n" "lred" "bold" + fi + ECHO_FORMAT "Adresse de la page: $(cat "$script_dir/curl_print" | cut -d ';' -f2)\n" "white" + ECHO_FORMAT "Code HTTP: $(cat "$script_dir/curl_print" | cut -d ';' -f1)\n" "white" + URL_TITLE=$(grep "" "$script_dir/url_output" | cut -d '>' -f 2 | cut -d '<' -f1) + ECHO_FORMAT "Titre de la page: $URL_TITLE\n" "white" + if [ "$URL_TITLE" == "YunoHost Portal" ]; then + YUNO_PORTAL=1 + # Il serait utile de réussir à s'authentifier sur le portail pour tester une app protégée par celui-ci. Mais j'y arrive pas... + else + YUNO_PORTAL=0 + ECHO_FORMAT "Extrait du corps de la page:\n" "white" + echo -e "\e[37m" # Écrit en light grey + grep "<body" -A 20 "$script_dir/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 else - IP_CURL="127.0.0.1" + ECHO_FORMAT "Test de connexion annulé.\n" "white" 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 -LksS $SOUS_DOMAIN/$CHECK_PATH -o url_output - URL_TITLE=$(grep "<title>" url_output | cut -d '>' -f 2 | cut -d '<' -f1) - ECHO_FORMAT "Titre de la page: $URL_TITLE\n" "white" - if [ "$URL_TITLE" == "YunoHost Portal" ]; then - YUNO_PORTAL=1 - # Il serait utile de réussir à s'authentifier sur le portail pour tester une app protégée par celui-ci. Mais j'y arrive pas... - else - YUNO_PORTAL=0 - ECHO_FORMAT "Extrait du corps de la page:\n" "white" - echo -e "\e[37m" # Écrit en light grey - 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 } CHECK_SETUP_SUBDIR () { # Test d'installation en sous-dossier ECHO_FORMAT "\n\n>> Installation en sous-dossier... [Test $cur_test/$all_test]\n" "white" "bold" clog cur_test=$((cur_test+1)) + use_curl=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 @@ -120,12 +132,15 @@ CHECK_SETUP_SUBDIR () { GLOBAL_CHECK_REMOVE_SUBDIR=-1 # Suppression en sous-dossier échouée fi fi + YUNOHOST_RESULT=-1 + YUNOHOST_REMOVE=-1 } CHECK_SETUP_ROOT () { # Test d'installation à la racine ECHO_FORMAT "\n\n>> Installation à la racine... [Test $cur_test/$all_test]\n" "white" "bold" clog cur_test=$((cur_test+1)) + use_curl=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 @@ -202,10 +217,13 @@ CHECK_SETUP_ROOT () { GLOBAL_CHECK_REMOVE_ROOT=-1 # Suppression à la racine échouée fi fi + YUNOHOST_RESULT=-1 + YUNOHOST_REMOVE=-1 } CHECK_SETUP_NO_URL () { # Test d'installation sans accès par url + use_curl=0 ECHO_FORMAT "\n\n>> Installation sans accès par url... [Test $cur_test/$all_test]\n" "white" "bold" clog cur_test=$((cur_test+1)) MANIFEST_ARGS_MOD=$MANIFEST_ARGS # Copie des arguments @@ -252,6 +270,8 @@ CHECK_SETUP_NO_URL () { GLOBAL_CHECK_REMOVE_ROOT=-1 # Suppression échouée fi fi + YUNOHOST_RESULT=-1 + YUNOHOST_REMOVE=-1 } CHECK_UPGRADE () { @@ -286,7 +306,7 @@ CHECK_UPGRADE () { 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_CHECK" + LXC_START "sudo yunohost --debug app upgrade $APPID -f \"$APP_PATH_YUNO\"" YUNOHOST_RESULT=$? COPY_LOG 2 LOG_EXTRACTOR @@ -305,6 +325,7 @@ CHECK_UPGRADE () { # Suppression de l'app si lxc n'est pas utilisé. REMOVE_APP fi + YUNOHOST_RESULT=-1 } CHECK_BACKUP_RESTORE () { @@ -377,6 +398,7 @@ CHECK_BACKUP_RESTORE () { # Suppression de l'archive sudo yunohost backup delete Backup_test > /dev/null fi + YUNOHOST_RESULT=-1 } CHECK_PUBLIC_PRIVATE () { @@ -463,6 +485,7 @@ CHECK_PUBLIC_PRIVATE () { # Suppression de l'app si lxc n'est pas utilisé. REMOVE_APP fi + YUNOHOST_RESULT=-1 } CHECK_MULTI_INSTANCE () { @@ -520,6 +543,7 @@ CHECK_MULTI_INSTANCE () { APPID=$APPID_first REMOVE_APP fi + YUNOHOST_RESULT=-1 } CHECK_COMMON_ERROR () { @@ -558,7 +582,8 @@ CHECK_COMMON_ERROR () { fi MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s/$MANIFEST_PASSWORD=[a-Z$]*\&/$MANIFEST_PASSWORD=$PASSWORD_TEST\&/") if [ "$1" == "incorrect_path" ]; then # Force un path mal formé: Ce sera path/ au lieu de /path - MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s@$MANIFEST_PATH=[a-Z/$]*\&@$MANIFEST_PATH=path/\&@") + WRONG_PATH=${PATH_TEST#/}/ # Transforme le path de /path à path/ + MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s@$MANIFEST_PATH=[a-Z/$]*\&@$MANIFEST_PATH=$WRONG_PATH\&@") else if [ "$GLOBAL_CHECK_SUB_DIR" -eq 1 ]; then # Si l'install en sub_dir à fonctionné. Utilise ce mode d'installation MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s@$MANIFEST_PATH=[a-Z/$]*\&@$MANIFEST_PATH=$PATH_TEST\&@") @@ -638,6 +663,38 @@ CHECK_COMMON_ERROR () { sudo yunohost firewall disallow Both $check_port > /dev/null fi fi + YUNOHOST_RESULT=-1 +} + +PACKAGE_LINTER () { + # Package linter + ECHO_FORMAT "\n\n>> Package linter... [Test $cur_test/$all_test]\n" "white" "bold" clog + cur_test=$((cur_test+1)) + "$script_dir/package_linter/package_linter.py" "$APP_CHECK" | tee "$script_dir/package_linter.log" # Effectue un test du package avec package_linter +# header_PL="" # Finalement je vais garder la sortie dans on ensemble. J'aime pas l'idée de tronquer le boulot de Moul. + while read LIGNE + do + if echo "$LIGNE" | grep -q ">>>> ="; then # Prend le header de la section +# header=$(echo "$LIGNE" | cut -d '>' -f2-5 | cut -d '<' -f1-4) +# prev_header_PL=$header_PL +# header_PL="$LIGNE" + GLOBAL_LINTER=1 # Si au moins 1 header est trouvé, c'est que l'exécution s'est bien déroulée. + fi + if echo "$LIGNE" | grep -q -F "[91m"; then # Si une erreur a été détectée par package_linter. +# if [ "$prev_header_PL" != "$header_PL" ]; then +# ECHO_FORMAT "$header_PL\n" +# fi +# ECHO_FORMAT "$LIGNE\n" + GLOBAL_LINTER=-1 # Au moins une erreur a été détectée par package_linter + fi + done < "$script_dir/package_linter.log" + tnote=$((tnote+1)) + if [ "$GLOBAL_LINTER" -eq 1 ]; then + ECHO_FORMAT "--- SUCCESS ---\n" "lgreen" "bold" + note=$((note+1)) # package_linter n'a détecté aucune erreur + else + ECHO_FORMAT "--- FAIL ---\n" "lred" "bold" + fi } CHECK_CORRUPT () { @@ -675,6 +732,9 @@ TESTING_PROCESS () { # Lancement des tests cur_test=1 ECHO_FORMAT "\nScénario de test: $PROCESS_NAME\n" "white" "underlined" + if [ "$pkg_linter" -eq 1 ]; then + PACKAGE_LINTER # Vérification du package avec package linter + fi if [ "$setup_sub_dir" -eq 1 ]; then CHECK_SETUP_SUBDIR # Test d'installation en sous-dossier LXC_STOP