chore: Änderungen commited

This commit is contained in:
2025-06-16 09:14:15 +02:00
parent 0e5b66f4fe
commit 84f5ecc29d
5 changed files with 1304 additions and 19 deletions

View File

@ -400,14 +400,15 @@ full_installation() {
return 1
fi
# Installations-Schritte in definierter Reihenfolge
# Installations-Schritte in korrigierter Reihenfolge
# WICHTIG: create_system_user MUSS VOR setup_environment stehen!
local steps=(
"create_system_user"
"setup_environment"
"update_system_packages"
"install_python_dependencies"
"install_node_dependencies"
"setup_desktop_environment"
"create_system_user"
"setup_systemd_services"
"configure_firewall"
"setup_autostart"

View File

@ -0,0 +1,203 @@
#!/bin/bash
#######################################################################
# Mercedes-Benz Corporate Zertifikate - Schnell-Installation
#
# Löst sofort Internet-Verbindungsprobleme in Corporate VMs
#######################################################################
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'
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
}
# Root-Check
if [[ $EUID -ne 0 ]]; then
log "ERROR" "Script muss als root ausgeführt werden: sudo $0"
exit 1
fi
echo "🏢 Mercedes-Benz Corporate Zertifikate Installation"
echo "=================================================="
echo
# Script-Verzeichnis ermitteln
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(dirname "${SCRIPT_DIR}")"
MERCEDES_CERT_DIR="$PROJECT_ROOT/certs/mercedes"
log "INFO" "Suche Mercedes-Zertifikate in: $MERCEDES_CERT_DIR"
# Prüfe ob Zertifikate vorhanden sind
if [[ ! -d "$MERCEDES_CERT_DIR" ]]; then
log "ERROR" "Mercedes-Zertifikat-Verzeichnis nicht gefunden: $MERCEDES_CERT_DIR"
exit 1
fi
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!"
exit 1
fi
log "INFO" "$cert_files_found Mercedes-Zertifikate gefunden"
echo
# System-Zertifikat-Verzeichnis erstellen
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
log "INFO" "Installiere Corp-Prj-Root-CA..."
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 "INFO" "✓ Corp-Prj-Root-CA installiert"
fi
if [[ -f "$MERCEDES_CERT_DIR/Corp-Root-CA-G2.cer" ]]; then
log "INFO" "Installiere Corp-Root-CA-G2..."
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 "INFO" "✓ Corp-Root-CA-G2 installiert"
fi
# CA-Zertifikat-Store aktualisieren
log "INFO" "Aktualisiere System-CA-Store..."
if update-ca-certificates --verbose; then
log "INFO" "✅ System-CA-Store erfolgreich aktualisiert"
else
log "ERROR" "❌ Fehler beim Aktualisieren des CA-Stores"
exit 1
fi
# Python-Requests konfigurieren
log "INFO" "Konfiguriere Python 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
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
log "INFO" "✓ Python-Zertifikat-Konfiguration abgeschlossen"
# Node.js konfigurieren
log "INFO" "Konfiguriere Node.js für Mercedes-Zertifikate..."
cat > "/etc/myp/nodejs-certs.conf" << 'EOF'
# Mercedes-Benz Node.js Certificate Configuration
export NODE_EXTRA_CA_CERTS=/etc/ssl/certs/ca-certificates.crt
EOF
log "INFO" "✓ Node.js-Zertifikat-Konfiguration abgeschlossen"
# 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 "INFO" "✓ Zertifikat-Variablen in aktuelle Session geladen"
# Internet-Test nach Zertifikat-Installation
echo
log "INFO" "Teste Internet-Verbindung nach Zertifikat-Installation..."
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 "INFO" "✅ HTTPS-Verbindung zu Google erfolgreich"
test_success=true
else
log "WARN" "HTTPS-Verbindung zu Google fehlgeschlagen"
fi
fi
# wget-Test als Fallback
if [[ "$test_success" == "false" ]] && command -v wget &>/dev/null; then
if timeout 20 wget -q --spider --timeout=15 "https://www.google.com" 2>/dev/null; then
log "INFO" "✅ HTTPS-Verbindung (wget) zu Google erfolgreich"
test_success=true
fi
fi
# Python-Test
if 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 "INFO" "✅ Python HTTPS-Verbindung erfolgreich"
test_success=true
else
log "WARN" "Python HTTPS-Verbindung fehlgeschlagen"
fi
fi
# Fazit
echo
echo "🎯 INSTALLATION ABGESCHLOSSEN"
echo "=============================="
log "INFO" "Mercedes-Zertifikate erfolgreich installiert:"
log "INFO" " - $cert_files_found Zertifikate in System-CA-Store"
log "INFO" " - Python/requests konfiguriert"
log "INFO" " - Node.js konfiguriert"
log "INFO" " - Umgebungsvariablen gesetzt"
if [[ "$test_success" == "true" ]]; then
log "INFO" "✅ Internet-Verbindung funktioniert!"
echo
echo "🚀 JETZT MYP-INSTALLATION STARTEN:"
echo "sudo ./setup/aio_installer.sh --vm-mode --full"
else
log "WARN" "Internet-Verbindung noch problematisch"
echo
echo "🔄 NÄCHSTE SCHRITTE:"
echo "1. Terminal neu starten (für Umgebungsvariablen)"
echo "2. sudo ./setup/aio_installer.sh --vm-mode --full"
echo "3. oder: sudo ./setup/aio_installer.sh --skip-internet-check --full"
fi
echo
echo "📋 ZERTIFIKAT-STATUS:"
ls -la "$SYSTEM_CERT_DIR"/ 2>/dev/null || log "WARN" "Zertifikat-Verzeichnis leer"

View File

@ -56,10 +56,14 @@ create_directory_structure() {
mkdir -p "/etc/myp"
mkdir -p "/usr/local/bin/myp"
# Desktop-Konfiguration Verzeichnisse
mkdir -p "/home/$PROJECT_USER/.config"
mkdir -p "/home/$PROJECT_USER/.local/share/applications"
mkdir -p "/home/$PROJECT_USER/Desktop"
# Desktop-Konfiguration Verzeichnisse (nur wenn Benutzer existiert)
if id "$PROJECT_USER" &>/dev/null; then
mkdir -p "/home/$PROJECT_USER/.config"
mkdir -p "/home/$PROJECT_USER/.local/share/applications"
mkdir -p "/home/$PROJECT_USER/Desktop"
else
log "WARN" "Benutzer $PROJECT_USER existiert noch nicht - überspringe Benutzer-Verzeichnisse"
fi
log "INFO" "Verzeichnisstruktur erstellt"
}
@ -100,8 +104,14 @@ copy_project_files() {
set_file_permissions() {
log "INFO" "Setze Dateiberechtigungen..."
# Besitzer für Installationsverzeichnis
chown -R "$PROJECT_USER:$PROJECT_GROUP" "$INSTALL_PATH"
# Besitzer für Installationsverzeichnis (nur wenn Benutzer existiert)
if id "$PROJECT_USER" &>/dev/null; then
chown -R "$PROJECT_USER:$PROJECT_GROUP" "$INSTALL_PATH"
else
log "WARN" "Benutzer $PROJECT_USER existiert noch nicht - überspringe Besitzer-Änderung"
# Temporär root als Besitzer setzen
chown -R root:root "$INSTALL_PATH"
fi
# Grundlegende Verzeichnisberechtigungen
find "$INSTALL_PATH" -type d -exec chmod 755 {} \;
@ -118,12 +128,16 @@ set_file_permissions() {
chmod 755 "$INSTALL_PATH/uploads"
chmod 755 "$INSTALL_PATH/static"
# Log-Verzeichnis Berechtigungen
chown -R "$PROJECT_USER:$PROJECT_GROUP" "/var/log/myp"
# Log-Verzeichnis Berechtigungen (nur wenn Benutzer existiert)
if id "$PROJECT_USER" &>/dev/null; then
chown -R "$PROJECT_USER:$PROJECT_GROUP" "/var/log/myp"
chown -R "$PROJECT_USER:$PROJECT_GROUP" "/etc/myp"
else
log "WARN" "Benutzer $PROJECT_USER existiert noch nicht - überspringe Log/Config-Verzeichnis-Besitzer"
chown -R root:root "/var/log/myp"
chown -R root:root "/etc/myp"
fi
chmod 755 "/var/log/myp"
# Konfigurationsverzeichnis
chown -R "$PROJECT_USER:$PROJECT_GROUP" "/etc/myp"
chmod 755 "/etc/myp"
log "INFO" "Dateiberechtigungen gesetzt"
@ -443,10 +457,12 @@ export PYTHONHTTPSVERIFY=1
export CURL_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt
EOF
# Python-Konfiguration in Benutzer-Profile einbinden
if [[ -f "/home/$PROJECT_USER/.bashrc" ]]; then
# Python-Konfiguration in Benutzer-Profile einbinden (nur wenn Benutzer existiert)
if id "$PROJECT_USER" &>/dev/null && [[ -f "/home/$PROJECT_USER/.bashrc" ]]; then
echo "# Mercedes-Benz Python Certificate Configuration" >> "/home/$PROJECT_USER/.bashrc"
echo "source /etc/myp/python-certs.conf" >> "/home/$PROJECT_USER/.bashrc"
else
log "WARN" "Benutzer $PROJECT_USER/.bashrc nicht verfügbar - überspringe Benutzer-spezifische Python-Konfiguration"
fi
# Für systemweite Anwendung
@ -470,10 +486,12 @@ export NODE_EXTRA_CA_CERTS=/etc/ssl/certs/ca-certificates.crt
# export NODE_TLS_REJECT_UNAUTHORIZED=0
EOF
# Node.js-Konfiguration in Profile einbinden
if [[ -f "/home/$PROJECT_USER/.bashrc" ]]; then
# Node.js-Konfiguration in Profile einbinden (nur wenn Benutzer existiert)
if id "$PROJECT_USER" &>/dev/null && [[ -f "/home/$PROJECT_USER/.bashrc" ]]; then
echo "# Mercedes-Benz Node.js Certificate Configuration" >> "/home/$PROJECT_USER/.bashrc"
echo "source /etc/myp/nodejs-certs.conf" >> "/home/$PROJECT_USER/.bashrc"
else
log "WARN" "Benutzer $PROJECT_USER/.bashrc nicht verfügbar - überspringe Benutzer-spezifische Node.js-Konfiguration"
fi
log "INFO" "Node.js-Zertifikat-Konfiguration abgeschlossen"
@ -503,8 +521,8 @@ configure_chromium_certificates() {
}
EOF
# Chromium NSS-Datenbank für Benutzer konfigurieren
if command -v certutil >/dev/null 2>&1; then
# Chromium NSS-Datenbank für Benutzer konfigurieren (nur wenn Benutzer existiert)
if command -v certutil >/dev/null 2>&1 && id "$PROJECT_USER" &>/dev/null; then
local nss_dir="/home/$PROJECT_USER/.pki/nssdb"
mkdir -p "$nss_dir"
chown -R "$PROJECT_USER:$PROJECT_GROUP" "/home/$PROJECT_USER/.pki"
@ -523,6 +541,8 @@ EOF
done
log "INFO" "Mercedes-Zertifikate zu Chromium NSS-Datenbank hinzugefügt"
elif ! id "$PROJECT_USER" &>/dev/null; then
log "WARN" "Benutzer $PROJECT_USER existiert noch nicht - überspringe Chromium-NSS-Konfiguration"
else
log "WARN" "certutil nicht verfügbar, installiere NSS-Tools..."
DEBIAN_FRONTEND=noninteractive apt-get install -y libnss3-tools

View File

@ -28,9 +28,87 @@ create_system_user() {
# Benutzer-Umgebung konfigurieren
configure_user_environment
# Nach Benutzer-Erstellung: Berechtigungen und Verzeichnisse korrigieren
fix_post_user_creation_permissions
log "INFO" "System-Benutzer Erstellung abgeschlossen"
}
fix_post_user_creation_permissions() {
log "INFO" "Korrigiere Berechtigungen nach Benutzer-Erstellung..."
# Installationsverzeichnis Besitzer korrigieren
if [[ -d "$INSTALL_PATH" ]]; then
chown -R "$PROJECT_USER:$PROJECT_GROUP" "$INSTALL_PATH"
log "INFO" "Installationsverzeichnis-Besitzer zu $PROJECT_USER geändert"
fi
# Log-Verzeichnis Besitzer korrigieren
if [[ -d "/var/log/myp" ]]; then
chown -R "$PROJECT_USER:$PROJECT_GROUP" "/var/log/myp"
log "INFO" "Log-Verzeichnis-Besitzer zu $PROJECT_USER geändert"
fi
# Konfigurationsverzeichnis Besitzer korrigieren
if [[ -d "/etc/myp" ]]; then
chown -R "$PROJECT_USER:$PROJECT_GROUP" "/etc/myp"
log "INFO" "Konfigurationsverzeichnis-Besitzer zu $PROJECT_USER geändert"
fi
# Desktop-Konfiguration Verzeichnisse nachholen (falls übersprungen)
local user_home="/home/$PROJECT_USER"
if [[ ! -d "$user_home/.config" ]]; then
mkdir -p "$user_home/.config"
mkdir -p "$user_home/.local/share/applications"
mkdir -p "$user_home/Desktop"
chown -R "$PROJECT_USER:$PROJECT_GROUP" "$user_home/.config"
chown -R "$PROJECT_USER:$PROJECT_GROUP" "$user_home/.local"
chown -R "$PROJECT_USER:$PROJECT_GROUP" "$user_home/Desktop"
log "INFO" "Desktop-Konfiguration-Verzeichnisse nachträglich erstellt"
fi
# Mercedes-Zertifikat-Konfiguration nachholen für Benutzer-Profile
if [[ -f "/etc/myp/python-certs.conf" ]] && [[ -f "$user_home/.bashrc" ]]; then
if ! grep -q "python-certs.conf" "$user_home/.bashrc"; then
echo "# Mercedes-Benz Python Certificate Configuration" >> "$user_home/.bashrc"
echo "source /etc/myp/python-certs.conf" >> "$user_home/.bashrc"
log "INFO" "Python-Zertifikat-Konfiguration zu .bashrc hinzugefügt"
fi
fi
if [[ -f "/etc/myp/nodejs-certs.conf" ]] && [[ -f "$user_home/.bashrc" ]]; then
if ! grep -q "nodejs-certs.conf" "$user_home/.bashrc"; then
echo "# Mercedes-Benz Node.js Certificate Configuration" >> "$user_home/.bashrc"
echo "source /etc/myp/nodejs-certs.conf" >> "$user_home/.bashrc"
log "INFO" "Node.js-Zertifikat-Konfiguration zu .bashrc hinzugefügt"
fi
fi
# Chromium-NSS-Konfiguration nachholen
if command -v certutil >/dev/null 2>&1; then
local nss_dir="$user_home/.pki/nssdb"
if [[ ! -d "$nss_dir" ]]; then
mkdir -p "$nss_dir"
chown -R "$PROJECT_USER:$PROJECT_GROUP" "$user_home/.pki"
# NSS-Datenbank initialisieren
sudo -u "$PROJECT_USER" certutil -N -d sql:"$nss_dir" --empty-password 2>/dev/null || true
# Mercedes-Zertifikate hinzufügen
for cert_file in /usr/local/share/ca-certificates/mercedes/*.crt; do
if [[ -f "$cert_file" ]]; then
local cert_name=$(basename "$cert_file" .crt)
sudo -u "$PROJECT_USER" certutil -A -n "Mercedes-$cert_name" -t "C,," -d sql:"$nss_dir" -i "$cert_file" 2>/dev/null || true
fi
done
log "INFO" "Chromium-NSS-Konfiguration nachträglich eingerichtet"
fi
fi
log "INFO" "Post-User-Creation-Berechtigungen korrigiert"
}
setup_systemd_services() {
log "INFO" "=== SYSTEMD SERVICES EINRICHTEN ==="

View File

@ -0,0 +1,983 @@
#!/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