From 92dc8555c7dacf6ae59532a80df6965bf144c345 Mon Sep 17 00:00:00 2001 From: Maniack Crudelis Date: Tue, 5 Jul 2016 11:21:32 +0200 Subject: [PATCH] =?UTF-8?q?Commentaires,=20correction=20scenar=20multiples?= =?UTF-8?q?,=20priv=C3=A9,=20lxc,=20curl?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 13 ++-- check_process | 7 +- package_check.sh | 116 ++++++++++++++++++--------------- sub_scripts/log_extractor.sh | 6 +- sub_scripts/lxc_build.sh | 51 +++++++-------- sub_scripts/lxc_remove.sh | 19 +++--- sub_scripts/lxc_upgrade.sh | 28 ++++---- sub_scripts/testing_process.sh | 55 ++++++++-------- 8 files changed, 154 insertions(+), 141 deletions(-) mode change 100755 => 100644 sub_scripts/log_extractor.sh mode change 100755 => 100644 sub_scripts/lxc_upgrade.sh mode change 100755 => 100644 sub_scripts/testing_process.sh diff --git a/README.md b/README.md index cc86564..6583c3d 100644 --- a/README.md +++ b/README.md @@ -36,9 +36,10 @@ Il est nécessaire de fournir, à la racine du package de l'app à tester, un fi > L'ordre des lignes n'a toutefois pas d'importance. ``` -## Nom du test +;; Nom du test auto_remove=1 - # Manifest +# Commentaire ignoré + ; Manifest domain="$DOMAIN" (DOMAIN) path="$PATH" (PATH) admin="$USER" (USER) @@ -46,7 +47,7 @@ Il est nécessaire de fournir, à la racine du package de l'app à tester, un fi is_public="Yes" (PUBLIC|public=Yes|private=No) password="$PASSWORD" (PASSWORD) port="666" (PORT) - # Checks + ; Checks setup_sub_dir=1 setup_root=1 setup_nourl=0 @@ -63,7 +64,7 @@ Il est nécessaire de fournir, à la racine du package de l'app à tester, un fi port_already_use=1 (XXXX) final_path_already_use=0 ``` -### `## Nom du test` +### `;; Nom du test` Nom du scénario de test qui sera effectué. On peut créer autant de scénario de test que voulu, tous ayant la même syntaxe. Les différents scénarios de test seront exécutés successivement. @@ -72,7 +73,7 @@ Les différents scénarios de test seront exécutés successivement. Si `auto_remove` est à 0, le script marque une pause avant chaque suppression de l'app. Afin d'éffectuer des vérifications manuelles si nécessaire. Sinon, l'app est supprimée automatiquement et les tests continuent. -### `# Manifest` +### `; Manifest` Ensemble des clés du manifest. Toutes les clés du manifest doivent être renseignée afin de procéder à l'installation. > Les clés de manifest données ici ne le sont qu'à titre d'exemple. Voir le manifest de l'application. @@ -80,7 +81,7 @@ Certaines clés de manifest sont indispensables au script pour effectuer certain `(DOMAIN)`, `(PATH)`, `(USER)`, `(PASSWORD)` et `(PORT)` doivent être mis en bout de ligne des clés correspondantes. Ces clés seront modifiées par le script. `(PUBLIC|public=Yes|private=No)` doit, en plus de correspondre à la clé de visibilité public, indiquer les valeurs du manifest pour public et privé. -### `# Checks` +### `; Checks` 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. diff --git a/check_process b/check_process index 72edbb6..56efd70 100644 --- a/check_process +++ b/check_process @@ -1,6 +1,7 @@ -## Nom du test +;; Nom du test auto_remove=1 - # Manifest +# Commentaire ignoré + ; Manifest domain="domain.tld" (DOMAIN) path="/path" (PATH) admin="john" (USER) @@ -8,7 +9,7 @@ is_public="Yes" (PUBLIC|public=Yes|private=No) password="pass" (PASSWORD) port="666" (PORT) - # Checks + ; Checks setup_sub_dir=1 setup_root=1 setup_nourl=0 diff --git a/package_check.sh b/package_check.sh index c37e2b2..324f6a1 100755 --- a/package_check.sh +++ b/package_check.sh @@ -106,7 +106,7 @@ then git clone $arg_app "$(basename $arg_app)_check" else # Si c'est un dossier local, il est copié dans le dossier du script. - sudo cp -a "$arg_app" "$(basename $arg_app)_check" + sudo cp -a --remove-destination "$arg_app" "$(basename $arg_app)_check" fi APP_CHECK="$(basename $arg_app)_check" if [ ! -d "$APP_CHECK" ]; then @@ -296,28 +296,32 @@ TEST_RESULTS () { 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" - smiley=":'(" # La contribution à Shasha. Qui m'a forcé à ajouté les smiley sous la contrainte ;) - elif [ $note -le 10 ]; then - color_note="red" - typo_note="" - smiley=":(" - elif [ $note -le 15 ]; then - color_note="lyellow" - typo_note="" - smiley=":s" - elif [ $note -gt 15 ]; then - color_note="lgreen" - typo_note="" - smiley=":)" - elif [ $note -eq 20 ]; then - color_note="lgreen" - typo_note="bold" - smiley="\o/" + if [ "$note" -gt 0 ] + then + note=$(( note * 20 / tnote )) fi + if [ "$note" -le 5 ]; then + color_note="red" + typo_note="bold" + smiley=":'(" # La contribution à Shasha. Qui m'a forcé à ajouté les smiley sous la contrainte ;) + elif [ "$note" -le 10 ]; then + color_note="red" + typo_note="" + smiley=":(" + elif [ "$note" -le 15 ]; then + color_note="lyellow" + typo_note="" + smiley=":s" + elif [ "$note" -gt 15 ]; then + color_note="lgreen" + typo_note="" + smiley=":)" + fi + if [ "$note" -ge 20 ]; then + color_note="lgreen" + typo_note="bold" + 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" } @@ -346,6 +350,10 @@ INIT_VAR() { MANIFEST=0 CHECKS=0 auto_remove=1 + install_pass=0 + note=0 + tnote=0 + all_test=0 MANIFEST_DOMAIN="null" MANIFEST_PATH="null" @@ -376,20 +384,22 @@ 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 +while read <&4 LIGNE do - if echo "$LIGNE" | grep -q "auto_remove="; then # Indication d'auto remove + LIGNE=$(echo $LIGNE | sed 's/^ *"//g') # Efface les espaces en début de ligne + if [ "${LIGNE:0:1}" == "#" ]; then + # Ligne de commentaire, ignorée. + continue + fi + if echo "$LIGNE" | grep -q "^auto_remove="; then # Indication d'auto remove auto_remove=$(echo "$LIGNE" | cut -d '=' -f2) fi - if echo "$LIGNE" | grep -q "^##"; then # Début d'un scénario de test + if echo "$LIGNE" | grep -q "^;;"; then # Début d'un scénario de test if [ "$IN_PROCESS" -eq 1 ]; then # Un scénario est déjà en cours. Donc on a atteind la fin du scénario. TESTING_PROCESS TEST_RESULTS @@ -398,16 +408,18 @@ do read -p "Appuyer sur une touche pour démarrer le scénario de test suivant..." < /dev/tty fi fi - PROCESS_NAME=${LIGNE#\#\# } + PROCESS_NAME=${LIGNE#;; } IN_PROCESS=1 + MANIFEST=0 + CHECKS=0 fi if [ "$IN_PROCESS" -eq 1 ] then # Analyse des arguments du scenario de test - if echo "$LIGNE" | grep -q "# Manifest"; then # Arguments du manifest + if echo "$LIGNE" | grep -q "^; Manifest"; then # Arguments du manifest MANIFEST=1 MANIFEST_ARGS="" # Initialise la chaine des arguments d'installation fi - if echo "$LIGNE" | grep -q "# Checks"; then # Tests à effectuer + if echo "$LIGNE" | grep -q "^; Checks"; then # Tests à effectuer MANIFEST=0 CHECKS=1 fi @@ -440,93 +452,93 @@ do MANIFEST_PORT=$(echo "$LIGNE" | cut -d '=' -f1) # Récupère la clé du manifest correspondant au port LIGNE=$(echo "$LIGNE" | cut -d '(' -f1) # Retire l'indicateur de clé de manifest à la fin de la ligne fi - if [ "${#MANIFEST_ARGS}" -gt 0 ]; then # Si il y a déjà des arguments - MANIFEST_ARGS="$MANIFEST_ARGS&" #, précède de & - fi - MANIFEST_ARGS="$MANIFEST_ARGS$(echo $LIGNE | sed 's/[ \"]//g')" # Ajoute l'argument du manifest, en retirant les espaces et les guillemets. +# if [ "${#MANIFEST_ARGS}" -gt 0 ]; then # Si il y a déjà des arguments +# MANIFEST_ARGS="$MANIFEST_ARGS&" #, précède de & +# fi + MANIFEST_ARGS="$MANIFEST_ARGS$(echo $LIGNE | sed 's/^ *\| *$\|\"//g')&" # Ajoute l'argument du manifest, en retirant les espaces de début et de fin ainsi que les guillemets. fi fi if [ "$CHECKS" -eq 1 ] then # Analyse des tests à effectuer sur ce scenario. - if echo "$LIGNE" | grep -q "setup_sub_dir="; then # Test d'installation en sous-dossier + 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 + 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 + 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é + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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. @@ -537,16 +549,16 @@ do all_test=$((all_test+1)) fi fi - if echo "$LIGNE" | grep -q "final_path_already_use="; then # Test sur final path déjà utilisé. + 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 - fi -done < "$APP_CHECK/check_process" +done 4< "$APP_CHECK/check_process" # Utilise le descripteur de fichier 4. Car le descripteur 1 est utilisé par d'autres boucles while read dans ces scripts. + TESTING_PROCESS if [ "$no_lxc" -eq 0 ]; then diff --git a/sub_scripts/log_extractor.sh b/sub_scripts/log_extractor.sh old mode 100755 new mode 100644 index 11008b3..b2054b6 --- a/sub_scripts/log_extractor.sh +++ b/sub_scripts/log_extractor.sh @@ -28,7 +28,11 @@ ECHO_FORMAT () { if [ "$3" == "underlined" ]; then echo -en "\e[4m" fi - echo -en "$1" | tee -a $RESULT + copy_log=-- + if [ "$4" == "clog" ]; then + copy_log=$COMPLETE_LOG + fi + echo -en "$1" | tee -a "$RESULT" "$copy_log" echo -en "\e[0m" } diff --git a/sub_scripts/lxc_build.sh b/sub_scripts/lxc_build.sh index 27fcafb..6bd1da9 100755 --- a/sub_scripts/lxc_build.sh +++ b/sub_scripts/lxc_build.sh @@ -17,18 +17,18 @@ then # $EUID est vide sur une exécution avec sudo. Et vaut 0 pour root 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 +38,41 @@ 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 "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" 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 @@ -86,45 +86,40 @@ User pchecker IdentityFile $HOME/.ssh/$LXC_NAME EOF -echo -e "\007" # bell 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" +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) SOUS_DOMAIN="sous.$DOMAIN" -echo -e "\007" # bell -echo ">> Le mot de passe Yunohost est \'$YUNO_PWD\'" -echo ">> Ajout du sous domaine de test" | tee -a "$LOG_BUILD_LXC" +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 -e "\007" # bell -echo ">> Le mot de passe Yunohost est \'$YUNO_PWD\'" -echo ">> Ajout de l'utilisateur de test" | tee -a "$LOG_BUILD_LXC" +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 "\n>> Vérification de l'état de Yunohost" | tee -a "$LOG_BUILD_LXC" +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 -e "\007" # bell -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_remove.sh b/sub_scripts/lxc_remove.sh index 9bc80b6..08e17a3 100755 --- a/sub_scripts/lxc_remove.sh +++ b/sub_scripts/lxc_remove.sh @@ -1,6 +1,6 @@ #!/bin/bash -LXC_NAME=$(cat lxc_build.sh | grep LXC_NAME= | cut -d '=' -f2) +LXC_NAME=$(cat sub_scripts/lxc_build.sh | grep LXC_NAME= | cut -d '=' -f2) # Check root CHECK_ROOT=$EUID @@ -11,25 +11,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" -sudo lxc-stop -n $LXC_NAME +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" -BEGIN_LINE=$(cat $HOME/.ssh/config | grep "^# ssh pchecker_lxc$") -sed -i "/^$BEGIN_LINE$/,/^IdentityFile$/d" $HOME/.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 100755 new mode 100644 index 396a5a5..034c20d --- a/sub_scripts/lxc_upgrade.sh +++ b/sub_scripts/lxc_upgrade.sh @@ -3,13 +3,13 @@ PLAGE_IP=$(cat lxc_build.sh | grep PLAGE_IP= | cut -d '"' -f2) LXC_NAME=$(cat lxc_build.sh | grep LXC_NAME= | cut -d '=' -f2) -echo ">> Active le bridge réseau" +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,48 +23,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 /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/ # 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. if [ "$?" -eq 0 ]; then update_apt=1 -else - update_apt=0 - fi -echo ">> Upgrade" +echo "update_apt=$update_apt" +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 lxc-pchecker +sudo ifdown lzc-pchecker if [ "$update_apt" -eq 1 ] then - echo ">> Archivage du snapshot" + 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 "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 old mode 100755 new mode 100644 index e75a9b6..1122599 --- a/sub_scripts/testing_process.sh +++ b/sub_scripts/testing_process.sh @@ -8,7 +8,8 @@ echo -e "\nChargement des fonctions de testing_process.sh" source $abs_path/sub_scripts/log_extractor.sh SETUP_APP () { -# echo -e "MANIFEST_ARGS=$MANIFEST_ARGS_MOD" +# 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\"" YUNOHOST_RESULT=$? @@ -32,12 +33,13 @@ 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" 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 + 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 "" url_output | cut -d '>' -f 2 | cut -d '<' -f1) ECHO_FORMAT "Titre de la page: $URL_TITLE\n" "white" @@ -51,14 +53,12 @@ CHECK_URL () { grep "<body" -A 20 url_output | sed 1d | tee -a $RESULT echo -e "\e[0m" fi - if [ "$no_lxc" -eq 0 ]; then - sudo sed -i '/#package_check/d' /etc/hosts # Supprime la ligne dans le hosts - 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" + ECHO_FORMAT "\n\n>> Installation en sous-dossier... [Test $cur_test/$all_test]\n" "white" "bold" clog 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" @@ -124,7 +124,7 @@ CHECK_SETUP_SUBDIR () { CHECK_SETUP_ROOT () { # Test d'installation à la racine - ECHO_FORMAT "\n\n>> Installation à la racine... [Test $cur_test/$all_test]\n" "white" "bold" + ECHO_FORMAT "\n\n>> Installation à la racine... [Test $cur_test/$all_test]\n" "white" "bold" clog 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" @@ -149,9 +149,10 @@ CHECK_SETUP_ROOT () { # Installation de l'app SETUP_APP LOG_EXTRACTOR - if [ "$install_pass" -gt 0 ]; then + if [ "$install_pass" -gt 0 ]; then # Si install_pass>0, une installation a déjà été faite. tnote=$((tnote+1)) else + install_pass=1 tnote=$((tnote+2)) fi if [ "$YUNOHOST_RESULT" -eq 0 ]; then @@ -178,12 +179,12 @@ 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 + if [ "$install_pass" -eq 2 ]; then # Si install_pass=2, une suppression a déjà été faite. tnote=$((tnote+1)) else + install_pass=2 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 @@ -201,18 +202,18 @@ 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... [Test $cur_test/$all_test]\n" "white" "bold" + 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 # Installation de l'app SETUP_APP LOG_EXTRACTOR - if [ "$install_pass" -eq 0 ]; then + if [ "$install_pass" -eq 0 ]; then # Si install_pass=0, aucune installation n'a été faite. + install_pass=1 tnote=$((tnote+1)) fi if [ "$YUNOHOST_RESULT" -eq 0 ]; then @@ -221,6 +222,7 @@ CHECK_SETUP_NO_URL () { note=$((note+1)) fi GLOBAL_CHECK_SETUP=1 # Installation réussie + GLOBAL_CHECK_SUB_DIR=1 else ECHO_FORMAT "--- FAIL ---\n" "lred" "bold" if [ "$GLOBAL_CHECK_SETUP" -ne 1 ]; then @@ -232,7 +234,8 @@ 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 + if [ "$install_pass" -ne 2 ]; then # Si install_pass!=2, aucune suppression n'a été faite. + install_pass=2 tnote=$((tnote+1)) fi if [ "$YUNOHOST_REMOVE" -eq 0 ]; then @@ -253,7 +256,7 @@ CHECK_SETUP_NO_URL () { CHECK_UPGRADE () { # Test d'upgrade - ECHO_FORMAT "\n\n>> Upgrade... [Test $cur_test/$all_test]\n" "white" "bold" + ECHO_FORMAT "\n\n>> Upgrade... [Test $cur_test/$all_test]\n" "white" "bold" clog cur_test=$((cur_test+1)) if [ "$GLOBAL_CHECK_SETUP" -ne 1 ]; then echo "L'installation a échouée, impossible d'effectuer ce test..." @@ -306,7 +309,7 @@ CHECK_UPGRADE () { CHECK_BACKUP_RESTORE () { # Test de backup - ECHO_FORMAT "\n\n>> Backup... [Test $cur_test/$all_test]\n" "white" "bold" + ECHO_FORMAT "\n\n>> Backup/Restore... [Test $cur_test/$all_test]\n" "white" "bold" clog cur_test=$((cur_test+1)) if [ "$GLOBAL_CHECK_SETUP" -ne 1 ]; then echo "L'installation a échouée, impossible d'effectuer ce test..." @@ -379,10 +382,10 @@ CHECK_BACKUP_RESTORE () { CHECK_PUBLIC_PRIVATE () { # Test d'installation en public/privé if [ "$1" == "private" ]; then - ECHO_FORMAT "\n\n>> Installation privée... [Test $cur_test/$all_test]\n" "white" "bold" + ECHO_FORMAT "\n\n>> Installation privée... [Test $cur_test/$all_test]\n" "white" "bold" clog fi if [ "$1" == "public" ]; then - ECHO_FORMAT "\n\n>> Installation publique... [Test $cur_test/$all_test]\n" "white" "bold" + ECHO_FORMAT "\n\n>> Installation publique... [Test $cur_test/$all_test]\n" "white" "bold" clog fi cur_test=$((cur_test+1)) if [ "$GLOBAL_CHECK_SETUP" -ne 1 ]; then @@ -464,7 +467,7 @@ CHECK_PUBLIC_PRIVATE () { CHECK_MULTI_INSTANCE () { # Test d'installation en multi-instance - ECHO_FORMAT "\n\n>> Installation multi-instance... [Test $cur_test/$all_test]\n" "white" "bold" + ECHO_FORMAT "\n\n>> Installation multi-instance... [Test $cur_test/$all_test]\n" "white" "bold" clog cur_test=$((cur_test+1)) if [ "$GLOBAL_CHECK_SETUP" -ne 1 ]; then echo "L'installation a échouée, impossible d'effectuer ce test..." @@ -522,16 +525,16 @@ CHECK_MULTI_INSTANCE () { CHECK_COMMON_ERROR () { # Test d'erreur depuis le manifest if [ "$1" == "wrong_user" ]; then - ECHO_FORMAT "\n\n>> Erreur d'utilisateur... [Test $cur_test/$all_test]\n" "white" "bold" + ECHO_FORMAT "\n\n>> Erreur d'utilisateur... [Test $cur_test/$all_test]\n" "white" "bold" clog fi if [ "$1" == "wrong_path" ]; then - ECHO_FORMAT "\n\n>> Erreur de domaine... [Test $cur_test/$all_test]\n" "white" "bold" + ECHO_FORMAT "\n\n>> Erreur de domaine... [Test $cur_test/$all_test]\n" "white" "bold" clog fi if [ "$1" == "incorrect_path" ]; then - ECHO_FORMAT "\n\n>> Path mal formé... [Test $cur_test/$all_test]\n" "white" "bold" + ECHO_FORMAT "\n\n>> Path mal formé... [Test $cur_test/$all_test]\n" "white" "bold" clog fi if [ "$1" == "port_already_use" ]; then - ECHO_FORMAT "\n\n>> Port déjà utilisé... [Test $cur_test/$all_test]\n" "white" "bold" + ECHO_FORMAT "\n\n>> Port déjà utilisé... [Test $cur_test/$all_test]\n" "white" "bold" clog if [ -z "$MANIFEST_PORT" ]; then echo "Clé de manifest pour 'port' introuvable ou port non renseigné dans le fichier check_process. Impossible de procéder à ce test" return @@ -639,7 +642,7 @@ CHECK_COMMON_ERROR () { CHECK_CORRUPT () { # Test d'erreur sur source corrompue - ECHO_FORMAT "\n\n>> Source corrompue après téléchargement... [Test $cur_test/$all_test]\n" "white" "bold" + ECHO_FORMAT "\n\n>> Source corrompue après téléchargement... [Test $cur_test/$all_test]\n" "white" "bold" clog cur_test=$((cur_test+1)) if [ "$GLOBAL_CHECK_SETUP" -ne 1 ]; then echo "L'installation a échouée, impossible d'effectuer ce test..." @@ -649,7 +652,7 @@ 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... [Test $cur_test/$all_test]\n" "white" "bold" + ECHO_FORMAT "\n\n>> Erreur de téléchargement de la source... [Test $cur_test/$all_test]\n" "white" "bold" clog cur_test=$((cur_test+1)) if [ "$GLOBAL_CHECK_SETUP" -ne 1 ]; then echo "L'installation a échouée, impossible d'effectuer ce test..." @@ -659,7 +662,7 @@ echo -n "Non implémenté" } CHECK_FINALPATH () { # Test sur final path déjà utilisé. - ECHO_FORMAT "\n\n>> Final path déjà utilisé... [Test $cur_test/$all_test]\n" "white" "bold" + ECHO_FORMAT "\n\n>> Final path déjà utilisé... [Test $cur_test/$all_test]\n" "white" "bold" clog cur_test=$((cur_test+1)) if [ "$GLOBAL_CHECK_SETUP" -ne 1 ]; then echo "L'installation a échouée, impossible d'effectuer ce test..."