chore: Änderungen commited

This commit is contained in:
2025-06-16 09:00:44 +02:00
parent 18126335ac
commit 0e5b66f4fe
5 changed files with 1642 additions and 10 deletions

View File

@@ -81,11 +81,8 @@ check_system() {
exit 1
fi
# Internetverbindung
if ! ping -c 1 8.8.8.8 &> /dev/null; then
log "ERROR" "Keine Internetverbindung verfügbar"
exit 1
fi
# Internet-Verbindung (VM-kompatibel)
check_internet_connection_vm_compatible
# Speicherplatz (mindestens 2GB frei)
local free_space=$(df / | awk 'NR==2 {print $4}')
@@ -97,6 +94,240 @@ check_system() {
log "INFO" "Systemvoraussetzungen erfüllt"
}
# VM-kompatible Internet-Verbindungsprüfung
check_internet_connection_vm_compatible() {
# Skip-Optionen prüfen
if [[ "${SKIP_INTERNET_CHECK:-}" == "true" ]]; then
log "WARN" "⚠️ Internet-Check übersprungen (--skip-internet-check)"
return 0
fi
if [[ "${FORCE_OFFLINE:-}" == "true" ]]; then
log "WARN" "⚠️ Offline-Modus erzwungen (--force-offline)"
return 0
fi
log "INFO" "Prüfe Internet-Verbindung (VM-kompatibel)..."
local connection_available=false
local timeout_seconds=45 # Längerer Standard-Timeout
local start_time=$(date +%s)
# VM-Umgebung erkennen
local is_vm=false
if command -v systemd-detect-virt &>/dev/null; then
local virt_type=$(systemd-detect-virt)
if [[ "$virt_type" != "none" ]]; then
is_vm=true
log "INFO" "VM-Umgebung erkannt: $virt_type"
timeout_seconds=120 # Deutlich längerer Timeout für VMs
fi
fi
# VM-Mode Option berücksichtigen
if [[ "${VM_MODE:-}" == "true" ]]; then
is_vm=true
timeout_seconds=120 # 2 Minuten für VM-Modus
log "INFO" "VM-Modus manuell aktiviert (--vm-mode)"
fi
# Mehrere Test-Methoden mit VM-freundlichen Timeouts
local test_methods=(
"ping_multiple_hosts"
"curl_connectivity_check"
"dns_resolution_test"
"gateway_ping_test"
)
for method in "${test_methods[@]}"; do
local current_time=$(date +%s)
local elapsed=$((current_time - start_time))
if [[ $elapsed -gt $timeout_seconds ]]; then
log "WARN" "Internet-Check Timeout erreicht (${timeout_seconds}s)"
break
fi
log "INFO" "Teste Methode: $method"
if $method "$is_vm"; then
log "INFO" "✓ Internet-Verbindung via $method erfolgreich"
connection_available=true
break
else
log "WARN" "Methode $method fehlgeschlagen"
sleep 2 # Kurze Pause zwischen Tests
fi
done
if [[ "$connection_available" == "true" ]]; then
log "INFO" "✅ Internet-Verbindung verfügbar"
return 0
else
log "ERROR" "❌ Keine Internet-Verbindung verfügbar"
# Zusätzliche Diagnose-Informationen
show_network_diagnostics_brief
# Benutzer-Option in VMs
if [[ "$is_vm" == "true" ]] && [[ "${FORCE_YES:-}" != "true" ]]; then
log "WARN" "In VM-Umgebungen können Netzwerk-Checks fehlschlagen"
log "INFO" "Mögliche Lösungen:"
log "INFO" " 1. Warte 1-2 Minuten nach VM-Start"
log "INFO" " 2. Prüfe VM-Netzwerk-Einstellungen (NAT/Bridge)"
log "INFO" " 3. Teste Internet-Zugang im Browser"
if confirm_action "Trotz Netzwerk-Problemen fortfahren? (Nicht empfohlen)"; then
log "WARN" "⚠️ Installation trotz Netzwerk-Problemen fortgesetzt"
return 0
fi
fi
return 1
fi
}
# Ping mit mehreren Hosts und VM-Timeouts
ping_multiple_hosts() {
local is_vm="$1"
local timeout_per_host=5
local packet_count=2
if [[ "$is_vm" == "true" ]]; then
timeout_per_host=15 # Längerer Timeout für VMs
packet_count=4 # Mehr Ping-Pakete
fi
local hosts=(
"8.8.8.8" # Google DNS
"1.1.1.1" # Cloudflare DNS
"9.9.9.9" # Quad9 DNS
"208.67.222.222" # OpenDNS
)
for host in "${hosts[@]}"; do
log "DEBUG" "Ping zu $host (Timeout: ${timeout_per_host}s, Pakete: $packet_count)"
if timeout $((timeout_per_host + 5)) ping -c $packet_count -W $timeout_per_host "$host" &>/dev/null; then
log "INFO" "✓ Ping zu $host erfolgreich"
return 0
fi
done
return 1
}
# curl Konnektivitäts-Check mit mehreren URLs
curl_connectivity_check() {
local is_vm="$1"
local connect_timeout=10
local max_time=15
if [[ "$is_vm" == "true" ]]; then
connect_timeout=30 # Längerer Verbindungs-Timeout
max_time=45 # Längere Gesamtzeit
fi
if ! command -v curl &>/dev/null; then
return 1
fi
local urls=(
"http://connectivitycheck.gstatic.com/generate_204"
"http://www.gstatic.com/generate_204"
"http://clients3.google.com/generate_204"
)
for url in "${urls[@]}"; do
log "DEBUG" "curl zu $url (Timeout: ${connect_timeout}s/${max_time}s)"
if curl -s -f --connect-timeout $connect_timeout --max-time $max_time "$url" &>/dev/null; then
log "INFO" "✓ curl zu $url erfolgreich"
return 0
fi
done
return 1
}
# DNS-Resolution-Test
dns_resolution_test() {
local is_vm="$1"
local timeout=10
if [[ "$is_vm" == "true" ]]; then
timeout=20
fi
local domains=("google.com" "cloudflare.com" "github.com")
for domain in "${domains[@]}"; do
log "DEBUG" "DNS-Test für $domain (Timeout: ${timeout}s)"
if timeout $timeout nslookup "$domain" &>/dev/null; then
log "INFO" "✓ DNS-Auflösung für $domain erfolgreich"
return 0
fi
done
return 1
}
# Gateway-Ping-Test
gateway_ping_test() {
local is_vm="$1"
local gateway=$(ip route show default | awk '/default/ {print $3}' | head -1)
if [[ -z "$gateway" ]]; then
return 1
fi
local timeout=5
if [[ "$is_vm" == "true" ]]; then
timeout=10
fi
log "DEBUG" "Gateway-Ping zu $gateway (Timeout: ${timeout}s)"
if timeout $((timeout + 5)) ping -c 2 -W $timeout "$gateway" &>/dev/null; then
log "INFO" "✓ Gateway $gateway erreichbar"
return 0
fi
return 1
}
# Kurze Netzwerk-Diagnose
show_network_diagnostics_brief() {
log "INFO" "=== NETZWERK-DIAGNOSE ==="
# Aktive Interfaces
local interfaces=$(ip link show | grep -c "state UP")
log "INFO" "Aktive Netzwerk-Interfaces: $interfaces"
# Default Gateway
local gateway=$(ip route show default | awk '/default/ {print $3}' | head -1)
if [[ -n "$gateway" ]]; then
log "INFO" "Default Gateway: $gateway"
else
log "WARN" "Kein Default Gateway konfiguriert"
fi
# DNS-Server
if [[ -f /etc/resolv.conf ]]; then
local dns_count=$(grep -c nameserver /etc/resolv.conf)
log "INFO" "Konfigurierte DNS-Server: $dns_count"
fi
# VM-Detection
if command -v systemd-detect-virt &>/dev/null; then
local virt_type=$(systemd-detect-virt)
if [[ "$virt_type" != "none" ]]; then
log "INFO" "Virtualisierung: $virt_type"
fi
fi
}
confirm_action() {
local message="$1"
local default="${2:-n}"
@@ -418,16 +649,42 @@ while [[ $# -gt 0 ]]; do
uninstall_system
exit $?
;;
--skip-internet-check)
log "WARN" "Internet-Check wird übersprungen"
export SKIP_INTERNET_CHECK="true"
;;
--vm-mode)
log "INFO" "VM-Modus aktiviert (erweiterte Timeouts)"
export VM_MODE="true"
;;
--force-offline)
log "WARN" "Offline-Modus erzwungen"
export FORCE_OFFLINE="true"
;;
--network-debug)
log "INFO" "Netzwerk-Debug-Modus aktiviert"
export NETWORK_DEBUG="true"
;;
--help|-h)
echo "MYP AIO-Installer"
echo "Verwendung: $0 [OPTION]"
echo
echo "Optionen:"
echo " --full Vollinstallation ohne Bestätigung"
echo " --upgrade Upgrade bestehender Installation"
echo " --test Nur Tests durchführen"
echo " --uninstall System deinstallieren"
echo " --help, -h Diese Hilfe anzeigen"
echo " --full Vollinstallation ohne Bestätigung"
echo " --upgrade Upgrade bestehender Installation"
echo " --test Nur Tests durchführen"
echo " --uninstall System deinstallieren"
echo " --skip-internet-check Internet-Verbindungsprüfung überspringen"
echo " --vm-mode VM-Modus (erweiterte Timeouts)"
echo " --force-offline Offline-Installation erzwingen"
echo " --network-debug Detaillierte Netzwerk-Diagnose"
echo " --help, -h Diese Hilfe anzeigen"
echo
echo "VM-spezifische Optionen:"
echo " Für VMs empfohlene Verwendung:"
echo " $0 --vm-mode --full"
echo " $0 --force-offline --full (bei Netzwerk-Problemen)"
echo
exit 0
;;
*)