mirror of
https://github.com/YunoHost/package_check.git
synced 2024-09-03 20:06:20 +02:00
Test package_linter, exec hors dossier, maj auto + divers corrections
This commit is contained in:
parent
92dc8555c7
commit
78dd3df1a6
9 changed files with 312 additions and 167 deletions
|
@ -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.
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
password="pass" (PASSWORD)
|
||||
port="666" (PORT)
|
||||
; Checks
|
||||
pkg_linter=1
|
||||
setup_sub_dir=1
|
||||
setup_root=1
|
||||
setup_nourl=0
|
||||
|
|
164
package_check.sh
164
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"
|
||||
|
|
37
sub_scripts/log_extractor.sh
Normal file → Executable file
37
sub_scripts/log_extractor.sh
Normal file → Executable file
|
@ -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 <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 '/% 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 <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 '/% 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
|
||||
|
|
|
@ -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 <<EOF >> "$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/
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
35
sub_scripts/lxc_upgrade.sh
Normal file → Executable file
35
sub_scripts/lxc_upgrade.sh
Normal file → Executable file
|
@ -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
|
||||
|
|
|
@ -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,16 +32,24 @@ REMOVE_APP () {
|
|||
}
|
||||
|
||||
CHECK_URL () {
|
||||
if [ "$use_curl" -eq 1 ]
|
||||
then
|
||||
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
|
||||
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 sub_scripts/lxc_build.sh | grep PLAGE_IP= | cut -d '"' -f2).2"
|
||||
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 -LksS $SOUS_DOMAIN/$CHECK_PATH -o url_output
|
||||
URL_TITLE=$(grep "<title>" url_output | cut -d '>' -f 2 | cut -d '<' -f1)
|
||||
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
|
||||
|
@ -50,16 +58,20 @@ CHECK_URL () {
|
|||
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
|
||||
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
|
||||
ECHO_FORMAT "Test de connexion annulé.\n" "white"
|
||||
fi
|
||||
}
|
||||
|
||||
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
|
||||
|
|
Loading…
Add table
Reference in a new issue