notes-techniques/notes/scripts/common/common_utils.sh

151 lines
5.3 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Vérifier si le script est exécuté en root
check_root() {
if [[ $EUID -ne 0 ]]; then
echo "❌ Ce script doit être exécuté en tant que root."
exit 1
fi
}
update_system() {
echo "=== Mise à jour du système ==="
# Mise à jour des paquets APT
if command -v apt &> /dev/null; then
echo "🔄 Mise à jour des paquets APT..."
sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y && sudo apt clean
if [ $? -ne 0 ]; then
echo "❌ Erreur lors de la mise à jour des paquets APT." >&2
exit 1
else
echo "✅ Mise à jour terminée."
fi
fi
# Mise à jour des paquets Flatpak si Flatpak est installé
if command -v flatpak &> /dev/null; then
echo "🔄 Mise à jour des paquets Flatpak..."
flatpak update -y
if [ $? -ne 0 ]; then
echo "❌ Erreur lors de la mise à jour des paquets Flatpak." >&2
exit 1
else
echo "✅ Mise à jour terminée."
fi
fi
}
# Récupérer le nom dhôte complet (FQDN) et le domaine
get_fqdn_and_domain() {
local fqdn domain
# Récupérer le FQDN en priorité avec hostname -f
fqdn=$(hostname -f 2>/dev/null) || fqdn=$(cat /etc/hostname 2>/dev/null)
# Vérifier si la récupération du FQDN a réussi
if [[ -z "$fqdn" ]]; then
echo "❌ Erreur : Impossible de déterminer le FQDN" >&2
return 1
fi
# Extraire le domaine
domain=${fqdn#*.}
echo "$fqdn" "$domain"
}
# Vérification de la résolution DNS
check_dns() {
local server_name=$1
# Récupération de l'adresse IP publique du serveur
SERVER_IP=$(curl -4 -s ifconfig.me || hostname -I | awk '{print $1}')
# Récupération de l'adresse IP associée au FQDN
FQDN_IP=$(dig +short A "$server_name" | tail -n1)
# Vérification si l'IP du FQDN est récupérable
if [[ -z "$FQDN_IP" ]]; then
echo "❌ Erreur : Impossible de récupérer l'adresse IP associée à $server_name via DIG."
echo "➡️ Vérifie la configuration DNS et l'existence du domaine."
exit 1
fi
# Comparaison des IPs
if [[ "$SERVER_IP" != "$FQDN_IP" ]]; then
echo "⚠️ Alerte DNS : L'adresse IP résolue ($FQDN_IP) ne correspond pas à l'IP publique actuelle ($SERVER_IP)."
echo "➡️ Vérifie la configuration DNS et la propagation des enregistrements."
exit 1
fi
echo "✅ Vérification réussie : $server_name pointe correctement vers $SERVER_IP."
}
setup_ssl() {
local fqdn=$1
local le_dir="/etc/letsencrypt/live/$fqdn"
echo "=== Configuration du certificat SSL pour $fqdn ==="
if [[ -f "$le_dir/fullchain.pem" ]]; then
echo "✅ Certificat SSL déjà existant."
openssl x509 -noout -text -in "$le_dir/fullchain.pem" | grep "Not After"
return 0
fi
echo "🔄 Test de génération dun nouveau certificat SSL via HTTP..."
while true; do
certbot certonly --standalone --dry-run -d "$fqdn" --non-interactive --agree-tos --register-unsafely-without-email
if [[ $? -eq 0 ]]; then
echo "✅ Test réussi, génération réelle du certificat..."
certbot certonly --standalone -d "$fqdn" --non-interactive --agree-tos --register-unsafely-without-email
break
else
echo "⚠️ Échec du test via HTTP. Tentative via DNS..."
echo "🔄 Test de génération dun nouveau certificat SSL via challenge DNS..."
echo "🛠️ Veuillez ajouter un enregistrement TXT pour _acme-challenge.$fqdn avec la valeur fournie par certbot."
while true; do
certbot certonly --manual --preferred-challenges dns --dry-run -d "$fqdn" --non-interactive --agree-tos --register-unsafely-without-email
if [[ $? -eq 0 ]]; then
echo "✅ Test DNS réussi. Veuillez maintenant ajouter le bon enregistrement TXT."
echo "⏳ Appuyez sur une touche pour continuer après l'ajout de l'enregistrement TXT..."
read -n 1 -s # Attente de l'appui sur une touche
# Génération réelle du certificat avec DNS challenge
echo "✅ Génération réelle du certificat via challenge DNS..."
certbot certonly --manual --preferred-challenges dns -d "$fqdn" --non-interactive --agree-tos --register-unsafely-without-email
break 2 # Sort de la boucle interne ET de la boucle externe
else
echo "❌ Échec de la génération du certificat SSL avec toutes les méthodes."
read -p "Voulez-vous interrompre le processus ? (o/n) : " choix
if [[ "$choix" == "o" ]]; then
exit 1
fi
fi
done
fi
done
echo "✅ Certificat SSL généré avec succès."
}
# Fonction pour récupérer et retourner les adresses IP de la machine
get_server_ips() {
local SERVER_IP SERVER_IPv6
SERVER_IP=$(curl -4 -s ifconfig.me || hostname -I | awk '{print $1}')
SERVER_IPv6=$(curl -6 -s ifconfig.me || hostname -I | awk '{print $2}')
echo "$SERVER_IP" "$SERVER_IPv6"
}