Test package_linter, exec hors dossier, maj auto + divers corrections

This commit is contained in:
Maniack Crudelis 2016-07-07 14:20:29 +02:00
parent 92dc8555c7
commit 78dd3df1a6
9 changed files with 312 additions and 167 deletions

View file

@ -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 résultats des tests est affiché directement et stocké dans le fichier Test_results.log
Le script est capable d'effectuer les tests suivant: 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 en sous-dossier
- Installation à la racine du domaine - Installation à la racine du domaine
- Installation sans accès par url (Pour les applications n'ayant pas d'interface web) - 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) password="$PASSWORD" (PASSWORD)
port="666" (PORT) port="666" (PORT)
; Checks ; Checks
pkg_linter=1
setup_sub_dir=1 setup_sub_dir=1
setup_root=1 setup_root=1
setup_nourl=0 setup_nourl=0
@ -85,6 +87,7 @@ Certaines clés de manifest sont indispensables au script pour effectuer certain
Ensemble des tests à effectuer. Ensemble des tests à effectuer.
Chaque test marqué à 1 sera effectué par le script. 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. 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_sub_dir`: Installation dans le path /check.
- `setup_root`: Installation à la racine du domaine. - `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. - `setup_nourl`: Installation sans accès http. Ce test ne devrait être choisi que pour les applications ne disposant pas d'une interface web.

View file

@ -10,6 +10,7 @@
password="pass" (PASSWORD) password="pass" (PASSWORD)
port="666" (PORT) port="666" (PORT)
; Checks ; Checks
pkg_linter=1
setup_sub_dir=1 setup_sub_dir=1
setup_root=1 setup_root=1
setup_nourl=0 setup_nourl=0

View file

@ -5,6 +5,56 @@
# --no-lxc N'utilise pas la virtualisation en conteneur lxc. La virtualisation est utilisée par défaut si disponible. # --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. # --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 ] if [ "$#" -eq 0 ]
then then
echo "Le script prend en argument le package à tester." 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 USER_TEST=package_checker
PASSWORD_TEST=checker_pwd PASSWORD_TEST=checker_pwd
PATH_TEST=/check 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 ] if [ "$no_lxc" -eq 0 ]
then then
@ -34,22 +84,10 @@ else
fi fi
SOUS_DOMAIN="sous.$DOMAIN" SOUS_DOMAIN="sous.$DOMAIN"
abs_path=$(cd $(dirname $0); pwd) # Récupère le chemin absolu du script. source "$script_dir/sub_scripts/lxc_launcher.sh"
source "$script_dir/sub_scripts/testing_process.sh"
source $abs_path/sub_scripts/lxc_launcher.sh
source $abs_path/sub_scripts/testing_process.sh
source /usr/share/yunohost/helpers 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 ] if [ "$no_lxc" -eq 0 ]
then # Si le conteneur lxc est utilisé then # Si le conteneur lxc est utilisé
lxc_ok=0 lxc_ok=0
@ -63,7 +101,7 @@ then # Si le conteneur lxc est utilisé
then then
if [ "$build_lxc" -eq 1 ] if [ "$build_lxc" -eq 1 ]
then 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 else
ECHO_FORMAT "Lxc n'est pas installé, ou la machine $LXC_NAME n'est pas créée.\n" "red" 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 "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 fi
# Vérifie le type d'emplacement du package à tester # Vérifie le type d'emplacement du package à tester
echo "Récupération du package à tester."
sudo rm -rf "$APP_CHECK"
GIT_PACKAGE=0 GIT_PACKAGE=0
if echo "$arg_app" | grep -Eq "https?:\/\/" if echo "$arg_app" | grep -Eq "https?:\/\/"
then then
GIT_PACKAGE=1 GIT_PACKAGE=1
git clone $arg_app "$(basename $arg_app)_check" git clone $arg_app "$script_dir/$(basename "$arg_app")_check"
else else
# Si c'est un dossier local, il est copié dans le dossier du script. # 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 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 if [ ! -d "$APP_CHECK" ]; then
ECHO_FORMAT "Le dossier de l'application a tester est introuvable...\n" "red" ECHO_FORMAT "Le dossier de l'application a tester est introuvable...\n" "red"
exit 1 exit 1
fi 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 # 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 "\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" ECHO_FORMAT "Merci d'ajouter un fichier check_process à la racine de l'app à tester.\n" "red"
exit 1 exit 1
@ -125,7 +172,15 @@ fi
TEST_RESULTS () { 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 if [ "$GLOBAL_CHECK_SETUP" -eq 1 ]; then
ECHO_FORMAT "\t\t\t\tSUCCESS\n" "lgreen" ECHO_FORMAT "\t\t\t\tSUCCESS\n" "lgreen"
elif [ "$GLOBAL_CHECK_SETUP" -eq -1 ]; then elif [ "$GLOBAL_CHECK_SETUP" -eq -1 ]; then
@ -251,32 +306,32 @@ TEST_RESULTS () {
ECHO_FORMAT "\t\t\tNot evaluated.\n" "white" ECHO_FORMAT "\t\t\tNot evaluated.\n" "white"
fi fi
ECHO_FORMAT "Source corrompue: " # ECHO_FORMAT "Source corrompue: "
if [ "$GLOBAL_CHECK_CORRUPT" -eq 1 ]; then # if [ "$GLOBAL_CHECK_CORRUPT" -eq 1 ]; then
ECHO_FORMAT "\t\t\tSUCCESS\n" "lgreen" # ECHO_FORMAT "\t\t\tSUCCESS\n" "lgreen"
elif [ "$GLOBAL_CHECK_CORRUPT" -eq -1 ]; then # elif [ "$GLOBAL_CHECK_CORRUPT" -eq -1 ]; then
ECHO_FORMAT "\t\t\tFAIL\n" "lred" # ECHO_FORMAT "\t\t\tFAIL\n" "lred"
else # else
ECHO_FORMAT "\t\t\tNot evaluated.\n" "white" # ECHO_FORMAT "\t\t\tNot evaluated.\n" "white"
fi # fi
ECHO_FORMAT "Erreur de téléchargement de la source: " # ECHO_FORMAT "Erreur de téléchargement de la source: "
if [ "$GLOBAL_CHECK_DL" -eq 1 ]; then # if [ "$GLOBAL_CHECK_DL" -eq 1 ]; then
ECHO_FORMAT "\tSUCCESS\n" "lgreen" # ECHO_FORMAT "\tSUCCESS\n" "lgreen"
elif [ "$GLOBAL_CHECK_DL" -eq -1 ]; then # elif [ "$GLOBAL_CHECK_DL" -eq -1 ]; then
ECHO_FORMAT "\tFAIL\n" "lred" # ECHO_FORMAT "\tFAIL\n" "lred"
else # else
ECHO_FORMAT "\tNot evaluated.\n" "white" # ECHO_FORMAT "\tNot evaluated.\n" "white"
fi # fi
ECHO_FORMAT "Dossier déjà utilisé: " # ECHO_FORMAT "Dossier déjà utilisé: "
if [ "$GLOBAL_CHECK_FINALPATH" -eq 1 ]; then # if [ "$GLOBAL_CHECK_FINALPATH" -eq 1 ]; then
ECHO_FORMAT "\t\t\tSUCCESS\n" "lgreen" # ECHO_FORMAT "\t\t\tSUCCESS\n" "lgreen"
elif [ "$GLOBAL_CHECK_FINALPATH" -eq -1 ]; then # elif [ "$GLOBAL_CHECK_FINALPATH" -eq -1 ]; then
ECHO_FORMAT "\t\t\tFAIL\n" "lred" # ECHO_FORMAT "\t\t\tFAIL\n" "lred"
else # else
ECHO_FORMAT "\t\t\tNot evaluated.\n" "white" # ECHO_FORMAT "\t\t\tNot evaluated.\n" "white"
fi # fi
ECHO_FORMAT "Backup: " ECHO_FORMAT "Backup: "
if [ "$GLOBAL_CHECK_BACKUP" -eq 1 ]; then if [ "$GLOBAL_CHECK_BACKUP" -eq 1 ]; then
@ -323,10 +378,11 @@ TEST_RESULTS () {
smiley="\o/" smiley="\o/"
fi fi
ECHO_FORMAT "$note/20 $smiley\n" "$color_note" "$typo_note" 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() { INIT_VAR() {
GLOBAL_LINTER=0
GLOBAL_CHECK_SETUP=0 GLOBAL_CHECK_SETUP=0
GLOBAL_CHECK_SUB_DIR=0 GLOBAL_CHECK_SUB_DIR=0
GLOBAL_CHECK_ROOT=0 GLOBAL_CHECK_ROOT=0
@ -364,6 +420,7 @@ INIT_VAR() {
MANIFEST_PASSWORD="null" MANIFEST_PASSWORD="null"
MANIFEST_PORT="null" MANIFEST_PORT="null"
pkg_linter=0
setup_sub_dir=0 setup_sub_dir=0
setup_root=0 setup_root=0
setup_nourl=0 setup_nourl=0
@ -382,13 +439,14 @@ INIT_VAR() {
} }
INIT_VAR INIT_VAR
echo -n "" > $COMPLETE_LOG # Initialise le fichier de log echo -n "" > "$COMPLETE_LOG" # Initialise le fichier de log
echo -n "" > $RESULT # Initialise le fichier des résulats d'analyse echo -n "" > "$RESULT" # Initialise le fichier des résulats d'analyse
if [ "$no_lxc" -eq 0 ]; then if [ "$no_lxc" -eq 0 ]; then
LXC_INIT LXC_INIT
fi fi
## Parsing du fichier check_process de manière séquentielle. ## Parsing du fichier check_process de manière séquentielle.
echo "Parsing du fichier check_process"
while read <&4 LIGNE while read <&4 LIGNE
do do
LIGNE=$(echo $LIGNE | sed 's/^ *"//g') # Efface les espaces en début de ligne LIGNE=$(echo $LIGNE | sed 's/^ *"//g') # Efface les espaces en début de ligne
@ -460,6 +518,12 @@ do
fi fi
if [ "$CHECKS" -eq 1 ] if [ "$CHECKS" -eq 1 ]
then # Analyse des tests à effectuer sur ce scenario. 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 if echo "$LIGNE" | grep -q "^setup_sub_dir="; then # Test d'installation en sous-dossier
setup_sub_dir=$(echo "$LIGNE" | cut -d '=' -f2) setup_sub_dir=$(echo "$LIGNE" | cut -d '=' -f2)
if [ "$setup_sub_dir" -eq 1 ]; then 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" echo "Le log complet des installations et suppressions est disponible dans le fichier $COMPLETE_LOG"
# Clean # 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" sudo rm -rf "$APP_CHECK"

37
sub_scripts/log_extractor.sh Normal file → Executable file
View file

@ -1,8 +1,9 @@
#!/bin/bash #!/bin/bash
OUTPUTD="debug_output" OUTPUTD="$script_dir/debug_output.log"
YUNOHOST_LOG="/var/log/yunohost/yunohost-cli.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" echo "Chargement des fonctions de log_extractor.sh"
@ -30,7 +31,7 @@ ECHO_FORMAT () {
fi fi
copy_log=-- copy_log=--
if [ "$4" == "clog" ]; then if [ "$4" == "clog" ]; then
copy_log=$COMPLETE_LOG copy_log="$COMPLETE_LOG"
fi fi
echo -en "$1" | tee -a "$RESULT" "$copy_log" echo -en "$1" | tee -a "$RESULT" "$copy_log"
echo -en "\e[0m" echo -en "\e[0m"
@ -60,37 +61,37 @@ PARSE_LOG () {
ECHO_FORMAT "Warning:" "lyellow" "underlined" ECHO_FORMAT "Warning:" "lyellow" "underlined"
ECHO_FORMAT " $(echo "$LOG_LIGNE_TEMP\n" | sed 's/^>WARNING: //')" "lyellow" ECHO_FORMAT " $(echo "$LOG_LIGNE_TEMP\n" | sed 's/^>WARNING: //')" "lyellow"
fi fi
done < "temp_$RESULT" done < "$temp_RESULT"
} }
CLEAR_LOG () { CLEAR_LOG () {
# Élimine les warning parasites connus et identifiables facilement. # Élimine les warning parasites connus et identifiables facilement.
sed -i '/^>WARNING: yunohost\.hook <lambda> - \[[0-9.]*\] ?$/d' "temp_$RESULT" # Ligne de warning vide précédant et suivant la progression d'un wget sed -i '/^>WARNING: yunohost\.hook <lambda> - \[[0-9.]*\] ?$/d' "$temp_RESULT" # Ligne de warning vide précédant et suivant la progression d'un wget
sed -i '/^>WARNING: yunohost\.hook <lambda> - \[[0-9.]*\] *[0-9]*K \.* /d' "temp_$RESULT" # Ligne de warning de progression d'un wget sed -i '/^>WARNING: yunohost\.hook <lambda> - \[[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 '/% 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 '/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 '/--:--:-- --:--:-- --:--:--/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 '/^>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 '/^$/d' "$temp_RESULT" # Retire les lignes vides
} }
LOG_EXTRACTOR () { 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" cat "$OUTPUTD" >> "$COMPLETE_LOG"
while read LOG_LIGNE while read LOG_LIGNE
do # Lit le log pour extraire les warning et les erreurs. do # Lit le log pour extraire les warning et les erreurs.
if echo "$LOG_LIGNE" | grep -q " ERROR "; then if echo "$LOG_LIGNE" | grep -q " ERROR "; then
echo -n ">ERROR: " >> "temp_$RESULT" echo -n ">ERROR: " >> "$temp_RESULT"
echo "$LOG_LIGNE" | sed 's/^.* ERROR *//' >> "temp_$RESULT" echo "$LOG_LIGNE" | sed 's/^.* ERROR *//' >> "$temp_RESULT"
fi fi
if echo "$LOG_LIGNE" | grep -q "yunohost.*: error:"; then # Récupère aussi les erreurs de la moulinette if echo "$LOG_LIGNE" | grep -q "yunohost.*: error:"; then # Récupère aussi les erreurs de la moulinette
echo -n ">ERROR: " >> "temp_$RESULT" echo -n ">ERROR: " >> "$temp_RESULT"
echo "$LOG_LIGNE" >> "temp_$RESULT" echo "$LOG_LIGNE" >> "$temp_RESULT"
fi fi
if echo "$LOG_LIGNE" | grep -q " WARNING "; then if echo "$LOG_LIGNE" | grep -q " WARNING "; then
echo -n ">WARNING: " >> "temp_$RESULT" echo -n ">WARNING: " >> "$temp_RESULT"
echo "$LOG_LIGNE" | sed 's/^.* WARNING *//' >> "temp_$RESULT" echo "$LOG_LIGNE" | sed 's/^.* WARNING *//' >> "$temp_RESULT"
fi fi
done < "$OUTPUTD" done < "$OUTPUTD"
CLEAR_LOG CLEAR_LOG

View file

@ -1,6 +1,9 @@
#!/bin/bash #!/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" PLAGE_IP="10.1.4"
ARG_SSH="-t" ARG_SSH="-t"
DOMAIN=domain.tld DOMAIN=domain.tld
@ -16,19 +19,18 @@ then # $EUID est vide sur une exécution avec sudo. Et vaut 0 pour root
exit 1 exit 1
fi 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 update >> "$LOG_BUILD_LXC" 2>&1
sudo apt-get install -y lxc lxctl >> "$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 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 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 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 <<EOF >> "$LOG_BUILD_LXC" 2>&1 echo | sudo tee /etc/network/interfaces.d/lxc-pchecker <<EOF >> "$LOG_BUILD_LXC" 2>&1
auto lxc-pchecker auto lxc-pchecker
iface lxc-pchecker inet static iface lxc-pchecker inet static
@ -38,41 +40,49 @@ iface lxc-pchecker inet static
bridge_maxwait 0 bridge_maxwait 0
EOF 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 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 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 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 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 -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 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 sudo lxc-start -n $LXC_NAME -d >> "$LOG_BUILD_LXC" 2>&1
sleep 3 sleep 3
sudo lxc-ls -f >> "$LOG_BUILD_LXC" 2>&1 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 update
sudo lxc-attach -n $LXC_NAME -- apt-get install -y tasksel sudo git 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" echo "> Installation des paquets standard et ssh-server" | tee -a "$LOG_BUILD_LXC"
sudo lxc-attach -n $LXC_NAME -- tasksel install standard ssh-server tasksell_exit=1
while [ "$tasksell_exit" -ne 0 ]
echo "Renseigne /etc/hosts sur l'invité" | tee -a "$LOG_BUILD_LXC" 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 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 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 "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 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 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 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 fi
ssh $ARG_SSH $LXC_NAME "git clone https://github.com/YunoHost/install_script /tmp/install_script" >> "$LOG_BUILD_LXC" 2>&1 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 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 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) USER_TEST=$(cat "$(dirname "$script_dir")/package_check.sh" | grep USER_TEST= | cut -d '=' -f2)
PASSWORD_TEST=$(cat ../package_check.sh | grep PASSWORD_TEST= | cut -d '=' -f2) PASSWORD_TEST=$(cat "$(dirname "$script_dir")/package_check.sh" | grep PASSWORD_TEST= | cut -d '=' -f2)
SOUS_DOMAIN="sous.$DOMAIN" SOUS_DOMAIN="sous.$DOMAIN"
echo "Le mot de passe Yunohost est \'$YUNO_PWD\'" # echo "Le mot de passe Yunohost est \'$YUNO_PWD\'"
echo "Ajout du sous domaine de test" | tee -a "$LOG_BUILD_LXC" echo "> Ajout du sous domaine de test" | tee -a "$LOG_BUILD_LXC"
ssh $ARG_SSH $LXC_NAME "sudo yunohost domain add \"$SOUS_DOMAIN\"" ssh $ARG_SSH $LXC_NAME "sudo yunohost domain add \"$SOUS_DOMAIN\" --admin-password=\"$YUNO_PWD\""
USER_TEST_CLEAN=${USER_TEST//"_"/""} USER_TEST_CLEAN=${USER_TEST//"_"/""}
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\"" 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 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 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 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 -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 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 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 sudo lxc-snapshot -n $LXC_NAME >> "$LOG_BUILD_LXC" 2>&1
# Il sera nommé snap0 et stocké dans /var/lib/lxcsnaps/$LXC_NAME/snap0/ # Il sera nommé snap0 et stocké dans /var/lib/lxcsnaps/$LXC_NAME/snap0/

View file

@ -1,19 +1,19 @@
#!/bin/bash #!/bin/bash
ARG_SSH="-t" 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 () { LXC_INIT () {
# Activation du bridge réseau # Activation du bridge réseau
echo "Initialisation du réseau pour le conteneur." 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 # 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 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 -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 -t nat -A POSTROUTING -s $PLAGE_IP.0/24 -j MASQUERADE | tee -a "$RESULT" 2>&1
if [ "$no_lxc" -eq 0 ]; then 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 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 ] if [ "$no_lxc" -eq 0 ]
then then
# Démarrage de la machine # 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` 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. do # Vérifie que la machine est accessible en ssh avant de commencer. Il lui faut le temps de démarrer.
echo -n . echo -n .
@ -38,9 +38,9 @@ LXC_START () {
ECHO_FORMAT "Le conteneur n'a pas démarré correctement...\n" "lred" "bold" ECHO_FORMAT "Le conteneur n'a pas démarré correctement...\n" "lred" "bold"
return 1 return 1
fi fi
scp -rq "$APP_CHECK" "$LXC_NAME": >> $RESULT 2>&1 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 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/$OUTPUTD" >> "$OUTPUTD" # Récupère le contenu du OUTPUTD distant pour le réinjecter dans le local sudo cat "/var/lib/lxc/$LXC_NAME/rootfs/home/pchecker/debug_output.log" >> "$OUTPUTD" # Récupère le contenu du OUTPUTD distant pour le réinjecter dans le local
return "$?" return "$?"
else # Sinon exécute la commande directement. else # Sinon exécute la commande directement.
command=$(echo "$1" | sed "s@\"@@g") # Remplace les guillemets doubles par des simples command=$(echo "$1" | sed "s@\"@@g") # Remplace les guillemets doubles par des simples
@ -53,12 +53,12 @@ LXC_STOP () {
then then
# Arrêt de la machine virtualisée # Arrêt de la machine virtualisée
if [ $(sudo lxc-info --name $LXC_NAME | grep -c "STOPPED") -eq 0 ]; then if [ $(sudo lxc-info --name $LXC_NAME | grep -c "STOPPED") -eq 0 ]; then
echo "Arrêt du conteneur LXC" | tee -a $RESULT echo "Arrêt du conteneur LXC" | tee -a "$RESULT"
sudo lxc-stop -n $LXC_NAME | tee -a $RESULT 2>&1 sudo lxc-stop -n $LXC_NAME | tee -a "$RESULT" 2>&1
fi fi
# Restaure le snapshot. # Restaure le snapshot.
echo "Restauration du snapshot de la machine lxc" | tee -a $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 sudo rsync -aEAX --delete -i /var/lib/lxcsnaps/$LXC_NAME/snap0/rootfs/ /var/lib/lxc/$LXC_NAME/rootfs/ > /dev/null 2>> "$RESULT"
fi fi
} }
@ -67,19 +67,19 @@ LXC_TURNOFF () {
# Suppression des règles de parefeu # Suppression des règles de parefeu
if sudo iptables -D FORWARD -i lxc-pchecker -o eth0 -j ACCEPT 2> /dev/null if sudo iptables -D FORWARD -i lxc-pchecker -o eth0 -j ACCEPT 2> /dev/null
then 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 fi
if sudo iptables -C FORWARD -i eth0 -o lxc-pchecker -j ACCEPT 2> /dev/null if sudo iptables -C FORWARD -i eth0 -o lxc-pchecker -j ACCEPT 2> /dev/null
then 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 fi
if sudo iptables -t nat -C POSTROUTING -s $PLAGE_IP.0/24 -j MASQUERADE 2> /dev/null if sudo iptables -t nat -C POSTROUTING -s $PLAGE_IP.0/24 -j MASQUERADE 2> /dev/null
then 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 fi
# Et arrêt du bridge # Et arrêt du bridge
if sudo ifquery lxc-pchecker --state > /dev/null if sudo ifquery lxc-pchecker --state > /dev/null
then then
sudo ifdown lxc-pchecker | tee -a $RESULT 2>&1 sudo ifdown lxc-pchecker | tee -a "$RESULT" 2>&1
fi fi
} }

View file

@ -1,6 +1,9 @@
#!/bin/bash #!/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
CHECK_ROOT=$EUID CHECK_ROOT=$EUID
@ -11,24 +14,24 @@ then # $EUID est vide sur une exécution avec sudo. Et vaut 0 pour root
exit 1 exit 1
fi fi
echo "Retire l'ip forwarding." echo "> Retire l'ip forwarding."
sudo rm /etc/sysctl.d/lxc_pchecker.conf sudo rm /etc/sysctl.d/lxc_pchecker.conf
sudo sysctl -p sudo sysctl -p
echo "Désactive le bridge réseau" echo "> Désactive le bridge réseau"
sudo ifdown lxc-pchecker sudo ifdown lxc-pchecker
echo "Supprime le brige réseau" echo "> Supprime le brige réseau"
sudo rm /etc/network/interfaces.d/lxc-pchecker 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 lxc-snapshot -n $LXC_NAME -d snap0
sudo rm -f /var/lib/lxcsnaps/$LXC_NAME/snap0.tar.gz sudo rm -f /var/lib/lxcsnaps/$LXC_NAME/snap0.tar.gz
sudo lxc-destroy -n $LXC_NAME -f sudo lxc-destroy -n $LXC_NAME -f
echo "Remove lxc lxctl" echo "> Remove lxc lxctl"
sudo apt-get 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) BEGIN_LINE=$(cat $HOME/.ssh/config | grep -n "^# ssh pchecker_lxc$" | cut -d':' -f 1)
sed -i "$BEGIN_LINE,/^IdentityFile/d" $HOME/.ssh/config sed -i "$BEGIN_LINE,/^IdentityFile/d" $HOME/.ssh/config

35
sub_scripts/lxc_upgrade.sh Normal file → Executable file
View file

@ -1,15 +1,18 @@
#!/bin/bash #!/bin/bash
PLAGE_IP=$(cat lxc_build.sh | grep PLAGE_IP= | cut -d '"' -f2) # Récupère le dossier du script
LXC_NAME=$(cat lxc_build.sh | grep LXC_NAME= | cut -d '=' -f2) 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 if ! sudo ifquery lxc-pchecker --state > /dev/null
then then
sudo ifup lxc-pchecker sudo ifup lxc-pchecker
fi fi
echo "Configure le parefeu" echo "> Configure le parefeu"
if ! sudo iptables -D FORWARD -i lxc-pchecker -o eth0 -j ACCEPT 2> /dev/null if ! sudo iptables -D FORWARD -i lxc-pchecker -o eth0 -j ACCEPT 2> /dev/null
then then
sudo iptables -A FORWARD -i lxc-pchecker -o eth0 -j ACCEPT 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 sudo iptables -t nat -A POSTROUTING -s $PLAGE_IP.0/24 -j MASQUERADE
fi 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 if [ $(sudo lxc-info --name $LXC_NAME | grep -c "STOPPED") -eq 0 ]; then
# Si la machine n'est pas à l'arrêt. # Si la machine n'est pas à l'arrêt.
sudo lxc-stop -n $LXC_NAME # Arrête la machine LXC sudo lxc-stop -n $LXC_NAME # Arrête la machine LXC
fi fi
# Restaure le snapshot # 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 sudo lxc-start -n $LXC_NAME -d
sleep 3 sleep 3
sudo lxc-ls -f 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 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. 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 if [ "$?" -eq 0 ]; then
update_apt=1 update_apt=1
fi fi
echo "update_apt=$update_apt" echo "> Upgrade"
echo "Upgrade"
sudo lxc-attach -n $LXC_NAME -- apt-get dist-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 autoremove
sudo lxc-attach -n $LXC_NAME -- apt-get autoclean 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 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 lxc-pchecker -o eth0 -j ACCEPT
sudo iptables -D FORWARD -i eth0 -o lxc-pchecker -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 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 ] if [ "$update_apt" -eq 1 ]
then 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 sudo tar -cz --acls --xattrs -f /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 -d snap0
sudo lxc-snapshot -n $LXC_NAME sudo lxc-snapshot -n $LXC_NAME
fi fi

View file

@ -1,17 +1,17 @@
#!/bin/bash #!/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/ 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 () { SETUP_APP () {
# echo -e "MANIFEST_ARGS=$MANIFEST_ARGS" # echo -e "MANIFEST_ARGS=$MANIFEST_ARGS"
# echo -e "MANIFEST_ARGS_MOD=$MANIFEST_ARGS_MOD" # echo -e "MANIFEST_ARGS_MOD=$MANIFEST_ARGS_MOD"
COPY_LOG 1 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=$? YUNOHOST_RESULT=$?
COPY_LOG 2 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. 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 () { CHECK_URL () {
ECHO_FORMAT "\nAccès par l'url...\n" "white" "bold" if [ "$use_curl" -eq 1 ]
rm -f url_output # Supprime le précédent fichier html si il est encore présent then
if [ "$no_lxc" -eq 0 ]; then ECHO_FORMAT "\nAccès par l'url...\n" "white" "bold"
IP_CURL="$(cat sub_scripts/lxc_build.sh | grep PLAGE_IP= | cut -d '"' -f2).2" 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 "<title>" "$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 else
IP_CURL="127.0.0.1" ECHO_FORMAT "Test de connexion annulé.\n" "white"
fi 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 () { CHECK_SETUP_SUBDIR () {
# Test d'installation en sous-dossier # Test d'installation en sous-dossier
ECHO_FORMAT "\n\n>> Installation en sous-dossier... [Test $cur_test/$all_test]\n" "white" "bold" clog ECHO_FORMAT "\n\n>> Installation en sous-dossier... [Test $cur_test/$all_test]\n" "white" "bold" clog
cur_test=$((cur_test+1)) cur_test=$((cur_test+1))
use_curl=1
if [ -z "$MANIFEST_DOMAIN" ]; then if [ -z "$MANIFEST_DOMAIN" ]; then
echo "Clé de manifest pour 'domain' introuvable dans le fichier check_process. Impossible de procéder à ce test" echo "Clé de manifest pour 'domain' introuvable dans le fichier check_process. Impossible de procéder à ce test"
return return
@ -120,12 +132,15 @@ CHECK_SETUP_SUBDIR () {
GLOBAL_CHECK_REMOVE_SUBDIR=-1 # Suppression en sous-dossier échouée GLOBAL_CHECK_REMOVE_SUBDIR=-1 # Suppression en sous-dossier échouée
fi fi
fi fi
YUNOHOST_RESULT=-1
YUNOHOST_REMOVE=-1
} }
CHECK_SETUP_ROOT () { CHECK_SETUP_ROOT () {
# Test d'installation à la racine # Test d'installation à la racine
ECHO_FORMAT "\n\n>> Installation à la racine... [Test $cur_test/$all_test]\n" "white" "bold" clog ECHO_FORMAT "\n\n>> Installation à la racine... [Test $cur_test/$all_test]\n" "white" "bold" clog
cur_test=$((cur_test+1)) cur_test=$((cur_test+1))
use_curl=1
if [ -z "$MANIFEST_DOMAIN" ]; then if [ -z "$MANIFEST_DOMAIN" ]; then
echo "Clé de manifest pour 'domain' introuvable dans le fichier check_process. Impossible de procéder à ce test" echo "Clé de manifest pour 'domain' introuvable dans le fichier check_process. Impossible de procéder à ce test"
return return
@ -202,10 +217,13 @@ CHECK_SETUP_ROOT () {
GLOBAL_CHECK_REMOVE_ROOT=-1 # Suppression à la racine échouée GLOBAL_CHECK_REMOVE_ROOT=-1 # Suppression à la racine échouée
fi fi
fi fi
YUNOHOST_RESULT=-1
YUNOHOST_REMOVE=-1
} }
CHECK_SETUP_NO_URL () { CHECK_SETUP_NO_URL () {
# Test d'installation sans accès par 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 ECHO_FORMAT "\n\n>> Installation sans accès par url... [Test $cur_test/$all_test]\n" "white" "bold" clog
cur_test=$((cur_test+1)) cur_test=$((cur_test+1))
MANIFEST_ARGS_MOD=$MANIFEST_ARGS # Copie des arguments MANIFEST_ARGS_MOD=$MANIFEST_ARGS # Copie des arguments
@ -252,6 +270,8 @@ CHECK_SETUP_NO_URL () {
GLOBAL_CHECK_REMOVE_ROOT=-1 # Suppression échouée GLOBAL_CHECK_REMOVE_ROOT=-1 # Suppression échouée
fi fi
fi fi
YUNOHOST_RESULT=-1
YUNOHOST_REMOVE=-1
} }
CHECK_UPGRADE () { CHECK_UPGRADE () {
@ -286,7 +306,7 @@ CHECK_UPGRADE () {
ECHO_FORMAT "\nUpgrade sur la même version du package...\n" "white" "bold" ECHO_FORMAT "\nUpgrade sur la même version du package...\n" "white" "bold"
# Upgrade de l'app # Upgrade de l'app
COPY_LOG 1 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=$? YUNOHOST_RESULT=$?
COPY_LOG 2 COPY_LOG 2
LOG_EXTRACTOR LOG_EXTRACTOR
@ -305,6 +325,7 @@ CHECK_UPGRADE () {
# Suppression de l'app si lxc n'est pas utilisé. # Suppression de l'app si lxc n'est pas utilisé.
REMOVE_APP REMOVE_APP
fi fi
YUNOHOST_RESULT=-1
} }
CHECK_BACKUP_RESTORE () { CHECK_BACKUP_RESTORE () {
@ -377,6 +398,7 @@ CHECK_BACKUP_RESTORE () {
# Suppression de l'archive # Suppression de l'archive
sudo yunohost backup delete Backup_test > /dev/null sudo yunohost backup delete Backup_test > /dev/null
fi fi
YUNOHOST_RESULT=-1
} }
CHECK_PUBLIC_PRIVATE () { CHECK_PUBLIC_PRIVATE () {
@ -463,6 +485,7 @@ CHECK_PUBLIC_PRIVATE () {
# Suppression de l'app si lxc n'est pas utilisé. # Suppression de l'app si lxc n'est pas utilisé.
REMOVE_APP REMOVE_APP
fi fi
YUNOHOST_RESULT=-1
} }
CHECK_MULTI_INSTANCE () { CHECK_MULTI_INSTANCE () {
@ -520,6 +543,7 @@ CHECK_MULTI_INSTANCE () {
APPID=$APPID_first APPID=$APPID_first
REMOVE_APP REMOVE_APP
fi fi
YUNOHOST_RESULT=-1
} }
CHECK_COMMON_ERROR () { CHECK_COMMON_ERROR () {
@ -558,7 +582,8 @@ CHECK_COMMON_ERROR () {
fi fi
MANIFEST_ARGS_MOD=$(echo $MANIFEST_ARGS_MOD | sed "s/$MANIFEST_PASSWORD=[a-Z$]*\&/$MANIFEST_PASSWORD=$PASSWORD_TEST\&/") 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 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 else
if [ "$GLOBAL_CHECK_SUB_DIR" -eq 1 ]; then # Si l'install en sub_dir à fonctionné. Utilise ce mode d'installation 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\&@") 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 sudo yunohost firewall disallow Both $check_port > /dev/null
fi fi
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 () { CHECK_CORRUPT () {
@ -675,6 +732,9 @@ TESTING_PROCESS () {
# Lancement des tests # Lancement des tests
cur_test=1 cur_test=1
ECHO_FORMAT "\nScénario de test: $PROCESS_NAME\n" "white" "underlined" 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 if [ "$setup_sub_dir" -eq 1 ]; then
CHECK_SETUP_SUBDIR # Test d'installation en sous-dossier CHECK_SETUP_SUBDIR # Test d'installation en sous-dossier
LXC_STOP LXC_STOP