chore: Änderungen commited
This commit is contained in:
@ -81,11 +81,8 @@ check_system() {
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Internetverbindung
|
||||
if ! ping -c 1 8.8.8.8 &> /dev/null; then
|
||||
log "ERROR" "Keine Internetverbindung verfügbar"
|
||||
exit 1
|
||||
fi
|
||||
# Internet-Verbindung (VM-kompatibel)
|
||||
check_internet_connection_vm_compatible
|
||||
|
||||
# Speicherplatz (mindestens 2GB frei)
|
||||
local free_space=$(df / | awk 'NR==2 {print $4}')
|
||||
@ -97,6 +94,240 @@ check_system() {
|
||||
log "INFO" "Systemvoraussetzungen erfüllt"
|
||||
}
|
||||
|
||||
# VM-kompatible Internet-Verbindungsprüfung
|
||||
check_internet_connection_vm_compatible() {
|
||||
# Skip-Optionen prüfen
|
||||
if [[ "${SKIP_INTERNET_CHECK:-}" == "true" ]]; then
|
||||
log "WARN" "⚠️ Internet-Check übersprungen (--skip-internet-check)"
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [[ "${FORCE_OFFLINE:-}" == "true" ]]; then
|
||||
log "WARN" "⚠️ Offline-Modus erzwungen (--force-offline)"
|
||||
return 0
|
||||
fi
|
||||
|
||||
log "INFO" "Prüfe Internet-Verbindung (VM-kompatibel)..."
|
||||
|
||||
local connection_available=false
|
||||
local timeout_seconds=45 # Längerer Standard-Timeout
|
||||
local start_time=$(date +%s)
|
||||
|
||||
# VM-Umgebung erkennen
|
||||
local is_vm=false
|
||||
if command -v systemd-detect-virt &>/dev/null; then
|
||||
local virt_type=$(systemd-detect-virt)
|
||||
if [[ "$virt_type" != "none" ]]; then
|
||||
is_vm=true
|
||||
log "INFO" "VM-Umgebung erkannt: $virt_type"
|
||||
timeout_seconds=120 # Deutlich längerer Timeout für VMs
|
||||
fi
|
||||
fi
|
||||
|
||||
# VM-Mode Option berücksichtigen
|
||||
if [[ "${VM_MODE:-}" == "true" ]]; then
|
||||
is_vm=true
|
||||
timeout_seconds=120 # 2 Minuten für VM-Modus
|
||||
log "INFO" "VM-Modus manuell aktiviert (--vm-mode)"
|
||||
fi
|
||||
|
||||
# Mehrere Test-Methoden mit VM-freundlichen Timeouts
|
||||
local test_methods=(
|
||||
"ping_multiple_hosts"
|
||||
"curl_connectivity_check"
|
||||
"dns_resolution_test"
|
||||
"gateway_ping_test"
|
||||
)
|
||||
|
||||
for method in "${test_methods[@]}"; do
|
||||
local current_time=$(date +%s)
|
||||
local elapsed=$((current_time - start_time))
|
||||
|
||||
if [[ $elapsed -gt $timeout_seconds ]]; then
|
||||
log "WARN" "Internet-Check Timeout erreicht (${timeout_seconds}s)"
|
||||
break
|
||||
fi
|
||||
|
||||
log "INFO" "Teste Methode: $method"
|
||||
|
||||
if $method "$is_vm"; then
|
||||
log "INFO" "✓ Internet-Verbindung via $method erfolgreich"
|
||||
connection_available=true
|
||||
break
|
||||
else
|
||||
log "WARN" "Methode $method fehlgeschlagen"
|
||||
sleep 2 # Kurze Pause zwischen Tests
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ "$connection_available" == "true" ]]; then
|
||||
log "INFO" "✅ Internet-Verbindung verfügbar"
|
||||
return 0
|
||||
else
|
||||
log "ERROR" "❌ Keine Internet-Verbindung verfügbar"
|
||||
|
||||
# Zusätzliche Diagnose-Informationen
|
||||
show_network_diagnostics_brief
|
||||
|
||||
# Benutzer-Option in VMs
|
||||
if [[ "$is_vm" == "true" ]] && [[ "${FORCE_YES:-}" != "true" ]]; then
|
||||
log "WARN" "In VM-Umgebungen können Netzwerk-Checks fehlschlagen"
|
||||
log "INFO" "Mögliche Lösungen:"
|
||||
log "INFO" " 1. Warte 1-2 Minuten nach VM-Start"
|
||||
log "INFO" " 2. Prüfe VM-Netzwerk-Einstellungen (NAT/Bridge)"
|
||||
log "INFO" " 3. Teste Internet-Zugang im Browser"
|
||||
|
||||
if confirm_action "Trotz Netzwerk-Problemen fortfahren? (Nicht empfohlen)"; then
|
||||
log "WARN" "⚠️ Installation trotz Netzwerk-Problemen fortgesetzt"
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Ping mit mehreren Hosts und VM-Timeouts
|
||||
ping_multiple_hosts() {
|
||||
local is_vm="$1"
|
||||
local timeout_per_host=5
|
||||
local packet_count=2
|
||||
|
||||
if [[ "$is_vm" == "true" ]]; then
|
||||
timeout_per_host=15 # Längerer Timeout für VMs
|
||||
packet_count=4 # Mehr Ping-Pakete
|
||||
fi
|
||||
|
||||
local hosts=(
|
||||
"8.8.8.8" # Google DNS
|
||||
"1.1.1.1" # Cloudflare DNS
|
||||
"9.9.9.9" # Quad9 DNS
|
||||
"208.67.222.222" # OpenDNS
|
||||
)
|
||||
|
||||
for host in "${hosts[@]}"; do
|
||||
log "DEBUG" "Ping zu $host (Timeout: ${timeout_per_host}s, Pakete: $packet_count)"
|
||||
|
||||
if timeout $((timeout_per_host + 5)) ping -c $packet_count -W $timeout_per_host "$host" &>/dev/null; then
|
||||
log "INFO" "✓ Ping zu $host erfolgreich"
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
# curl Konnektivitäts-Check mit mehreren URLs
|
||||
curl_connectivity_check() {
|
||||
local is_vm="$1"
|
||||
local connect_timeout=10
|
||||
local max_time=15
|
||||
|
||||
if [[ "$is_vm" == "true" ]]; then
|
||||
connect_timeout=30 # Längerer Verbindungs-Timeout
|
||||
max_time=45 # Längere Gesamtzeit
|
||||
fi
|
||||
|
||||
if ! command -v curl &>/dev/null; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
local urls=(
|
||||
"http://connectivitycheck.gstatic.com/generate_204"
|
||||
"http://www.gstatic.com/generate_204"
|
||||
"http://clients3.google.com/generate_204"
|
||||
)
|
||||
|
||||
for url in "${urls[@]}"; do
|
||||
log "DEBUG" "curl zu $url (Timeout: ${connect_timeout}s/${max_time}s)"
|
||||
|
||||
if curl -s -f --connect-timeout $connect_timeout --max-time $max_time "$url" &>/dev/null; then
|
||||
log "INFO" "✓ curl zu $url erfolgreich"
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
# DNS-Resolution-Test
|
||||
dns_resolution_test() {
|
||||
local is_vm="$1"
|
||||
local timeout=10
|
||||
|
||||
if [[ "$is_vm" == "true" ]]; then
|
||||
timeout=20
|
||||
fi
|
||||
|
||||
local domains=("google.com" "cloudflare.com" "github.com")
|
||||
|
||||
for domain in "${domains[@]}"; do
|
||||
log "DEBUG" "DNS-Test für $domain (Timeout: ${timeout}s)"
|
||||
|
||||
if timeout $timeout nslookup "$domain" &>/dev/null; then
|
||||
log "INFO" "✓ DNS-Auflösung für $domain erfolgreich"
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
# Gateway-Ping-Test
|
||||
gateway_ping_test() {
|
||||
local is_vm="$1"
|
||||
local gateway=$(ip route show default | awk '/default/ {print $3}' | head -1)
|
||||
|
||||
if [[ -z "$gateway" ]]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
local timeout=5
|
||||
if [[ "$is_vm" == "true" ]]; then
|
||||
timeout=10
|
||||
fi
|
||||
|
||||
log "DEBUG" "Gateway-Ping zu $gateway (Timeout: ${timeout}s)"
|
||||
|
||||
if timeout $((timeout + 5)) ping -c 2 -W $timeout "$gateway" &>/dev/null; then
|
||||
log "INFO" "✓ Gateway $gateway erreichbar"
|
||||
return 0
|
||||
fi
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
# Kurze Netzwerk-Diagnose
|
||||
show_network_diagnostics_brief() {
|
||||
log "INFO" "=== NETZWERK-DIAGNOSE ==="
|
||||
|
||||
# Aktive Interfaces
|
||||
local interfaces=$(ip link show | grep -c "state UP")
|
||||
log "INFO" "Aktive Netzwerk-Interfaces: $interfaces"
|
||||
|
||||
# Default Gateway
|
||||
local gateway=$(ip route show default | awk '/default/ {print $3}' | head -1)
|
||||
if [[ -n "$gateway" ]]; then
|
||||
log "INFO" "Default Gateway: $gateway"
|
||||
else
|
||||
log "WARN" "Kein Default Gateway konfiguriert"
|
||||
fi
|
||||
|
||||
# DNS-Server
|
||||
if [[ -f /etc/resolv.conf ]]; then
|
||||
local dns_count=$(grep -c nameserver /etc/resolv.conf)
|
||||
log "INFO" "Konfigurierte DNS-Server: $dns_count"
|
||||
fi
|
||||
|
||||
# VM-Detection
|
||||
if command -v systemd-detect-virt &>/dev/null; then
|
||||
local virt_type=$(systemd-detect-virt)
|
||||
if [[ "$virt_type" != "none" ]]; then
|
||||
log "INFO" "Virtualisierung: $virt_type"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
confirm_action() {
|
||||
local message="$1"
|
||||
local default="${2:-n}"
|
||||
@ -418,16 +649,42 @@ while [[ $# -gt 0 ]]; do
|
||||
uninstall_system
|
||||
exit $?
|
||||
;;
|
||||
--skip-internet-check)
|
||||
log "WARN" "Internet-Check wird übersprungen"
|
||||
export SKIP_INTERNET_CHECK="true"
|
||||
;;
|
||||
--vm-mode)
|
||||
log "INFO" "VM-Modus aktiviert (erweiterte Timeouts)"
|
||||
export VM_MODE="true"
|
||||
;;
|
||||
--force-offline)
|
||||
log "WARN" "Offline-Modus erzwungen"
|
||||
export FORCE_OFFLINE="true"
|
||||
;;
|
||||
--network-debug)
|
||||
log "INFO" "Netzwerk-Debug-Modus aktiviert"
|
||||
export NETWORK_DEBUG="true"
|
||||
;;
|
||||
--help|-h)
|
||||
echo "MYP AIO-Installer"
|
||||
echo "Verwendung: $0 [OPTION]"
|
||||
echo
|
||||
echo "Optionen:"
|
||||
echo " --full Vollinstallation ohne Bestätigung"
|
||||
echo " --upgrade Upgrade bestehender Installation"
|
||||
echo " --test Nur Tests durchführen"
|
||||
echo " --uninstall System deinstallieren"
|
||||
echo " --help, -h Diese Hilfe anzeigen"
|
||||
echo " --full Vollinstallation ohne Bestätigung"
|
||||
echo " --upgrade Upgrade bestehender Installation"
|
||||
echo " --test Nur Tests durchführen"
|
||||
echo " --uninstall System deinstallieren"
|
||||
echo " --skip-internet-check Internet-Verbindungsprüfung überspringen"
|
||||
echo " --vm-mode VM-Modus (erweiterte Timeouts)"
|
||||
echo " --force-offline Offline-Installation erzwingen"
|
||||
echo " --network-debug Detaillierte Netzwerk-Diagnose"
|
||||
echo " --help, -h Diese Hilfe anzeigen"
|
||||
echo
|
||||
echo "VM-spezifische Optionen:"
|
||||
echo " Für VMs empfohlene Verwendung:"
|
||||
echo " $0 --vm-mode --full"
|
||||
echo " $0 --force-offline --full (bei Netzwerk-Problemen)"
|
||||
echo
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
|
480
backend/setup/modules/enhanced_network_check.sh
Normal file
480
backend/setup/modules/enhanced_network_check.sh
Normal 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"
|
||||
}
|
182
backend/setup/vm-internet-check.sh
Normal file
182
backend/setup/vm-internet-check.sh
Normal file
@ -0,0 +1,182 @@
|
||||
#!/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"
|
Reference in New Issue
Block a user