From 18a602aa60a1a54e6072d64b2744a3baa090204a Mon Sep 17 00:00:00 2001 From: kawa Date: Sat, 14 Mar 2026 16:41:13 +0100 Subject: [PATCH] Improve hostname detection: Docker, containers, physical machines --- setup | 117 +++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 104 insertions(+), 13 deletions(-) diff --git a/setup b/setup index 6c3e3ef..4ac9325 100755 --- a/setup +++ b/setup @@ -1,43 +1,134 @@ #!/usr/bin/env bash # KAWA OS - Installation automatique -# Usage: git clone git.du-senegal.com/kawa && cd kawa && ./setup +# Usage: git clone https://git.du-senegal.com/kawa_bot/kawa.git && cd kawa && ./setup set -e HEADSCALE_URL="https://headscale.du-senegal.com" -HEADSIZE_FALLBACK="http://141.94.23.212" +HEADSCALE_FALLBACK="http://141.94.23.212" HEADSCALE_AUTHKEY="f43f36ef159b3df799eb316b81bdac1b415c7cc2add174d0" echo "🜄 KAWA OS - Installation" echo "" -# Hostname -MODEL=$(cat /sys/class/dmi/id/product_name 2>/dev/null | tr '[:upper:]' '[:lower:]' | tr -d ' ' | cut -c1-15 || echo "node") -SUFFIX=$(head -c 4 /dev/urandom | xxd -p 2>/dev/null || echo "0000") -HOSTNAME="kawa-${MODEL}-${SUFFIX}" -echo "Hostname: $HOSTNAME" +# DĂ©tection du type de systĂšme +detect_system() { + if [ -f /.dockerenv ]; then + echo "docker" + elif grep -q "docker\|lxc\|container" /proc/1/cgroup 2>/dev/null; then + echo "container" + elif [ -f /sys/class/dmi/id/product_name ]; then + echo "physical" + else + echo "unknown" + fi +} -# Tailscale +# GĂ©nĂ©ration du hostname +generate_hostname() { + local SYSTEM_TYPE=$(detect_system) + local MODEL + local SUFFIX + + case "$SYSTEM_TYPE" in + docker|container) + # Pour les conteneurs, utiliser le hostname du host ou gĂ©nĂ©rer + if [ -f /etc/hostname ]; then + MODEL=$(cat /etc/hostname | tr '[:upper:]' '[:lower:]' | tr -d ' ' | cut -c1-15) + else + MODEL="container" + fi + SUFFIX=$(head -c 4 /dev/urandom | xxd -p 2>/dev/null || echo "$(date +%s | tail -c 4)") + echo "kawa-${MODEL}-${SUFFIX}" + ;; + physical) + # Pour les machines physiques + MODEL=$(cat /sys/class/dmi/id/product_name 2>/dev/null | tr '[:upper:]' '[:lower:]' | tr -d ' ' | cut -c1-15 || echo "node") + SUFFIX=$(head -c 4 /dev/urandom | xxd -p 2>/dev/null || echo "$(date +%s | tail -c 4)") + echo "kawa-${MODEL}-${SUFFIX}" + ;; + *) + SUFFIX=$(head -c 4 /dev/urandom | xxd -p 2>/dev/null || echo "$(date +%s | tail -c 4)") + echo "kawa-node-${SUFFIX}" + ;; + esac +} + +# VĂ©rifier si dĂ©jĂ  connectĂ© +check_existing() { + if command -v tailscale &> /dev/null && tailscale status &>/dev/null; then + local CURRENT_IP=$(tailscale ip 2>/dev/null || echo "") + if [ -n "$CURRENT_IP" ]; then + echo "⚠ Ce nƓud est dĂ©jĂ  connectĂ© au mesh: $CURRENT_IP" + echo " Hostname actuel: $(tailscale status | head -1 | awk '{print $2}')" + echo "" + read -p "Voulez-vous le reconnecter avec un nouveau nom? (y/N): " confirm + if [[ ! "$confirm" =~ ^[Yy]$ ]]; then + echo "Connexion annulĂ©e." + exit 0 + fi + echo "Reconnexion avec un nouveau hostname..." + fi + fi +} + +# Programme principal +echo "DĂ©tection du systĂšme..." +SYSTEM_TYPE=$(detect_system) +echo "Type dĂ©tectĂ©: $SYSTEM_TYPE" + +HOSTNAME=$(generate_hostname) +echo "Hostname: $HOSTNAME" +echo "" + +# VĂ©rifier connexion existante +check_existing + +# Installer Tailscale si nĂ©cessaire if ! command -v tailscale &> /dev/null; then echo "Installation de Tailscale..." curl -fsSL https://tailscale.com/install.sh | sh fi +# DĂ©marrer tailscaled +echo "DĂ©marrage de tailscaled..." tailscaled 2>/dev/null & sleep 3 -# Mesh -echo "Connexion au mesh..." -if tailscale up --login-server="$HEADSCALE_URL" --authkey="$HEADSCALE_AUTHKEY" --hostname="$HOSTNAME" 2>/dev/null; then +# Connexion au mesh +echo "Connexion au mesh KAWA..." + +# DĂ©connexion prĂ©alable si existante +tailscale down 2>/dev/null || true +sleep 1 + +# Tentative de connexion +if tailscale up --login-server="$HEADSCALE_URL" --authkey="$HEADSCALE_AUTHKEY" --hostname="$HOSTNAME" --force-reauth 2>/dev/null; then echo "✓ ConnectĂ© via $HEADSCALE_URL" -elif tailscale up --login-server="$HEADSIZE_FALLBACK" --authkey="$HEADSCALE_AUTHKEY" --hostname="$HOSTNAME" 2>/dev/null; then +elif tailscale up --login-server="$HEADSCALE_FALLBACK" --authkey="$HEADSCALE_AUTHKEY" --hostname="$HOSTNAME" --force-reauth 2>/dev/null; then echo "✓ ConnectĂ© via $HEADSCALE_FALLBACK" else echo "✗ Échec de connexion" + echo "" + echo "VĂ©rifiez:" + echo " - La connexion rĂ©seau" + echo " - Le serveur Headscale est accessible" + echo " - L'authkey est valide" exit 1 fi sleep 2 + +# Afficher les infos echo "" echo "🜄 NƓud KAWA configurĂ©!" -echo "IP: $(tailscale ip 2>/dev/null || echo 'en attente...')" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" +echo "Hostname: $HOSTNAME" +echo "IP Mesh: $(tailscale ip 2>/dev/null || echo 'en attente...')" +echo "IPv6: $(tailscale ip -6 2>/dev/null || echo 'en attente...')" +echo "" +echo "Commandes utiles:" +echo " tailscale status # Voir le mesh" +echo " tailscale ip # Voir l'IP" +echo " tailscale ping NODE # Ping un nƓud" +echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" \ No newline at end of file