Projektarbeit-MYP/backend/app/install_certificates.sh

297 lines
8.5 KiB
Bash
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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 "$@"