mirror of
https://github.com/YunoHost/package_check.git
synced 2024-09-03 20:06:20 +02:00
Finalisation de lxc_check.sh
This commit is contained in:
parent
d99e6b9555
commit
6b8f3a075d
6 changed files with 71 additions and 114 deletions
14
README.md
14
README.md
|
@ -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.
|
||||
- `--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.
|
||||
- `--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.
|
||||
- `--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.
|
||||
|
||||
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.
|
||||
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`
|
||||
- `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_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.
|
||||
- `--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.
|
||||
- `--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.
|
||||
- `--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.
|
||||
|
||||
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.
|
||||
It add network support, install Yunohost and configure it. And then configure ssh.
|
||||
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_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.
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
# Arguments du script
|
||||
# --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.
|
||||
# --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.
|
||||
# --help Affiche l'aide du script
|
||||
|
||||
|
|
|
@ -90,6 +90,7 @@ User pchecker
|
|||
IdentityFile $HOME/.ssh/$LXC_NAME
|
||||
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é.
|
||||
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é.
|
||||
|
|
120
sub_scripts/lxc_check.sh
Normal file → Executable file
120
sub_scripts/lxc_check.sh
Normal file → Executable file
|
@ -3,13 +3,6 @@
|
|||
# Test différents aspect du conteneur pour chercher d'éventuelles erreurs.
|
||||
# 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
|
||||
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
|
||||
}
|
||||
|
||||
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_NETWORK
|
||||
check_repair=0
|
||||
|
@ -204,6 +254,7 @@ STOP_NETWORK
|
|||
### Test du démarrage du conteneur.
|
||||
echo -e "\e[1m\n> Test le démarrage du conteneur:\e[0m"
|
||||
START_NETWORK
|
||||
LXC_NETWORK_CONFIG
|
||||
CHECK_CONTAINER
|
||||
START_STATUS=$?
|
||||
if [ "$START_STATUS" -eq 1 ]; then
|
||||
|
@ -286,60 +337,7 @@ do
|
|||
then
|
||||
# Vérifie la config réseau LXC du conteneur
|
||||
lxc_net_check=3
|
||||
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
|
||||
LXC_NETWORK_CONFIG
|
||||
fi
|
||||
if [ "$lxc_net_check" -eq 3 ]
|
||||
then
|
||||
|
|
|
@ -35,7 +35,7 @@ LXC_START () {
|
|||
done
|
||||
sudo lxc-ls -f | grep $LXC_NAME | sed 's/- NO//'
|
||||
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
|
||||
fi
|
||||
scp -rq "$APP_CHECK" "$LXC_NAME": >> "$RESULT" 2>&1
|
||||
|
|
|
@ -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
|
Loading…
Add table
Reference in a new issue