diff --git a/demo_lxc_build.sh b/demo_lxc_build.sh index 5f2e41d..968e032 100755 --- a/demo_lxc_build.sh +++ b/demo_lxc_build.sh @@ -1,14 +1,17 @@ #!/bin/bash # Créer les conteneurs Yunohost et les configure +# !!! Ce script est conçu pour être exécuté par l'user root. # Récupère le dossier du script if [ "${0:0:1}" == "/" ]; then script_dir="$(dirname "$0")"; else script_dir="$PWD/$(dirname "$0" | cut -d '.' -f2)"; fi -LOG_BUILD_LXC="/var/log/lxc_demo/Build_lxc.log" -PLAGE_IP="10.1.5" -IP_LXC="10.1.5.3" -ARG_SSH="-t" +LOG=Build_lxc.log +LOG_BUILD_LXC="$script_dir/$LOG" +PLAGE_IP=10.1.5 +IP_LXC1=10.1.5.3 +IP_LXC2=10.1.5.4 +ARG_SSH=-t DOMAIN=demotest1.tld YUNO_PWD=admin LXC_NAME1=yunohost_demo1 @@ -28,7 +31,7 @@ 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_demo\nlxc.network.name = eth0\nlxc.network.veth.pair = $LXC_NAME1\nlxc.network.hwaddr = 00:FF:AA:00:00:03/" /var/lib/lxc/$LXC_NAME1/config >> "$LOG_BUILD_LXC" 2>&1 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 $IP_LXC/24\n\tgateway $PLAGE_IP.1@" /var/lib/lxc/$LXC_NAME1/rootfs/etc/network/interfaces >> "$LOG_BUILD_LXC" 2>&1 +sudo sed -i "s@iface eth0 inet dhcp@iface eth0 inet static\n\taddress $IP_LXC1/24\n\tgateway $PLAGE_IP.1@" /var/lib/lxc/$LXC_NAME1/rootfs/etc/network/interfaces >> "$LOG_BUILD_LXC" 2>&1 echo "> Configure le parefeu" | tee -a "$LOG_BUILD_LXC" sudo iptables -A FORWARD -i lxc_demo -o eth0 -j ACCEPT >> "$LOG_BUILD_LXC" 2>&1 @@ -99,16 +102,27 @@ sudo lxc-snapshot -n $LXC_NAME1 >> "$LOG_BUILD_LXC" 2>&1 echo "> Clone la machine" | tee -a "$LOG_BUILD_LXC" sudo sudo lxc-clone -o $LXC_NAME1 -n $LXC_NAME2 >> "$LOG_BUILD_LXC" 2>&1 +echo "> Modification de l'ip du clone" | tee -a "$LOG_BUILD_LXC" +sudo sed -i "s@address $IP_LXC1@address $IP_LXC2@" /var/lib/lxc/$LXC_NAME2/rootfs/etc/network/interfaces >> "$LOG_BUILD_LXC" 2>&1 +echo "> Et le nom du veth" | tee -a "$LOG_BUILD_LXC" +sudo sed -i "s@^lxc.network.veth.pair = $LXC_NAME1$@lxc.network.veth.pair = $LXC_NAME2@" /var/lib/lxc/$LXC_NAME2/config >> "$LOG_BUILD_LXC" 2>&1 + # Mise en place du cron de switch echo | sudo tee /etc/cron.d/demo_switch < /dev/null 2>&1 +*/$TIME_TO_SWITCH * * * * root $script_dir/demo_switch.sh >> "$script_dir/demo_switch.log" 2>&1 EOF # Et du cron d'upgrade echo | sudo tee /etc/cron.d/demo_upgrade < /dev/null 2>&1 +0 3 * * * root $script_dir/demo_switch.sh >> "$script_dir/demo_upgrade.log" 2>&1 EOF # Démarrage de la démo "$script_dir/demo_start.sh" + +# Après le démarrage du premier conteneur, fait un snapshot du deuxième. + +echo "> Création d'un snapshot pour le 2e conteneur" | tee -a "$LOG_BUILD_LXC" +sudo lxc-snapshot -n $LXC_NAME2 >> "$LOG_BUILD_LXC" 2>&1 +# Il sera nommé snap0 et stocké dans /var/lib/lxcsnaps/$LXC_NAME2/snap0/ diff --git a/demo_lxc_build_init.sh b/demo_lxc_build_init.sh index f3f1bec..7989e30 100755 --- a/demo_lxc_build_init.sh +++ b/demo_lxc_build_init.sh @@ -1,15 +1,18 @@ #!/bin/bash # Installe LXC et les paramètres réseaux avant de procéder au build. +# !!! Ce script est conçu pour être exécuté par l'user root. # Récupère le dossier du script if [ "${0:0:1}" == "/" ]; then script_dir="$(dirname "$0")"; else script_dir="$PWD/$(dirname "$0" | cut -d '.' -f2)"; fi -LOG_BUILD_LXC="$(cat "$script_dir/demo_lxc_build.sh" | grep LOG_BUILD_LXC= | cut -d '=' -f2)" +LOG=$(cat "$script_dir/demo_lxc_build.sh" | grep LOG= | cut -d '=' -f2) +LOG_BUILD_LXC="$script_dir/$LOG" LXC_NAME1=$(cat "$script_dir/demo_lxc_build.sh" | grep LXC_NAME1= | cut -d '=' -f2) LXC_NAME2=$(cat "$script_dir/demo_lxc_build.sh" | grep LXC_NAME2= | cut -d '=' -f2) PLAGE_IP=$(cat "$script_dir/demo_lxc_build.sh" | grep PLAGE_IP= | cut -d '=' -f2) -IP_LXC=$(cat "$script_dir/demo_lxc_build.sh" | grep IP_LXC= | cut -d '=' -f2) +IP_LXC1=$(cat "$script_dir/demo_lxc_build.sh" | grep IP_LXC1= | cut -d '=' -f2) +IP_LXC2=$(cat "$script_dir/demo_lxc_build.sh" | grep IP_LXC2= | cut -d '=' -f2) DOMAIN=$(cat "$script_dir/demo_lxc_build.sh" | grep DOMAIN= | cut -d '=' -f2) # Créer le dossier de log @@ -39,17 +42,22 @@ sudo ifup lxc_demo --interfaces=/etc/network/interfaces.d/lxc_demo >> "$LOG_BUIL echo "> Mise en place de la connexion ssh vers l'invité." | tee -a "$LOG_BUILD_LXC" if [ -e $HOME/.ssh/$LXC_NAME1 ]; then rm -f $HOME/.ssh/$LXC_NAME1 $HOME/.ssh/$LXC_NAME1.pub - ssh-keygen -f $HOME/.ssh/known_hosts -R $IP_LXC + ssh-keygen -f $HOME/.ssh/known_hosts -R $IP_LXC1 + ssh-keygen -f $HOME/.ssh/known_hosts -R $IP_LXC2 fi ssh-keygen -t dsa -f $HOME/.ssh/$LXC_NAME1 -P '' >> "$LOG_BUILD_LXC" 2>&1 echo | tee -a $HOME/.ssh/config <> "$LOG_BUILD_LXC" 2>&1 # ssh $LXC_NAME1 Host $LXC_NAME1 -Host $LXC_NAME2 -Hostname $IP_LXC +Hostname $IP_LXC1 User ssh_demo IdentityFile $HOME/.ssh/$LXC_NAME1 +Host $LXC_NAME2 +Hostname $IP_LXC2 +User ssh_demo +IdentityFile $HOME/.ssh/$LXC_NAME1 +# End ssh $LXC_NAME1 EOF echo "> Mise en place du reverse proxy" | tee -a "$LOG_BUILD_LXC" @@ -73,7 +81,7 @@ server { server_name $DOMAIN; location / { - proxy_pass https://$IP_LXC; + proxy_pass https://$IP_LXC1; proxy_redirect off; proxy_set_header Host \$host; proxy_set_header X-Real-IP \$remote_addr; @@ -100,5 +108,7 @@ sudo service nginx reload # Add # maxconn 500 +echo "\nLe serveur est prêt à déployer les conteneurs de demo." +echo "Exécutez le script demo_lxc_build.sh pour créer les conteneurs et mettre en place la demo." # Déploie les conteneurs de demo -"$script_dir/demo_lxc_build.sh" +# "$script_dir/demo_lxc_build.sh" diff --git a/demo_lxc_destroy.sh b/demo_lxc_destroy.sh index 0d09d74..36e5271 100755 --- a/demo_lxc_destroy.sh +++ b/demo_lxc_destroy.sh @@ -2,12 +2,15 @@ # Détruit les conteneurs lxc de demo. # Permet de repartir sur des bases saines avec le script demo_lxc_build.sh +# !!! Ce script est conçu pour être exécuté par l'user root. # Récupère le dossier du script if [ "${0:0:1}" == "/" ]; then script_dir="$(dirname "$0")"; else script_dir="$PWD/$(dirname "$0" | cut -d '.' -f2)"; fi -LXC_NAME1=$(cat "$script_dir/lxc_build.sh" | grep LXC_NAME1= | cut -d '=' -f2) -LXC_NAME2=$(cat "$script_dir/lxc_build.sh" | grep LXC_NAME2= | cut -d '=' -f2) +LXC_NAME1=$(cat "$script_dir/demo_lxc_build.sh" | grep LXC_NAME1= | cut -d '=' -f2) +LXC_NAME2=$(cat "$script_dir/demo_lxc_build.sh" | grep LXC_NAME2= | cut -d '=' -f2) +IP_LXC1=$(cat "$script_dir/demo_lxc_build.sh" | grep IP_LXC1= | cut -d '=' -f2) +IP_LXC2=$(cat "$script_dir/demo_lxc_build.sh" | grep IP_LXC2= | cut -d '=' -f2) "$script_dir/demo_stop.sh" @@ -19,6 +22,10 @@ sudo lxc-snapshot -n $LXC_NAME2 -d snap0 sudo rm -f /var/lib/lxcsnaps/$LXC_NAME2/snap0.tar.gz sudo lxc-destroy -n $LXC_NAME2 -f -# Suppression des crons +echo "> Suppression des crons" sudo rm /etc/cron.d/demo_switch sudo rm /etc/cron.d/demo_upgrade + +echo "> Suppression des clés ECDSA dans known_hosts" +ssh-keygen -f "$HOME/.ssh/known_hosts" -R $IP_LXC1 +ssh-keygen -f "$HOME/.ssh/known_hosts" -R $IP_LXC2 diff --git a/demo_lxc_remove.sh b/demo_lxc_remove.sh index e18796c..e291943 100755 --- a/demo_lxc_remove.sh +++ b/demo_lxc_remove.sh @@ -2,11 +2,12 @@ # Purge l'ensemble de la config lxc pour les conteneurs de demo. # Il sera nécessaire de lancer le script demo_lxc_build_init.sh pour réinstaller l'ensemble le cas échéant. +# !!! Ce script est conçu pour être exécuté par l'user root. # Récupère le dossier du script if [ "${0:0:1}" == "/" ]; then script_dir="$(dirname "$0")"; else script_dir="$PWD/$(dirname "$0" | cut -d '.' -f2)"; fi -LXC_NAME1=$(cat "$script_dir/lxc_build.sh" | grep LXC_NAME1= | cut -d '=' -f2) +LXC_NAME1=$(cat "$script_dir/demo_lxc_build.sh" | grep LXC_NAME1= | cut -d '=' -f2) "$script_dir/demo_lxc_destroy.sh" @@ -22,7 +23,7 @@ sudo apt-get remove lxc lxctl echo "> Suppression des lignes de pchecker_lxc dans .ssh/config" BEGIN_LINE=$(cat $HOME/.ssh/config | grep -n "^# ssh $LXC_NAME1$" | cut -d':' -f 1) -sed -i "$BEGIN_LINE,/^IdentityFile/d" $HOME/.ssh/config +sed -i "$BEGIN_LINE,/^# End ssh $LXC_NAME1$/d" $HOME/.ssh/config # Suppression de la clé SSH... # Suppression du reverse proxy ? diff --git a/demo_start.sh b/demo_start.sh index 469860c..f10baf5 100755 --- a/demo_start.sh +++ b/demo_start.sh @@ -1,6 +1,7 @@ #!/bin/bash # Démarre le premier conteneur de demo et active la config réseau dédiée. +# !!! Ce script est conçu pour être exécuté par l'user root. # Récupère le dossier du script if [ "${0:0:1}" == "/" ]; then script_dir="$(dirname "$0")"; else script_dir="$PWD/$(dirname "$0" | cut -d '.' -f2)"; fi @@ -8,7 +9,7 @@ if [ "${0:0:1}" == "/" ]; then script_dir="$(dirname "$0")"; else script_dir="$P PLAGE_IP=$(cat "$script_dir/demo_lxc_build.sh" | grep PLAGE_IP= | cut -d '=' -f2) LXC_NAME=$(cat "$script_dir/demo_lxc_build.sh" | grep LXC_NAME1= | cut -d '=' -f2) -"$script_dir/demo_stop.sh" +"$script_dir/demo_stop.sh" > /dev/null 2>&1 echo "Initialisation du réseau pour le conteneur." if ! sudo ifquery lxc_demo --state > /dev/null; then diff --git a/demo_stop.sh b/demo_stop.sh index 4d5adcf..c3ab37d 100755 --- a/demo_stop.sh +++ b/demo_stop.sh @@ -1,6 +1,7 @@ #!/bin/bash # Stoppe les conteneurs de demo et arrête la config réseau dédiée. +# !!! Ce script est conçu pour être exécuté par l'user root. # Récupère le dossier du script if [ "${0:0:1}" == "/" ]; then script_dir="$(dirname "$0")"; else script_dir="$PWD/$(dirname "$0" | cut -d '.' -f2)"; fi diff --git a/demo_switch.sh b/demo_switch.sh index 09bed6d..a06169d 100755 --- a/demo_switch.sh +++ b/demo_switch.sh @@ -10,6 +10,9 @@ PLAGE_IP=$(cat "$script_dir/demo_lxc_build.sh" | grep PLAGE_IP= | cut -d '=' -f2 LXC_NAME1=$(cat "$script_dir/demo_lxc_build.sh" | grep LXC_NAME1= | cut -d '=' -f2) LXC_NAME2=$(cat "$script_dir/demo_lxc_build.sh" | grep LXC_NAME2= | cut -d '=' -f2) +echo "LXC_NAME1=$LXC_NAME1" +echo "LXC_NAME2=$LXC_NAME2" + # Vérifie l'état des machines. if [ $(sudo lxc-info --name $LXC_NAME1 | grep -c "STOPPED") -eq 0 ]; then # Si la machine 1 est démarrée. LXC_A=$LXC_NAME1 @@ -20,14 +23,16 @@ else # Sinon, on suppose que c'est la machine 2 qui est en cours. # Si aucune machine ne tourne, la première démarrera. fi +echo "LXC_A=$LXC_A" +echo "LXC_B=$LXC_B" # Démarre le conteneur B et arrête le conteneur A. -sudo lxc-start -n $LXC_B -d # Démarre l'autre machine +sudo lxc-start -n $LXC_B -o "$script_dir/demo_switch.log" -d > /dev/null # Démarre l'autre machine sleep 10 # Attend 10 seconde pour s'assurer du démarrage de la machine. if [ $(sudo lxc-info --name $LXC_B | grep -c "STOPPED") -ne 0 ]; then # Le conteneur n'a pas réussi à démarrer. On devrait avertir un responsable par mail... # [...] - return 1 + exit 1 else # Bascule sur le conteneur B avec HAProxy... # [...] diff --git a/demo_upgrade.sh b/demo_upgrade.sh index 21bccdc..b2cc60e 100755 --- a/demo_upgrade.sh +++ b/demo_upgrade.sh @@ -21,7 +21,7 @@ UPGRADE_DEMO_CONTAINER () { # Démarrage, upgrade et snapshot sudo lxc-snapshot -r snap0 $MACHINE # Démarre le conteneur - sudo lxc-start -n $MACHINE -d + sudo lxc-start -n $MACHINE -d > /dev/null sleep 10 # Update