Improve hostname detection: Docker, containers, physical machines

This commit is contained in:
kawa
2026-03-14 16:41:13 +01:00
parent f19fd947b4
commit 18a602aa60

117
setup
View File

@@ -1,43 +1,134 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# KAWA OS - Installation automatique # 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 set -e
HEADSCALE_URL="https://headscale.du-senegal.com" HEADSCALE_URL="https://headscale.du-senegal.com"
HEADSIZE_FALLBACK="http://141.94.23.212" HEADSCALE_FALLBACK="http://141.94.23.212"
HEADSCALE_AUTHKEY="f43f36ef159b3df799eb316b81bdac1b415c7cc2add174d0" HEADSCALE_AUTHKEY="f43f36ef159b3df799eb316b81bdac1b415c7cc2add174d0"
echo "🜄 KAWA OS - Installation" echo "🜄 KAWA OS - Installation"
echo "" echo ""
# Hostname # Détection du type de système
MODEL=$(cat /sys/class/dmi/id/product_name 2>/dev/null | tr '[:upper:]' '[:lower:]' | tr -d ' ' | cut -c1-15 || echo "node") detect_system() {
SUFFIX=$(head -c 4 /dev/urandom | xxd -p 2>/dev/null || echo "0000") if [ -f /.dockerenv ]; then
HOSTNAME="kawa-${MODEL}-${SUFFIX}" echo "docker"
echo "Hostname: $HOSTNAME" 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 if ! command -v tailscale &> /dev/null; then
echo "Installation de Tailscale..." echo "Installation de Tailscale..."
curl -fsSL https://tailscale.com/install.sh | sh curl -fsSL https://tailscale.com/install.sh | sh
fi fi
# Démarrer tailscaled
echo "Démarrage de tailscaled..."
tailscaled 2>/dev/null & tailscaled 2>/dev/null &
sleep 3 sleep 3
# Mesh # Connexion au mesh
echo "Connexion au mesh..." echo "Connexion au mesh KAWA..."
if tailscale up --login-server="$HEADSCALE_URL" --authkey="$HEADSCALE_AUTHKEY" --hostname="$HOSTNAME" 2>/dev/null; then
# 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" 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" echo "✓ Connecté via $HEADSCALE_FALLBACK"
else else
echo "✗ Échec de connexion" 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 exit 1
fi fi
sleep 2 sleep 2
# Afficher les infos
echo "" echo ""
echo "🜄 Nœud KAWA configuré!" 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 "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"