Full stretch support

This commit is contained in:
Maniack Crudelis 2018-05-02 11:36:26 +02:00
parent 909c5b4acf
commit 151b7a230f
3 changed files with 254 additions and 235 deletions

View file

@ -24,3 +24,5 @@ LXC_BRIDGE=
# Distribution debian # Distribution debian
DISTRIB= DISTRIB=
# Branche à utiliser pour le script d'install de cette distribution (si non standard)
BRANCH=

View file

@ -16,6 +16,7 @@ then
dnsforce=$(cat "$pcheck_config" | grep dnsforce= | cut -d '=' -f2) dnsforce=$(cat "$pcheck_config" | grep dnsforce= | cut -d '=' -f2)
main_iface=$(cat "$pcheck_config" | grep iface= | cut -d '=' -f2) main_iface=$(cat "$pcheck_config" | grep iface= | cut -d '=' -f2)
DISTRIB=$(cat "$pcheck_config" | grep DISTRIB= | cut -d '=' -f2) DISTRIB=$(cat "$pcheck_config" | grep DISTRIB= | cut -d '=' -f2)
branch=$(cat "$pcheck_config" | grep BRANCH= | cut -d '=' -f2)
fi fi
LOG_BUILD_LXC="$script_dir/Build_lxc.log" LOG_BUILD_LXC="$script_dir/Build_lxc.log"
@ -27,6 +28,7 @@ test -n "$LXC_NAME" || LXC_NAME=pchecker_lxc
test -n "$LXC_BRIDGE" || LXC_BRIDGE=lxc-pchecker test -n "$LXC_BRIDGE" || LXC_BRIDGE=lxc-pchecker
test -n "$dnsforce" || dnsforce=1 test -n "$dnsforce" || dnsforce=1
test -n "$DISTRIB" || DISTRIB=jessie test -n "$DISTRIB" || DISTRIB=jessie
test -n "$branch" || branch=""
ARG_SSH="-t" ARG_SSH="-t"
# Tente de définir l'interface réseau principale # Tente de définir l'interface réseau principale
@ -65,7 +67,8 @@ echo -e "# Domaine de test\nDOMAIN=$DOMAIN\n" >> "$pcheck_config"
echo -e "# Mot de passe\nYUNO_PWD=$YUNO_PWD\n" >> "$pcheck_config" echo -e "# Mot de passe\nYUNO_PWD=$YUNO_PWD\n" >> "$pcheck_config"
echo -e "# Nom du conteneur\nLXC_NAME=$LXC_NAME\n" >> "$pcheck_config" echo -e "# Nom du conteneur\nLXC_NAME=$LXC_NAME\n" >> "$pcheck_config"
echo -e "# Nom du bridge\nLXC_BRIDGE=$LXC_BRIDGE\n" >> "$pcheck_config" echo -e "# Nom du bridge\nLXC_BRIDGE=$LXC_BRIDGE\n" >> "$pcheck_config"
echo -e "# Distribution debian\nDISTRIB=$DISTRIB\n" >> "$pcheck_config" echo -e "# Distribution debian\nDISTRIB=$DISTRIB" >> "$pcheck_config"
echo -e "# Branche à utiliser pour le script d'install de cette distribution (si non standard)\nBRANCH=$branch\n" >> "$pcheck_config"
echo -e "\e[1m> Update et install lxc lxctl\e[0m" | tee -a "$LOG_BUILD_LXC" echo -e "\e[1m> Update et install lxc lxctl\e[0m" | tee -a "$LOG_BUILD_LXC"
sudo apt-get update >> "$LOG_BUILD_LXC" 2>&1 sudo apt-get update >> "$LOG_BUILD_LXC" 2>&1
@ -176,11 +179,10 @@ sudo lxc-attach -n $LXC_NAME -- dpkg-reconfigure openssh-server >> "$LOG_BUILD_
sudo lxc-attach -n $LXC_NAME -- locale-gen en_US.UTF-8 >> "$LOG_BUILD_LXC" 2>&1 sudo lxc-attach -n $LXC_NAME -- locale-gen en_US.UTF-8 >> "$LOG_BUILD_LXC" 2>&1
sudo lxc-attach -n $LXC_NAME -- localedef -i en_US -f UTF-8 en_US.UTF-8 >> "$LOG_BUILD_LXC" 2>&1 sudo lxc-attach -n $LXC_NAME -- localedef -i en_US -f UTF-8 en_US.UTF-8 >> "$LOG_BUILD_LXC" 2>&1
if [ "$DISTRIB" == "stretch" ]; then if [ -n "$branch" ]; then
branch="--branch stretch" branch="--branch $branch"
else
branch=""
fi fi
ssh $ARG_SSH $LXC_NAME "git clone https://github.com/YunoHost/install_script $branch /tmp/install_script" >> "$LOG_BUILD_LXC" 2>&1 ssh $ARG_SSH $LXC_NAME "git clone https://github.com/YunoHost/install_script $branch /tmp/install_script" >> "$LOG_BUILD_LXC" 2>&1
echo -e "\e[1m> Installation de Yunohost...\e[0m" | tee -a "$LOG_BUILD_LXC" echo -e "\e[1m> Installation de Yunohost...\e[0m" | tee -a "$LOG_BUILD_LXC"
ssh $ARG_SSH $LXC_NAME "cd /tmp/install_script; sudo ./install_yunohost -a" | tee -a "$LOG_BUILD_LXC" 2>&1 ssh $ARG_SSH $LXC_NAME "cd /tmp/install_script; sudo ./install_yunohost -a" | tee -a "$LOG_BUILD_LXC" 2>&1

View file

@ -66,7 +66,7 @@ if [ -z "$main_iface" ]; then
fi fi
STOP_CONTAINER () { STOP_CONTAINER () {
echo "Arrêt du conteneur $LXC_NAME" echo "Arrêt du conteneur $LXC_NAME"
sudo lxc-stop -n $LXC_NAME sudo lxc-stop -n $LXC_NAME
} }
@ -81,20 +81,20 @@ START_NETWORK () {
STOP_NETWORK () { STOP_NETWORK () {
echo "Arrêt du réseau pour le conteneur." echo "Arrêt du réseau pour le conteneur."
sudo iptables -D FORWARD -i $LXC_BRIDGE -o $main_iface -j ACCEPT > /dev/null 2>&1 sudo iptables -D FORWARD -i $LXC_BRIDGE -o $main_iface -j ACCEPT > /dev/null 2>&1
sudo iptables -D FORWARD -i $main_iface -o $LXC_BRIDGE -j ACCEPT > /dev/null 2>&1 sudo iptables -D FORWARD -i $main_iface -o $LXC_BRIDGE -j ACCEPT > /dev/null 2>&1
sudo iptables -t nat -D POSTROUTING -s $PLAGE_IP.0/24 -j MASQUERADE > /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_BRIDGE > /dev/null 2>&1 sudo ifdown --force $LXC_BRIDGE > /dev/null 2>&1
} }
REBOOT_CONTENEUR () { REBOOT_CONTENEUR () {
echo "Redémarrage du conteneur." echo "Redémarrage du conteneur."
STOP_CONTAINER STOP_CONTAINER
STOP_NETWORK STOP_NETWORK
START_NETWORK START_NETWORK
echo "Démarrage du conteneur." echo "Démarrage du conteneur."
sudo lxc-start -n $LXC_NAME -d > /dev/null 2>&1 # Démarre le conteneur 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 sudo lxc-wait -n $LXC_NAME -s 'RUNNING' -t 60 # Attend pendant 60s maximum que le conteneur démarre
} }
CHECK_CONTAINER () { CHECK_CONTAINER () {
@ -118,7 +118,7 @@ RESTORE_SNAPSHOT () {
STATUS=$? STATUS=$?
if [ "$STATUS" -eq 1 ]; then if [ "$STATUS" -eq 1 ]; then
echo -e "\e[91m> Conteneur $LXC_NAME en défaut.\e[0m" echo -e "\e[91m> Conteneur $LXC_NAME en défaut.\e[0m"
STOP_CONTAINER STOP_CONTAINER
return 1 return 1
else else
echo -e "\e[92m> Conteneur $LXC_NAME en état de marche.\e[0m" echo -e "\e[92m> Conteneur $LXC_NAME en état de marche.\e[0m"
@ -142,89 +142,102 @@ RESTORE_ARCHIVE_SNAPSHOT () {
} }
RESTORE_CONTAINER () { RESTORE_CONTAINER () {
# Tente des restaurations du conteneur # Tente des restaurations du conteneur
# Restauration des snapshots # Restauration des snapshots
STOP_CONTAINER STOP_CONTAINER
if [ $START_STATUS -eq 1 ]; then if [ $START_STATUS -eq 1 ]; then
RESTORE_SNAPSHOT RESTORE_SNAPSHOT
START_STATUS=$? START_STATUS=$?
fi fi
# Restauration des archives des snapshots # Restauration des archives des snapshots
if [ $START_STATUS -eq 1 ]; then if [ $START_STATUS -eq 1 ]; then
RESTORE_ARCHIVE_SNAPSHOT RESTORE_ARCHIVE_SNAPSHOT
START_STATUS=$? START_STATUS=$?
fi fi
# Résultats finaux # Résultats finaux
if [ $START_STATUS -eq 1 ]; then if [ $START_STATUS -eq 1 ]; then
echo -e "\e[91m\n> Le conteneur $LXC_NAME1 n'a pas pu être réparé...\nIl est nécessaire de détruire et de reconstruire le conteneur.\e[0m" echo -e "\e[91m\n> Le conteneur $LXC_NAME1 n'a pas pu être réparé...\nIl est nécessaire de détruire et de reconstruire le conteneur.\e[0m"
sudo rm "$script_dir/../pcheck.lock" # Retire le lock sudo rm "$script_dir/../pcheck.lock" # Retire le lock
exit 1 exit 1
else else
echo -e "\e[92m\n> Le conteneur démarre correctement.\e[0m" echo -e "\e[92m\n> Le conteneur démarre correctement.\e[0m"
fi fi
} }
LXC_NETWORK_CONFIG () { LXC_NETWORK_CONFIG () {
lxc_network=0 lxc_network=0
if ! sudo cat /var/lib/lxc/$LXC_NAME/config | grep -q "^lxc.network.type = veth"; then if ! sudo cat /var/lib/lxc/$LXC_NAME/config | grep -q "^lxc.network.type = veth"
lxc_network=1 # Si la ligne de la config réseau est absente, c'est une erreur. then
check_repair=1 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. check_repair=1
sudo sed -i "s/.*lxc.network.type.*/lxc.network.type = veth/g" /var/lib/lxc/$LXC_NAME/config if sudo cat /var/lib/lxc/$LXC_NAME/config | grep -q ".*lxc.network.type"
else # Sinon elle est ajoutée. then # Si la ligne est incorrecte, elle est corrigée.
echo "lxc.network.type = veth" | sudo tee -a /var/lib/lxc/$LXC_NAME/config 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 fi
fi if ! sudo cat /var/lib/lxc/$LXC_NAME/config | grep -q "^lxc.network.flags = up"
if ! sudo cat /var/lib/lxc/$LXC_NAME/config | grep -q "^lxc.network.flags = up"; then then
lxc_network=1 lxc_network=1
check_repair=1 check_repair=1
if sudo cat /var/lib/lxc/$LXC_NAME/config | grep -q ".*lxc.network.flags"; then if sudo cat /var/lib/lxc/$LXC_NAME/config | grep -q ".*lxc.network.flags"
sudo sed -i "s/.*lxc.network.flags.*/lxc.network.flags = up/g" /var/lib/lxc/$LXC_NAME/config 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_BRIDGE"
then
lxc_network=1
check_repair=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_BRIDGE" /var/lib/lxc/$LXC_NAME/config
else
echo "lxc.network.link = $LXC_BRIDGE" | 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
check_repair=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
check_repair=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
check_repair=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 else
echo "lxc.network.flags = up" | sudo tee -a /var/lib/lxc/$LXC_NAME/config echo -e "\e[92mLa configuration réseau LXC du conteneur est correcte.\e[0m"
fi fi
fi
if ! sudo cat /var/lib/lxc/$LXC_NAME/config | grep -q "^lxc.network.link = $LXC_BRIDGE"; then
lxc_network=1
check_repair=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_BRIDGE" /var/lib/lxc/$LXC_NAME/config
else
echo "lxc.network.link = $LXC_BRIDGE" | 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
check_repair=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
check_repair=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
check_repair=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
} }
touch "$script_dir/../pcheck.lock" # Met en place le lock de Package check touch "$script_dir/../pcheck.lock" # Met en place le lock de Package check
@ -236,66 +249,68 @@ check_repair=0
### Test de la configuration réseau ### Test de la configuration réseau
echo -e "\e[1m> Test de la configuration réseau du côté de l'hôte:\e[0m" echo -e "\e[1m> Test de la configuration réseau du côté de l'hôte:\e[0m"
CREATE_BRIDGE () { CREATE_BRIDGE () {
echo | sudo tee /etc/network/interfaces.d/$LXC_BRIDGE <<EOF echo | sudo tee /etc/network/interfaces.d/$LXC_BRIDGE <<EOF
auto $LXC_BRIDGE auto $LXC_BRIDGE
iface $LXC_BRIDGE inet static iface $LXC_BRIDGE inet static
address $PLAGE_IP.1/24 address $PLAGE_IP.1/24
bridge_ports none bridge_ports none
bridge_fd 0 bridge_fd 0
bridge_maxwait 0 bridge_maxwait 0
EOF EOF
} }
# Test la présence du fichier de config du bridge lxc-pchecher # Test la présence du fichier de config du bridge lxc-pchecher
if ! test -e /etc/network/interfaces.d/$LXC_BRIDGE if ! test -e /etc/network/interfaces.d/$LXC_BRIDGE
then then
echo -e "\e[91mLe fichier de configuration du bridge est introuvable.\nIl va être recréé.\e[0m" echo -e "\e[91mLe fichier de configuration du bridge est introuvable.\nIl va être recréé.\e[0m"
check_repair=1 check_repair=1
CREATE_BRIDGE CREATE_BRIDGE
else else
echo -e "\e[92mLe fichier de config du bridge est présent.\e[0m" echo -e "\e[92mLe fichier de config du bridge est présent.\e[0m"
fi fi
# Test le démarrage du bridge # Test le démarrage du bridge
bridge=0 bridge=0
while test "$bridge" -ne 1 while test "$bridge" -ne 1
do do
sudo ifup $LXC_BRIDGE --interfaces=/etc/network/interfaces.d/$LXC_BRIDGE sudo ifup $LXC_BRIDGE --interfaces=/etc/network/interfaces.d/$LXC_BRIDGE
if sudo ifconfig | grep -q $LXC_BRIDGE if sudo ip address | grep -q $LXC_BRIDGE
then then
echo -e "\e[92mLe bridge démarre correctement.\e[0m" echo -e "\e[92mLe bridge démarre correctement.\e[0m"
# Vérifie que le bridge obtient une adresse IP # Vérifie que le bridge obtient une adresse IP
if LC_ALL=C sudo ifconfig | grep -A 10 $LXC_BRIDGE | grep "inet addr" | grep -q -F "$PLAGE_IP.1 " if LC_ALL=C sudo ip address | grep -A 10 $LXC_BRIDGE | grep "inet " | grep -q -F "$PLAGE_IP.1"
then then
echo -e "\e[92mLe bridge obtient correctement son adresse IP.\e[0m" echo -e "\e[92mLe bridge obtient correctement son adresse IP.\e[0m"
else else
if [ "$bridge" -ne -1 ]; then if [ "$bridge" -ne -1 ]; then
echo -e "\e[91mLe bridge n'obtient pas la bonne adresse IP. Tentative de réparation...\e[0m" echo -e "\e[91mLe bridge n'obtient pas la bonne adresse IP. Tentative de réparation...\e[0m"
check_repair=1 check_repair=1
CREATE_BRIDGE CREATE_BRIDGE
sudo ifdown --force $LXC_BRIDGE sudo ifdown --force $LXC_BRIDGE
bridge=-1 # Bridge à -1 pour indiquer que cette erreur s'est déjà présentée. bridge=-1 # Bridge à -1 pour indiquer que cette erreur s'est déjà présentée.
continue # Retourne au début de la boucle pour réessayer continue # Retourne au début de la boucle pour réessayer
else else
sudo ifconfig sudo ip address
echo -e "\e[91mLe bridge n'obtient pas la bonne adresse IP après réparation. Tenter une réinstallation complète de Package_checker...\e[0m" echo -e "\e[91mLe bridge n'obtient pas la bonne adresse IP après réparation. Tenter une réinstallation complète de Package_checker...\e[0m"
sudo rm "$script_dir/../pcheck.lock" # Retire le lock sudo rm "$script_dir/../pcheck.lock" # Retire le lock
exit 1 exit 1
fi fi
fi fi
else else
if [ "$bridge" -ne -2 ]; then if [ "$bridge" -ne -2 ]; then
echo -e "\e[91mLe bridge ne démarre pas. Tentative de réparation...\e[0m" echo -e "\e[91mLe bridge ne démarre pas. Tentative de réparation...\e[0m"
check_repair=1 check_repair=1
CREATE_BRIDGE CREATE_BRIDGE
sudo ifdown --force $LXC_BRIDGE sudo ifdown --force $LXC_BRIDGE
bridge=-2 # Bridge à -1 pour indiquer que cette erreur s'est déjà présentée. bridge=-2 # Bridge à -1 pour indiquer que cette erreur s'est déjà présentée.
continue # Retourne au début de la boucle pour réessayer continue # Retourne au début de la boucle pour réessayer
else else
sudo ifconfig sudo ip address
echo -e "\e[91mLe bridge ne démarre pas après réparation. Tenter une réinstallation complète de Package_checker...\e[0m" echo -e "\e[91mLe bridge ne démarre pas après réparation. Tenter une réinstallation complète de Package_checker...\e[0m"
sudo rm "$script_dir/../pcheck.lock" # Retire le lock sudo rm "$script_dir/../pcheck.lock" # Retire le lock
exit 1 exit 1
fi fi
fi fi
bridge=1 bridge=1
done done
@ -306,11 +321,11 @@ sudo iptables -t nat -A POSTROUTING -s $PLAGE_IP.0/24 -j MASQUERADE
if sudo iptables -C FORWARD -i $LXC_BRIDGE -o $main_iface -j ACCEPT && sudo iptables -C FORWARD -i $main_iface -o $LXC_BRIDGE -j ACCEPT && sudo iptables -t nat -C POSTROUTING -s $PLAGE_IP.0/24 -j MASQUERADE if sudo iptables -C FORWARD -i $LXC_BRIDGE -o $main_iface -j ACCEPT && sudo iptables -C FORWARD -i $main_iface -o $LXC_BRIDGE -j ACCEPT && sudo iptables -t nat -C POSTROUTING -s $PLAGE_IP.0/24 -j MASQUERADE
then then
echo -e "\e[92mLes règles iptables sont appliquées correctement.\e[0m" echo -e "\e[92mLes règles iptables sont appliquées correctement.\e[0m"
else else
echo -e "\e[91mLes règles iptables ne sont pas appliquées correctement, vérifier la configuration du système...\e[0m" echo -e "\e[91mLes règles iptables ne sont pas appliquées correctement, vérifier la configuration du système...\e[0m"
sudo rm "$script_dir/../pcheck.lock" # Retire le lock sudo rm "$script_dir/../pcheck.lock" # Retire le lock
exit 1 exit 1
fi fi
# Arrête le réseau du conteneur # Arrête le réseau du conteneur
@ -324,9 +339,9 @@ LXC_NETWORK_CONFIG
CHECK_CONTAINER CHECK_CONTAINER
START_STATUS=$? START_STATUS=$?
if [ "$START_STATUS" -eq 1 ]; then if [ "$START_STATUS" -eq 1 ]; then
RESTORE_CONTAINER RESTORE_CONTAINER
else else
echo -e "\e[92mLe conteneur a démarré correctement.\e[0m" echo -e "\e[92mLe conteneur a démarré correctement.\e[0m"
fi fi
@ -334,94 +349,95 @@ fi
echo -e "\e[1m\n> Test de l'accès internet depuis l'hôte:\e[0m" echo -e "\e[1m\n> Test de l'accès internet depuis l'hôte:\e[0m"
ping -q -c 2 yunohost.org > /dev/null 2>&1 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 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 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... if [ "$?" -ne 0 ]; then # En cas de nouvel échec de connexion. On considère que la connexion est down...
echo -e "\e[91mL'hôte semble ne pas avoir accès à internet. La connexion internet est indispensable.\e[0m" echo -e "\e[91mL'hôte semble ne pas avoir accès à internet. La connexion internet est indispensable.\e[0m"
sudo rm "$script_dir/../pcheck.lock" # Retire le lock sudo rm "$script_dir/../pcheck.lock" # Retire le lock
exit 1 exit 1
fi fi
fi fi
echo -e "\e[92mL'hôte dispose d'un accès à internet.\e[0m" echo -e "\e[92mL'hôte dispose d'un accès à internet.\e[0m"
### Test le réseau du conteneur ### Test le réseau du conteneur
echo -e "\e[1m\n> Test de l'accès internet depuis le conteneur:\e[0m" echo -e "\e[1m\n> Test de l'accès internet depuis le conteneur:\e[0m"
CHECK_LXC_NET () { CHECK_LXC_NET () {
sudo lxc-attach -n $LXC_NAME -- ping -q -c 2 yunohost.org > /dev/null 2>&1 sudo lxc-attach -n $LXC_NAME -- 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 if [ "$?" -ne 0 ]; then # En cas d'échec de connexion, tente de pinger un autre domaine pour être sûr
sudo lxc-attach -n $LXC_NAME -- ping -q -c 2 framasoft.org > /dev/null 2>&1 sudo lxc-attach -n $LXC_NAME -- 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... if [ "$?" -ne 0 ]; then # En cas de nouvel échec de connexion. On considère que la connexion est down...
return 1 return 1
fi fi
fi fi
return 0 return 0
} }
lxc_net=1 lxc_net=1
lxc_net_check=0 # Passe sur les différents tests lxc_net_check=0 # Passe sur les différents tests
while test "$lxc_net" -eq 1 # Boucle tant que la connexion internet du conteneur n'est pas réparée. while test "$lxc_net" -eq 1 # Boucle tant que la connexion internet du conteneur n'est pas réparée.
do do
REBOOT_CONTENEUR REBOOT_CONTENEUR
sleep 3 sleep 3
sudo lxc-ls -f sudo lxc-ls -f
CHECK_LXC_NET CHECK_LXC_NET
lxc_net=$? lxc_net=$?
if [ "$lxc_net" -eq 1 ]; then if [ "$lxc_net" -eq 1 ]; then
if [ "$lxc_net_check" -eq 4 ] if [ "$lxc_net_check" -eq 4 ]
then then
echo -e "\e[91mImpossible de rétablir la connexion internet du conteneur.\e[0m" echo -e "\e[91mImpossible de rétablir la connexion internet du conteneur.\e[0m"
sudo rm "$script_dir/../pcheck.lock" # Retire le lock sudo rm "$script_dir/../pcheck.lock" # Retire le lock
exit 1 exit 1
fi fi
echo -e "\e[91mLe conteneur LXC n'accède pas à internet...\e[0m" echo -e "\e[91mLe conteneur LXC n'accède pas à internet...\e[0m"
check_repair=1 check_repair=1
if [ "$lxc_net_check" -eq 0 ] if [ "$lxc_net_check" -eq 0 ]
then then
# Test la présence du fichier de config du kernel # Test la présence du fichier de config du kernel
lxc_net_check=1 lxc_net_check=1
if ! test -e /etc/sysctl.d/lxc_pchecker.conf if ! test -e /etc/sysctl.d/lxc_pchecker.conf
then then
echo -e "\e[91mLe fichier de configuration du kernel pour l'ip forwarding est introuvable.\nIl va être recréé.\e[0m" echo -e "\e[91mLe fichier de configuration du kernel pour l'ip forwarding est introuvable.\nIl va être recréé.\e[0m"
echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/lxc_pchecker.conf echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/lxc_pchecker.conf
sudo sysctl -p /etc/sysctl.d/lxc_pchecker.conf sudo sysctl -p /etc/sysctl.d/lxc_pchecker.conf
continue continue
else else
echo -e "\e[92mLe fichier de configuration du kernel pour l'ip forwarding est présent.\e[0m" echo -e "\e[92mLe fichier de configuration du kernel pour l'ip forwarding est présent.\e[0m"
fi fi
fi fi
if [ "$lxc_net_check" -eq 1 ] if [ "$lxc_net_check" -eq 1 ]
then then
# Test l'ip forwarding # Test l'ip forwarding
lxc_net_check=2 lxc_net_check=2
if ! sudo sysctl -a | grep -q "net.ipv4.ip_forward = " || [ $(sudo sysctl -n net.ipv4.ip_forward) -ne 1 ] if ! sudo sysctl -a | grep -q "net.ipv4.ip_forward = " || [ $(sudo sysctl -n net.ipv4.ip_forward) -ne 1 ]
then then
echo -e "\e[91mL'ip forwarding n'est pas activé. Correction en cours...\e[0m" echo -e "\e[91mL'ip forwarding n'est pas activé. Correction en cours...\e[0m"
echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/lxc_pchecker.conf echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/lxc_pchecker.conf
sudo sysctl -p /etc/sysctl.d/lxc_pchecker.conf sudo sysctl -p /etc/sysctl.d/lxc_pchecker.conf
continue continue
else else
echo -e "\e[92mL'ip forwarding est activé.\e[0m" echo -e "\e[92mL'ip forwarding est activé.\e[0m"
fi fi
fi fi
if [ "$lxc_net_check" -eq 2 ] if [ "$lxc_net_check" -eq 2 ]
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_CONFIG LXC_NETWORK_CONFIG
fi fi
if [ "$lxc_net_check" -eq 3 ] if [ "$lxc_net_check" -eq 3 ]
then then
lxc_net_check=4 lxc_net_check=4
# Vérifie la config réseau LXC à l'intérieur du conteneur # Vérifie la config réseau LXC à l'intérieur du conteneur
if ! sudo test -e /var/lib/lxc/$LXC_NAME/rootfs/etc/network/interfaces if ! sudo test -e /var/lib/lxc/$LXC_NAME/rootfs/etc/network/interfaces
then then
echo -e "\e[91mLe fichier network/interfaces du conteneur est introuvable.\nIl va être recréé.\e[0m" echo -e "\e[91mLe fichier network/interfaces du conteneur est introuvable.\nIl va être recréé.\e[0m"
else else
echo -e "\e[92mLe fichier network/interfaces du conteneur est présent.\nMais il va être réécrit par précaution.\e[0m" echo -e "\e[92mLe fichier network/interfaces du conteneur est présent.\nMais il va être réécrit par précaution.\e[0m"
fi fi
echo -e "auto lo\niface lo inet loopback\nauto eth0\niface eth0 inet static\n\taddress $PLAGE_IP.2/24\n\tgateway $PLAGE_IP.1" | sudo tee /var/lib/lxc/$LXC_NAME/rootfs/etc/network/interfaces echo -e "auto lo\niface lo inet loopback\nauto eth0\niface eth0 inet static\n\taddress $PLAGE_IP.2/24\n\tgateway $PLAGE_IP.1" | sudo tee /var/lib/lxc/$LXC_NAME/rootfs/etc/network/interfaces
fi fi
else else
echo -e "\e[92mLe conteneur dispose d'un accès à internet.\e[0m" echo -e "\e[92mLe conteneur dispose d'un accès à internet.\e[0m"
fi fi
done done
@ -438,40 +454,40 @@ sudo lxc-ls -f
sleep 3 sleep 3
ssh $ARG_SSH $LXC_NAME "exit 0" # Test une connexion ssh ssh $ARG_SSH $LXC_NAME "exit 0" # Test une connexion ssh
if [ "$?" -eq 0 ]; then if [ "$?" -eq 0 ]; then
echo -e "\e[92mLa connexion ssh est fonctionnelle.\e[0m" echo -e "\e[92mLa connexion ssh est fonctionnelle.\e[0m"
else else
echo -e "\e[91mÉchec de la connexion ssh. Reconfiguration de l'accès ssh.\e[0m" echo -e "\e[91mÉchec de la connexion ssh. Reconfiguration de l'accès ssh.\e[0m"
check_repair=1 check_repair=1
ssh $ARG_SSH $LXC_NAME -v "exit 0" # Répète la connexion ssh pour afficher l'erreur. ssh $ARG_SSH $LXC_NAME -v "exit 0" # Répète la connexion ssh pour afficher l'erreur.
echo "Suppression de la config ssh actuelle pour le conteneur." echo "Suppression de la config ssh actuelle pour le conteneur."
rm -f $HOME/.ssh/$LXC_NAME $HOME/.ssh/$LXC_NAME.pub rm -f $HOME/.ssh/$LXC_NAME $HOME/.ssh/$LXC_NAME.pub
BEGIN_LINE=$(cat $HOME/.ssh/config | grep -n "# ssh $LXC_NAME" | cut -d':' -f 1) BEGIN_LINE=$(cat $HOME/.ssh/config | grep -n "# ssh $LXC_NAME" | cut -d':' -f 1)
sed -i "$BEGIN_LINE,/^IdentityFile/d" $HOME/.ssh/config sed -i "$BEGIN_LINE,/^IdentityFile/d" $HOME/.ssh/config
ssh-keygen -f "$HOME/.ssh/known_hosts" -R $PLAGE_IP.2 ssh-keygen -f "$HOME/.ssh/known_hosts" -R $PLAGE_IP.2
echo "Création de la clé ssh." echo "Création de la clé ssh."
ssh-keygen -t dsa -f $HOME/.ssh/$LXC_NAME -P '' ssh-keygen -t dsa -f $HOME/.ssh/$LXC_NAME -P ''
sudo cp $HOME/.ssh/$LXC_NAME.pub /var/lib/lxc/$LXC_NAME/rootfs/home/pchecker/.ssh/authorized_keys sudo cp $HOME/.ssh/$LXC_NAME.pub /var/lib/lxc/$LXC_NAME/rootfs/home/pchecker/.ssh/authorized_keys
sudo lxc-attach -n $LXC_NAME -- chown pchecker: -R /home/pchecker/.ssh sudo lxc-attach -n $LXC_NAME -- chown pchecker: -R /home/pchecker/.ssh
echo "Ajout de la config ssh." echo "Ajout de la config ssh."
echo | tee -a $HOME/.ssh/config <<EOF echo | tee -a $HOME/.ssh/config <<EOF
# ssh $LXC_NAME # ssh $LXC_NAME
Host $LXC_NAME Host $LXC_NAME
Hostname $PLAGE_IP.2 Hostname $PLAGE_IP.2
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"
else else
echo -e "\e[91mÉchec de la réparation de la connexion ssh.\nIl est nécessaire de détruire et de reconstruire le conteneur.\e[0m" echo -e "\e[91mÉchec de la réparation de la connexion ssh.\nIl est nécessaire de détruire et de reconstruire le conteneur.\e[0m"
fi fi
fi fi
@ -484,7 +500,6 @@ if [ "$?" -ne 0 ]; then # Si la commande échoue, il y a un problème avec Yunoh
exit 1 exit 1
else else
echo -e "\e[92mYunohost est installé correctement.\e[0m" echo -e "\e[92mYunohost est installé correctement.\e[0m"
fi fi
STOP_CONTAINER STOP_CONTAINER