Improve hostname detection: Docker, containers, physical machines
This commit is contained in:
117
setup
117
setup
@@ -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 "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||||
Reference in New Issue
Block a user