#!/bin/bash ####################################################################### # MYP VM Network Helper - Alles-in-Einem Netzwerk-Problem-Löser # # Kombiniert alle Netzwerk-Diagnose und Problemlösungs-Tools: # - Internet-Verbindungstests # - Mercedes-Zertifikat-Installation # - VM-Optimierungen # - Erweiterte Netzwerk-Diagnose # - Automatische Problemerkennung und -behebung ####################################################################### 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 CYAN='\033[0;36m' readonly BOLD='\033[1m' readonly NC='\033[0m' # Script-Verzeichnis ermitteln SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(dirname "${SCRIPT_DIR}")" MERCEDES_CERT_DIR="$PROJECT_ROOT/certs/mercedes" # Global variables for problem tracking INTERNET_AVAILABLE=false IS_VM=false VM_TYPE="unknown" NEEDS_CERTIFICATES=false NETWORK_PERFORMANCE="unknown" log() { local level="$1" shift local message="$*" local timestamp=$(date '+%H:%M:%S') 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" ;; "SUCCESS") echo -e "${GREEN}[✅]${NC} $message" ;; "FAIL") echo -e "${RED}[❌]${NC} $message" ;; "ACTION") echo -e "${CYAN}[🚀]${NC} $message" ;; esac } show_banner() { clear cat << 'EOF' ███╗ ███╗██╗ ██╗██████╗ ██╗ ██╗███╗ ███╗ ██╗ ██╗███████╗██╗ ██████╗ ███████╗██████╗ ████╗ ████║╚██╗ ██╔╝██╔══██╗ ██║ ██║████╗ ████║ ██║ ██║██╔════╝██║ ██╔══██╗██╔════╝██╔══██╗ ██╔████╔██║ ╚████╔╝ ██████╔╝ ██║ ██║██╔████╔██║ ███████║█████╗ ██║ ██████╔╝█████╗ ██████╔╝ ██║╚██╔╝██║ ╚██╔╝ ██╔═══╝ ╚██╗ ██╔╝██║╚██╔╝██║ ██╔══██║██╔══╝ ██║ ██╔═══╝ ██╔══╝ ██╔══██╗ ██║ ╚═╝ ██║ ██║ ██║ ╚████╔╝ ██║ ╚═╝ ██║ ██║ ██║███████╗███████╗██║ ███████╗██║ ██║ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚══════╝╚══════╝╚═╝ ╚══════╝╚═╝ ╚═╝ EOF echo echo " VM Netzwerk-Problem-Löser & MYP-Installations-Helper" echo " Version 1.0.0" echo echo "====================================================================================" echo } show_menu() { echo "🛠️ VERFÜGBARE AKTIONEN:" echo echo "1) 🔍 Vollständige Netzwerk-Diagnose durchführen" echo "2) 🏢 Mercedes-Zertifikate installieren (Corporate Fix)" echo "3) 🚀 MYP Installation starten (mit optimalen Parametern)" echo "4) 🔧 Netzwerk-Probleme automatisch beheben" echo "5) 📊 System-Information anzeigen" echo "6) ⚡ Schnell-Fix für häufige VM-Probleme" echo "7) 🎯 Empfehlungen basierend auf aktueller Umgebung" echo "0) ❌ Beenden" echo } # ============================================================================ # SYSTEM DETECTION AND ANALYSIS # ============================================================================ detect_system_environment() { log "INFO" "Analysiere System-Umgebung..." # VM Detection if command -v systemd-detect-virt &>/dev/null; then VM_TYPE=$(systemd-detect-virt) if [[ "$VM_TYPE" != "none" ]]; then IS_VM=true log "INFO" "VM-Umgebung erkannt: $VM_TYPE" else log "INFO" "Physisches System erkannt" fi fi # DMI-basierte VM-Detection als Fallback if [[ "$IS_VM" == "false" ]] && [[ -f /sys/class/dmi/id/product_name ]]; then local product_name=$(cat /sys/class/dmi/id/product_name 2>/dev/null || echo "") if [[ "$product_name" =~ (VMware|VirtualBox|KVM|QEMU|Hyper-V) ]]; then IS_VM=true VM_TYPE="$product_name" log "INFO" "VM via DMI erkannt: $product_name" fi fi # Mercedes Certificate Check if [[ -d "$MERCEDES_CERT_DIR" ]]; then local cert_count=$(find "$MERCEDES_CERT_DIR" -name "*.cer" | wc -l) if [[ $cert_count -gt 0 ]]; then NEEDS_CERTIFICATES=true log "INFO" "$cert_count Mercedes-Zertifikate gefunden" fi fi } test_internet_connectivity() { log "INFO" "Teste Internet-Konnektivität..." local success_count=0 local total_tests=0 # Test-Strategien mit VM-optimierten Timeouts local timeout_base=10 if [[ "$IS_VM" == "true" ]]; then timeout_base=20 fi # 1. Ping-Tests zu verschiedenen DNS-Servern local dns_servers=("8.8.8.8" "1.1.1.1" "9.9.9.9" "208.67.222.222") for dns in "${dns_servers[@]}"; do total_tests=$((total_tests + 1)) if timeout $timeout_base ping -c 2 -W 5 "$dns" &>/dev/null; then success_count=$((success_count + 1)) log "DEBUG" "✓ DNS-Server $dns erreichbar" else log "DEBUG" "✗ DNS-Server $dns nicht erreichbar" fi done # 2. Domain-Resolution-Tests local domains=("google.com" "github.com" "cloudflare.com") for domain in "${domains[@]}"; do total_tests=$((total_tests + 1)) if timeout $((timeout_base + 5)) nslookup "$domain" &>/dev/null; then success_count=$((success_count + 1)) log "DEBUG" "✓ Domain $domain auflösbar" else log "DEBUG" "✗ Domain $domain nicht auflösbar" fi done # 3. HTTP-Konnektivitäts-Tests if command -v curl &>/dev/null; then local urls=( "http://connectivitycheck.gstatic.com/generate_204" "http://www.google.com" "http://github.com" ) for url in "${urls[@]}"; do total_tests=$((total_tests + 1)) if timeout $((timeout_base + 10)) curl -sf --connect-timeout $timeout_base --max-time $((timeout_base + 5)) "$url" &>/dev/null; then success_count=$((success_count + 1)) log "DEBUG" "✓ HTTP-Verbindung zu $url erfolgreich" else log "DEBUG" "✗ HTTP-Verbindung zu $url fehlgeschlagen" fi done fi # Erfolgsrate bewerten local success_rate=$((success_count * 100 / total_tests)) if [[ $success_rate -ge 70 ]]; then INTERNET_AVAILABLE=true log "SUCCESS" "Internet-Verbindung verfügbar ($success_count/$total_tests Tests erfolgreich)" elif [[ $success_rate -ge 30 ]]; then log "WARN" "Internet-Verbindung instabil ($success_count/$total_tests Tests erfolgreich)" else log "FAIL" "Internet-Verbindung problematisch ($success_count/$total_tests Tests erfolgreich)" fi return $success_rate } measure_network_performance() { log "INFO" "Messe Netzwerk-Performance..." local start_time=$(date +%s%N) timeout 10 ping -c 1 8.8.8.8 &>/dev/null || true local end_time=$(date +%s%N) local ping_time=$(( (end_time - start_time) / 1000000 )) # Convert to ms if [[ $ping_time -gt 1000 ]]; then NETWORK_PERFORMANCE="slow" log "WARN" "Langsame Netzwerk-Performance ($ping_time ms)" elif [[ $ping_time -gt 200 ]]; then NETWORK_PERFORMANCE="moderate" log "INFO" "Moderate Netzwerk-Performance ($ping_time ms)" else NETWORK_PERFORMANCE="fast" log "SUCCESS" "Gute Netzwerk-Performance ($ping_time ms)" fi } # ============================================================================ # DIAGNOSTICS FUNCTIONS # ============================================================================ run_comprehensive_diagnostics() { log "ACTION" "Starte umfassende Netzwerk-Diagnose..." echo # System Environment detect_system_environment echo # Network Interface Analysis log "INFO" "=== NETZWERK-INTERFACE-ANALYSE ===" local interfaces=$(ip link show | grep -c "state UP") log "INFO" "Aktive Netzwerk-Interfaces: $interfaces" if [[ $interfaces -eq 0 ]]; then log "FAIL" "Keine aktiven Netzwerk-Interfaces gefunden!" return 1 fi # IP Configuration log "INFO" "IP-Konfiguration:" ip addr show | grep -E "(inet |UP)" | while read line; do log "DEBUG" " $line" done # Gateway Analysis local gateway=$(ip route show default | awk '/default/ {print $3}' | head -1) if [[ -n "$gateway" ]]; then log "INFO" "Default Gateway: $gateway" if timeout 10 ping -c 2 -W 5 "$gateway" &>/dev/null; then log "SUCCESS" "Gateway erreichbar" else log "FAIL" "Gateway nicht erreichbar" fi else log "FAIL" "Kein Default Gateway konfiguriert" fi # DNS Configuration log "INFO" "DNS-Konfiguration:" if [[ -f /etc/resolv.conf ]]; then grep nameserver /etc/resolv.conf | head -3 | while read line; do log "DEBUG" " $line" done fi echo # Internet Connectivity test_internet_connectivity echo # Network Performance measure_network_performance echo # VM-specific Analysis if [[ "$IS_VM" == "true" ]]; then log "INFO" "=== VM-SPEZIFISCHE ANALYSE ===" case "$VM_TYPE" in "vmware") log "INFO" "VMware-Optimierungen: NAT/Bridge-Modus prüfen" ;; "virtualbox") log "INFO" "VirtualBox-Optimierungen: Netzwerk-Adapter-Typ prüfen" ;; "kvm"|"qemu") log "INFO" "KVM/QEMU-Optimierungen: virtio-Netzwerk prüfen" ;; "hyper-v") log "INFO" "Hyper-V-Optimierungen: Integration Services prüfen" ;; esac echo fi # Certificate Analysis if [[ "$NEEDS_CERTIFICATES" == "true" ]]; then log "INFO" "=== ZERTIFIKAT-ANALYSE ===" log "INFO" "Mercedes-Zertifikate verfügbar - Corporate-Umgebung erkannt" if [[ ! -d "/usr/local/share/ca-certificates/mercedes" ]]; then log "WARN" "Zertifikate noch nicht installiert" else local installed_certs=$(find /usr/local/share/ca-certificates/mercedes -name "*.crt" | wc -l) log "INFO" "$installed_certs Zertifikate bereits installiert" fi echo fi show_environment_summary } show_environment_summary() { log "INFO" "=== UMGEBUNGS-ZUSAMMENFASSUNG ===" echo " System-Typ: $(if [[ "$IS_VM" == "true" ]]; then echo "🖥️ VM ($VM_TYPE)"; else echo "💻 Physisch"; fi)" echo " Internet: $(if [[ "$INTERNET_AVAILABLE" == "true" ]]; then echo "✅ Verfügbar"; else echo "❌ Problematisch"; fi)" echo " Performance: $(case "$NETWORK_PERFORMANCE" in "fast") echo "🚀 Schnell";; "moderate") echo "⚡ Moderat";; "slow") echo "🐌 Langsam";; *) echo "❓ Unbekannt";; esac)" echo " Zertifikate: $(if [[ "$NEEDS_CERTIFICATES" == "true" ]]; then echo "🏢 Mercedes verfügbar"; else echo "📋 Standard"; fi)" echo } # ============================================================================ # MERCEDES CERTIFICATE INSTALLATION # ============================================================================ install_mercedes_certificates() { log "ACTION" "Installiere Mercedes-Zertifikate..." # Root-Check if [[ $EUID -ne 0 ]]; then log "ERROR" "Root-Rechte erforderlich für Zertifikat-Installation" log "INFO" "Bitte starte mit: sudo $0" return 1 fi # Zertifikat-Verzeichnis prüfen if [[ ! -d "$MERCEDES_CERT_DIR" ]]; then log "ERROR" "Mercedes-Zertifikat-Verzeichnis nicht gefunden: $MERCEDES_CERT_DIR" return 1 fi local cert_files_found=0 if [[ -f "$MERCEDES_CERT_DIR/Corp-Prj-Root-CA.cer" ]]; then cert_files_found=$((cert_files_found + 1)) log "INFO" "✓ Corp-Prj-Root-CA.cer gefunden" fi if [[ -f "$MERCEDES_CERT_DIR/Corp-Root-CA-G2.cer" ]]; then cert_files_found=$((cert_files_found + 1)) log "INFO" "✓ Corp-Root-CA-G2.cer gefunden" fi if [[ $cert_files_found -eq 0 ]]; then log "ERROR" "Keine Mercedes-Zertifikate gefunden!" return 1 fi # System-Zertifikat-Verzeichnis erstellen local system_cert_dir="/usr/local/share/ca-certificates/mercedes" log "INFO" "Erstelle System-Zertifikat-Verzeichnis: $system_cert_dir" mkdir -p "$system_cert_dir" # Zertifikate installieren log "INFO" "Installiere Mercedes-Zertifikate..." if [[ -f "$MERCEDES_CERT_DIR/Corp-Prj-Root-CA.cer" ]]; then cp "$MERCEDES_CERT_DIR/Corp-Prj-Root-CA.cer" "$system_cert_dir/Corp-Prj-Root-CA.crt" chmod 644 "$system_cert_dir/Corp-Prj-Root-CA.crt" log "SUCCESS" "Corp-Prj-Root-CA installiert" fi if [[ -f "$MERCEDES_CERT_DIR/Corp-Root-CA-G2.cer" ]]; then cp "$MERCEDES_CERT_DIR/Corp-Root-CA-G2.cer" "$system_cert_dir/Corp-Root-CA-G2.crt" chmod 644 "$system_cert_dir/Corp-Root-CA-G2.crt" log "SUCCESS" "Corp-Root-CA-G2 installiert" fi # CA-Store aktualisieren log "INFO" "Aktualisiere System-CA-Store..." if update-ca-certificates --verbose >/dev/null 2>&1; then log "SUCCESS" "System-CA-Store erfolgreich aktualisiert" else log "ERROR" "Fehler beim Aktualisieren des CA-Stores" return 1 fi # Python/Node.js konfigurieren log "INFO" "Konfiguriere Python/Node.js für Mercedes-Zertifikate..." mkdir -p "/etc/myp" cat > "/etc/myp/python-certs.conf" << 'EOF' # Mercedes-Benz Python Certificate Configuration export REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt export SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt export SSL_CERT_DIR=/etc/ssl/certs export PYTHONHTTPSVERIFY=1 export CURL_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt export NODE_EXTRA_CA_CERTS=/etc/ssl/certs/ca-certificates.crt EOF # In /etc/environment einbinden if ! grep -q "source /etc/myp/python-certs.conf" /etc/environment 2>/dev/null; then echo "source /etc/myp/python-certs.conf" >> /etc/environment fi # Sofort in aktuelle Session laden export REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt export SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt export SSL_CERT_DIR=/etc/ssl/certs export PYTHONHTTPSVERIFY=1 export CURL_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt export NODE_EXTRA_CA_CERTS=/etc/ssl/certs/ca-certificates.crt log "SUCCESS" "Zertifikat-Variablen in aktuelle Session geladen" # Test nach Installation log "INFO" "Teste Internet-Verbindung nach Zertifikat-Installation..." local test_success=false # curl-Test if command -v curl &>/dev/null; then if curl -sf --connect-timeout 15 --max-time 20 "https://www.google.com" &>/dev/null; then log "SUCCESS" "HTTPS-Verbindung zu Google erfolgreich" test_success=true fi fi # Python-Test if [[ "$test_success" == "false" ]] && command -v python3 &>/dev/null; then if python3 -c "import urllib.request; urllib.request.urlopen('https://www.google.com', timeout=15)" &>/dev/null; then log "SUCCESS" "Python HTTPS-Verbindung erfolgreich" test_success=true fi fi if [[ "$test_success" == "true" ]]; then log "SUCCESS" "Mercedes-Zertifikate erfolgreich installiert und getestet!" NEEDS_CERTIFICATES=false INTERNET_AVAILABLE=true return 0 else log "WARN" "Zertifikate installiert, aber Internet-Tests noch problematisch" return 1 fi } # ============================================================================ # AUTOMATIC PROBLEM FIXING # ============================================================================ auto_fix_network_problems() { log "ACTION" "Starte automatische Netzwerk-Problem-Behebung..." local fixes_applied=0 local fixes_successful=0 # 1. Mercedes-Zertifikate installieren (wenn verfügbar und noch nicht installiert) if [[ "$NEEDS_CERTIFICATES" == "true" ]] && [[ $EUID -eq 0 ]]; then log "INFO" "Wende Fix an: Mercedes-Zertifikat-Installation" fixes_applied=$((fixes_applied + 1)) if install_mercedes_certificates; then fixes_successful=$((fixes_successful + 1)) log "SUCCESS" "Mercedes-Zertifikate erfolgreich installiert" else log "WARN" "Mercedes-Zertifikat-Installation fehlgeschlagen" fi fi # 2. DNS-Server Flush (wenn Root-Rechte vorhanden) if [[ $EUID -eq 0 ]]; then log "INFO" "Wende Fix an: DNS-Cache leeren" fixes_applied=$((fixes_applied + 1)) if systemctl restart systemd-resolved 2>/dev/null || service networking restart 2>/dev/null; then fixes_successful=$((fixes_successful + 1)) log "SUCCESS" "DNS-Cache erfolgreich geleert" else log "DEBUG" "DNS-Cache-Refresh nicht verfügbar" fi fi # 3. Netzwerk-Interface Refresh log "INFO" "Wende Fix an: Netzwerk-Interface-Refresh" fixes_applied=$((fixes_applied + 1)) local gateway=$(ip route show default | awk '/default/ {print $3}' | head -1) if [[ -n "$gateway" ]] && timeout 5 ping -c 1 "$gateway" &>/dev/null; then fixes_successful=$((fixes_successful + 1)) log "SUCCESS" "Netzwerk-Interface funktionsfähig" else log "WARN" "Netzwerk-Interface-Refresh nicht erfolgreich" fi # 4. VM-spezifische Fixes if [[ "$IS_VM" == "true" ]]; then log "INFO" "Wende Fix an: VM-Netzwerk-Optimierungen" fixes_applied=$((fixes_applied + 1)) # Kurz warten für VM-Netzwerk-Stabilisierung sleep 3 if test_internet_connectivity >/dev/null; then fixes_successful=$((fixes_successful + 1)) log "SUCCESS" "VM-Netzwerk-Optimierungen angewendet" else log "WARN" "VM-Netzwerk noch instabil" fi fi # Ergebnis-Zusammenfassung echo log "INFO" "=== AUTO-FIX-ERGEBNIS ===" echo " Angewendete Fixes: $fixes_applied" echo " Erfolgreiche Fixes: $fixes_successful" if [[ $fixes_successful -gt 0 ]]; then log "SUCCESS" "Einige Probleme wurden behoben!" # Erneute Internet-Prüfung log "INFO" "Führe erneute Internet-Prüfung durch..." if test_internet_connectivity >/dev/null; then log "SUCCESS" "Internet-Verbindung jetzt verfügbar!" INTERNET_AVAILABLE=true fi else log "WARN" "Automatische Problembehebung nicht erfolgreich" log "INFO" "Manuelle Diagnose und Behebung erforderlich" fi echo } # ============================================================================ # MYP INSTALLATION HELPERS # ============================================================================ start_myp_installation() { log "ACTION" "Starte MYP-Installation mit optimalen Parametern..." # System-Analyse durchführen detect_system_environment test_internet_connectivity >/dev/null # Optimale Parameter basierend auf Umgebung bestimmen local install_params=() # Basis-Parameter install_params+=("--full") # VM-spezifische Parameter if [[ "$IS_VM" == "true" ]]; then install_params+=("--vm-mode") log "INFO" "VM-Modus aktiviert" fi # Internet-Verfügbarkeit berücksichtigen if [[ "$INTERNET_AVAILABLE" == "false" ]]; then if [[ "$NEEDS_CERTIFICATES" == "true" ]] && [[ $EUID -eq 0 ]]; then log "INFO" "Versuche Mercedes-Zertifikat-Installation vor MYP-Setup..." if install_mercedes_certificates; then log "SUCCESS" "Internet-Probleme durch Zertifikate behoben" else log "WARN" "Zertifikat-Installation fehlgeschlagen - verwende Offline-Modus" install_params+=("--force-offline") fi else log "WARN" "Internet-Probleme erkannt - verwende Skip-Internet-Check" install_params+=("--skip-internet-check") fi fi # Performance-basierte Parameter if [[ "$NETWORK_PERFORMANCE" == "slow" ]]; then install_params+=("--network-debug") fi # Installation-Command zusammenstellen local install_cmd="sudo ./setup/aio_installer.sh ${install_params[*]}" echo log "ACTION" "Empfohlene Installation:" echo " $install_cmd" echo # Confirmation read -p "Installation mit diesen Parametern starten? [y/N]: " -n 1 -r echo if [[ $REPLY =~ ^[Yy]$ ]]; then log "INFO" "Starte MYP-Installation..." # Change to project root directory cd "$PROJECT_ROOT" # Execute installation if [[ $EUID -eq 0 ]]; then # Already root exec ./setup/aio_installer.sh "${install_params[@]}" else # Need sudo exec sudo ./setup/aio_installer.sh "${install_params[@]}" fi else log "INFO" "Installation abgebrochen" log "INFO" "Du kannst die Installation später manuell starten mit:" echo " $install_cmd" fi } # ============================================================================ # QUICK FIXES AND RECOMMENDATIONS # ============================================================================ run_quick_fixes() { log "ACTION" "Führe Schnell-Fixes für häufige VM-Probleme aus..." local quick_fixes=() # 1. Warten für VM-Netzwerk-Stabilisierung if [[ "$IS_VM" == "true" ]]; then log "INFO" "Warte 30 Sekunden für VM-Netzwerk-Stabilisierung..." sleep 30 quick_fixes+=("VM-Netzwerk-Stabilisierung") fi # 2. DNS-Flush (wenn möglich) if command -v systemctl &>/dev/null && [[ $EUID -eq 0 ]]; then log "INFO" "Lade DNS-Cache neu..." systemctl restart systemd-resolved 2>/dev/null || true quick_fixes+=("DNS-Cache-Reload") fi # 3. Gateway-Ping für Netzwerk-Wake-up local gateway=$(ip route show default | awk '/default/ {print $3}' | head -1) if [[ -n "$gateway" ]]; then log "INFO" "Wecke Netzwerk-Verbindung auf..." timeout 10 ping -c 3 "$gateway" >/dev/null 2>&1 || true quick_fixes+=("Netzwerk-Wake-up") fi # 4. Mercedes-Zertifikate (wenn verfügbar und Root) if [[ "$NEEDS_CERTIFICATES" == "true" ]] && [[ $EUID -eq 0 ]]; then log "INFO" "Installiere Mercedes-Zertifikate..." if install_mercedes_certificates >/dev/null 2>&1; then quick_fixes+=("Mercedes-Zertifikate") fi fi # Test nach Quick-Fixes log "INFO" "Teste Internet-Verbindung nach Quick-Fixes..." if test_internet_connectivity >/dev/null; then log "SUCCESS" "Quick-Fixes erfolgreich! Internet-Verbindung verfügbar." echo " Angewendete Fixes: ${quick_fixes[*]}" else log "WARN" "Quick-Fixes nicht ausreichend. Detaillierte Diagnose erforderlich." echo " Versuchte Fixes: ${quick_fixes[*]}" fi echo } show_recommendations() { log "ACTION" "Analysiere Umgebung und erstelle Empfehlungen..." # Umgebungs-Analyse detect_system_environment test_internet_connectivity >/dev/null measure_network_performance echo log "INFO" "=== UMGEBUNGS-BASIERTE EMPFEHLUNGEN ===" # Allgemeine System-Empfehlungen if [[ "$IS_VM" == "true" ]]; then log "INFO" "🖥️ VM-SPEZIFISCHE EMPFEHLUNGEN:" echo " • Mindestens 2GB RAM für die VM zuweisen" echo " • NAT-Netzwerk-Modus verwenden für beste Kompatibilität" echo " • Nach VM-Start 2-3 Minuten warten vor Installation" echo " • Bei Netzwerk-Problemen: VM neu starten" case "$VM_TYPE" in "vmware") echo " • VMware: Prüfe NAT/Bridge-Einstellungen" echo " • VMware Tools installiert?" ;; "virtualbox") echo " • VirtualBox: Netzwerk-Adapter auf 'NAT' stellen" echo " • Guest Additions installiert?" ;; "kvm"|"qemu") echo " • KVM: virtio-net Netzwerk-Driver verwenden" ;; "hyper-v") echo " • Hyper-V: Integration Services aktivieren" ;; esac echo fi # Internet-basierte Empfehlungen if [[ "$INTERNET_AVAILABLE" == "true" ]]; then log "SUCCESS" "✅ INTERNET VERFÜGBAR - EMPFOHLENE INSTALLATION:" if [[ "$IS_VM" == "true" ]]; then echo " sudo ./setup/aio_installer.sh --vm-mode --full" else echo " sudo ./setup/aio_installer.sh --full" fi else log "WARN" "⚠️ INTERNET-PROBLEME ERKANNT - LÖSUNGSVORSCHLÄGE:" echo " 1. Mercedes-Zertifikate installieren (Corporate-Umgebung):" if [[ "$NEEDS_CERTIFICATES" == "true" ]]; then echo " sudo $0 --install-certificates" else echo " (Keine Mercedes-Zertifikate verfügbar)" fi echo " 2. Warten und Retry (VM-Netzwerk braucht Zeit):" echo " sleep 120" echo " sudo ./setup/aio_installer.sh --vm-mode --full" echo " 3. Internet-Check überspringen:" echo " sudo ./setup/aio_installer.sh --skip-internet-check --full" echo " 4. Offline-Installation erzwingen:" echo " sudo ./setup/aio_installer.sh --force-offline --full" fi # Performance-Empfehlungen if [[ "$NETWORK_PERFORMANCE" == "slow" ]]; then echo log "WARN" "🐌 LANGSAME NETZWERK-PERFORMANCE ERKANNT:" echo " • Verwende --vm-mode für erweiterte Timeouts" echo " • VM-Ressourcen erhöhen (mehr RAM/CPU)" echo " • Prüfe Host-System-Performance" echo " • Bei persistenten Problemen: --network-debug verwenden" fi # Corporate-Umgebung Empfehlungen if [[ "$NEEDS_CERTIFICATES" == "true" ]]; then echo log "INFO" "🏢 CORPORATE-UMGEBUNG ERKANNT:" echo " • Mercedes-Zertifikate installieren für SSL/TLS-Probleme" echo " • Erweiterte Timeouts für Corporate-Proxies" echo " • Firewall-Regeln beachten" fi # Proxy-Empfehlungen if [[ -n "${http_proxy:-}" ]] || [[ -n "${HTTP_PROXY:-}" ]]; then echo log "INFO" "🌐 PROXY-UMGEBUNG ERKANNT:" echo " • Proxy: ${http_proxy:-$HTTP_PROXY}" echo " • Zusätzliche Timeouts erforderlich" echo " • SSL-Proxy-Zertifikate möglicherweise benötigt" fi echo } show_system_info() { log "INFO" "=== DETAILLIERTE SYSTEM-INFORMATION ===" # Operating System if command -v lsb_release &>/dev/null; then echo " Betriebssystem: $(lsb_release -d | cut -f2)" fi echo " Kernel: $(uname -r)" echo " Architektur: $(uname -m)" # Virtualization detect_system_environment echo " Virtualisierung: $(if [[ "$IS_VM" == "true" ]]; then echo "$VM_TYPE"; else echo "Physisches System"; fi)" # Memory and Disk echo " Verfügbarer RAM: $(free -h | awk 'NR==2{print $7}')" echo " Freier Speicher: $(df -h / | awk 'NR==2{print $4}')" # Network Information echo log "INFO" "=== NETZWERK-INFORMATION ===" local ip_address=$(hostname -I | awk '{print $1}') echo " IP-Adresse: ${ip_address:-"Nicht verfügbar"}" echo " Hostname: $(hostname)" local gateway=$(ip route show default | awk '/default/ {print $3}' | head -1) echo " Gateway: ${gateway:-"Nicht konfiguriert"}" # DNS Configuration if [[ -f /etc/resolv.conf ]]; then local dns_count=$(grep -c nameserver /etc/resolv.conf) echo " DNS-Server: $dns_count konfiguriert" fi # Interface Status local active_interfaces=$(ip link show | grep -c "state UP") echo " Aktive Interfaces: $active_interfaces" # Internet Status test_internet_connectivity >/dev/null echo " Internet-Zugang: $(if [[ "$INTERNET_AVAILABLE" == "true" ]]; then echo "✅ Verfügbar"; else echo "❌ Problematisch"; fi)" # MYP Installation Status echo log "INFO" "=== MYP-INSTALLATION ===" if [[ -d "/opt/myp" ]]; then echo " Installation: ✅ Vorhanden (/opt/myp)" if command -v systemctl &>/dev/null; then local service_status=$(systemctl is-active myp-https 2>/dev/null || echo "Nicht verfügbar") echo " Service-Status: $service_status" fi else echo " Installation: ❌ Nicht gefunden" fi # Certificates if [[ "$NEEDS_CERTIFICATES" == "true" ]]; then echo " Mercedes-Zertifikate: 🏢 Verfügbar" if [[ -d "/usr/local/share/ca-certificates/mercedes" ]]; then local installed_certs=$(find /usr/local/share/ca-certificates/mercedes -name "*.crt" 2>/dev/null | wc -l) echo " Installierte Zertifikate: $installed_certs" else echo " Installierte Zertifikate: 0" fi else echo " Mercedes-Zertifikate: ❌ Nicht verfügbar" fi echo } # ============================================================================ # MAIN PROGRAM # ============================================================================ main() { show_banner # Initial system detection detect_system_environment # Main menu loop while true; do show_menu read -p "Option auswählen: " choice echo case $choice in 1) run_comprehensive_diagnostics ;; 2) if [[ $EUID -ne 0 ]]; then log "ERROR" "Root-Rechte erforderlich für Zertifikat-Installation" log "INFO" "Bitte starte mit: sudo $0" else install_mercedes_certificates fi ;; 3) start_myp_installation ;; 4) if [[ $EUID -ne 0 ]]; then log "WARN" "Einige Fixes benötigen Root-Rechte. Starte als Root für beste Ergebnisse." fi auto_fix_network_problems ;; 5) show_system_info ;; 6) run_quick_fixes ;; 7) show_recommendations ;; 0) log "INFO" "VM Network Helper beendet" exit 0 ;; *) log "ERROR" "Ungültige Auswahl: $choice" ;; esac echo read -p "Drücken Sie Enter zum Fortfahren..." -r clear show_banner done } # ============================================================================ # COMMAND LINE PROCESSING # ============================================================================ # Process command line arguments while [[ $# -gt 0 ]]; do case $1 in --diagnose) show_banner detect_system_environment run_comprehensive_diagnostics exit 0 ;; --install-certificates) show_banner install_mercedes_certificates exit $? ;; --quick-fix) show_banner detect_system_environment run_quick_fixes exit 0 ;; --auto-fix) show_banner detect_system_environment auto_fix_network_problems exit 0 ;; --install-myp) show_banner start_myp_installation exit 0 ;; --recommendations) show_banner show_recommendations exit 0 ;; --system-info) show_banner show_system_info exit 0 ;; --help|-h) echo "MYP VM Network Helper - Alles-in-Einem Netzwerk-Problem-Löser" echo echo "Verwendung: $0 [OPTION]" echo echo "Optionen:" echo " --diagnose Vollständige Netzwerk-Diagnose" echo " --install-certificates Mercedes-Zertifikate installieren" echo " --quick-fix Schnell-Fixes für häufige Probleme" echo " --auto-fix Automatische Problembehebung" echo " --install-myp MYP-Installation mit optimalen Parametern" echo " --recommendations Umgebungs-basierte Empfehlungen" echo " --system-info Detaillierte System-Information" echo " --help, -h Diese Hilfe anzeigen" echo echo "Interaktiver Modus:" echo " $0 Startet interaktives Menü" echo echo "Häufige Verwendung:" echo " sudo $0 --quick-fix Schnelle Problembehebung" echo " sudo $0 --install-certificates Corporate-Zertifikate" echo " $0 --diagnose Umfassende Netzwerk-Analyse" echo " $0 --install-myp MYP mit optimalen Einstellungen" echo exit 0 ;; *) log "ERROR" "Unbekannte Option: $1" log "INFO" "Verwende --help für verfügbare Optionen" exit 1 ;; esac shift done # Run main program if no command line arguments main exit 0