chore: Änderungen commited

This commit is contained in:
2025-06-16 09:00:44 +02:00
parent 18126335ac
commit 0e5b66f4fe
5 changed files with 1642 additions and 10 deletions

View File

@ -0,0 +1,480 @@
#!/bin/bash
#######################################################################
# MYP AIO-Installer - Enhanced Network Check Module
#
# Verbesserte Internet-Verbindungsprüfung für VM-Kompatibilität
#
# Funktionen:
# - Mehrstufige Netzwerk-Checks
# - VM-spezifische Timeouts
# - DNS-Resolution-Validation
# - Corporate-Proxy-Unterstützung
# - Detaillierte Fehlerdiagnose
#######################################################################
# Erweiterte Internet-Verbindungsprüfung (VM-kompatibel)
check_internet_connection_enhanced() {
log "INFO" "=== ERWEITERTE INTERNET-VERBINDUNGSPRÜFUNG ==="
local connection_available=false
local check_errors=()
# Schritt 1: Netzwerk-Interface-Check
log "INFO" "Schritt 1: Prüfe Netzwerk-Interfaces..."
if check_network_interfaces; then
log "INFO" "✓ Netzwerk-Interfaces aktiv"
else
check_errors+=("Keine aktiven Netzwerk-Interfaces")
fi
# Schritt 2: DNS-Resolution-Check
log "INFO" "Schritt 2: Prüfe DNS-Auflösung..."
if check_dns_resolution; then
log "INFO" "✓ DNS-Auflösung funktioniert"
else
check_errors+=("DNS-Auflösung fehlgeschlagen")
fi
# Schritt 3: Gateway-Erreichbarkeit
log "INFO" "Schritt 3: Prüfe Gateway-Erreichbarkeit..."
if check_gateway_reachability; then
log "INFO" "✓ Gateway erreichbar"
else
check_errors+=("Gateway nicht erreichbar")
fi
# Schritt 4: Externe Konnektivität (mehrere Methoden)
log "INFO" "Schritt 4: Prüfe externe Konnektivität..."
if check_external_connectivity; then
log "INFO" "✓ Externe Konnektivität verfügbar"
connection_available=true
else
check_errors+=("Externe Konnektivität fehlgeschlagen")
fi
# Schritt 5: Corporate-Proxy-Check (falls Standard-Check fehlschlägt)
if [[ "$connection_available" == "false" ]]; then
log "INFO" "Schritt 5: Prüfe Corporate-Proxy-Konnektivität..."
if check_corporate_proxy; then
log "INFO" "✓ Corporate-Proxy-Konnektivität verfügbar"
connection_available=true
else
check_errors+=("Corporate-Proxy-Konnektivität fehlgeschlagen")
fi
fi
# Ergebnis-Auswertung
if [[ "$connection_available" == "true" ]]; then
log "INFO" "✅ Internet-Verbindung erfolgreich validiert"
return 0
else
log "ERROR" "❌ Internet-Verbindung nicht verfügbar"
log "ERROR" "Gefundene Probleme:"
for error in "${check_errors[@]}"; do
log "ERROR" " - $error"
done
# Detaillierte Diagnose-Informationen
show_network_diagnostics
# Benutzer-Option: Trotzdem fortfahren?
if [[ "${FORCE_YES:-}" != "true" ]]; then
if confirm_action "Internet-Verbindung problematisch. Trotzdem fortfahren? (Nicht empfohlen)"; then
log "WARN" "⚠️ Installation trotz Netzwerk-Problemen fortgesetzt"
return 0
fi
fi
return 1
fi
}
# Netzwerk-Interface-Check
check_network_interfaces() {
local active_interfaces=$(ip link show | grep -E "state UP|LOWER_UP" | wc -l)
if [[ $active_interfaces -gt 0 ]]; then
log "INFO" "Aktive Netzwerk-Interfaces: $active_interfaces"
# Interface-Details loggen
ip link show | grep -E "state UP|LOWER_UP" | while read line; do
log "DEBUG" "Interface: $line"
done
return 0
else
log "ERROR" "Keine aktiven Netzwerk-Interfaces gefunden"
return 1
fi
}
# DNS-Resolution-Check mit mehreren Servern
check_dns_resolution() {
local dns_servers=(
"8.8.8.8" # Google DNS
"1.1.1.1" # Cloudflare DNS
"9.9.9.9" # Quad9 DNS
"208.67.222.222" # OpenDNS
)
local test_domains=(
"google.com"
"cloudflare.com"
"github.com"
)
# Teste DNS-Server-Erreichbarkeit
for dns_server in "${dns_servers[@]}"; do
log "INFO" "Teste DNS-Server: $dns_server"
# Ping mit VM-freundlichem Timeout
if timeout 10 ping -c 2 -W 3 "$dns_server" &>/dev/null; then
log "INFO" "✓ DNS-Server $dns_server erreichbar"
# Teste Domain-Auflösung
for domain in "${test_domains[@]}"; do
if timeout 10 nslookup "$domain" "$dns_server" &>/dev/null; then
log "INFO" "✓ DNS-Auflösung für $domain erfolgreich"
return 0
fi
done
else
log "WARN" "DNS-Server $dns_server nicht erreichbar"
fi
done
log "ERROR" "Alle DNS-Server-Tests fehlgeschlagen"
return 1
}
# Gateway-Erreichbarkeit prüfen
check_gateway_reachability() {
local gateway=$(ip route show default | awk '/default/ {print $3}' | head -1)
if [[ -n "$gateway" ]]; then
log "INFO" "Default Gateway: $gateway"
# Gateway-Ping mit VM-Timeout
if timeout 15 ping -c 3 -W 5 "$gateway" &>/dev/null; then
log "INFO" "✓ Gateway $gateway erreichbar"
return 0
else
log "ERROR" "Gateway $gateway nicht erreichbar"
return 1
fi
else
log "ERROR" "Kein Default Gateway gefunden"
return 1
fi
}
# Externe Konnektivität mit mehreren Methoden
check_external_connectivity() {
local test_methods=(
"ping_test"
"curl_test"
"wget_test"
"nc_test"
)
for method in "${test_methods[@]}"; do
log "INFO" "Teste externe Konnektivität mit: $method"
if $method; then
log "INFO" "✓ Externe Konnektivität via $method erfolgreich"
return 0
else
log "WARN" "Externe Konnektivität via $method fehlgeschlagen"
fi
done
log "ERROR" "Alle Konnektivitäts-Tests fehlgeschlagen"
return 1
}
# Ping-Test mit VM-optimierten Parametern
ping_test() {
local test_hosts=(
"8.8.8.8" # Google DNS
"1.1.1.1" # Cloudflare DNS
"9.9.9.9" # Quad9 DNS
)
for host in "${test_hosts[@]}"; do
# VM-freundliche Ping-Parameter:
# -c 3: 3 Pakete (mehr Zuverlässigkeit)
# -W 5: 5 Sekunden Timeout pro Paket
# -i 2: 2 Sekunden Intervall zwischen Paketen
if timeout 20 ping -c 3 -W 5 -i 2 "$host" &>/dev/null; then
log "INFO" "✓ Ping zu $host erfolgreich"
return 0
fi
done
return 1
}
# curl-Test mit erweiterten Timeouts
curl_test() {
if ! command -v curl &>/dev/null; then
log "WARN" "curl nicht verfügbar"
return 1
fi
local test_urls=(
"http://connectivitycheck.gstatic.com/generate_204" # Google Connectivity Check
"http://www.gstatic.com/generate_204" # Google Alternative
"http://captive.apple.com/hotspot-detect.html" # Apple Connectivity Check
"http://clients3.google.com/generate_204" # Google Client Check
)
for url in "${test_urls[@]}"; do
# VM-freundliche curl-Parameter:
# --connect-timeout 15: 15 Sekunden Verbindungs-Timeout
# --max-time 30: 30 Sekunden Gesamt-Timeout
# --retry 2: 2 Wiederholungen
# --retry-delay 3: 3 Sekunden Pause zwischen Wiederholungen
if curl -s -f --connect-timeout 15 --max-time 30 --retry 2 --retry-delay 3 "$url" &>/dev/null; then
log "INFO" "✓ curl zu $url erfolgreich"
return 0
fi
done
return 1
}
# wget-Test als Alternative
wget_test() {
if ! command -v wget &>/dev/null; then
log "WARN" "wget nicht verfügbar"
return 1
fi
# wget mit VM-Timeouts
if timeout 30 wget --quiet --spider --timeout=15 --tries=2 "http://www.google.com" &>/dev/null; then
log "INFO" "✓ wget-Test erfolgreich"
return 0
fi
return 1
}
# nc (netcat) Test für Port-Konnektivität
nc_test() {
if ! command -v nc &>/dev/null; then
log "WARN" "netcat nicht verfügbar"
return 1
fi
local test_endpoints=(
"8.8.8.8 53" # Google DNS
"1.1.1.1 53" # Cloudflare DNS
"google.com 80" # HTTP
"google.com 443" # HTTPS
)
for endpoint in "${test_endpoints[@]}"; do
local host=$(echo $endpoint | awk '{print $1}')
local port=$(echo $endpoint | awk '{print $2}')
if timeout 10 nc -z -w 5 "$host" "$port" &>/dev/null; then
log "INFO" "✓ netcat zu $host:$port erfolgreich"
return 0
fi
done
return 1
}
# Corporate-Proxy-Check für Mercedes-Umgebung
check_corporate_proxy() {
log "INFO" "Prüfe Corporate-Proxy-Konnektivität..."
# Prüfe auf Proxy-Umgebungsvariablen
local proxy_vars=(
"$http_proxy"
"$https_proxy"
"$HTTP_PROXY"
"$HTTPS_PROXY"
)
for proxy in "${proxy_vars[@]}"; do
if [[ -n "$proxy" ]]; then
log "INFO" "Proxy gefunden: $proxy"
# Teste Proxy-Konnektivität
if test_proxy_connectivity "$proxy"; then
log "INFO" "✓ Proxy-Konnektivität erfolgreich"
return 0
fi
fi
done
# Teste bekannte Corporate-Domains
local corporate_domains=(
"mercedes-benz.com"
"daimler.com"
"corpintra.net"
)
for domain in "${corporate_domains[@]}"; do
if timeout 15 curl -s --connect-timeout 10 --max-time 20 "https://$domain" &>/dev/null; then
log "INFO" "✓ Corporate-Domain $domain erreichbar"
return 0
fi
done
log "WARN" "Corporate-Proxy-Konnektivität nicht verfügbar"
return 1
}
# Proxy-Konnektivität testen
test_proxy_connectivity() {
local proxy="$1"
if [[ -z "$proxy" ]]; then
return 1
fi
# Teste Proxy mit curl
if curl -s --proxy "$proxy" --connect-timeout 10 --max-time 15 "http://www.google.com" &>/dev/null; then
return 0
fi
return 1
}
# Detaillierte Netzwerk-Diagnose anzeigen
show_network_diagnostics() {
log "INFO" "=== NETZWERK-DIAGNOSE ==="
# IP-Konfiguration
log "INFO" "IP-Konfiguration:"
ip addr show | grep -E "(inet |state UP)" | head -10 | while read line; do
log "INFO" " $line"
done
# Routing-Tabelle
log "INFO" "Routing-Tabelle:"
ip route show | head -5 | while read line; do
log "INFO" " $line"
done
# DNS-Konfiguration
log "INFO" "DNS-Konfiguration:"
if [[ -f /etc/resolv.conf ]]; then
grep nameserver /etc/resolv.conf | head -3 | while read line; do
log "INFO" " $line"
done
fi
# Proxy-Einstellungen
log "INFO" "Proxy-Einstellungen:"
for var in http_proxy https_proxy HTTP_PROXY HTTPS_PROXY; do
if [[ -n "${!var}" ]]; then
log "INFO" " $var=${!var}"
fi
done
# Aktive Verbindungen
log "INFO" "Aktive Netzwerk-Verbindungen:"
ss -tuln | head -10 | while read line; do
log "INFO" " $line"
done
# VM-Detection
detect_vm_environment
}
# VM-Umgebung erkennen
detect_vm_environment() {
log "INFO" "=== VM-UMGEBUNG-ERKENNUNG ==="
# Hypervisor-Detection
if command -v systemd-detect-virt &>/dev/null; then
local virt_type=$(systemd-detect-virt)
if [[ "$virt_type" != "none" ]]; then
log "INFO" "VM-Umgebung erkannt: $virt_type"
# VM-spezifische Empfehlungen
case "$virt_type" in
"vmware")
log "INFO" "VMware-Empfehlung: Prüfe NAT/Bridge-Modus"
;;
"virtualbox")
log "INFO" "VirtualBox-Empfehlung: Aktiviere Host-Only-Adapter"
;;
"kvm"|"qemu")
log "INFO" "KVM/QEMU-Empfehlung: Prüfe virtio-Netzwerk-Driver"
;;
"hyper-v")
log "INFO" "Hyper-V-Empfehlung: Prüfe Integration Services"
;;
esac
else
log "INFO" "Physisches System erkannt"
fi
fi
# DMI-basierte Detection
if [[ -f /sys/class/dmi/id/product_name ]]; then
local product_name=$(cat /sys/class/dmi/id/product_name 2>/dev/null)
if [[ "$product_name" =~ (VMware|VirtualBox|KVM|QEMU) ]]; then
log "INFO" "VM via DMI erkannt: $product_name"
fi
fi
}
# Internet-Check-Bypass für Offline-Installation
enable_offline_mode() {
log "WARN" "=== OFFLINE-MODUS AKTIVIERT ==="
log "WARN" "Internet-Checks werden übersprungen"
log "WARN" "Manche Features können eingeschränkt sein"
export MYP_OFFLINE_MODE="true"
# Erstelle Marker-Datei
echo "OFFLINE_MODE_ENABLED=$(date)" > "/tmp/myp-offline-mode"
}
# Check-Funktion für Offline-Modus
is_offline_mode() {
[[ "$MYP_OFFLINE_MODE" == "true" ]] || [[ -f "/tmp/myp-offline-mode" ]]
}
# Hauptfunktion: Ersetzt den ursprünglichen Internet-Check
check_system_enhanced() {
log "INFO" "Überprüfe Systemvoraussetzungen (erweitert)..."
# Debian/Ubuntu Check
if ! command -v apt &> /dev/null; then
log "ERROR" "Dieses System wird nicht unterstützt (kein APT Package Manager)"
exit 1
fi
# Internet-Verbindung (erweitert)
if ! check_internet_connection_enhanced; then
if [[ "${FORCE_OFFLINE:-}" == "true" ]]; then
enable_offline_mode
log "WARN" "Offline-Modus erzwungen"
else
log "ERROR" "Internet-Verbindung erforderlich für Installation"
log "INFO" "Hinweise zur Fehlerbehebung:"
log "INFO" " 1. Prüfe VM-Netzwerk-Einstellungen (NAT/Bridge)"
log "INFO" " 2. Warte 1-2 Minuten nach VM-Start"
log "INFO" " 3. Prüfe Host-Firewall/Proxy-Einstellungen"
log "INFO" " 4. Verwende --force-offline für Offline-Installation"
exit 1
fi
fi
# Speicherplatz (mindestens 2GB frei)
local free_space=$(df / | awk 'NR==2 {print $4}')
if [[ $free_space -lt 2097152 ]]; then
log "ERROR" "Nicht genügend Speicherplatz (mindestens 2GB erforderlich)"
exit 1
fi
log "INFO" "Systemvoraussetzungen erfüllt"
}