Files
Projektarbeit-MYP/backend/setup/vm-internet-check.sh

182 lines
5.3 KiB
Bash

#!/bin/bash
#######################################################################
# VM Internet-Verbindung Diagnose und Reparatur
#
# Speziell für virtuelle Maschinen mit Internet-Verbindungsproblemen
# im MYP AIO-Installer
#######################################################################
set -euo pipefail
# Farben für Ausgabe
readonly RED='\033[0;31m'
readonly GREEN='\033[0;32m'
readonly YELLOW='\033[1;33m'
readonly BLUE='\033[0;34m'
readonly NC='\033[0m' # No Color
log() {
local level="$1"
shift
local message="$*"
case "$level" in
"INFO") echo -e "${GREEN}[INFO]${NC} $message" ;;
"WARN") echo -e "${YELLOW}[WARN]${NC} $message" ;;
"ERROR") echo -e "${RED}[ERROR]${NC} $message" ;;
"DEBUG") echo -e "${BLUE}[DEBUG]${NC} $message" ;;
esac
}
echo "🔍 MYP VM Internet-Verbindung Diagnose"
echo "======================================"
echo
# 1. VM-Umgebung prüfen
log "INFO" "Prüfe VM-Umgebung..."
if command -v systemd-detect-virt &>/dev/null; then
virt_type=$(systemd-detect-virt)
if [[ "$virt_type" != "none" ]]; then
log "INFO" "✓ VM-Umgebung erkannt: $virt_type"
else
log "WARN" "Keine VM-Umgebung erkannt (aber Script wurde manuell gestartet)"
fi
else
log "WARN" "systemd-detect-virt nicht verfügbar"
fi
# 2. Netzwerk-Interface prüfen
log "INFO" "Prüfe Netzwerk-Interfaces..."
active_interfaces=$(ip link show | grep "state UP" | wc -l)
if [[ $active_interfaces -gt 0 ]]; then
log "INFO" "$active_interfaces aktive Netzwerk-Interface(s)"
ip link show | grep "state UP" | while read line; do
interface=$(echo "$line" | awk -F: '{print $2}' | tr -d ' ')
log "DEBUG" " - Interface: $interface"
done
else
log "ERROR" "✗ Keine aktiven Netzwerk-Interfaces"
exit 1
fi
# 3. IP-Adressen prüfen
log "INFO" "Prüfe IP-Adressen..."
ip_addresses=$(hostname -I 2>/dev/null | tr ' ' '\n' | grep -v '^$' || echo "")
if [[ -n "$ip_addresses" ]]; then
log "INFO" "✓ IP-Adressen gefunden:"
echo "$ip_addresses" | while read ip; do
[[ -n "$ip" ]] && log "DEBUG" " - $ip"
done
else
log "ERROR" "✗ Keine IP-Adressen gefunden"
exit 1
fi
# 4. DNS-Konfiguration prüfen
log "INFO" "Prüfe DNS-Konfiguration..."
if [[ -f "/etc/resolv.conf" ]]; then
dns_servers=$(grep "^nameserver" /etc/resolv.conf | awk '{print $2}' | head -3)
if [[ -n "$dns_servers" ]]; then
log "INFO" "✓ DNS-Server konfiguriert:"
echo "$dns_servers" | while read dns; do
log "DEBUG" " - $dns"
done
else
log "WARN" "Keine DNS-Server in /etc/resolv.conf gefunden"
fi
else
log "WARN" "/etc/resolv.conf nicht gefunden"
fi
# 5. Gateway prüfen
log "INFO" "Prüfe Standard-Gateway..."
default_gateway=$(ip route | grep "^default" | awk '{print $3}' | head -1)
if [[ -n "$default_gateway" ]]; then
log "INFO" "✓ Standard-Gateway: $default_gateway"
# Gateway-Ping testen
if ping -c 2 -W 10 "$default_gateway" &>/dev/null; then
log "INFO" "✓ Gateway erreichbar"
else
log "ERROR" "✗ Gateway nicht erreichbar"
fi
else
log "ERROR" "✗ Kein Standard-Gateway gefunden"
fi
# 6. Internet-Konnektivität testen (erweitert)
log "INFO" "Teste Internet-Konnektivität (VM-optimiert)..."
test_hosts=(
"8.8.8.8:Google DNS"
"1.1.1.1:Cloudflare DNS"
"9.9.9.9:Quad9 DNS"
"208.67.222.222:OpenDNS"
)
internet_working=false
for host_info in "${test_hosts[@]}"; do
host=$(echo "$host_info" | cut -d: -f1)
name=$(echo "$host_info" | cut -d: -f2)
log "DEBUG" "Teste $name ($host)..."
if timeout 20 ping -c 3 -W 10 "$host" &>/dev/null; then
log "INFO" "✓ Internet-Verbindung über $name erfolgreich"
internet_working=true
break
else
log "WARN" "$name nicht erreichbar"
fi
done
# 7. HTTP-Konnektivität testen
if [[ "$internet_working" == "true" ]]; then
log "INFO" "Teste HTTP-Konnektivität..."
test_urls=(
"http://connectivitycheck.gstatic.com/generate_204"
"http://www.gstatic.com/generate_204"
"http://clients3.google.com/generate_204"
)
for url in "${test_urls[@]}"; do
if timeout 30 curl -sf --connect-timeout 20 --max-time 25 "$url" &>/dev/null; then
log "INFO" "✓ HTTP-Verbindung erfolgreich zu $url"
break
else
log "WARN" "✗ HTTP-Verbindung fehlgeschlagen zu $url"
fi
done
fi
# 8. Fazit und Empfehlungen
echo
echo "🎯 DIAGNOSE-ERGEBNIS:"
echo "===================="
if [[ "$internet_working" == "true" ]]; then
log "INFO" "✅ Internet-Verbindung funktioniert!"
echo
echo "🚀 EMPFOHLENE BEFEHLE FÜR MYP-INSTALLATION:"
echo "sudo ./setup/aio_installer.sh --vm-mode --full"
echo "oder"
echo "sudo ./setup/aio_installer.sh --skip-internet-check --full"
echo
else
log "ERROR" "❌ Internet-Verbindung problematisch"
echo
echo "🔧 LÖSUNGSVORSCHLÄGE:"
echo "1. VM-Netzwerk-Einstellungen prüfen (NAT vs. Bridge)"
echo "2. VM neu starten und 2 Minuten warten"
echo "3. Host-Internet-Verbindung prüfen"
echo "4. Firewall/Proxy-Einstellungen prüfen"
echo
echo "🚀 TROTZDEM VERSUCHEN:"
echo "sudo ./setup/aio_installer.sh --force-offline --full"
echo
fi
echo "📋 WEITERE OPTIONEN:"
echo "sudo ./setup/aio_installer.sh --help"