#!/bin/bash # Mercedes-Benz SSL-Zertifikat-Installation - Universeller Wrapper # Erkennt automatisch das Betriebssystem und führt das entsprechende Skript aus set -euo pipefail # Farben für Ausgabe RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # Emojis SUCCESS="✅" ERROR="❌" WARNING="⚠️" INFO="ℹ️" MERCEDES="🏎️" # Logging-Funktionen log_success() { echo -e "${GREEN}${SUCCESS}${NC} $1"; } log_error() { echo -e "${RED}${ERROR}${NC} $1"; } log_warning() { echo -e "${YELLOW}${WARNING}${NC} $1"; } log_info() { echo -e "${BLUE}${INFO}${NC} $1"; } # Header echo -e "${BLUE}${MERCEDES}${NC} Mercedes-Benz SSL-Zertifikat-Installation ${BLUE}${MERCEDES}${NC}" echo "==================================================================" echo "Universeller Installer für alle Betriebssysteme" echo "" # Betriebssystem erkennen detect_os() { if [[ "$OSTYPE" == "linux-gnu"* ]]; then OS="linux" if command -v apt-get &> /dev/null; then DISTRO="ubuntu" elif command -v yum &> /dev/null; then DISTRO="centos" elif command -v pacman &> /dev/null; then DISTRO="arch" else DISTRO="generic" fi elif [[ "$OSTYPE" == "darwin"* ]]; then OS="macos" DISTRO="macos" elif [[ "$OSTYPE" == "msys" ]] || [[ "$OSTYPE" == "cygwin" ]]; then OS="windows" DISTRO="windows" else OS="unknown" DISTRO="unknown" fi log_info "Erkanntes Betriebssystem: $OS ($DISTRO)" } # Verfügbarkeit der Installationsskripte prüfen check_scripts() { log_info "Prüfe verfügbare Installationsskripte..." BASH_SCRIPT="install_mercedes_certificates.sh" POWERSHELL_SCRIPT="install_mercedes_certificates.ps1" if [[ ! -f "$BASH_SCRIPT" ]]; then log_error "Bash-Installationsskript nicht gefunden: $BASH_SCRIPT" return 1 fi if [[ ! -f "$POWERSHELL_SCRIPT" ]]; then log_warning "PowerShell-Installationsskript nicht gefunden: $POWERSHELL_SCRIPT" fi log_success "Installationsskripte gefunden" return 0 } # Berechtigungen prüfen check_privileges() { if [[ "$OS" == "windows" ]]; then # Windows: Prüfung erfolgt im PowerShell-Skript return 0 elif [[ $EUID -ne 0 ]]; then log_error "Dieses Skript muss als Root ausgeführt werden!" log_info "Verwenden Sie: sudo $0" return 1 fi log_success "Ausreichende Berechtigungen vorhanden" return 0 } # Abhängigkeiten installieren install_dependencies() { log_info "Installiere notwendige Abhängigkeiten..." case "$DISTRO" in "ubuntu") apt-get update -qq apt-get install -y openssl ca-certificates curl wget ;; "centos") yum install -y openssl ca-certificates curl wget ;; "arch") pacman -Sy --noconfirm openssl ca-certificates curl wget ;; "macos") # Prüfe ob Homebrew verfügbar ist if command -v brew &> /dev/null; then brew install openssl curl wget else log_warning "Homebrew nicht gefunden - manuelle Installation von Abhängigkeiten erforderlich" fi ;; "windows") log_info "Windows-Abhängigkeiten werden vom PowerShell-Skript verwaltet" ;; *) log_warning "Unbekannte Distribution - überspringe Abhängigkeits-Installation" ;; esac log_success "Abhängigkeiten installiert" } # Hauptinstallation ausführen run_installation() { log_info "Starte betriebssystemspezifische Installation..." case "$OS" in "linux"|"macos") log_info "Führe Bash-Installation aus..." chmod +x "$BASH_SCRIPT" ./"$BASH_SCRIPT" ;; "windows") if [[ -f "$POWERSHELL_SCRIPT" ]]; then log_info "Führe PowerShell-Installation aus..." if command -v powershell.exe &> /dev/null; then powershell.exe -ExecutionPolicy Bypass -File "$POWERSHELL_SCRIPT" elif command -v pwsh &> /dev/null; then pwsh -ExecutionPolicy Bypass -File "$POWERSHELL_SCRIPT" else log_error "PowerShell nicht gefunden!" log_info "Führen Sie das Skript manuell aus: $POWERSHELL_SCRIPT" return 1 fi else log_error "PowerShell-Skript nicht gefunden: $POWERSHELL_SCRIPT" return 1 fi ;; *) log_error "Unbekanntes Betriebssystem: $OS" log_info "Unterstützte Systeme: Linux, macOS, Windows" return 1 ;; esac log_success "Installation abgeschlossen" } # Post-Installation Validierung validate_installation() { log_info "Validiere Installation..." # Prüfe ob Zertifikat-Verzeichnis erstellt wurde if [[ -d "certs/mercedes/root" ]]; then log_success "Zertifikat-Verzeichnis gefunden" else log_warning "Zertifikat-Verzeichnis nicht gefunden" fi # Prüfe ob Zertifikate vorhanden sind if [[ -f "certs/mercedes/root/mercedes-root-ca.crt" ]]; then log_success "Mercedes-Benz Root-Zertifikat gefunden" else log_warning "Mercedes-Benz Root-Zertifikat nicht gefunden" fi # Teste HTTPS-Verbindung if command -v curl &> /dev/null; then if curl -s --connect-timeout 10 https://httpbin.org/get > /dev/null 2>&1; then log_success "HTTPS-Verbindungstest erfolgreich" else log_warning "HTTPS-Verbindungstest fehlgeschlagen" fi fi } # Hilfe anzeigen show_help() { echo "Mercedes-Benz SSL-Zertifikat-Installation" echo "" echo "Verwendung: $0 [OPTIONEN]" echo "" echo "Optionen:" echo " -h, --help Zeigt diese Hilfe an" echo " -v, --verbose Verbose-Ausgabe" echo " --check-only Nur Systemprüfung, keine Installation" echo " --force Erzwungene Installation" echo "" echo "Unterstützte Betriebssysteme:" echo " - Linux (Ubuntu, CentOS, Arch Linux)" echo " - macOS" echo " - Windows (über PowerShell)" echo "" echo "Beispiele:" echo " sudo $0 # Standard-Installation" echo " sudo $0 --verbose # Mit detaillierter Ausgabe" echo " $0 --check-only # Nur Systemprüfung" } # Hauptfunktion main() { local check_only=false local verbose=false local force=false # Parameter verarbeiten while [[ $# -gt 0 ]]; do case $1 in -h|--help) show_help exit 0 ;; -v|--verbose) verbose=true shift ;; --check-only) check_only=true shift ;; --force) force=true shift ;; *) log_error "Unbekannte Option: $1" show_help exit 1 ;; esac done # Verbose-Modus aktivieren if [[ "$verbose" == true ]]; then set -x fi # Systemprüfung detect_os if ! check_scripts; then exit 1 fi if ! check_privileges; then exit 1 fi # Nur Prüfung gewünscht? if [[ "$check_only" == true ]]; then log_success "Systemprüfung abgeschlossen - System ist bereit für Installation" exit 0 fi # Installation durchführen log_info "Starte Mercedes-Benz Zertifikat-Installation..." install_dependencies run_installation validate_installation echo "" echo "==================================================================" log_success "${MERCEDES} Mercedes-Benz Zertifikat-Installation erfolgreich abgeschlossen!" echo "==================================================================" echo "" log_info "Nächste Schritte:" echo " 1. Terminal/PowerShell neu starten" echo " 2. Browser neu starten" echo " 3. HTTPS-Verbindungen testen" echo "" log_info "Dokumentation: docs/MERCEDES_ZERTIFIKAT_INSTALLATION.md" log_info "Support: Siehe Dokumentation für Kontaktinformationen" } # Fehlerbehandlung trap 'log_error "Installation wurde unterbrochen"; exit 1' INT TERM # Skript ausführen main "$@"