Auto apt update, ajout lock

This commit is contained in:
Maniack Crudelis 2016-12-01 21:51:25 +01:00
parent e41bc77148
commit ad955ec177
5 changed files with 100 additions and 30 deletions

View file

@ -9,6 +9,33 @@
echo "" 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 # 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 [ "${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
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)" version_script="$(git ls-remote https://github.com/YunoHost/package_check | cut -f 1 | head -n1)"
if [ -e "$script_dir/package_version" ] if [ -e "$script_dir/package_version" ]
then then
@ -75,33 +118,6 @@ then
notice=1 notice=1
fi 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 USER_TEST=package_checker
PASSWORD_TEST=checker_pwd PASSWORD_TEST=checker_pwd
PATH_TEST=/check 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 "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 "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" ECHO_FORMAT "Ou utilisez l'argument --no-lxc\n" "red"
sudo rm "$script_dir/pcheck.lock" # Retire le lock
exit 1 exit 1
fi fi
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" 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 if [ "$?" -ne 0 ]; then
ECHO_FORMAT "La création de l'utilisateur de test a échoué. Impossible de continuer.\n" "red" 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 exit 1
fi fi
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" sudo yunohost domain add "$SOUS_DOMAIN"
if [ "$?" -ne 0 ]; then if [ "$?" -ne 0 ]; then
ECHO_FORMAT "La création du sous-domain de test a échoué. Impossible de continuer.\n" "red" 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 exit 1
fi fi
fi fi
@ -185,6 +204,7 @@ fi
if [ ! -d "$APP_CHECK" ]; then if [ ! -d "$APP_CHECK" ]; then
ECHO_FORMAT "Le dossier de l'application a tester est introuvable...\n" "red" ECHO_FORMAT "Le dossier de l'application a tester est introuvable...\n" "red"
sudo rm "$script_dir/pcheck.lock" # Retire le lock
exit 1 exit 1
fi fi
sudo rm -rf "$APP_CHECK/.git" # Purge des fichiers de git sudo rm -rf "$APP_CHECK/.git" # Purge des fichiers de git

View file

@ -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

View file

@ -102,6 +102,7 @@ RESTORE_CONTAINER () {
# 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
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"
@ -171,11 +172,12 @@ LXC_NETWORK_CONFIG () {
fi fi
} }
touch "$script_dir/../pcheck.lock" # Met en place le lock de Package check
STOP_CONTAINER STOP_CONTAINER
STOP_NETWORK STOP_NETWORK
check_repair=0 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 () {
@ -220,6 +222,7 @@ do
else else
sudo ifconfig 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" 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 exit 1
fi fi
fi fi
@ -234,6 +237,7 @@ do
else else
sudo ifconfig 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" 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 exit 1
fi fi
fi fi
@ -250,6 +254,7 @@ 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
exit 1 exit 1
fi 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 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
exit 1 exit 1
fi fi
fi fi
@ -307,6 +313,7 @@ do
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
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"
@ -368,6 +375,7 @@ echo -e "\e[1m\n> Test de l'accès ssh:\e[0m"
# Check user # Check user
if [ "$USER" != "$(cat "$script_dir/setup_user")" ] && test -e "$script_dir/setup_user"; then 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" 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 exit 1
fi 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 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 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" 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 exit 1
else else
echo -e "\e[92mYunohost est installé correctement.\e[0m" 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 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" echo -e "\e[91mMais des réparations ont été nécessaires. Refaire un test pour s'assurer que tout est correct...\e[0m"
fi fi
sudo rm "$script_dir/../pcheck.lock" # Retire le lock

View file

@ -12,6 +12,8 @@ if [ "$USER" != "$(cat "$script_dir/setup_user")" ] && test -e "$script_dir/setu
exit 0 exit 0
fi fi
sudo rm "$script_dir/../pcheck.lock" # Retire le lock
echo "> Retire l'ip forwarding." echo "> Retire l'ip forwarding."
sudo rm /etc/sysctl.d/lxc_pchecker.conf sudo rm /etc/sysctl.d/lxc_pchecker.conf
sudo sysctl -p sudo sysctl -p

View file

@ -3,6 +3,13 @@
# 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="$(echo $PWD/$(dirname "$0" | cut -d '.' -f2) | sed 's@/$@@')"; fi 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) 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) 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 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 -e "\e[91mCe script doit être exécuté avec l'utilisateur $(cat "$script_dir/setup_user")"
echo -en "\e[0m" echo -en "\e[0m"
rm "$script_dir/../pcheck.lock" # Retire le lock
exit 0 exit 0
fi fi
@ -53,9 +61,9 @@ if [ "$?" -eq 0 ]; then
update_apt=1 update_apt=1
fi fi
echo "> Upgrade" 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" 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 sudo lxc-attach -n $LXC_NAME -- apt-get autoclean
echo "> Arrêt de la machine virtualisée" 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 -d snap0
sudo lxc-snapshot -n $LXC_NAME sudo lxc-snapshot -n $LXC_NAME
fi fi
sudo rm "$script_dir/../pcheck.lock" # Retire le lock