chore: Änderungen commited
This commit is contained in:
@@ -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
|
||||
;;
|
||||
*)
|
||||
|
Reference in New Issue
Block a user