Upgrade demo scripts

This commit is contained in:
Maniack Crudelis 2016-09-18 19:23:54 +02:00
parent 5f56d250b6
commit fc15ac8ee6
9 changed files with 150 additions and 70 deletions

View file

@ -1,10 +1,9 @@
#!/bin/bash #!/bin/bash
# Créer les conteneurs Yunohost et les configure # 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 # 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 if [ "${0:0:1}" == "/" ]; then script_dir="$(dirname "$0")"; else script_dir="$(echo $PWD/$(dirname "$0" | cut -d '.' -f2) | sed 's@/$@@')"; fi
LOG=Build_lxc.log LOG=Build_lxc.log
LOG_BUILD_LXC="$script_dir/$LOG" LOG_BUILD_LXC="$script_dir/$LOG"
@ -23,14 +22,12 @@ MAIL_ADDR=demo@yunohost.org
USER_DEMO=demo USER_DEMO=demo
PASSWORD_DEMO=demo PASSWORD_DEMO=demo
# Check root # Check user
# CHECK_ROOT=$EUID if [ "$USER" != "$(cat "$script_dir/setup_user")" ] && test -e "$script_dir/setup_user"; then
# if [ -z "$CHECK_ROOT" ];then CHECK_ROOT=0;fi echo -e "\e[91mCe script doit être exécuté avec l'utilisateur $(cat "$script_dir/setup_user")"
# if [ $CHECK_ROOT -eq 0 ] echo -en "\e[0m"
# then # $EUID est vide sur une exécution avec sudo. Et vaut 0 pour root exit 0
# echo "Le script ne doit pas être exécuté avec les droits root" fi
# exit 1
# fi
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_NAME1 -t debian -- -r jessie >> "$LOG_BUILD_LXC" 2>&1 sudo lxc-create -n $LXC_NAME1 -t debian -- -r jessie >> "$LOG_BUILD_LXC" 2>&1
@ -96,6 +93,53 @@ ssh $ARG_SSH $LXC_NAME1 "sudo yunohost user create --firstname \"$USER_DEMO_CLEA
echo -e "\n> Vérification de l'état de Yunohost" | tee -a "$LOG_BUILD_LXC" echo -e "\n> Vérification de l'état de Yunohost" | tee -a "$LOG_BUILD_LXC"
ssh $ARG_SSH $LXC_NAME1 "sudo yunohost -v" | tee -a "$LOG_BUILD_LXC" 2>&1 ssh $ARG_SSH $LXC_NAME1 "sudo yunohost -v" | tee -a "$LOG_BUILD_LXC" 2>&1
# ********
echo ">> Modification de Yunohost pour la demo" | tee -a "$LOG_BUILD_LXC"
# App officielles
echo -e "> Installation des applications officielles" | tee -a "$LOG_BUILD_LXC"
echo -e "Installation de baikal" | tee -a "$LOG_BUILD_LXC"
ssh $ARG_SSH $LXC_NAME1 "sudo yunohost app install baikal -a \"domain=$DOMAIN&path=/baikal&password=$PASSWORD_DEMO\"" | tee -a "$LOG_BUILD_LXC"
echo -e "Installation d'agendav" | tee -a "$LOG_BUILD_LXC"
ssh $ARG_SSH $LXC_NAME1 "sudo yunohost app install agendav -a \"domain=$DOMAIN&path=/agendav&language=en\"" | tee -a "$LOG_BUILD_LXC"
echo -e "Installation de dokuwiki" | tee -a "$LOG_BUILD_LXC"
ssh $ARG_SSH $LXC_NAME1 "sudo yunohost app install dokuwiki -a \"domain=$DOMAIN&path=/dokuwiki&admin=$USER_DEMO&is_public=Yes\"" | tee -a "$LOG_BUILD_LXC"
echo -e "Installation de hextris" | tee -a "$LOG_BUILD_LXC"
ssh $ARG_SSH $LXC_NAME1 "sudo yunohost app install hextris -a \"domain=$DOMAIN&path=/hextris&is_public=Yes\"" | tee -a "$LOG_BUILD_LXC"
echo -e "Installation de jappix" | tee -a "$LOG_BUILD_LXC"
ssh $ARG_SSH $LXC_NAME1 "sudo yunohost app install jappix -a \"domain=$DOMAIN&path=/jappix&name=YunoJappix&language=en\"" | tee -a "$LOG_BUILD_LXC"
echo -e "Installation de jirafeau" | tee -a "$LOG_BUILD_LXC"
ssh $ARG_SSH $LXC_NAME1 "sudo yunohost app install jirafeau -a \"domain=$DOMAIN&path=/jirafeau&admin_user=$USER_DEMO&upload_password=$PASSWORD_DEMO&is_public=Yes\"" | tee -a "$LOG_BUILD_LXC"
echo -e "Installation de kanboard" | tee -a "$LOG_BUILD_LXC"
ssh $ARG_SSH $LXC_NAME1 "sudo yunohost app install kanboard -a \"domain=$DOMAIN&path=/kanboard&admin=$USER_DEMO&is_public=Yes\"" | tee -a "$LOG_BUILD_LXC"
echo -e "Installation de opensondage" | tee -a "$LOG_BUILD_LXC"
ssh $ARG_SSH $LXC_NAME1 "sudo yunohost app install opensondage -a \"domain=$DOMAIN&path=/date&admin=$USER_DEMO&language=en_GB&is_public=1\"" | tee -a "$LOG_BUILD_LXC"
echo -e "Installation de owncloud" | tee -a "$LOG_BUILD_LXC"
ssh $ARG_SSH $LXC_NAME1 "sudo yunohost app install owncloud -a \"domain=$DOMAIN&path=/owncloud&admin=$USER_DEMO&user_home=0\"" | tee -a "$LOG_BUILD_LXC"
echo -e "Installation de phpmyadmin" | tee -a "$LOG_BUILD_LXC"
ssh $ARG_SSH $LXC_NAME1 "sudo yunohost app install phpmyadmin -a \"domain=$DOMAIN&path=/phpmyadmin&admin=$USER_DEMO\"" | tee -a "$LOG_BUILD_LXC"
echo -e "Installation de roundcube" | tee -a "$LOG_BUILD_LXC"
ssh $ARG_SSH $LXC_NAME1 "sudo yunohost app install roundcube -a \"domain=$DOMAIN&path=/webmail&with_carddav=0\"" | tee -a "$LOG_BUILD_LXC"
echo -e "Installation de searx" | tee -a "$LOG_BUILD_LXC"
ssh $ARG_SSH $LXC_NAME1 "sudo yunohost app install searx -a \"domain=$DOMAIN&path=/searx&is_public=Yes\"" | tee -a "$LOG_BUILD_LXC"
echo -e "Installation de shellinabox" | tee -a "$LOG_BUILD_LXC"
ssh $ARG_SSH $LXC_NAME1 "sudo yunohost app install shellinabox -a \"domain=$DOMAIN&path=/ssh\"" | tee -a "$LOG_BUILD_LXC"
sudo rm "/var/lib/lxc/$LXC_NAME1/rootfs/etc/nginx/conf.d/$DOMAIN.d/shellinabox.conf" # Supprime le fichier de conf nginx de shellinabox pour empêcher d'y accéder.
ssh $ARG_SSH $LXC_NAME1 "sudo yunohost app setting shellinabox path -d && sudo yunohost app ssowatconf" | tee -a "$LOG_BUILD_LXC"
echo -e "Installation de strut" | tee -a "$LOG_BUILD_LXC"
ssh $ARG_SSH $LXC_NAME1 "sudo yunohost app install strut -a \"domain=$DOMAIN&path=/strut&public_site=Yes\"" | tee -a "$LOG_BUILD_LXC"
echo -e "Installation de transmission" | tee -a "$LOG_BUILD_LXC"
ssh $ARG_SSH $LXC_NAME1 "sudo yunohost app install transmission -a \"domain=$DOMAIN&path=/torrent\"" | tee -a "$LOG_BUILD_LXC"
echo -e "Installation de ttrss" | tee -a "$LOG_BUILD_LXC"
ssh $ARG_SSH $LXC_NAME1 "sudo yunohost app install ttrss -a \"domain=$DOMAIN&path=/ttrss\"" | tee -a "$LOG_BUILD_LXC"
echo -e "Installation de wallabag" | tee -a "$LOG_BUILD_LXC"
ssh $ARG_SSH $LXC_NAME1 "sudo yunohost app install wallabag -a \"domain=$DOMAIN&path=/wallabag\"" | tee -a "$LOG_BUILD_LXC"
echo -e "Installation de wordpress" | tee -a "$LOG_BUILD_LXC"
ssh $ARG_SSH $LXC_NAME1 "sudo yunohost app install wordpress -a \"domain=$DOMAIN&path=/blog&admin=$USER_DEMO&language=en_EN&multisite=No&is_public=Yes\"" | tee -a "$LOG_BUILD_LXC"
echo -e "Installation de zerobin" | tee -a "$LOG_BUILD_LXC"
ssh $ARG_SSH $LXC_NAME1 "sudo yunohost app install zerobin -a \"domain=$DOMAIN&path=/zerobin&is_public=Yes\"" | tee -a "$LOG_BUILD_LXC"
# ********
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_NAME1 >> "$LOG_BUILD_LXC" 2>&1 sudo lxc-stop -n $LXC_NAME1 >> "$LOG_BUILD_LXC" 2>&1
@ -128,12 +172,33 @@ EOF
echo "> Et du cron d'upgrade" echo "> Et du cron d'upgrade"
echo | sudo tee /etc/cron.d/demo_upgrade <<EOF > /dev/null echo | sudo tee /etc/cron.d/demo_upgrade <<EOF > /dev/null
# Vérifie les mises à jour des conteneurs de demo, lorsqu'ils ne sont pas utilisés, à partir de 3h2minutes chaque nuit. Attention à rester sur un multiple du temps de switch. # Vérifie les mises à jour des conteneurs de demo, lorsqu'ils ne sont pas utilisés, à partir de 3h2minutes chaque nuit. Attention à rester sur un multiple du temps de switch.
2 3 * * * root $script_dir/demo_switch.sh >> "$script_dir/demo_upgrade.log" 2>&1 2 3 * * * root $script_dir/demo_upgrade.sh >> "$script_dir/demo_upgrade.log" 2>&1
EOF EOF
echo "> Démarrage de la démo" echo "> Démarrage de la démo"
"$script_dir/demo_start.sh" "$script_dir/demo_start.sh"
# echo "> Mise en place du service"
echo | sudo tee /etc/systemd/system/lxc_demo.service <<EOF > /dev/null
[Unit]
Description=Start and stop script for lxc demo container
Requires=network.target
After=network.target
[Service]
Type=forking
ExecStart=$script_dir/demo_start.sh
ExecStop=$script_dir/demo_stop.sh
ExecReload=$script_dir/demo_start.sh
[Install]
WantedBy=multi-user.target
EOF
# Démarrage automatique du service
sudo systemctl enable lxc_demo.service
sudo service lxc_demo start
# Après le démarrage du premier conteneur, fait un snapshot du deuxième. # 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" 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 sudo lxc-snapshot -n $LXC_NAME2 >> "$LOG_BUILD_LXC" 2>&1

View file

@ -1,10 +1,9 @@
#!/bin/bash #!/bin/bash
# Installe LXC et les paramètres réseaux avant de procéder au build. # 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 # 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 if [ "${0:0:1}" == "/" ]; then script_dir="$(dirname "$0")"; else script_dir="$(echo $PWD/$(dirname "$0" | cut -d '.' -f2) | sed 's@/$@@')"; fi
LOG=$(cat "$script_dir/demo_lxc_build.sh" | grep LOG= | cut -d '=' -f2) LOG=$(cat "$script_dir/demo_lxc_build.sh" | grep LOG= | cut -d '=' -f2)
LOG_BUILD_LXC="$script_dir/$LOG" LOG_BUILD_LXC="$script_dir/$LOG"
@ -15,14 +14,8 @@ 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) IP_LXC2=$(cat "$script_dir/demo_lxc_build.sh" | grep IP_LXC2= | cut -d '=' -f2)
MAIL_ADDR=$(cat "$script_dir/demo_lxc_build.sh" | grep MAIL_ADDR= | cut -d '=' -f2) MAIL_ADDR=$(cat "$script_dir/demo_lxc_build.sh" | grep MAIL_ADDR= | cut -d '=' -f2)
# Check root # Check user
# CHECK_ROOT=$EUID echo $USER > "$script_dir/setup_user"
# if [ -z "$CHECK_ROOT" ];then CHECK_ROOT=0;fi
# if [ $CHECK_ROOT -eq 0 ]
# then # $EUID est vide sur une exécution avec sudo. Et vaut 0 pour root
# echo "Le script ne doit pas être exécuté avec les droits root"
# exit 1
# fi
read -p "Indiquer le nom de domaine du serveur de demo: " DOMAIN read -p "Indiquer le nom de domaine du serveur de demo: " DOMAIN
echo "$DOMAIN" > "$script_dir/domain.ini" echo "$DOMAIN" > "$script_dir/domain.ini"
@ -76,6 +69,7 @@ echo "> Mise en place du reverse proxy et du load balancing" | tee -a "$LOG_BUIL
echo | sudo tee /etc/nginx/conf.d/$DOMAIN.conf <<EOF >> "$LOG_BUILD_LXC" 2>&1 echo | sudo tee /etc/nginx/conf.d/$DOMAIN.conf <<EOF >> "$LOG_BUILD_LXC" 2>&1
upstream $DOMAIN { upstream $DOMAIN {
server $IP_LXC1:80 ; server $IP_LXC1:80 ;
server $IP_LXC1:443 ;
server $IP_LXC2:443 ; server $IP_LXC2:443 ;
} }
@ -134,7 +128,7 @@ cd ~
git clone https://github.com/letsencrypt/letsencrypt git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt/ cd letsencrypt/
# Installe les dépendances de let's encrypt # Installe les dépendances de let's encrypt
./letsencrypt-auto --help sudo ./letsencrypt-auto --help
sudo mkdir /etc/letsencrypt sudo mkdir /etc/letsencrypt
# Créer le fichier de config # Créer le fichier de config
@ -166,10 +160,14 @@ EOF
mkdir -p /tmp/letsencrypt-auto mkdir -p /tmp/letsencrypt-auto
# Créer le certificat # Créer le certificat
./letsencrypt-auto certonly --config /etc/letsencrypt/conf.ini -d $DOMAIN sudo ./letsencrypt-auto certonly --config /etc/letsencrypt/conf.ini -d $DOMAIN
# Route l'upstream sur le port 443. Le port 80 servait uniquement à let's encrypt # Route l'upstream sur le port 443. Le port 80 servait uniquement à let's encrypt
sudo sed -i "s/server $IP_LXC1:80 ;/server $IP_LXC1:443 ;/" /etc/nginx/conf.d/$DOMAIN.conf sudo sed -i "s/server $IP_LXC1:80 ;/server $IP_LXC1:443 ;/" /etc/nginx/conf.d/$DOMAIN.conf
# Décommente les lignes du certificat
sudo sed -i "s/#\tssl_certificate/\tssl_certificate/g" /etc/nginx/conf.d/$DOMAIN.conf
sudo service nginx reload
# Mise en place du cron de renouvellement. # Mise en place du cron de renouvellement.
wget https://raw.githubusercontent.com/YunoHost-Apps/letsencrypt_ynh/master/sources/certificateRenewer wget https://raw.githubusercontent.com/YunoHost-Apps/letsencrypt_ynh/master/sources/certificateRenewer
@ -177,7 +175,7 @@ sed -i "s/DOMAIN_NAME/$DOMAIN/" certificateRenewer
sed -i "s/ADMIN_EMAIL/$MAIL_ADDR/" certificateRenewer sed -i "s/ADMIN_EMAIL/$MAIL_ADDR/" certificateRenewer
sudo mv certificateRenewer /etc/cron.weekly/ sudo mv certificateRenewer /etc/cron.weekly/
echo "\nLe serveur est prêt à déployer les conteneurs de demo." echo "Le 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." 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 # Déploie les conteneurs de demo
# "$script_dir/demo_lxc_build.sh" # "$script_dir/demo_lxc_build.sh"

View file

@ -2,24 +2,21 @@
# Détruit les conteneurs lxc de demo. # Détruit les conteneurs lxc de demo.
# Permet de repartir sur des bases saines avec le script demo_lxc_build.sh # 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 # 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 if [ "${0:0:1}" == "/" ]; then script_dir="$(dirname "$0")"; else script_dir="$(echo $PWD/$(dirname "$0" | cut -d '.' -f2) | sed 's@/$@@')"; fi
LXC_NAME1=$(cat "$script_dir/demo_lxc_build.sh" | grep LXC_NAME1= | 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) 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_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) IP_LXC2=$(cat "$script_dir/demo_lxc_build.sh" | grep IP_LXC2= | cut -d '=' -f2)
# Check root # Check user
# CHECK_ROOT=$EUID if [ "$USER" != "$(cat "$script_dir/setup_user")" ]; then
# if [ -z "$CHECK_ROOT" ];then CHECK_ROOT=0;fi echo -e "\e[91mCe script doit être exécuté avec l'utilisateur $(cat "$script_dir/sub_scripts/setup_user")"
# if [ $CHECK_ROOT -eq 0 ] echo -en "\e[0m"
# then # $EUID est vide sur une exécution avec sudo. Et vaut 0 pour root exit 0
# echo "Le script ne doit pas être exécuté avec les droits root" fi
# exit 1
# fi
"$script_dir/demo_stop.sh" "$script_dir/demo_stop.sh"
@ -38,3 +35,7 @@ sudo rm /etc/cron.d/demo_upgrade
echo "> Suppression des clés ECDSA dans known_hosts" 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_LXC1
ssh-keygen -f "$HOME/.ssh/known_hosts" -R $IP_LXC2 ssh-keygen -f "$HOME/.ssh/known_hosts" -R $IP_LXC2
echo "> Suppression du service"
sudo systemctl disable lutim.service
sudo rm -f /etc/systemd/system/lxc_demo.service

View file

@ -2,22 +2,19 @@
# Purge l'ensemble de la config lxc pour les conteneurs de demo. # 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. # 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 # 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 if [ "${0:0:1}" == "/" ]; then script_dir="$(dirname "$0")"; else script_dir="$(echo $PWD/$(dirname "$0" | cut -d '.' -f2) | sed 's@/$@@')"; fi
LXC_NAME1=$(cat "$script_dir/demo_lxc_build.sh" | grep LXC_NAME1= | cut -d '=' -f2) LXC_NAME1=$(cat "$script_dir/demo_lxc_build.sh" | grep LXC_NAME1= | cut -d '=' -f2)
DOMAIN=$(cat "$script_dir/domain.ini") DOMAIN=$(cat "$script_dir/domain.ini")
# Check root # Check user
# CHECK_ROOT=$EUID if [ "$USER" != "$(cat "$script_dir/setup_user")" ]; then
# if [ -z "$CHECK_ROOT" ];then CHECK_ROOT=0;fi echo -e "\e[91mCe script doit être exécuté avec l'utilisateur $(cat "$script_dir/sub_scripts/setup_user")"
# if [ $CHECK_ROOT -eq 0 ] echo -en "\e[0m"
# then # $EUID est vide sur une exécution avec sudo. Et vaut 0 pour root exit 0
# echo "Le script ne doit pas être exécuté avec les droits root" fi
# exit 1
# fi
"$script_dir/demo_lxc_destroy.sh" "$script_dir/demo_lxc_destroy.sh"

View file

@ -1,10 +1,9 @@
#!/bin/bash #!/bin/bash
# Démarre le premier conteneur de demo et active la config réseau dédiée. # 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 # 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 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/demo_lxc_build.sh" | grep PLAGE_IP= | cut -d '=' -f2) 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) LXC_NAME=$(cat "$script_dir/demo_lxc_build.sh" | grep LXC_NAME1= | cut -d '=' -f2)
@ -30,7 +29,7 @@ fi
# Démarrage de la machine # Démarrage de la machine
echo "> Démarrage de la machine" echo "> Démarrage de la machine"
sudo lxc-start -n $LXC_NAME -d sudo lxc-start -n $LXC_NAME -o "$script_dir/demo_boot.log" -d
sleep 3 sleep 3
# Vérifie que la machine a démarré # Vérifie que la machine a démarré

View file

@ -1,16 +1,29 @@
#!/bin/bash #!/bin/bash
# Stoppe les conteneurs de demo et arrête la config réseau dédiée. # 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 # 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 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/demo_lxc_build.sh" | grep PLAGE_IP= | cut -d '=' -f2) 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_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) LXC_NAME2=$(cat "$script_dir/demo_lxc_build.sh" | grep LXC_NAME2= | cut -d '=' -f2)
echo "> Arrêt de la machine virtualisée" if [ "$#" -eq 1 ] && [ "$1" == "-f" ]
then
echo "> Suppression des lock et arrêt forcé des conteneurs."
sudo rm -f /var/lib/lxc/$LXC_NAME1.lock_fileS
sudo rm -f /var/lib/lxc/$LXC_NAME2.lock_fileS
sudo rm -f /var/lib/lxc/$LXC_NAME1.lock_fileU
sudo rm -f /var/lib/lxc/$LXC_NAME2.lock_fileU
else
echo "> Attend la libération des lock sur les conteneurs."
while test -e /var/lib/lxc/$LXC_NAME1.lock_file* || test -e /var/lib/lxc/$LXC_NAME2.lock_file*; do
sleep 5 # Attend que les conteneur soit libérés par les script upgrade ou switch, le cas échéant.
done
fi
echo "> Arrêt des conteneurs"
if [ $(sudo lxc-info --name $LXC_NAME1 | grep -c "STOPPED") -eq 0 ]; then if [ $(sudo lxc-info --name $LXC_NAME1 | grep -c "STOPPED") -eq 0 ]; then
echo "Arrêt du conteneur $LXC_NAME1" echo "Arrêt du conteneur $LXC_NAME1"
sudo lxc-stop -n $LXC_NAME1 sudo lxc-stop -n $LXC_NAME1
@ -36,8 +49,4 @@ if sudo ifquery lxc_demo --state > /dev/null; then
sudo ifdown --force lxc_demo sudo ifdown --force lxc_demo
fi fi
echo "Suppression des lock."
sudo rm /var/lib/lxc/$LXC_NAME1/lock_file
sudo rm /var/lib/lxc/$LXC_NAME2/lock_file
sudo lxc-ls -f sudo lxc-ls -f

View file

@ -4,12 +4,20 @@
# Ce script n'a vocation qu'a être dans un cron # Ce script n'a vocation qu'a être dans un cron
# 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="$PWD/$(dirname "$0" | cut -d '.' -f2)"; fi 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/demo_lxc_build.sh" | grep PLAGE_IP= | cut -d '=' -f2) 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_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) LXC_NAME2=$(cat "$script_dir/demo_lxc_build.sh" | grep LXC_NAME2= | cut -d '=' -f2)
MAIL_ADDR=$(cat "$script_dir/demo_lxc_build.sh" | grep MAIL_ADDR= | cut -d '=' -f2) MAIL_ADDR=$(cat "$script_dir/demo_lxc_build.sh" | grep MAIL_ADDR= | cut -d '=' -f2)
DOMAIN=$(cat "$script_dir/domain.ini")
log_line=$(wc -l "$script_dir/demo_switch.log" | cut -d ' ' -f 1) # Repère la fin du log actuel. Pour récupérer les lignes ajoutées sur cette exécution.
log_line=$(( $log_line + 1 )) # Ignore la première ligne, reprise de l'ancien log.
while test -e /var/lib/lxc/$LXC_NAME1.lock_file* || test -e /var/lib/lxc/$LXC_NAME2.lock_file*; do
sleep 5 # Attend que le conteneur soit libéré par les script upgrade ou switch, le cas échéant.
done
# Vérifie l'état des machines. # Vérifie l'état des machines.
if [ "$(sudo lxc-info --name $LXC_NAME1 | grep -c "RUNNING")" -eq "1" ] if [ "$(sudo lxc-info --name $LXC_NAME1 | grep -c "RUNNING")" -eq "1" ]
@ -22,25 +30,21 @@ else # Sinon, on suppose que c'est la machine 2 qui est en cours.
# Si aucune machine ne tourne, la première démarrera. # Si aucune machine ne tourne, la première démarrera.
fi fi
while sudo test -e /var/lib/lxc/$LXC_B/lock_file; do
sleep 5 # Attend que le conteneur soit libéré par le script upgrade, le cas échéant.
done
# Démarre le conteneur B et arrête le conteneur A. # Démarre le conteneur B et arrête le conteneur A.
sudo lxc-start -n $LXC_B -o "$script_dir/demo_switch.log" -d > /dev/null # 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. sleep 10 # Attend 10 seconde pour s'assurer du démarrage de la machine.
if [ "$(sudo lxc-info --name $LXC_B | grep -c "STOPPED")" -eq "1" ] if [ "$(sudo lxc-info --name $LXC_B | grep -c "STOPPED")" -eq "1" ]
then then
# Le conteneur n'a pas réussi à démarrer. On averti un responsable par mail... # Le conteneur n'a pas réussi à démarrer. On averti un responsable par mail...
mail -a "Content-Type: text/plain; charset=UTF-8" -s "Demo Yunohost" $MAIL_ADDR <<< "Échec du démarrage du conteneur $LXC_B sur le serveur de demo!" echo -e "Échec du démarrage du conteneur $LXC_B sur le serveur de demo $DOMAIN! \n\nExtrait du log:\n$(tail -n +$log_line "$script_dir/demo_switch.log")" | mail -a "Content-Type: text/plain; charset=UTF-8" -s "Demo Yunohost" $MAIL_ADDR
exit 1 exit 1
else else
# Bascule sur le conteneur B avec le load balancing de nginx... # Bascule sur le conteneur B avec le load balancing de nginx...
# Automatique par nginx lorsque la machine A sera éteinte. # Automatique par nginx lorsque la machine A sera éteinte.
# Arrêt du conteneur A. Il est remplacé par le B # Arrêt du conteneur A. Il est remplacé par le B
sudo touch /var/lib/lxc/$LXC_A/lock_file # Met en place un fichier pour indiquer que la machine n'est pas encore dispo. sudo touch /var/lib/lxc/$LXC_A.lock_fileS # Met en place un fichier pour indiquer que la machine n'est pas encore dispo.
sudo lxc-stop -n $LXC_A sudo lxc-stop -n $LXC_A
# Restaure le snapshot de la machine A avant sa prochaine exécution # Restaure le snapshot de la machine A avant sa prochaine exécution
sudo lxc-snapshot -r snap0 -n $LXC_A sudo lxc-snapshot -r snap0 -n $LXC_A
sudo rm /var/lib/lxc/$LXC_A/lock_file # Libère le lock sudo rm /var/lib/lxc/$LXC_A.lock_fileS # Libère le lock
fi fi

View file

@ -4,7 +4,9 @@
# Ce script n'a vocation qu'a être dans un cron # Ce script n'a vocation qu'a être dans un cron
# 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="$PWD/$(dirname "$0" | cut -d '.' -f2)"; fi if [ "${0:0:1}" == "/" ]; then script_dir="$(dirname "$0")"; else script_dir="$(echo $PWD/$(dirname "$0" | cut -d '.' -f2) | sed 's@/$@@')"; fi
echo "$(date) U. boot upgrade" >> "$script_dir/debug.log"
LXC_NAME1=$(cat "$script_dir/demo_lxc_build.sh" | grep LXC_NAME1= | 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) LXC_NAME2=$(cat "$script_dir/demo_lxc_build.sh" | grep LXC_NAME2= | cut -d '=' -f2)
@ -13,10 +15,14 @@ IP_LXC2=$(cat "$script_dir/demo_lxc_build.sh" | grep IP_LXC2= | cut -d '=' -f2)
PLAGE_IP=$(cat "$script_dir/demo_lxc_build.sh" | grep PLAGE_IP= | cut -d '=' -f2) PLAGE_IP=$(cat "$script_dir/demo_lxc_build.sh" | grep PLAGE_IP= | cut -d '=' -f2)
TIME_TO_SWITCH=$(cat "$script_dir/demo_lxc_build.sh" | grep TIME_TO_SWITCH= | cut -d '=' -f2) TIME_TO_SWITCH=$(cat "$script_dir/demo_lxc_build.sh" | grep TIME_TO_SWITCH= | cut -d '=' -f2)
MAIL_ADDR=$(cat "$script_dir/demo_lxc_build.sh" | grep MAIL_ADDR= | cut -d '=' -f2) MAIL_ADDR=$(cat "$script_dir/demo_lxc_build.sh" | grep MAIL_ADDR= | cut -d '=' -f2)
DOMAIN=$(cat "$script_dir/domain.ini")
IP_UPGRADE=$PLAGE_IP.150 IP_UPGRADE=$PLAGE_IP.150
LOOP=0 LOOP=0
log_line=$(wc -l "$script_dir/demo_upgrade.log" | cut -d ' ' -f 1) # Repère la fin du log actuel. Pour récupérer les lignes ajoutées sur cette exécution.
log_line=$(( $log_line + 1 )) # Ignore la première ligne, reprise de l'ancien log.
UPGRADE_DEMO_CONTAINER () { # Démarrage, upgrade et snapshot UPGRADE_DEMO_CONTAINER () { # Démarrage, upgrade et snapshot
MACHINE=$1 MACHINE=$1
IP_MACHINE=$2 IP_MACHINE=$2
@ -25,11 +31,11 @@ UPGRADE_DEMO_CONTAINER () { # Démarrage, upgrade et snapshot
TIME_OUT=$(($TIME_TO_SWITCH * 60 + 300)) TIME_OUT=$(($TIME_TO_SWITCH * 60 + 300))
sudo lxc-wait -n $MACHINE -s 'STOPPED' -t $TIME_OUT sudo lxc-wait -n $MACHINE -s 'STOPPED' -t $TIME_OUT
while sudo test -e /var/lib/lxc/$MACHINE/lock_file; do while test -e /var/lib/lxc/$MACHINE.lock_fileS; do
sleep 5 # Attend que le conteneur soit libéré par le script switch. sleep 5 # Attend que le conteneur soit libéré par le script switch.
done done
sudo touch /var/lib/lxc/$MACHINE/lock_file # Met en place un fichier pour indiquer que la machine est indisponible pendant l'upgrade sudo touch /var/lib/lxc/$MACHINE.lock_fileU # Met en place un fichier pour indiquer que la machine est indisponible pendant l'upgrade
# Restaure le snapshot # Restaure le snapshot
sudo lxc-snapshot -r snap0 -n $MACHINE sudo lxc-snapshot -r snap0 -n $MACHINE
@ -38,7 +44,7 @@ UPGRADE_DEMO_CONTAINER () { # Démarrage, upgrade et snapshot
sudo sed -i "s@address $IP_MACHINE@address $IP_UPGRADE@" /var/lib/lxc/$MACHINE/rootfs/etc/network/interfaces sudo sed -i "s@address $IP_MACHINE@address $IP_UPGRADE@" /var/lib/lxc/$MACHINE/rootfs/etc/network/interfaces
# Démarre le conteneur # Démarre le conteneur
sudo lxc-start -n $MACHINE -d > /dev/null sudo lxc-start -n $MACHINE -o "$script_dir/demo_boot.log" -d > /dev/null
sleep 10 sleep 10
# Update # Update
@ -49,9 +55,9 @@ UPGRADE_DEMO_CONTAINER () { # Démarrage, upgrade et snapshot
update_apt=1 update_apt=1
fi fi
# Upgrade # Upgrade
sudo lxc-attach -n $MACHINE -- apt-get dist-upgrade sudo lxc-attach -n $MACHINE -- apt-get dist-upgrade -y
# Clean # Clean
sudo lxc-attach -n $MACHINE -- apt-get autoremove sudo lxc-attach -n $MACHINE -- apt-get autoremove -y
sudo lxc-attach -n $MACHINE -- apt-get autoclean sudo lxc-attach -n $MACHINE -- apt-get autoclean
# Exécution des scripts de upgrade.d # Exécution des scripts de upgrade.d
@ -65,9 +71,10 @@ UPGRADE_DEMO_CONTAINER () { # Démarrage, upgrade et snapshot
if [ "$?" -ne 0 ]; then # Si le script a échoué, le snapshot est annulé. if [ "$?" -ne 0 ]; then # Si le script a échoué, le snapshot est annulé.
echo "Échec du script $LIGNE" echo "Échec du script $LIGNE"
mv -f "$script_dir/upgrade.d/$LIGNE" "$script_dir/upgrade.d/$LIGNE.fail" mv -f "$script_dir/upgrade.d/$LIGNE" "$script_dir/upgrade.d/$LIGNE.fail"
mail -a "Content-Type: text/plain; charset=UTF-8" -s "Demo Yunohost" $MAIL_ADDR <<< "Échec d'exécution du script d'upgrade $LIGNE sur le conteneur $MACHINE sur le serveur de demo!\nLe script a été renommé en .fail, il ne sera plus exécuté tant que le préfixe ne sera pas retiré." echo -e "Échec d'exécution du script d'upgrade $LIGNE sur le conteneur $MACHINE sur le serveur de demo $DOMAIN!\nLe script a été renommé en .fail, il ne sera plus exécuté tant que le préfixe ne sera pas retiré.\n\nExtrait du log:\n$(tail -n +$log_line "$script_dir/demo_upgrade.log")" | mail -a "Content-Type: text/plain; charset=UTF-8" -s "Demo Yunohost" $MAIL_ADDR
update_apt=0 update_apt=0
fi fi
fi
done done
# Arrêt de la machine virtualisée # Arrêt de la machine virtualisée
@ -95,7 +102,7 @@ UPGRADE_DEMO_CONTAINER () { # Démarrage, upgrade et snapshot
done done
fi fi
fi fi
sudo rm /var/lib/lxc/$MACHINE/lock_file # Libère le lock, la machine est à nouveau disponible sudo rm /var/lib/lxc/$MACHINE.lock_fileU # Libère le lock, la machine est à nouveau disponible
} }
UPGRADE_DEMO_CONTAINER $LXC_NAME1 $IP_LXC1 UPGRADE_DEMO_CONTAINER $LXC_NAME1 $IP_LXC1

0
upgrade.d/exemple Normal file → Executable file
View file