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 ""
## 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

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

View file

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

View file

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