trop de modifications
This commit is contained in:
177
local/bin/updateall.sh
Executable file
177
local/bin/updateall.sh
Executable file
@@ -0,0 +1,177 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Variables pour les codes de couleur ANSI
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Mise à jour des machines présentes dans .ssh/config avec choix d'ignorer certaines.
|
||||
|
||||
# Fonction pour mettre à jour avec apt
|
||||
update_with_apt() {
|
||||
echo -e " - Mise à jour avec apt sur $1 \n"
|
||||
ssh -tt "$1" '
|
||||
sudo apt -y -q clean &&
|
||||
sudo apt -y -q update &&
|
||||
sudo apt -y -q full-upgrade &&
|
||||
sudo apt -y -q autoremove
|
||||
'
|
||||
echo -e "\n"
|
||||
}
|
||||
|
||||
# Fonction pour mettre à jour avec dnf
|
||||
update_with_dnf() {
|
||||
echo -e " - Mise à jour avec dnf sur $1 \n"
|
||||
ssh -tt "$1" 'sudo dnf check-update && sudo dnf upgrade -y'
|
||||
echo -e "\n"
|
||||
}
|
||||
|
||||
|
||||
# Déclaration d'une fonction pour récupérer les alias à partir du fichier ~/.ssh/config
|
||||
get_ssh_aliases() {
|
||||
# Parcours du fichier ~/.ssh/config et récupération du premier Host (excluant "*")
|
||||
awk 'tolower($1) == "host" && $2 != "*" && !seen[$2]++ {print $2}' ~/.ssh/config
|
||||
|
||||
# Parcours des fichiers dans le dossier ~/.ssh/include et récupération du premier Host (excluant "*")
|
||||
for include_file in ~/.ssh/include/*; do
|
||||
awk 'tolower($1) == "host" && $2 != "*" && !seen[$2]++ {print $2}' "$include_file"
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
check_keyinstall() {
|
||||
local machine="$1"
|
||||
local uniqkey="$2"
|
||||
local uniqkey_file="/etc/cedrix_updateall"
|
||||
|
||||
echo -n " - Vérification d'une mise à jour déjà effectuée sur "$machine" : "
|
||||
|
||||
if ! timeout 5 ssh "$machine" '[ -f "$uniqkey_file" ]'; then
|
||||
echo -e "${GREEN}mise à jour à faire.${NC}"
|
||||
return 0
|
||||
fi
|
||||
|
||||
if timeout 5 ssh "$machine" "grep -q '$uniqkey' $uniqkey_file"; then
|
||||
echo -e "${RED}mise à jour déjà faite.${NC}"
|
||||
return 1
|
||||
fi
|
||||
|
||||
timeout 5 ssh "$machine" "sudo rm "$uniqkey_file""
|
||||
echo -e "${GREEN}mise à jour à faire et clé à modifier.${NC}"
|
||||
return 0
|
||||
}
|
||||
|
||||
|
||||
create_installkey() {
|
||||
local machine="$1"
|
||||
local uniqkey="$2"
|
||||
local uniqkey_file="/etc/cedrix_updateall"
|
||||
|
||||
echo -n " - Indiquer à $machine que le script est passé ... "
|
||||
# Si la clé unique n'est pas présente, la déposer dans le fichier
|
||||
echo "$uniqkey" | timeout 5 ssh "$machine" "sudo su -c \"cat > $uniqkey_file\""
|
||||
result="$?"
|
||||
|
||||
if [ $result -eq 0 ]; then
|
||||
echo -e "${GREEN}OK${NC}"
|
||||
else
|
||||
echo -e "${RED}une erreur est survenue. Désactivation des prochaines mise à jour.${NC}"
|
||||
|
||||
fi
|
||||
|
||||
return
|
||||
|
||||
}
|
||||
|
||||
update_machine () {
|
||||
local machine="$1"
|
||||
echo -n " - Détection du gestionnaire de mise à jour ... "
|
||||
if timeout 5 ssh "$machine" which apt > /dev/null 2>&1; then
|
||||
echo -e "${GREEN}apt${NC}"
|
||||
update_with_apt "$machine"
|
||||
elif timeout 5 ssh "$machine" which dnf > /dev/null 2>&1; then
|
||||
echo -e "${GREEN}dnf${NC}"
|
||||
update_with_dnf "$machine"
|
||||
else
|
||||
echo " ${RED} non détecté${NC}"
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
|
||||
confirm_update() {
|
||||
local machine="$1"
|
||||
read -p " - Executer la mise à jour pour $machine ? (o/n) " choice
|
||||
if [ "$choice" = "o" ]; then
|
||||
echo "$machine 1" >> ~/.config/updateall-hosts
|
||||
else
|
||||
echo "$machine 0" >> ~/.config/updateall-hosts
|
||||
continue
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
check_host() {
|
||||
local machine="$1"
|
||||
|
||||
echo -n " - Check host "
|
||||
# Vérifier la résolution du nom d'hôte
|
||||
if ssh "$machine" hostname > /dev/null 2>&1; then
|
||||
echo -e "... ${GREEN}OK${NC}"
|
||||
return 1
|
||||
else
|
||||
echo -e "... ${RED}KO${NC}"
|
||||
return 0
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
|
||||
# Générer une clé unique
|
||||
uniqkey=$(uuidgen)
|
||||
echo "Clé d'installation : $uniqkey"
|
||||
|
||||
# Récupérer les alias SSH
|
||||
machines=($(get_ssh_aliases))
|
||||
|
||||
# Parcourir la liste des machines
|
||||
|
||||
for machine in "${machines[@]}"; do
|
||||
# Vérification si le nom de machine est présent dans le fichier .config/updateall-hosts
|
||||
echo -e "\n"
|
||||
echo -n " >> $machine "
|
||||
|
||||
if grep -q "^$machine " ~/.config/updateall-hosts; then
|
||||
status=$(grep "^$machine " ~/.config/updateall-hosts | awk '{print $2}')
|
||||
if [ "$status" = "1" ]; then
|
||||
echo -e "${GREEN}connue${NC}"
|
||||
|
||||
check_host "$machine"
|
||||
machine_online="$?"
|
||||
|
||||
if [ "$machine_online" -eq 1 ]; then
|
||||
check_keyinstall "$machine" "$uniqkey"
|
||||
keyinstall_present="$?"
|
||||
if [ "$keyinstall_present" -eq 0 ]; then
|
||||
update_machine "$machine"
|
||||
create_installkey "$machine" "$uniqkey"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo -e "${RED}ignorée${NC}"
|
||||
fi
|
||||
else
|
||||
if [ "$machine_online" -eq 1 ]; then
|
||||
echo -e "${RED}vue pour la 1re fois${NC}"
|
||||
|
||||
check_host "$machine"
|
||||
machine_online="$?"
|
||||
|
||||
confirm_update "$machine"
|
||||
update_machine "$machine"
|
||||
create_installkey "$machine" "$uniqkey"
|
||||
fi
|
||||
fi
|
||||
|
||||
done
|
||||
|
||||
Reference in New Issue
Block a user