297 lines
8.5 KiB
Bash
297 lines
8.5 KiB
Bash
#!/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 "$@" |