chore: Änderungen commited
This commit is contained in:
@ -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"
|
||||
|
203
backend/setup/install-mercedes-certs.sh
Normal file
203
backend/setup/install-mercedes-certs.sh
Normal 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"
|
@ -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
|
||||
|
@ -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 ==="
|
||||
|
||||
|
983
backend/setup/vm-network-helper.sh
Normal file
983
backend/setup/vm-network-helper.sh
Normal 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
|
Reference in New Issue
Block a user