From ad955ec177e4398e045bdc8cb5d953b6efced937 Mon Sep 17 00:00:00 2001 From: Maniack Crudelis Date: Thu, 1 Dec 2016 21:51:25 +0100 Subject: [PATCH] Auto apt update, ajout lock --- package_check.sh | 74 +++++++++++++++++++++++-------------- sub_scripts/auto_upgrade.sh | 27 ++++++++++++++ sub_scripts/lxc_check.sh | 13 ++++++- sub_scripts/lxc_remove.sh | 2 + sub_scripts/lxc_upgrade.sh | 14 ++++++- 5 files changed, 100 insertions(+), 30 deletions(-) create mode 100644 sub_scripts/auto_upgrade.sh diff --git a/package_check.sh b/package_check.sh index e38c3ce..9e60f56 100755 --- a/package_check.sh +++ b/package_check.sh @@ -9,6 +9,33 @@ echo "" +## Récupère les arguments +# --bash-mode +bash_mode=$(echo "$*" | grep -c -e "--bash-mode") # bash_mode vaut 1 si l'argument est présent. +# --no-lxc +no_lxc=$(echo "$*" | grep -c -e "--no-lxc") # no_lxc vaut 1 si l'argument est présent. +# --build-lxc +build_lxc=$(echo "$*" | grep -c -e "--build-lxc") # build_lxc vaut 1 si l'argument est présent. +# --force-install-ok +force_install_ok=$(echo "$*" | grep -c -e "--force-install-ok") # force-install-ok vaut 1 si l'argument est présent. +# --help +if [ "$notice" -eq 0 ]; then + notice=$(echo "$*" | grep -c -e "--help") # notice vaut 1 si l'argument est présent. Il affichera alors l'aide. +fi +arg_app=$(echo "$*" | sed 's/--bash-mode\|--no-lxc\|--build-lxc\|--force-install-ok//g' | sed 's/^ *\| *$//g') # Supprime les arguments déjà lu pour ne garder que l'app. Et supprime les espaces au début et à la fin +# echo "arg_app=$arg_app." + +if [ "$notice" -eq 1 ]; then + echo -e "\nUsage:" + echo "package_check.sh [--bash-mode] [--no-lxc] [--build-lxc] [--force-install-ok] [--help] \"check package\"" + echo -e "\n\t--bash-mode\t\tDo not ask for continue check. Ignore auto_remove." + echo -e "\t--no-lxc\t\tDo not use a LXC container. You should use this option only on a test environnement." + echo -e "\t--build-lxc\t\tInstall LXC and build the container if necessary." + echo -e "\t--force-install-ok\tForce following test even if all install are failed." + echo -e "\t--help\t\t\tDisplay this notice." + exit 0 +fi + # 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 @@ -33,6 +60,22 @@ if [ "$?" -ne 0 ]; then # En cas d'échec de connexion, tente de pinger un autre fi fi +if test -e "$script_dir/pcheck.lock" +then # Présence du lock, Package check ne peut pas continuer. + echo "Le fichier $script_dir/pcheck.lock est présent. Package check est déjà utilisé." + rep="N" + if [ "$bash_mode" -ne 1 ]; then + echo -n "Souhaitez-vous continuer quand même et ignorer le lock ? (Y/N) :" + read rep + fi + if [ "${rep:0:1}" != "Y" ] && [ "${rep:0:1}" != "y" ] && [ "${rep:0:1}" != "O" ] && [ "${rep:0:1}" != "o" ] + then # Teste uniquement le premier caractère de la réponse pour continuer malgré le lock. + echo "L'exécution de Package check est annulée" + exit 0 + fi +fi +touch "$script_dir/pcheck.lock" # Met en place le lock de Package check + version_script="$(git ls-remote https://github.com/YunoHost/package_check | cut -f 1 | head -n1)" if [ -e "$script_dir/package_version" ] then @@ -75,33 +118,6 @@ then notice=1 fi -## Récupère les arguments -# --bash-mode -bash_mode=$(echo "$*" | grep -c -e "--bash-mode") # bash_mode vaut 1 si l'argument est présent. -# --no-lxc -no_lxc=$(echo "$*" | grep -c -e "--no-lxc") # no_lxc vaut 1 si l'argument est présent. -# --build-lxc -build_lxc=$(echo "$*" | grep -c -e "--build-lxc") # build_lxc vaut 1 si l'argument est présent. -# --force-install-ok -force_install_ok=$(echo "$*" | grep -c -e "--force-install-ok") # force-install-ok vaut 1 si l'argument est présent. -# --help -if [ "$notice" -eq 0 ]; then - notice=$(echo "$*" | grep -c -e "--help") # notice vaut 1 si l'argument est présent. Il affichera alors l'aide. -fi -arg_app=$(echo "$*" | sed 's/--bash-mode\|--no-lxc\|--build-lxc\|--force-install-ok//g' | sed 's/^ *\| *$//g') # Supprime les arguments déjà lu pour ne garder que l'app. Et supprime les espaces au début et à la fin -# echo "arg_app=$arg_app." - -if [ "$notice" -eq 1 ]; then - echo -e "\nUsage:" - echo "package_check.sh [--bash-mode] [--no-lxc] [--build-lxc] [--force-install-ok] [--help] \"check package\"" - echo -e "\n\t--bash-mode\t\tDo not ask for continue check. Ignore auto_remove." - echo -e "\t--no-lxc\t\tDo not use a LXC container. You should use this option only on a test environnement." - echo -e "\t--build-lxc\t\tInstall LXC and build the container if necessary." - echo -e "\t--force-install-ok\tForce following test even if all install are failed." - echo -e "\t--help\t\t\tDisplay this notice." - exit 0 -fi - USER_TEST=package_checker PASSWORD_TEST=checker_pwd PATH_TEST=/check @@ -133,6 +149,7 @@ then # Si le conteneur lxc est utilisé ECHO_FORMAT "Lxc n'est pas installé, ou la machine $LXC_NAME n'est pas créée.\n" "red" ECHO_FORMAT "Utilisez le script 'lxc_build.sh' pour installer lxc et créer la machine.\n" "red" ECHO_FORMAT "Ou utilisez l'argument --no-lxc\n" "red" + sudo rm "$script_dir/pcheck.lock" # Retire le lock exit 1 fi fi @@ -148,6 +165,7 @@ else # Vérifie l'utilisateur et le domain si lxc n'est pas utilisé. sudo yunohost user create --firstname "$USER_TEST_CLEAN" --mail "$USER_TEST_CLEAN@$DOMAIN" --lastname "$USER_TEST_CLEAN" --password "$PASSWORD_TEST" "$USER_TEST" if [ "$?" -ne 0 ]; then ECHO_FORMAT "La création de l'utilisateur de test a échoué. Impossible de continuer.\n" "red" + sudo rm "$script_dir/pcheck.lock" # Retire le lock exit 1 fi fi @@ -158,6 +176,7 @@ else # Vérifie l'utilisateur et le domain si lxc n'est pas utilisé. sudo yunohost domain add "$SOUS_DOMAIN" if [ "$?" -ne 0 ]; then ECHO_FORMAT "La création du sous-domain de test a échoué. Impossible de continuer.\n" "red" + sudo rm "$script_dir/pcheck.lock" # Retire le lock exit 1 fi fi @@ -185,6 +204,7 @@ fi if [ ! -d "$APP_CHECK" ]; then ECHO_FORMAT "Le dossier de l'application a tester est introuvable...\n" "red" + sudo rm "$script_dir/pcheck.lock" # Retire le lock exit 1 fi sudo rm -rf "$APP_CHECK/.git" # Purge des fichiers de git diff --git a/sub_scripts/auto_upgrade.sh b/sub_scripts/auto_upgrade.sh new file mode 100644 index 0000000..c93d45a --- /dev/null +++ b/sub_scripts/auto_upgrade.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +# Ce script n'a vocation qu'a être dans un cron. De préférence une fois par jour ou par semaine. + +# 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 + +echo "" +date +# Vérifie que Package check n'est pas déjà utilisé. +timeout=7300 # Durée d'attente maximale +inittime=$(date +%s) # Enregistre l'heure de début d'attente +while test -e "$script_dir/../pcheck.lock"; do # Vérifie la présence du lock de Package check + sleep 60 # Attend la fin de l'exécution de Package check. + echo -n "." + if [ $(( $(date +%s) - $inittime )) -ge $timeout ] # Vérifie la durée d'attente + then # Si la durée dépasse le timeout fixé, force l'arrêt. + inittime=0 # Indique l'arrêt forcé du script + echo "Temps d'attente maximal dépassé, la mise à jour est annulée." + break + fi +done +echo "" + +if [ "$inittime" -ne 0 ]; then # Continue seulement si le timeout n'est pas dépassé. + "$script_dir/lxc_upgrade.sh" # Exécute le script d'upgrade de Package check +fi diff --git a/sub_scripts/lxc_check.sh b/sub_scripts/lxc_check.sh index 50ccdd1..db84e67 100755 --- a/sub_scripts/lxc_check.sh +++ b/sub_scripts/lxc_check.sh @@ -102,6 +102,7 @@ RESTORE_CONTAINER () { # Résultats finaux 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" + sudo rm "$script_dir/../pcheck.lock" # Retire le lock exit 1 else echo -e "\e[92m\n> Le conteneur démarre correctement.\e[0m" @@ -171,11 +172,12 @@ LXC_NETWORK_CONFIG () { fi } +touch "$script_dir/../pcheck.lock" # Met en place le lock de Package check + STOP_CONTAINER STOP_NETWORK check_repair=0 - ### 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" CREATE_BRIDGE () { @@ -220,6 +222,7 @@ do else sudo ifconfig 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 exit 1 fi fi @@ -234,6 +237,7 @@ do else sudo ifconfig 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 exit 1 fi fi @@ -250,6 +254,7 @@ then echo -e "\e[92mLes règles iptables sont appliquées correctement.\e[0m" else 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 exit 1 fi @@ -277,6 +282,7 @@ if [ "$?" -ne 0 ]; then # En cas d'échec de connexion, tente de pinger un autre 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... 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 exit 1 fi fi @@ -307,6 +313,7 @@ do if [ "$lxc_net_check" -eq 4 ] then echo -e "\e[91mImpossible de rétablir la connexion internet du conteneur.\e[0m" + sudo rm "$script_dir/../pcheck.lock" # Retire le lock exit 1 fi echo -e "\e[91mLe conteneur LXC n'accède pas à internet...\e[0m" @@ -368,6 +375,7 @@ echo -e "\e[1m\n> Test de l'accès ssh:\e[0m" # Check user if [ "$USER" != "$(cat "$script_dir/setup_user")" ] && test -e "$script_dir/setup_user"; then echo -e "\e[91mPour tester l'accès ssh, le script doit être exécuté avec l'utilisateur $(cat "$script_dir/setup_user")\e[0m" + sudo rm "$script_dir/../pcheck.lock" # Retire le lock exit 1 fi @@ -417,6 +425,7 @@ echo -e "\e[1m\n> Vérifie que Yunohost est installé dans le conteneur:\e[0m" sudo lxc-attach -n $LXC_NAME -- sudo yunohost -v if [ "$?" -ne 0 ]; then # Si la commande échoue, il y a un problème avec Yunohost echo -e "\e[91mYunohost semble mal installé. Il est nécessaire de détruire et de reconstruire le conteneur.\e[0m" + sudo rm "$script_dir/../pcheck.lock" # Retire le lock exit 1 else echo -e "\e[92mYunohost est installé correctement.\e[0m" @@ -430,3 +439,5 @@ echo -e "\e[92m\nLe conteneur ne présente aucune erreur.\e[0m" if [ "$check_repair" -eq 1 ]; then echo -e "\e[91mMais des réparations ont été nécessaires. Refaire un test pour s'assurer que tout est correct...\e[0m" fi + +sudo rm "$script_dir/../pcheck.lock" # Retire le lock diff --git a/sub_scripts/lxc_remove.sh b/sub_scripts/lxc_remove.sh index 5616423..4dfe4ab 100755 --- a/sub_scripts/lxc_remove.sh +++ b/sub_scripts/lxc_remove.sh @@ -12,6 +12,8 @@ if [ "$USER" != "$(cat "$script_dir/setup_user")" ] && test -e "$script_dir/setu exit 0 fi +sudo rm "$script_dir/../pcheck.lock" # Retire le lock + echo "> Retire l'ip forwarding." sudo rm /etc/sysctl.d/lxc_pchecker.conf sudo sysctl -p diff --git a/sub_scripts/lxc_upgrade.sh b/sub_scripts/lxc_upgrade.sh index 15ee107..d1c133d 100755 --- a/sub_scripts/lxc_upgrade.sh +++ b/sub_scripts/lxc_upgrade.sh @@ -3,6 +3,13 @@ # 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 test -e "$script_dir/../pcheck.lock" +then # L'upgrade est annulé + echo "Le fichier $script_dir/../pcheck.lock est présent. Package check est déjà utilisé. Exécution annulée..." + exit 0 +fi +touch "$script_dir/../pcheck.lock" # Met en place le lock de Package check + PLAGE_IP=$(cat "$script_dir/lxc_build.sh" | grep PLAGE_IP= | cut -d '"' -f2) LXC_NAME=$(cat "$script_dir/lxc_build.sh" | grep LXC_NAME= | cut -d '=' -f2) @@ -10,6 +17,7 @@ LXC_NAME=$(cat "$script_dir/lxc_build.sh" | grep LXC_NAME= | cut -d '=' -f2) if [ "$USER" != "$(cat "$script_dir/setup_user")" ] && test -e "$script_dir/setup_user"; then echo -e "\e[91mCe script doit être exécuté avec l'utilisateur $(cat "$script_dir/setup_user")" echo -en "\e[0m" + rm "$script_dir/../pcheck.lock" # Retire le lock exit 0 fi @@ -53,9 +61,9 @@ if [ "$?" -eq 0 ]; then update_apt=1 fi echo "> Upgrade" -sudo lxc-attach -n $LXC_NAME -- apt-get dist-upgrade +sudo lxc-attach -n $LXC_NAME -- apt-get dist-upgrade -y echo "> Clean" -sudo lxc-attach -n $LXC_NAME -- apt-get autoremove +sudo lxc-attach -n $LXC_NAME -- apt-get autoremove -y sudo lxc-attach -n $LXC_NAME -- apt-get autoclean echo "> Arrêt de la machine virtualisée" @@ -76,3 +84,5 @@ then sudo lxc-snapshot -n $LXC_NAME -d snap0 sudo lxc-snapshot -n $LXC_NAME fi + +sudo rm "$script_dir/../pcheck.lock" # Retire le lock