Commentaires, correction scenar multiples, privé, lxc, curl

This commit is contained in:
Maniack Crudelis 2016-07-05 11:21:32 +02:00
parent 76cd4f0596
commit 92dc8555c7
8 changed files with 154 additions and 141 deletions

View file

@ -36,9 +36,10 @@ Il est nécessaire de fournir, à la racine du package de l'app à tester, un fi
> L'ordre des lignes n'a toutefois pas d'importance.
```
## Nom du test
;; Nom du test
auto_remove=1
# Manifest
# Commentaire ignoré
; Manifest
domain="$DOMAIN" (DOMAIN)
path="$PATH" (PATH)
admin="$USER" (USER)
@ -46,7 +47,7 @@ Il est nécessaire de fournir, à la racine du package de l'app à tester, un fi
is_public="Yes" (PUBLIC|public=Yes|private=No)
password="$PASSWORD" (PASSWORD)
port="666" (PORT)
# Checks
; Checks
setup_sub_dir=1
setup_root=1
setup_nourl=0
@ -63,7 +64,7 @@ Il est nécessaire de fournir, à la racine du package de l'app à tester, un fi
port_already_use=1 (XXXX)
final_path_already_use=0
```
### `## Nom du test`
### `;; Nom du test`
Nom du scénario de test qui sera effectué.
On peut créer autant de scénario de test que voulu, tous ayant la même syntaxe.
Les différents scénarios de test seront exécutés successivement.
@ -72,7 +73,7 @@ Les différents scénarios de test seront exécutés successivement.
Si `auto_remove` est à 0, le script marque une pause avant chaque suppression de l'app. Afin d'éffectuer des vérifications manuelles si nécessaire.
Sinon, l'app est supprimée automatiquement et les tests continuent.
### `# Manifest`
### `; Manifest`
Ensemble des clés du manifest.
Toutes les clés du manifest doivent être renseignée afin de procéder à l'installation.
> Les clés de manifest données ici ne le sont qu'à titre d'exemple. Voir le manifest de l'application.
@ -80,7 +81,7 @@ Certaines clés de manifest sont indispensables au script pour effectuer certain
`(DOMAIN)`, `(PATH)`, `(USER)`, `(PASSWORD)` et `(PORT)` doivent être mis en bout de ligne des clés correspondantes. Ces clés seront modifiées par le script.
`(PUBLIC|public=Yes|private=No)` doit, en plus de correspondre à la clé de visibilité public, indiquer les valeurs du manifest pour public et privé.
### `# Checks`
### `; Checks`
Ensemble des tests à effectuer.
Chaque test marqué à 1 sera effectué par le script.
Si un test est absent de la liste, il sera ignoré. Cela revient à le noter à 0.

View file

@ -1,6 +1,7 @@
## Nom du test
;; Nom du test
auto_remove=1
# Manifest
# Commentaire ignoré
; Manifest
domain="domain.tld" (DOMAIN)
path="/path" (PATH)
admin="john" (USER)
@ -8,7 +9,7 @@
is_public="Yes" (PUBLIC|public=Yes|private=No)
password="pass" (PASSWORD)
port="666" (PORT)
# Checks
; Checks
setup_sub_dir=1
setup_root=1
setup_nourl=0

View file

@ -106,7 +106,7 @@ then
git clone $arg_app "$(basename $arg_app)_check"
else
# Si c'est un dossier local, il est copié dans le dossier du script.
sudo cp -a "$arg_app" "$(basename $arg_app)_check"
sudo cp -a --remove-destination "$arg_app" "$(basename $arg_app)_check"
fi
APP_CHECK="$(basename $arg_app)_check"
if [ ! -d "$APP_CHECK" ]; then
@ -296,24 +296,28 @@ TEST_RESULTS () {
ECHO_FORMAT "\t\t\t\tNot evaluated.\n" "white"
fi
ECHO_FORMAT "\t\t Notes de résultats: $note/$tnote - " "white" "bold"
if [ "$note" -gt 0 ]
then
note=$(( note * 20 / tnote ))
if [ $note -le 5 ]; then
fi
if [ "$note" -le 5 ]; then
color_note="red"
typo_note="bold"
smiley=":'(" # La contribution à Shasha. Qui m'a forcé à ajouté les smiley sous la contrainte ;)
elif [ $note -le 10 ]; then
elif [ "$note" -le 10 ]; then
color_note="red"
typo_note=""
smiley=":("
elif [ $note -le 15 ]; then
elif [ "$note" -le 15 ]; then
color_note="lyellow"
typo_note=""
smiley=":s"
elif [ $note -gt 15 ]; then
elif [ "$note" -gt 15 ]; then
color_note="lgreen"
typo_note=""
smiley=":)"
elif [ $note -eq 20 ]; then
fi
if [ "$note" -ge 20 ]; then
color_note="lgreen"
typo_note="bold"
smiley="\o/"
@ -346,6 +350,10 @@ INIT_VAR() {
MANIFEST=0
CHECKS=0
auto_remove=1
install_pass=0
note=0
tnote=0
all_test=0
MANIFEST_DOMAIN="null"
MANIFEST_PATH="null"
@ -376,20 +384,22 @@ INIT_VAR() {
INIT_VAR
echo -n "" > $COMPLETE_LOG # Initialise le fichier de log
echo -n "" > $RESULT # Initialise le fichier des résulats d'analyse
note=0
tnote=0
all_test=0
if [ "$no_lxc" -eq 0 ]; then
LXC_INIT
fi
## Parsing du fichier check_process de manière séquentielle.
while read LIGNE
while read <&4 LIGNE
do
if echo "$LIGNE" | grep -q "auto_remove="; then # Indication d'auto remove
LIGNE=$(echo $LIGNE | sed 's/^ *"//g') # Efface les espaces en début de ligne
if [ "${LIGNE:0:1}" == "#" ]; then
# Ligne de commentaire, ignorée.
continue
fi
if echo "$LIGNE" | grep -q "^auto_remove="; then # Indication d'auto remove
auto_remove=$(echo "$LIGNE" | cut -d '=' -f2)
fi
if echo "$LIGNE" | grep -q "^##"; then # Début d'un scénario de test
if echo "$LIGNE" | grep -q "^;;"; then # Début d'un scénario de test
if [ "$IN_PROCESS" -eq 1 ]; then # Un scénario est déjà en cours. Donc on a atteind la fin du scénario.
TESTING_PROCESS
TEST_RESULTS
@ -398,16 +408,18 @@ do
read -p "Appuyer sur une touche pour démarrer le scénario de test suivant..." < /dev/tty
fi
fi
PROCESS_NAME=${LIGNE#\#\# }
PROCESS_NAME=${LIGNE#;; }
IN_PROCESS=1
MANIFEST=0
CHECKS=0
fi
if [ "$IN_PROCESS" -eq 1 ]
then # Analyse des arguments du scenario de test
if echo "$LIGNE" | grep -q "# Manifest"; then # Arguments du manifest
if echo "$LIGNE" | grep -q "^; Manifest"; then # Arguments du manifest
MANIFEST=1
MANIFEST_ARGS="" # Initialise la chaine des arguments d'installation
fi
if echo "$LIGNE" | grep -q "# Checks"; then # Tests à effectuer
if echo "$LIGNE" | grep -q "^; Checks"; then # Tests à effectuer
MANIFEST=0
CHECKS=1
fi
@ -440,93 +452,93 @@ do
MANIFEST_PORT=$(echo "$LIGNE" | cut -d '=' -f1) # Récupère la clé du manifest correspondant au port
LIGNE=$(echo "$LIGNE" | cut -d '(' -f1) # Retire l'indicateur de clé de manifest à la fin de la ligne
fi
if [ "${#MANIFEST_ARGS}" -gt 0 ]; then # Si il y a déjà des arguments
MANIFEST_ARGS="$MANIFEST_ARGS&" #, précède de &
fi
MANIFEST_ARGS="$MANIFEST_ARGS$(echo $LIGNE | sed 's/[ \"]//g')" # Ajoute l'argument du manifest, en retirant les espaces et les guillemets.
# if [ "${#MANIFEST_ARGS}" -gt 0 ]; then # Si il y a déjà des arguments
# MANIFEST_ARGS="$MANIFEST_ARGS&" #, précède de &
# fi
MANIFEST_ARGS="$MANIFEST_ARGS$(echo $LIGNE | sed 's/^ *\| *$\|\"//g')&" # Ajoute l'argument du manifest, en retirant les espaces de début et de fin ainsi que les guillemets.
fi
fi
if [ "$CHECKS" -eq 1 ]
then # Analyse des tests à effectuer sur ce scenario.
if echo "$LIGNE" | grep -q "setup_sub_dir="; then # Test d'installation en sous-dossier
if echo "$LIGNE" | grep -q "^setup_sub_dir="; then # Test d'installation en sous-dossier
setup_sub_dir=$(echo "$LIGNE" | cut -d '=' -f2)
if [ "$setup_sub_dir" -eq 1 ]; then
all_test=$((all_test+1))
fi
fi
if echo "$LIGNE" | grep -q "setup_root="; then # Test d'installation à la racine
if echo "$LIGNE" | grep -q "^setup_root="; then # Test d'installation à la racine
setup_root=$(echo "$LIGNE" | cut -d '=' -f2)
if [ "$setup_root" -eq 1 ]; then
all_test=$((all_test+1))
fi
fi
if echo "$LIGNE" | grep -q "setup_nourl="; then # Test d'installation sans accès par url
if echo "$LIGNE" | grep -q "^setup_nourl="; then # Test d'installation sans accès par url
setup_nourl=$(echo "$LIGNE" | cut -d '=' -f2)
if [ "$setup_nourl" -eq 1 ]; then
all_test=$((all_test+1))
fi
fi
if echo "$LIGNE" | grep -q "setup_private="; then # Test d'installation en privé
if echo "$LIGNE" | grep -q "^setup_private="; then # Test d'installation en privé
setup_private=$(echo "$LIGNE" | cut -d '=' -f2)
if [ "$setup_private" -eq 1 ]; then
all_test=$((all_test+1))
fi
fi
if echo "$LIGNE" | grep -q "setup_public="; then # Test d'installation en public
if echo "$LIGNE" | grep -q "^setup_public="; then # Test d'installation en public
setup_public=$(echo "$LIGNE" | cut -d '=' -f2)
if [ "$setup_public" -eq 1 ]; then
all_test=$((all_test+1))
fi
fi
if echo "$LIGNE" | grep -q "upgrade="; then # Test d'upgrade
if echo "$LIGNE" | grep -q "^upgrade="; then # Test d'upgrade
upgrade=$(echo "$LIGNE" | cut -d '=' -f2)
if [ "$upgrade" -eq 1 ]; then
all_test=$((all_test+1))
fi
fi
if echo "$LIGNE" | grep -q "backup_restore="; then # Test de backup et restore
if echo "$LIGNE" | grep -q "^backup_restore="; then # Test de backup et restore
backup_restore=$(echo "$LIGNE" | cut -d '=' -f2)
if [ "$backup_restore" -eq 1 ]; then
all_test=$((all_test+1))
fi
fi
if echo "$LIGNE" | grep -q "multi_instance="; then # Test d'installation multiple
if echo "$LIGNE" | grep -q "^multi_instance="; then # Test d'installation multiple
multi_instance=$(echo "$LIGNE" | cut -d '=' -f2)
if [ "$multi_instance" -eq 1 ]; then
all_test=$((all_test+1))
fi
fi
if echo "$LIGNE" | grep -q "wrong_user="; then # Test d'erreur d'utilisateur
if echo "$LIGNE" | grep -q "^wrong_user="; then # Test d'erreur d'utilisateur
wrong_user=$(echo "$LIGNE" | cut -d '=' -f2)
if [ "$wrong_user" -eq 1 ]; then
all_test=$((all_test+1))
fi
fi
if echo "$LIGNE" | grep -q "wrong_path="; then # Test d'erreur de path ou de domaine
if echo "$LIGNE" | grep -q "^wrong_path="; then # Test d'erreur de path ou de domaine
wrong_path=$(echo "$LIGNE" | cut -d '=' -f2)
if [ "$wrong_path" -eq 1 ]; then
all_test=$((all_test+1))
fi
fi
if echo "$LIGNE" | grep -q "incorrect_path="; then # Test d'erreur de forme de path
if echo "$LIGNE" | grep -q "^incorrect_path="; then # Test d'erreur de forme de path
incorrect_path=$(echo "$LIGNE" | cut -d '=' -f2)
if [ "$incorrect_path" -eq 1 ]; then
all_test=$((all_test+1))
fi
fi
if echo "$LIGNE" | grep -q "corrupt_source="; then # Test d'erreur sur source corrompue
if echo "$LIGNE" | grep -q "^corrupt_source="; then # Test d'erreur sur source corrompue
corrupt_source=$(echo "$LIGNE" | cut -d '=' -f2)
if [ "$corrupt_source" -eq 1 ]; then
all_test=$((all_test+1))
fi
fi
if echo "$LIGNE" | grep -q "fail_download_source="; then # Test d'erreur de téléchargement de la source
if echo "$LIGNE" | grep -q "^fail_download_source="; then # Test d'erreur de téléchargement de la source
fail_download_source=$(echo "$LIGNE" | cut -d '=' -f2)
if [ "$fail_download_source" -eq 1 ]; then
all_test=$((all_test+1))
fi
fi
if echo "$LIGNE" | grep -q "port_already_use="; then # Test d'erreur de port
if echo "$LIGNE" | grep -q "^port_already_use="; then # Test d'erreur de port
port_already_use=$(echo "$LIGNE" | cut -d '=' -f2)
if echo "$LIGNE" | grep -q "([0-9]*)"
then # Le port est mentionné ici.
@ -537,16 +549,16 @@ do
all_test=$((all_test+1))
fi
fi
if echo "$LIGNE" | grep -q "final_path_already_use="; then # Test sur final path déjà utilisé.
if echo "$LIGNE" | grep -q "^final_path_already_use="; then # Test sur final path déjà utilisé.
final_path_already_use=$(echo "$LIGNE" | cut -d '=' -f2)
if [ "$final_path_already_use" -eq 1 ]; then
all_test=$((all_test+1))
fi
fi
fi
fi
done < "$APP_CHECK/check_process"
done 4< "$APP_CHECK/check_process" # Utilise le descripteur de fichier 4. Car le descripteur 1 est utilisé par d'autres boucles while read dans ces scripts.
TESTING_PROCESS
if [ "$no_lxc" -eq 0 ]; then

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

@ -28,7 +28,11 @@ ECHO_FORMAT () {
if [ "$3" == "underlined" ]; then
echo -en "\e[4m"
fi
echo -en "$1" | tee -a $RESULT
copy_log=--
if [ "$4" == "clog" ]; then
copy_log=$COMPLETE_LOG
fi
echo -en "$1" | tee -a "$RESULT" "$copy_log"
echo -en "\e[0m"
}

View file

@ -17,18 +17,18 @@ then # $EUID est vide sur une exécution avec sudo. Et vaut 0 pour root
fi
echo ">> Update et install lxc lxctl" | tee "$LOG_BUILD_LXC"
echo "Update et install lxc lxctl" | tee "$LOG_BUILD_LXC"
sudo apt-get update >> "$LOG_BUILD_LXC" 2>&1
sudo apt-get install -y lxc lxctl >> "$LOG_BUILD_LXC" 2>&1
echo ">> Création d'une machine debian jessie minimaliste" | tee -a "$LOG_BUILD_LXC"
echo "Création d'une machine debian jessie minimaliste" | tee -a "$LOG_BUILD_LXC"
sudo lxc-create -n $LXC_NAME -t debian -- -r jessie >> "$LOG_BUILD_LXC" 2>&1
echo ">> Autoriser l'ip forwarding, pour router vers la machine virtuelle." | tee -a "$LOG_BUILD_LXC"
echo "Autoriser l'ip forwarding, pour router vers la machine virtuelle." | tee -a "$LOG_BUILD_LXC"
echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/lxc_pchecker.conf >> "$LOG_BUILD_LXC" 2>&1
sudo sysctl -p /etc/sysctl.d/lxc_pchecker.conf >> "$LOG_BUILD_LXC" 2>&1
echo ">> Ajoute un brige réseau pour la machine virtualisée" | tee -a "$LOG_BUILD_LXC"
echo "Ajoute un brige réseau pour la machine virtualisée" | tee -a "$LOG_BUILD_LXC"
echo | sudo tee /etc/network/interfaces.d/lxc-pchecker <<EOF >> "$LOG_BUILD_LXC" 2>&1
auto lxc-pchecker
iface lxc-pchecker inet static
@ -38,41 +38,41 @@ iface lxc-pchecker inet static
bridge_maxwait 0
EOF
echo ">> Active le bridge réseau" | tee -a "$LOG_BUILD_LXC"
echo "Active le bridge réseau" | tee -a "$LOG_BUILD_LXC"
sudo ifup lxc-pchecker >> "$LOG_BUILD_LXC" 2>&1
echo ">> Configuration réseau du conteneur" | tee -a "$LOG_BUILD_LXC"
echo "Configuration réseau du conteneur" | tee -a "$LOG_BUILD_LXC"
sudo sed -i 's/^lxc.network.type = empty$/lxc.network.type = veth\nlxc.network.flags = up\nlxc.network.link = lxc-pchecker\nlxc.network.name = eth0\nlxc.network.veth.pair = $LXC_NAME\nlxc.network.hwaddr = 00:FF:AA:00:00:01/' /var/lib/lxc/$LXC_NAME/config >> "$LOG_BUILD_LXC" 2>&1
echo ">> Configuration réseau de la machine virtualisée" | tee -a "$LOG_BUILD_LXC"
echo "Configuration réseau de la machine virtualisée" | tee -a "$LOG_BUILD_LXC"
sudo sed -i "s@iface eth0 inet dhcp@iface eth0 inet static\n\taddress $PLAGE_IP.2/24\n\tgateway $PLAGE_IP.1@" /var/lib/lxc/$LXC_NAME/rootfs/etc/network/interfaces >> "$LOG_BUILD_LXC" 2>&1
echo ">> Configure le parefeu" | tee -a "$LOG_BUILD_LXC"
echo "Configure le parefeu" | tee -a "$LOG_BUILD_LXC"
sudo iptables -A FORWARD -i lxc-pchecker -o eth0 -j ACCEPT >> "$LOG_BUILD_LXC" 2>&1
sudo iptables -A FORWARD -i eth0 -o lxc-pchecker -j ACCEPT >> "$LOG_BUILD_LXC" 2>&1
sudo iptables -t nat -A POSTROUTING -s $PLAGE_IP.0/24 -j MASQUERADE >> "$LOG_BUILD_LXC" 2>&1
echo ">> Démarrage de la machine" | tee -a "$LOG_BUILD_LXC"
echo "Démarrage de la machine" | tee -a "$LOG_BUILD_LXC"
sudo lxc-start -n $LXC_NAME -d >> "$LOG_BUILD_LXC" 2>&1
sleep 3
sudo lxc-ls -f >> "$LOG_BUILD_LXC" 2>&1
echo ">> Update et install tasksel sudo git" | tee -a "$LOG_BUILD_LXC"
echo "Update et install tasksel sudo git" | tee -a "$LOG_BUILD_LXC"
sudo lxc-attach -n $LXC_NAME -- apt-get update
sudo lxc-attach -n $LXC_NAME -- apt-get install -y tasksel sudo git
echo "Installation des paquets standard et ssh-server" | tee -a "$LOG_BUILD_LXC"
sudo lxc-attach -n $LXC_NAME -- tasksel install standard ssh-server
echo ">> Renseigne /etc/hosts sur l'invité" | tee -a "$LOG_BUILD_LXC"
echo "Renseigne /etc/hosts sur l'invité" | tee -a "$LOG_BUILD_LXC"
sudo lxc-attach -n $LXC_NAME -- echo "127.0.0.1 $LXC_NAME" | sudo tee -a /var/lib/lxc/$LXC_NAME/rootfs/etc/hosts >> "$LOG_BUILD_LXC" 2>&1
echo ">> Ajoute l'user pchecker" | tee -a "$LOG_BUILD_LXC"
echo "Ajoute l'user pchecker" | tee -a "$LOG_BUILD_LXC"
sudo lxc-attach -n $LXC_NAME -- useradd -m -p pchecker pchecker >> "$LOG_BUILD_LXC" 2>&1
echo ">> Autorise pchecker à utiliser sudo sans mot de passe" | tee -a "$LOG_BUILD_LXC"
echo "Autorise pchecker à utiliser sudo sans mot de passe" | tee -a "$LOG_BUILD_LXC"
echo "pchecker ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee -a /var/lib/lxc/$LXC_NAME/rootfs/etc/sudoers >> "$LOG_BUILD_LXC" 2>&1
echo ">> Mise en place de la connexion ssh vers l'invité." | tee -a "$LOG_BUILD_LXC"
echo "Mise en place de la connexion ssh vers l'invité." | tee -a "$LOG_BUILD_LXC"
ssh-keygen -t dsa -f $HOME/.ssh/$LXC_NAME -P '' >> "$LOG_BUILD_LXC" 2>&1
sudo mkdir /var/lib/lxc/$LXC_NAME/rootfs/home/pchecker/.ssh >> "$LOG_BUILD_LXC" 2>&1
sudo cp $HOME/.ssh/$LXC_NAME.pub /var/lib/lxc/$LXC_NAME/rootfs/home/pchecker/.ssh/authorized_keys >> "$LOG_BUILD_LXC" 2>&1
@ -86,45 +86,40 @@ User pchecker
IdentityFile $HOME/.ssh/$LXC_NAME
EOF
echo -e "\007" # bell
ssh $ARG_SSH $LXC_NAME "exit 0" # Initie une premier connexion SSH pour valider la clé.
if [ "$?" -ne 0 ]; then # Si l'utilisateur tarde trop, la connexion sera refusée... ???
ssh $ARG_SSH $LXC_NAME "exit 0" # Initie une premier connexion SSH pour valider la clé.
fi
ssh $ARG_SSH $LXC_NAME "git clone https://github.com/YunoHost/install_script /tmp/install_script" >> "$LOG_BUILD_LXC" 2>&1
echo ">> Installation de Yunohost..." | tee -a "$LOG_BUILD_LXC"
echo "Installation de Yunohost..." | tee -a "$LOG_BUILD_LXC"
ssh $ARG_SSH $LXC_NAME "cd /tmp/install_script; sudo ./install_yunohost -a" | tee -a "$LOG_BUILD_LXC" 2>&1
echo ">> Post install Yunohost" | tee -a "$LOG_BUILD_LXC"
echo "Post install Yunohost" | tee -a "$LOG_BUILD_LXC"
ssh $ARG_SSH $LXC_NAME "sudo yunohost tools postinstall --domain $DOMAIN --password $YUNO_PWD" | tee -a "$LOG_BUILD_LXC" 2>&1
USER_TEST=$(cat ../package_check.sh | grep USER_TEST= | cut -d '=' -f2)
PASSWORD_TEST=$(cat ../package_check.sh | grep PASSWORD_TEST= | cut -d '=' -f2)
SOUS_DOMAIN="sous.$DOMAIN"
echo -e "\007" # bell
echo ">> Le mot de passe Yunohost est \'$YUNO_PWD\'"
echo ">> Ajout du sous domaine de test" | tee -a "$LOG_BUILD_LXC"
echo "Le mot de passe Yunohost est \'$YUNO_PWD\'"
echo "Ajout du sous domaine de test" | tee -a "$LOG_BUILD_LXC"
ssh $ARG_SSH $LXC_NAME "sudo yunohost domain add \"$SOUS_DOMAIN\""
USER_TEST_CLEAN=${USER_TEST//"_"/""}
echo -e "\007" # bell
echo ">> Le mot de passe Yunohost est \'$YUNO_PWD\'"
echo ">> Ajout de l'utilisateur de test" | tee -a "$LOG_BUILD_LXC"
echo "Ajout de l'utilisateur de test" | tee -a "$LOG_BUILD_LXC"
ssh $ARG_SSH $LXC_NAME "sudo yunohost user create --firstname \"$USER_TEST_CLEAN\" --mail \"$USER_TEST_CLEAN@$DOMAIN\" --lastname \"$USER_TEST_CLEAN\" --password \"$PASSWORD_TEST\" \"$USER_TEST\""
echo -e "\n>> Vérification de l'état de Yunohost" | tee -a "$LOG_BUILD_LXC"
echo -e "\nVérification de l'état de Yunohost" | tee -a "$LOG_BUILD_LXC"
ssh $ARG_SSH $LXC_NAME "sudo yunohost -v" | tee -a "$LOG_BUILD_LXC" 2>&1
echo -e "\007" # bell
echo ">> Arrêt de la machine virtualisée" | tee -a "$LOG_BUILD_LXC"
echo "Arrêt de la machine virtualisée" | tee -a "$LOG_BUILD_LXC"
sudo lxc-stop -n $LXC_NAME >> "$LOG_BUILD_LXC" 2>&1
echo ">> Suppression des règles de parefeu" | tee -a "$LOG_BUILD_LXC"
echo "Suppression des règles de parefeu" | tee -a "$LOG_BUILD_LXC"
sudo iptables -D FORWARD -i lxc-pchecker -o eth0 -j ACCEPT >> "$LOG_BUILD_LXC" 2>&1
sudo iptables -D FORWARD -i eth0 -o lxc-pchecker -j ACCEPT >> "$LOG_BUILD_LXC" 2>&1
sudo iptables -t nat -D POSTROUTING -s $PLAGE_IP.0/24 -j MASQUERADE >> "$LOG_BUILD_LXC" 2>&1
sudo ifdown lxc-pchecker >> "$LOG_BUILD_LXC" 2>&1
echo ">> Création d'un snapshot" | tee -a "$LOG_BUILD_LXC"
echo "Création d'un snapshot" | tee -a "$LOG_BUILD_LXC"
sudo lxc-snapshot -n $LXC_NAME >> "$LOG_BUILD_LXC" 2>&1
# Il sera nommé snap0 et stocké dans /var/lib/lxcsnaps/$LXC_NAME/snap0/

View file

@ -1,6 +1,6 @@
#!/bin/bash
LXC_NAME=$(cat lxc_build.sh | grep LXC_NAME= | cut -d '=' -f2)
LXC_NAME=$(cat sub_scripts/lxc_build.sh | grep LXC_NAME= | cut -d '=' -f2)
# Check root
CHECK_ROOT=$EUID
@ -11,25 +11,24 @@ then # $EUID est vide sur une exécution avec sudo. Et vaut 0 pour root
exit 1
fi
echo ">> Retire l'ip forwarding."
echo "Retire l'ip forwarding."
sudo rm /etc/sysctl.d/lxc_pchecker.conf
sudo sysctl -p
echo ">> Désactive le bridge réseau"
echo "Désactive le bridge réseau"
sudo ifdown lxc-pchecker
echo ">> Supprime le brige réseau"
echo "Supprime le brige réseau"
sudo rm /etc/network/interfaces.d/lxc-pchecker
echo ">> Suppression de la machine et de son snapshots"
sudo lxc-stop -n $LXC_NAME
echo "Suppression de la machine et de son snapshots"
sudo lxc-snapshot -n $LXC_NAME -d snap0
sudo rm -f /var/lib/lxcsnaps/$LXC_NAME/snap0.tar.gz
sudo lxc-destroy -n $LXC_NAME -f
echo ">> Remove lxc lxctl"
echo "Remove lxc lxctl"
sudo apt-get remove lxc lxctl
echo ">> Suppression des lignes de pchecker_lxc dans .ssh/config"
BEGIN_LINE=$(cat $HOME/.ssh/config | grep "^# ssh pchecker_lxc$")
sed -i "/^$BEGIN_LINE$/,/^IdentityFile$/d" $HOME/.ssh/config
echo "Suppression des lignes de pchecker_lxc dans .ssh/config"
BEGIN_LINE=$(cat $HOME/.ssh/config | grep -n "^# ssh pchecker_lxc$" | cut -d':' -f 1)
sed -i "$BEGIN_LINE,/^IdentityFile/d" $HOME/.ssh/config

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

@ -3,13 +3,13 @@
PLAGE_IP=$(cat lxc_build.sh | grep PLAGE_IP= | cut -d '"' -f2)
LXC_NAME=$(cat lxc_build.sh | grep LXC_NAME= | cut -d '=' -f2)
echo ">> Active le bridge réseau"
echo "Active le bridge réseau"
if ! sudo ifquery lxc-pchecker --state > /dev/null
then
sudo ifup lxc-pchecker
fi
echo ">> Configure le parefeu"
echo "Configure le parefeu"
if ! sudo iptables -D FORWARD -i lxc-pchecker -o eth0 -j ACCEPT 2> /dev/null
then
sudo iptables -A FORWARD -i lxc-pchecker -o eth0 -j ACCEPT
@ -23,48 +23,46 @@ then
sudo iptables -t nat -A POSTROUTING -s $PLAGE_IP.0/24 -j MASQUERADE
fi
echo ">> Démarrage de la machine"
echo "Démarrage de la machine"
if [ $(sudo lxc-info --name $LXC_NAME | grep -c "STOPPED") -eq 0 ]; then
# Si la machine n'est pas à l'arrêt.
sudo lxc-stop -n $LXC_NAME # Arrête la machine LXC
fi
# Restaure le snapshot
sudo rsync -aEAX --delete /var/lib/lxcsnaps/$LXC_NAME/snap0/rootfs/ /var/lib/lxc/$LXC_NAME/rootfs/ # Pour être sûr!
sudo rsync -aEAX --delete -i /var/lib/lxcsnaps/$LXC_NAME/snap0/rootfs/ /var/lib/lxc/$LXC_NAME/rootfs/ # Pour être sûr!
sudo lxc-start -n $LXC_NAME -d
sleep 3
sudo lxc-ls -f
echo ">> Update"
echo "Update"
sudo lxc-attach -n $LXC_NAME -- apt-get update
sudo lxc-attach -n $LXC_NAME -- apt-get dist-upgrade --dry-run | grep -q "^Inst " # Vérifie si il y aura des mises à jour.
if [ "$?" -eq 0 ]; then
update_apt=1
else
update_apt=0
fi
echo ">> Upgrade"
echo "update_apt=$update_apt"
echo "Upgrade"
sudo lxc-attach -n $LXC_NAME -- apt-get dist-upgrade
echo ">> Clean"
echo "Clean"
sudo lxc-attach -n $LXC_NAME -- apt-get autoremove
sudo lxc-attach -n $LXC_NAME -- apt-get autoclean
echo ">> Arrêt de la machine virtualisée"
echo "Arrêt de la machine virtualisée"
sudo lxc-stop -n $LXC_NAME
echo ">> Suppression des règles de parefeu"
echo "Suppression des règles de parefeu"
sudo iptables -D FORWARD -i lxc-pchecker -o eth0 -j ACCEPT
sudo iptables -D FORWARD -i eth0 -o lxc-pchecker -j ACCEPT
sudo iptables -t nat -D POSTROUTING -s $PLAGE_IP.0/24 -j MASQUERADE
sudo ifdown lxc-pchecker
sudo ifdown lzc-pchecker
if [ "$update_apt" -eq 1 ]
then
echo ">> Archivage du snapshot"
echo "Archivage du snapshot"
sudo tar -czf --acls --xattrs /var/lib/lxcsnaps/$LXC_NAME/snap0.tar.gz /var/lib/lxcsnaps/$LXC_NAME/snap0
echo ">> Remplacement du snapshot"
echo "Remplacement du snapshot"
sudo lxc-snapshot -n $LXC_NAME -d snap0
sudo lxc-snapshot -n $LXC_NAME
fi

53
sub_scripts/testing_process.sh Executable file → Normal file
View file

@ -8,7 +8,8 @@ echo -e "\nChargement des fonctions de testing_process.sh"
source $abs_path/sub_scripts/log_extractor.sh
SETUP_APP () {
# echo -e "MANIFEST_ARGS=$MANIFEST_ARGS_MOD"
# echo -e "MANIFEST_ARGS=$MANIFEST_ARGS"
# echo -e "MANIFEST_ARGS_MOD=$MANIFEST_ARGS_MOD"
COPY_LOG 1
LXC_START "sudo yunohost --debug app install $APP_CHECK -a \"$MANIFEST_ARGS_MOD\""
YUNOHOST_RESULT=$?
@ -32,12 +33,13 @@ REMOVE_APP () {
CHECK_URL () {
ECHO_FORMAT "\nAccès par l'url...\n" "white" "bold"
rm -f url_output # Supprime le précédent fichier html si il est encore présent
if [ "$no_lxc" -eq 0 ]; then
IP_CURL="$(cat sub_scripts/lxc_build.sh | grep PLAGE_IP= | cut -d '"' -f2).2"
else
IP_CURL="127.0.0.1"
fi
echo "$IP_CURL $SOUS_DOMAIN #package_check" | sudo tee -a /etc/hosts > /dev/null # Renseigne le hosts pour le domain à tester, pour passer directement sur localhost
echo -e "$IP_CURL $DOMAIN #package_check\n$IP_CURL $SOUS_DOMAIN #package_check" | sudo tee -a /etc/hosts > /dev/null # Renseigne le hosts pour le domain à tester, pour passer directement sur localhost
curl -LksS $SOUS_DOMAIN/$CHECK_PATH -o url_output
URL_TITLE=$(grep "<title>" url_output | cut -d '>' -f 2 | cut -d '<' -f1)
ECHO_FORMAT "Titre de la page: $URL_TITLE\n" "white"
@ -51,14 +53,12 @@ CHECK_URL () {
grep "<body" -A 20 url_output | sed 1d | tee -a $RESULT
echo -e "\e[0m"
fi
if [ "$no_lxc" -eq 0 ]; then
sudo sed -i '/#package_check/d' /etc/hosts # Supprime la ligne dans le hosts
fi
}
CHECK_SETUP_SUBDIR () {
# Test d'installation en sous-dossier
ECHO_FORMAT "\n\n>> Installation en sous-dossier... [Test $cur_test/$all_test]\n" "white" "bold"
ECHO_FORMAT "\n\n>> Installation en sous-dossier... [Test $cur_test/$all_test]\n" "white" "bold" clog
cur_test=$((cur_test+1))
if [ -z "$MANIFEST_DOMAIN" ]; then
echo "Clé de manifest pour 'domain' introuvable dans le fichier check_process. Impossible de procéder à ce test"
@ -124,7 +124,7 @@ CHECK_SETUP_SUBDIR () {
CHECK_SETUP_ROOT () {
# Test d'installation à la racine
ECHO_FORMAT "\n\n>> Installation à la racine... [Test $cur_test/$all_test]\n" "white" "bold"
ECHO_FORMAT "\n\n>> Installation à la racine... [Test $cur_test/$all_test]\n" "white" "bold" clog
cur_test=$((cur_test+1))
if [ -z "$MANIFEST_DOMAIN" ]; then
echo "Clé de manifest pour 'domain' introuvable dans le fichier check_process. Impossible de procéder à ce test"
@ -149,9 +149,10 @@ CHECK_SETUP_ROOT () {
# Installation de l'app
SETUP_APP
LOG_EXTRACTOR
if [ "$install_pass" -gt 0 ]; then
if [ "$install_pass" -gt 0 ]; then # Si install_pass>0, une installation a déjà été faite.
tnote=$((tnote+1))
else
install_pass=1
tnote=$((tnote+2))
fi
if [ "$YUNOHOST_RESULT" -eq 0 ]; then
@ -178,12 +179,12 @@ CHECK_SETUP_ROOT () {
if [ "$YUNOHOST_RESULT" -eq 0 ] # Si l'installation a été un succès. On teste la suppression
then
LOG_EXTRACTOR
if [ "$install_pass" -eq 2 ]; then
if [ "$install_pass" -eq 2 ]; then # Si install_pass=2, une suppression a déjà été faite.
tnote=$((tnote+1))
else
install_pass=2
tnote=$((tnote+2))
fi
install_pass=3
if [ "$YUNOHOST_REMOVE" -eq 0 ]; then
ECHO_FORMAT "--- SUCCESS ---\n" "lgreen" "bold"
if [ "$GLOBAL_CHECK_REMOVE" -eq 0 ]; then
@ -201,18 +202,18 @@ CHECK_SETUP_ROOT () {
GLOBAL_CHECK_REMOVE_ROOT=-1 # Suppression à la racine échouée
fi
fi
install_pass=$((install_pass+1))
}
CHECK_SETUP_NO_URL () {
# Test d'installation sans accès par url
ECHO_FORMAT "\n\n>> Installation sans accès par url... [Test $cur_test/$all_test]\n" "white" "bold"
ECHO_FORMAT "\n\n>> Installation sans accès par url... [Test $cur_test/$all_test]\n" "white" "bold" clog
cur_test=$((cur_test+1))
MANIFEST_ARGS_MOD=$MANIFEST_ARGS # Copie des arguments
# Installation de l'app
SETUP_APP
LOG_EXTRACTOR
if [ "$install_pass" -eq 0 ]; then
if [ "$install_pass" -eq 0 ]; then # Si install_pass=0, aucune installation n'a été faite.
install_pass=1
tnote=$((tnote+1))
fi
if [ "$YUNOHOST_RESULT" -eq 0 ]; then
@ -221,6 +222,7 @@ CHECK_SETUP_NO_URL () {
note=$((note+1))
fi
GLOBAL_CHECK_SETUP=1 # Installation réussie
GLOBAL_CHECK_SUB_DIR=1
else
ECHO_FORMAT "--- FAIL ---\n" "lred" "bold"
if [ "$GLOBAL_CHECK_SETUP" -ne 1 ]; then
@ -232,7 +234,8 @@ CHECK_SETUP_NO_URL () {
if [ "$YUNOHOST_RESULT" -eq 0 ] # Si l'installation a été un succès. On teste la suppression
then
LOG_EXTRACTOR
if [ "$install_pass" -eq 1 ] || [ "$install_pass" -eq 3 ]; then
if [ "$install_pass" -ne 2 ]; then # Si install_pass!=2, aucune suppression n'a été faite.
install_pass=2
tnote=$((tnote+1))
fi
if [ "$YUNOHOST_REMOVE" -eq 0 ]; then
@ -253,7 +256,7 @@ CHECK_SETUP_NO_URL () {
CHECK_UPGRADE () {
# Test d'upgrade
ECHO_FORMAT "\n\n>> Upgrade... [Test $cur_test/$all_test]\n" "white" "bold"
ECHO_FORMAT "\n\n>> Upgrade... [Test $cur_test/$all_test]\n" "white" "bold" clog
cur_test=$((cur_test+1))
if [ "$GLOBAL_CHECK_SETUP" -ne 1 ]; then
echo "L'installation a échouée, impossible d'effectuer ce test..."
@ -306,7 +309,7 @@ CHECK_UPGRADE () {
CHECK_BACKUP_RESTORE () {
# Test de backup
ECHO_FORMAT "\n\n>> Backup... [Test $cur_test/$all_test]\n" "white" "bold"
ECHO_FORMAT "\n\n>> Backup/Restore... [Test $cur_test/$all_test]\n" "white" "bold" clog
cur_test=$((cur_test+1))
if [ "$GLOBAL_CHECK_SETUP" -ne 1 ]; then
echo "L'installation a échouée, impossible d'effectuer ce test..."
@ -379,10 +382,10 @@ CHECK_BACKUP_RESTORE () {
CHECK_PUBLIC_PRIVATE () {
# Test d'installation en public/privé
if [ "$1" == "private" ]; then
ECHO_FORMAT "\n\n>> Installation privée... [Test $cur_test/$all_test]\n" "white" "bold"
ECHO_FORMAT "\n\n>> Installation privée... [Test $cur_test/$all_test]\n" "white" "bold" clog
fi
if [ "$1" == "public" ]; then
ECHO_FORMAT "\n\n>> Installation publique... [Test $cur_test/$all_test]\n" "white" "bold"
ECHO_FORMAT "\n\n>> Installation publique... [Test $cur_test/$all_test]\n" "white" "bold" clog
fi
cur_test=$((cur_test+1))
if [ "$GLOBAL_CHECK_SETUP" -ne 1 ]; then
@ -464,7 +467,7 @@ CHECK_PUBLIC_PRIVATE () {
CHECK_MULTI_INSTANCE () {
# Test d'installation en multi-instance
ECHO_FORMAT "\n\n>> Installation multi-instance... [Test $cur_test/$all_test]\n" "white" "bold"
ECHO_FORMAT "\n\n>> Installation multi-instance... [Test $cur_test/$all_test]\n" "white" "bold" clog
cur_test=$((cur_test+1))
if [ "$GLOBAL_CHECK_SETUP" -ne 1 ]; then
echo "L'installation a échouée, impossible d'effectuer ce test..."
@ -522,16 +525,16 @@ CHECK_MULTI_INSTANCE () {
CHECK_COMMON_ERROR () {
# Test d'erreur depuis le manifest
if [ "$1" == "wrong_user" ]; then
ECHO_FORMAT "\n\n>> Erreur d'utilisateur... [Test $cur_test/$all_test]\n" "white" "bold"
ECHO_FORMAT "\n\n>> Erreur d'utilisateur... [Test $cur_test/$all_test]\n" "white" "bold" clog
fi
if [ "$1" == "wrong_path" ]; then
ECHO_FORMAT "\n\n>> Erreur de domaine... [Test $cur_test/$all_test]\n" "white" "bold"
ECHO_FORMAT "\n\n>> Erreur de domaine... [Test $cur_test/$all_test]\n" "white" "bold" clog
fi
if [ "$1" == "incorrect_path" ]; then
ECHO_FORMAT "\n\n>> Path mal formé... [Test $cur_test/$all_test]\n" "white" "bold"
ECHO_FORMAT "\n\n>> Path mal formé... [Test $cur_test/$all_test]\n" "white" "bold" clog
fi
if [ "$1" == "port_already_use" ]; then
ECHO_FORMAT "\n\n>> Port déjà utilisé... [Test $cur_test/$all_test]\n" "white" "bold"
ECHO_FORMAT "\n\n>> Port déjà utilisé... [Test $cur_test/$all_test]\n" "white" "bold" clog
if [ -z "$MANIFEST_PORT" ]; then
echo "Clé de manifest pour 'port' introuvable ou port non renseigné dans le fichier check_process. Impossible de procéder à ce test"
return
@ -639,7 +642,7 @@ CHECK_COMMON_ERROR () {
CHECK_CORRUPT () {
# Test d'erreur sur source corrompue
ECHO_FORMAT "\n\n>> Source corrompue après téléchargement... [Test $cur_test/$all_test]\n" "white" "bold"
ECHO_FORMAT "\n\n>> Source corrompue après téléchargement... [Test $cur_test/$all_test]\n" "white" "bold" clog
cur_test=$((cur_test+1))
if [ "$GLOBAL_CHECK_SETUP" -ne 1 ]; then
echo "L'installation a échouée, impossible d'effectuer ce test..."
@ -649,7 +652,7 @@ echo -n "Non implémenté"
}
CHECK_DL () {
# Test d'erreur de téléchargement de la source
ECHO_FORMAT "\n\n>> Erreur de téléchargement de la source... [Test $cur_test/$all_test]\n" "white" "bold"
ECHO_FORMAT "\n\n>> Erreur de téléchargement de la source... [Test $cur_test/$all_test]\n" "white" "bold" clog
cur_test=$((cur_test+1))
if [ "$GLOBAL_CHECK_SETUP" -ne 1 ]; then
echo "L'installation a échouée, impossible d'effectuer ce test..."
@ -659,7 +662,7 @@ echo -n "Non implémenté"
}
CHECK_FINALPATH () {
# Test sur final path déjà utilisé.
ECHO_FORMAT "\n\n>> Final path déjà utilisé... [Test $cur_test/$all_test]\n" "white" "bold"
ECHO_FORMAT "\n\n>> Final path déjà utilisé... [Test $cur_test/$all_test]\n" "white" "bold" clog
cur_test=$((cur_test+1))
if [ "$GLOBAL_CHECK_SETUP" -ne 1 ]; then
echo "L'installation a échouée, impossible d'effectuer ce test..."