983 lines
34 KiB
Bash
983 lines
34 KiB
Bash
#!/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 |