Finalisation de lxc_check.sh

This commit is contained in:
Maniack Crudelis 2016-11-05 00:18:12 +01:00
parent d99e6b9555
commit 6b8f3a075d
6 changed files with 71 additions and 114 deletions

View file

@ -118,9 +118,9 @@ Si un test est absent de la liste, il sera ignoré. Cela revient à le noter à
--- ---
Le script `package_check.sh` accepte 5 arguments en plus du package à tester. Le script `package_check.sh` accepte 5 arguments en plus du package à tester.
- `--bash-mode`: Rend le script autonome. Aucune intervention de l'utilisateur ne sera nécessaire. - `--bash-mode`: Rend le script autonome. Aucune intervention de l'utilisateur ne sera nécessaire.
La valeur de auto_remove est ignorée. (Incompatible avec --build-lxc) La valeur de auto_remove est ignorée.
- `--no-lxc`: N'utilise pas la virtualisation en conteneur LXC. Les tests seront effectué directement sur la machine hôte. - `--no-lxc`: N'utilise pas la virtualisation en conteneur LXC. Les tests seront effectué directement sur la machine hôte.
- `--build-lxc`: Installe LXC et créer le conteneur debian Yunohost si nécessaire. (Incompatible avec --bash-mode) - `--build-lxc`: Installe LXC et créer le conteneur debian Yunohost si nécessaire.
- `--force-install-ok`: Force la réussite des installations, même si elles échouent. Permet d'effectuer les tests qui suivent même si l'installation a échouée. - `--force-install-ok`: Force la réussite des installations, même si elles échouent. Permet d'effectuer les tests qui suivent même si l'installation a échouée.
- `--help`: Affiche l'aide du script - `--help`: Affiche l'aide du script
@ -132,12 +132,13 @@ L'usage de LXC apporte une meilleure stabilité au processus de test, un test de
Il faut prévoir également un espace suffisant sur l'hôte, au minimum 4Go pour le conteneur, son snapshot et sa copie de sauvegarde. Il faut prévoir également un espace suffisant sur l'hôte, au minimum 4Go pour le conteneur, son snapshot et sa copie de sauvegarde.
L'usage de LXC est facilité par 3 scripts, permettant de gérer la création, la mise à jour et la suppression. L'usage de LXC est facilité par 4 scripts, permettant de gérer la création, la mise à jour, la suppression et la réparation du conteneur.
- `lxc_build.sh`: lxc_build installe LXC et ses dépendances, puis créer le conteneur debian. - `lxc_build.sh`: lxc_build installe LXC et ses dépendances, puis créer le conteneur debian.
Il ajoute ensuite le support réseau, installe Yunohost et le configure. Et enfin configure un accès ssh. Il ajoute ensuite le support réseau, installe Yunohost et le configure. Et enfin configure un accès ssh.
L'accès ssh par défaut est `ssh -t pchecker_lxc` L'accès ssh par défaut est `ssh -t pchecker_lxc`
- `lxc_upgrade.sh`: Effectue la mise à jour du conteneur à l'aide d'apt-get et recréer le snapshot. - `lxc_upgrade.sh`: Effectue la mise à jour du conteneur à l'aide d'apt-get et recréer le snapshot.
- `lxc_remove.sh`: Supprime le conteneur LXC, son snapshot et sa sauvegarde. Désinstalle LXC et déconfigure le réseau associé. - `lxc_remove.sh`: Supprime le conteneur LXC, son snapshot et sa sauvegarde. Désinstalle LXC et déconfigure le réseau associé.
- `lxc_check.sh`: Vérifie le conteneur LXC et tente de le réparer si nécessaire.
--- ---
--- ---
@ -257,9 +258,9 @@ If a test is not in the list, it will be ignored. It's similar to marked at 0.
--- ---
The `package_check.sh` script accept 5 arguments in addition of package to be checked. The `package_check.sh` script accept 5 arguments in addition of package to be checked.
- `--bash-mode`: The script will work without user intervention. - `--bash-mode`: The script will work without user intervention.
auto_remove value is ignored (Not compatible with --build-lxc) auto_remove value is ignored
- `--no-lxc`: Not use virtualization with LXC container. All tests will perform directly on the hosts machine. - `--no-lxc`: Not use virtualization with LXC container. All tests will perform directly on the hosts machine.
- `--build-lxc`: Install LXC and create the Debian Yunohost container if necessary. (Not compatible with --bash-mode) - `--build-lxc`: Install LXC and create the Debian Yunohost container if necessary.
- `--force-install-ok`: Force success of installation, even if they fail. Allow to perform following tests even if installation fail. - `--force-install-ok`: Force success of installation, even if they fail. Allow to perform following tests even if installation fail.
- `--help`: Display help. - `--help`: Display help.
@ -271,9 +272,10 @@ Using LXC provides better stability to test process, a failed remove test doesn'
There must also be enough space on the host, at least 4GB for the container, its snapshot and backup. There must also be enough space on the host, at least 4GB for the container, its snapshot and backup.
Using LXC is simplified by 3 scripts, allowing to manage the creation, updating and deleting. Using LXC is simplified by 4 scripts, allowing to manage the creation, updating, deleting and repairing of container.
- `lxc_build.sh`: lxc_build install LXC and its dependencies, then create a Debian container. - `lxc_build.sh`: lxc_build install LXC and its dependencies, then create a Debian container.
It add network support, install Yunohost and configure it. And then configure ssh. It add network support, install Yunohost and configure it. And then configure ssh.
The default ssh access is `ssh -t pchecker_lxc` The default ssh access is `ssh -t pchecker_lxc`
- `lxc_upgrade.sh`: Perform a upgrade of the container with apt-get and recreate the snapshot. - `lxc_upgrade.sh`: Perform a upgrade of the container with apt-get and recreate the snapshot.
- `lxc_remove.sh`: Delete the LXC container, its snapshot and backup. Uninstall LXC and deconfigures the associated network. - `lxc_remove.sh`: Delete the LXC container, its snapshot and backup. Uninstall LXC and deconfigures the associated network.
- `lxc_check.sh`: Check the LXC container and try to fix it if necessary.

View file

@ -3,7 +3,7 @@
# Arguments du script # Arguments du script
# --bash-mode Mode bash, le script est autonome. Il ignore la valeur de $auto_remove # --bash-mode Mode bash, le script est autonome. Il ignore la valeur de $auto_remove
# --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 --bash-mode en raison de la connexion ssh à valider lors du build. # --build-lxc Installe lxc et créer la machine si nécessaire.
# --force-install-ok Force la réussite des installations, même si elles échouent. Permet d'effectuer les tests qui suivent même si l'installation a échouée. # --force-install-ok Force la réussite des installations, même si elles échouent. Permet d'effectuer les tests qui suivent même si l'installation a échouée.
# --help Affiche l'aide du script # --help Affiche l'aide du script

View file

@ -90,6 +90,7 @@ User pchecker
IdentityFile $HOME/.ssh/$LXC_NAME IdentityFile $HOME/.ssh/$LXC_NAME
EOF EOF
ssh-keyscan -H $PLAGE_IP.2 >> ~/.ssh/known_hosts
ssh $ARG_SSH $LXC_NAME "exit 0" # Initie une premier connexion SSH pour valider la clé. 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... ??? 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é. ssh $ARG_SSH $LXC_NAME "exit 0" # Initie une premier connexion SSH pour valider la clé.

122
sub_scripts/lxc_check.sh Normal file → Executable file
View file

@ -3,13 +3,6 @@
# Test différents aspect du conteneur pour chercher d'éventuelles erreurs. # Test différents aspect du conteneur pour chercher d'éventuelles erreurs.
# Et tente de réparer si possible... # Et tente de réparer si possible...
# !!! ATTENTION, CE SCRIPT DOIT ENCORE ÊTRE TESTÉ SUR LES POINTS SUIVANTS:
# ip forwarding pas activé
# configuration réseau LXC du conteneur incorrecte
# fichier network/interfaces du conteneur introuvable
# fichier network/interfaces du conteneur présent.\nMais il va être réécrit par précaution
# Yunohost semble mal installé
# Récupère le dossier du script # Récupère le dossier du script
if [ "${0:0:1}" == "/" ]; then script_dir="$(dirname "$0")"; else script_dir="$(echo $PWD/$(dirname "$0" | cut -d '.' -f2) | sed 's@/$@@')"; fi if [ "${0:0:1}" == "/" ]; then script_dir="$(dirname "$0")"; else script_dir="$(echo $PWD/$(dirname "$0" | cut -d '.' -f2) | sed 's@/$@@')"; fi
@ -115,6 +108,63 @@ RESTORE_CONTAINER () {
fi fi
} }
LXC_NETWORK_CONFIG () {
lxc_network=0
if ! sudo cat /var/lib/lxc/$LXC_NAME/config | grep -q "^lxc.network.type = veth"; then
lxc_network=1 # Si la ligne de la config réseau est absente, c'est une erreur.
if sudo cat /var/lib/lxc/$LXC_NAME/config | grep -q ".*lxc.network.type"; then # Si la ligne est incorrecte, elle est corrigée.
sudo sed -i "s/.*lxc.network.type.*/lxc.network.type = veth/g" /var/lib/lxc/$LXC_NAME/config
else # Sinon elle est ajoutée.
echo "lxc.network.type = veth" | sudo tee -a /var/lib/lxc/$LXC_NAME/config
fi
fi
if ! sudo cat /var/lib/lxc/$LXC_NAME/config | grep -q "^lxc.network.flags = up"; then
lxc_network=1
if sudo cat /var/lib/lxc/$LXC_NAME/config | grep -q ".*lxc.network.flags"; then
sudo sed -i "s/.*lxc.network.flags.*/lxc.network.flags = up/g" /var/lib/lxc/$LXC_NAME/config
else
echo "lxc.network.flags = up" | sudo tee -a /var/lib/lxc/$LXC_NAME/config
fi
fi
if ! sudo cat /var/lib/lxc/$LXC_NAME/config | grep -q "^lxc.network.link = lxc-pchecker"; then
lxc_network=1
if sudo cat /var/lib/lxc/$LXC_NAME/config | grep -q ".*lxc.network.link"; then
sudo sed -i "s/.*lxc.network.link.*/lxc.network.link = lxc-pchecker/g" /var/lib/lxc/$LXC_NAME/config
else
echo "lxc.network.link = lxc-pchecker" | sudo tee -a /var/lib/lxc/$LXC_NAME/config
fi
fi
if ! sudo cat /var/lib/lxc/$LXC_NAME/config | grep -q "^lxc.network.name = eth0"; then
lxc_network=1
if sudo cat /var/lib/lxc/$LXC_NAME/config | grep -q ".*lxc.network.name"; then
sudo sed -i "s/.*lxc.network.name.*/lxc.network.name = eth0/g" /var/lib/lxc/$LXC_NAME/config
else
echo "lxc.network.name = eth0" | sudo tee -a /var/lib/lxc/$LXC_NAME/config
fi
fi
if ! sudo cat /var/lib/lxc/$LXC_NAME/config | grep -q "^lxc.network.veth.pair = $LXC_NAME"; then
lxc_network=1
if sudo cat /var/lib/lxc/$LXC_NAME/config | grep -q ".*lxc.network.veth.pair"; then
sudo sed -i "s/.*lxc.network.veth.pair.*/lxc.network.veth.pair = $LXC_NAME/g" /var/lib/lxc/$LXC_NAME/config
else
echo "lxc.network.veth.pair = $LXC_NAME" | sudo tee -a /var/lib/lxc/$LXC_NAME/config
fi
fi
if ! sudo cat /var/lib/lxc/$LXC_NAME/config | grep -q "^lxc.network.hwaddr = 00:FF:AA:00:00:01"; then
lxc_network=1
if sudo cat /var/lib/lxc/$LXC_NAME/config | grep -q ".*lxc.network.hwaddr"; then
sudo sed -i "s/.*lxc.network.hwaddr.*/lxc.network.hwaddr = 00:FF:AA:00:00:01/g" /var/lib/lxc/$LXC_NAME/config
else
echo "lxc.network.hwaddr = 00:FF:AA:00:00:01" | sudo tee -a /var/lib/lxc/$LXC_NAME/config
fi
fi
if [ "$lxc_network" -eq 1 ]; then
echo -e "\e[91mLa configuration réseau LXC du conteneur est incorrecte et a été corrigée.\e[0m"
else
echo -e "\e[92mLa configuration réseau LXC du conteneur est correcte.\e[0m"
fi
}
STOP_CONTAINER STOP_CONTAINER
STOP_NETWORK STOP_NETWORK
check_repair=0 check_repair=0
@ -204,6 +254,7 @@ STOP_NETWORK
### Test du démarrage du conteneur. ### Test du démarrage du conteneur.
echo -e "\e[1m\n> Test le démarrage du conteneur:\e[0m" echo -e "\e[1m\n> Test le démarrage du conteneur:\e[0m"
START_NETWORK START_NETWORK
LXC_NETWORK_CONFIG
CHECK_CONTAINER CHECK_CONTAINER
START_STATUS=$? START_STATUS=$?
if [ "$START_STATUS" -eq 1 ]; then if [ "$START_STATUS" -eq 1 ]; then
@ -286,60 +337,7 @@ do
then then
# Vérifie la config réseau LXC du conteneur # Vérifie la config réseau LXC du conteneur
lxc_net_check=3 lxc_net_check=3
lxc_network=0 LXC_NETWORK_CONFIG
if ! sudo cat /var/lib/lxc/$LXC_NAME/config | grep -q "lxc.network.type = veth"; then
lxc_network=1 # Si la ligne de la config réseau est absente, c'est une erreur.
if sudo cat /var/lib/lxc/$LXC_NAME/config | grep -q "lxc.network.type"; then # Si la ligne est incorrecte, elle est corrigée.
sudo sed -i "s/lxc.network.type.*/lxc.network.type = veth/g" /var/lib/lxc/$LXC_NAME/config
else # Sinon elle est ajoutée.
echo "lxc.network.type = veth" | sudo tee -a /var/lib/lxc/$LXC_NAME/config
fi
fi
if ! sudo cat /var/lib/lxc/$LXC_NAME/config | grep -q "lxc.network.flags = up"; then
lxc_network=1
if sudo cat /var/lib/lxc/$LXC_NAME/config | grep -q "lxc.network.flags"; then
sudo sed -i "s/lxc.network.flags.*/lxc.network.flags = up/g" /var/lib/lxc/$LXC_NAME/config
else
echo "lxc.network.flags = up" | sudo tee -a /var/lib/lxc/$LXC_NAME/config
fi
fi
if ! sudo cat /var/lib/lxc/$LXC_NAME/config | grep -q "lxc.network.link = lxc-pchecker"; then
lxc_network=1
if sudo cat /var/lib/lxc/$LXC_NAME/config | grep -q "lxc.network.link"; then
sudo sed -i "s/lxc.network.link.*/lxc.network.link = lxc-pchecker/g" /var/lib/lxc/$LXC_NAME/config
else
echo "lxc.network.link = lxc-pchecker" | sudo tee -a /var/lib/lxc/$LXC_NAME/config
fi
fi
if ! sudo cat /var/lib/lxc/$LXC_NAME/config | grep -q "lxc.network.name = eth0"; then
lxc_network=1
if sudo cat /var/lib/lxc/$LXC_NAME/config | grep -q "lxc.network.name"; then
sudo sed -i "s/lxc.network.name.*/lxc.network.name = eth0/g" /var/lib/lxc/$LXC_NAME/config
else
echo "lxc.network.name = eth0" | sudo tee -a /var/lib/lxc/$LXC_NAME/config
fi
fi
if ! sudo cat /var/lib/lxc/$LXC_NAME/config | grep -q "lxc.network.veth.pair = $LXC_NAME"; then
lxc_network=1
if sudo cat /var/lib/lxc/$LXC_NAME/config | grep -q "lxc.network.veth.pair"; then
sudo sed -i "s/lxc.network.veth.pair.*/lxc.network.veth.pair = $LXC_NAME/g" /var/lib/lxc/$LXC_NAME/config
else
echo "lxc.network.veth.pair = $LXC_NAME" | sudo tee -a /var/lib/lxc/$LXC_NAME/config
fi
fi
if ! sudo cat /var/lib/lxc/$LXC_NAME/config | grep -q "lxc.network.hwaddr = 00:FF:AA:00:00:01"; then
lxc_network=1
if sudo cat /var/lib/lxc/$LXC_NAME/config | grep -q "lxc.network.hwaddr"; then
sudo sed -i "s/lxc.network.hwaddr.*/lxc.network.hwaddr = 00:FF:AA:00:00:01/g" /var/lib/lxc/$LXC_NAME/config
else
echo "lxc.network.hwaddr = 00:FF:AA:00:00:01" | sudo tee -a /var/lib/lxc/$LXC_NAME/config
fi
fi
if [ "$lxc_network" -eq 1 ]; then
echo -e "\e[91mLa configuration réseau LXC du conteneur est incorrecte et a été corrigée.\e[0m"
else
echo -e "\e[92mLa configuration réseau LXC du conteneur est correcte.\e[0m"
fi
fi fi
if [ "$lxc_net_check" -eq 3 ] if [ "$lxc_net_check" -eq 3 ]
then then
@ -398,7 +396,7 @@ else
User pchecker User pchecker
IdentityFile $HOME/.ssh/$LXC_NAME IdentityFile $HOME/.ssh/$LXC_NAME
EOF EOF
ssh-keyscan -H 10.1.4.2 >> ~/.ssh/known_hosts # Récupère la clé publique pour l'ajouter au known_hosts ssh-keyscan -H 10.1.4.2 >> ~/.ssh/known_hosts # Récupère la clé publique pour l'ajouter au known_hosts
ssh $ARG_SSH $LXC_NAME -v "exit 0" > /dev/null # Test à nouveau la connexion ssh ssh $ARG_SSH $LXC_NAME -v "exit 0" > /dev/null # Test à nouveau la connexion ssh
if [ "$?" -eq 0 ]; then if [ "$?" -eq 0 ]; then
echo -e "\e[92mLa connexion ssh est retablie.\e[0m" echo -e "\e[92mLa connexion ssh est retablie.\e[0m"

View file

@ -35,7 +35,7 @@ LXC_START () {
done done
sudo lxc-ls -f | grep $LXC_NAME | sed 's/- NO//' sudo lxc-ls -f | grep $LXC_NAME | sed 's/- NO//'
if [ $(sudo lxc-info --name $LXC_NAME | grep -c "STOPPED") -ne 0 ]; then if [ $(sudo lxc-info --name $LXC_NAME | grep -c "STOPPED") -ne 0 ]; then
ECHO_FORMAT "Le conteneur n'a pas démarré correctement...\n" "lred" "bold" ECHO_FORMAT "Le conteneur n'a pas démarré correctement...\nSi le problème persiste, utilisez le script lxc_check.sh pour vérifier et réparer le conteneur." "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

View file

@ -1,44 +0,0 @@
#!/bin/bash
# Teste différents aspect du conteneur pour chercher d'éventuelles erreurs.
# Et tente de réparer si possible...
# Récupère le dossier du script
if [ "${0:0:1}" == "/" ]; then script_dir="$(dirname "$0")"; else script_dir="$(echo $PWD/$(dirname "$0" | cut -d '.' -f2) | sed 's@/$@@')"; fi
PLAGE_IP=$(cat "$script_dir/lxc_build.sh" | grep PLAGE_IP= | cut -d '"' -f2)
ARG_SSH="-t"
LXC_NAME=$(cat "$script_dir/lxc_build.sh" | grep LXC_NAME= | cut -d '=' -f2)
STOP_CONTAINER () {
echo "Arrêt du conteneur $LXC_NAME"
sudo lxc-stop -n $LXC_NAME
}
START_NETWORK () {
echo "Initialisation du réseau pour le conteneur."
sudo ifup lxc-pchecker --interfaces=/etc/network/interfaces.d/lxc-pchecker
# Activation des règles iptables
sudo iptables -A FORWARD -i lxc-pchecker -o eth0 -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o lxc-pchecker -j ACCEPT
sudo iptables -t nat -A POSTROUTING -s $PLAGE_IP.0/24 -j MASQUERADE
}
STOP_NETWORK () {
echo "Arrêt du réseau pour le conteneur."
sudo iptables -D FORWARD -i lxc-pchecker -o eth0 -j ACCEPT > /dev/null 2>&1
sudo iptables -D FORWARD -i eth0 -o lxc-pchecker -j ACCEPT > /dev/null 2>&1
sudo iptables -t nat -D POSTROUTING -s $PLAGE_IP.0/24 -j MASQUERADE > /dev/null 2>&1
sudo ifdown --force lxc-pchecker > /dev/null 2>&1
}
START_CONTAINER () {
sudo lxc-start -n $LXC_NAME -d > /dev/null 2>&1 # Démarre le conteneur
sudo lxc-wait -n $LXC_NAME -s 'RUNNING' -t 60 # Attend pendant 60s maximum que le conteneur démarre
}
STOP_CONTAINER
STOP_NETWORK
START_NETWORK
START_CONTAINER