🎉 Improved backend documentation and removed unnecessary scripts. 📚 #feat(backend)
This commit is contained in:
parent
7f7657fa80
commit
c849e37493
1
backend/app/README.md
Normal file
1
backend/app/README.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
|
@ -1,297 +0,0 @@
|
|||||||
#!/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 "$@"
|
|
@ -1,423 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
# Mercedes-Benz SSL-Zertifikat-Installationsskript
|
|
||||||
# Installiert notwendige Zertifikate für sichere Netzwerkverbindungen
|
|
||||||
|
|
||||||
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 für bessere Lesbarkeit
|
|
||||||
SUCCESS="✅"
|
|
||||||
ERROR="❌"
|
|
||||||
WARNING="⚠️"
|
|
||||||
INFO="ℹ️"
|
|
||||||
CERT="🔐"
|
|
||||||
MERCEDES="🏎️"
|
|
||||||
|
|
||||||
# Logging-Funktion
|
|
||||||
log() {
|
|
||||||
echo -e "${1} $(date '+%Y-%m-%d %H:%M:%S') - ${2}"
|
|
||||||
}
|
|
||||||
|
|
||||||
log_success() { log "${GREEN}${SUCCESS}${NC}" "$1"; }
|
|
||||||
log_error() { log "${RED}${ERROR}${NC}" "$1"; }
|
|
||||||
log_warning() { log "${YELLOW}${WARNING}${NC}" "$1"; }
|
|
||||||
log_info() { log "${BLUE}${INFO}${NC}" "$1"; }
|
|
||||||
|
|
||||||
# Header
|
|
||||||
echo -e "${BLUE}${MERCEDES}${NC} Mercedes-Benz SSL-Zertifikat-Installation ${BLUE}${MERCEDES}${NC}"
|
|
||||||
echo "=================================================================="
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
# Betriebssystem erkennen
|
|
||||||
detect_os() {
|
|
||||||
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
|
|
||||||
if command -v apt-get &> /dev/null; then
|
|
||||||
OS="ubuntu"
|
|
||||||
elif command -v yum &> /dev/null; then
|
|
||||||
OS="centos"
|
|
||||||
elif command -v pacman &> /dev/null; then
|
|
||||||
OS="arch"
|
|
||||||
else
|
|
||||||
OS="linux"
|
|
||||||
fi
|
|
||||||
elif [[ "$OSTYPE" == "darwin"* ]]; then
|
|
||||||
OS="macos"
|
|
||||||
elif [[ "$OSTYPE" == "msys" ]] || [[ "$OSTYPE" == "cygwin" ]]; then
|
|
||||||
OS="windows"
|
|
||||||
else
|
|
||||||
OS="unknown"
|
|
||||||
fi
|
|
||||||
|
|
||||||
log_info "Erkanntes Betriebssystem: $OS"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Root-Rechte prüfen (außer Windows)
|
|
||||||
check_privileges() {
|
|
||||||
if [[ "$OS" != "windows" ]] && [[ $EUID -ne 0 ]]; then
|
|
||||||
log_error "Dieses Skript muss als Root ausgeführt werden!"
|
|
||||||
log_info "Verwenden Sie: sudo $0"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Zertifikat-Verzeichnisse erstellen
|
|
||||||
create_cert_directories() {
|
|
||||||
log_info "Erstelle Zertifikat-Verzeichnisse..."
|
|
||||||
|
|
||||||
mkdir -p certs/mercedes/{root,intermediate,server}
|
|
||||||
mkdir -p certs/backup
|
|
||||||
|
|
||||||
log_success "Zertifikat-Verzeichnisse erstellt"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Mercedes-Benz Root-Zertifikate herunterladen/installieren
|
|
||||||
install_mercedes_root_certs() {
|
|
||||||
log_info "${CERT} Installiere Mercedes-Benz Root-Zertifikate..."
|
|
||||||
|
|
||||||
# Mercedes-Benz Corporate Root CA
|
|
||||||
cat > certs/mercedes/root/mercedes-root-ca.crt << 'EOF'
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIGOTCCBCGgAwIBAgIQSeiY3h8+WoxNSBg0jOy/ozANBgkqhkiG9w0BAQsFADA9
|
|
||||||
MQswCQYDVQQGEwJERTETMBEGA1UECgwKRGFpbWxlciBBRzEZMBcGA1UEAwwQQ29y
|
|
||||||
cC1QcmotUm9vdC1DQTAeFw0yMDA5MzAyMTM0MzlaFw00MDA5MzAyMTM0MzlaMD0x
|
|
||||||
CzAJBgNVBAYTAkRFMRMwEQYDVQQKDApEYWltbGVyIEFHMRkwFwYDVQQDDBBDb3Jw
|
|
||||||
LVByai1Sb290LUNBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmwTL
|
|
||||||
4Pwy4W9yM637BwmYYPle5YErD/lpbmP8b3if+BKmwsWsOz2pRzCNDCPUnZl7xW1e
|
|
||||||
XrMmmksD6MRXk2vwz/BAXgf5Bc6+ii+q4ia3Tt+voKLZXJej5cXuqoZrGWzdlC5H
|
|
||||||
bY2SxUwbr7O05CsQzVsGhI+rbGDCUbjfE6NY2s3BbMpjndQYX/9JV+KHg6puZI/o
|
|
||||||
s1vt/RaOHkuvd9NFmrCdb9A+b0CpMT2K4tQzgNjk30MNfI6DRwHUjxF2l1ZpscHq
|
|
||||||
28gj4PfWbA9d/kxwuxOOJX4rfihRiwwnUzwF3jD1MlnHu4GTGLBIoke2KUXL0BI9
|
|
||||||
IrSKvl3DjRZf3XRcAo4IlT8tECaRZloTIVNgACsUmSNtIWn/x6EUKoaLvqZf6BQt
|
|
||||||
4I+tuMdmIqRkGA+MRuCHbPsjpDBPsQ5Y+r80MF1STode0Peq6gTdYvRbN7KJjbET
|
|
||||||
uXFjD520LEBRP1YaA99DMmer2e0znhkCffwrkWYQUc1B2yUdyS08UfMIqm8CybWD
|
|
||||||
lFTE2Taau2xebGlBeipvJ4QkzrR3TZ9CsTb+h38o50F4GHUh5nF0ll0IIS/73XtQ
|
|
||||||
YSEOaCxCBiEraIxPIg9HRj6yASnA7korzqUb3cmJiqIoLOjoMqZL1NksbEJBranV
|
|
||||||
QMzY4lNuNHabjwa3P36MoGIkUj334EigoEtqwvMCAwEAAaOCATMwggEvMA4GA1Ud
|
|
||||||
DwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTojU2VKgTmq3j3
|
|
||||||
JZl7o9WYdlWuHDCB7AYDVR0gBIHkMIHhMIHeBgRVHSAAMIHVMCoGCCsGAQUFBwIB
|
|
||||||
Fh5odHRwOi8vcGtpLmNvcnBzaGFyZWQubmV0L2Nwcy8wgaYGCCsGAQUFBwICMIGZ
|
|
||||||
HoGWAEQAYQBpAG0AbABlAHIAIABQAHIAbwBqAGUAYwB0ACAAQwBBACAAQwBlAHIA
|
|
||||||
dABpAGYAaQBjAGEAdABlACAAUABvAGwAaQBjAHkAIABhAG4AZAAgAEMAZQByAHQA
|
|
||||||
aQBmAGkAYwBhAHQAaQBvAG4AIABQAHIAYQBjAHQAaQBjAGUAIABTAHQAYQB0AGUA
|
|
||||||
bQBlAG4AdAAuMA0GCSqGSIb3DQEBCwUAA4ICAQA1/LxktggnmFd7k77Qkub89LpI
|
|
||||||
26BdNXpozIpc5+uW0W2Q1jJ30PHNEaXGNt2hBA7sXxCYx/+NrrC2RE/8QClZ6kUk
|
|
||||||
P+AT8W2j0msmh5TpH9TRizDRGFbIlvsLlDRAW2FuTKYL1N7LXFE8oqlqpo6Tl+k9
|
|
||||||
6yWJwVyZInTwRy0BWAPviA/n2gJuEGTIFi3I494d6YMKIDw5LAvH90ISVNRN7+a3
|
|
||||||
DBmdVATSQRA9cEsLgDxpDQnOMxNaSIsIKD8DKGwD+m7Kzgwg5Qg9JyC734wJMqu9
|
|
||||||
wHdZJ1FiTXNkH68dOK2zNGNEsjhUTH058joY2y33dxawJXTkeqDVP2uozC2ruWDs
|
|
||||||
QUT/AdLcUWa+mrFyDSw0IvrdUmSp3fWW9+Sx3o2uInSSBISkVByg3XvYag+Ibdiy
|
|
||||||
83Denqi9SVQjzTclfx0XNbjcSoxvRRluegNXuU0P48PZ2/QKZhs0hJ7poQCeUlDe
|
|
||||||
O8oOGhOOejlouUi0uqOthfS1puqlLIAESjWADyufir1+WcMow7PVUy9+agg9lpgr
|
|
||||||
aH7+klVjLPiGYUg3CxGv+aO6uYSA089SuhJRrurYuOXuP3VqaoPx0Smbj1JZ1n3D
|
|
||||||
HlSPGaSVWF06l5gF0dZj1IgrWjljvhfhr8Mfj5aQCiUDWN7YhLzthzlrhSeV8sY7
|
|
||||||
i9eJKKHKnwWB67iC4g==
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# Daimler AG Root CA
|
|
||||||
cat > certs/mercedes/root/daimler-root-ca.crt << 'EOF'
|
|
||||||
-----BEGIN CERTIFICATE-----
|
|
||||||
MIIGIjCCBAqgAwIBAgIQHFAzqM8GW6RCGy2VQ1JYBDANBgkqhkiG9w0BAQsFADA8
|
|
||||||
MQswCQYDVQQGEwJERTETMBEGA1UECgwKRGFpbWxlciBBRzEYMBYGA1UEAwwPQ29y
|
|
||||||
cC1Sb290LUNBLUcyMB4XDTE2MTEwMjEzNTE1NFoXDTM2MTEwMjEzNTE1NFowPDEL
|
|
||||||
MAkGA1UEBhMCREUxEzARBgNVBAoMCkRhaW1sZXIgQUcxGDAWBgNVBAMMD0NvcnAt
|
|
||||||
Um9vdC1DQS1HMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMJPB4sn
|
|
||||||
gp25cVIrmOaU+V4ZpCeuzzUJDdHDyd7wPTezjgzpp70s65SgTFtvHV2171OaVaFP
|
|
||||||
RWl3Tnm2dt4TOzTTf5L6VSn7RcAH3DKZ9hmWpyTZNEdTViLOBMcxYyNWD42oSpvM
|
|
||||||
hrqhPc19/6G4a2DqX7wWLrMtw8gxZXP6Fu/2Xzgw+Bw0iUo3DUaZu6Qiw+mrAZis
|
|
||||||
VhrsjrTChj9+sgpva/JLZPAU0UlSRKa+jZL2O5cZY8AL21NFNmR+MbxI/inPcBXO
|
|
||||||
k803MszGPraZbKk+ZPgyn38O3BwPNZRBzadi5f6XwI9W9K0Ar7rXjUf/OJRL8//1
|
|
||||||
qqsILdyYYultdv1BldXsN5szPsXrRyOlln0+bmer+k8KDdTekV0Y9aiOTgUIlvhH
|
|
||||||
D7ocCR7vZulyLtgg0YkMbV3ds2dC7ZNJiGYiR0WY/XaEE7Nn1RuQvJvfRYuotPqU
|
|
||||||
+Ra2jkqM8BS/CfN/NEL1C6Gki1+Xwgbyp6Y0u9ouuBhuK8hBA8F8XPmtg8j05MSl
|
|
||||||
/M3zetIhxPf/N6l09oARzRyaTlVj+RiUhX4maKW7CxEsjcY+NsnunfYCTYtrrM0b
|
|
||||||
L/c3x84B+tlYmJ2P1AEzBDT0DG2rz8qc9CszgcvDzyBOWFav14enWihMXaQglmZK
|
|
||||||
6atHWUIHG7xU6+URey3fuiERu8bRUWJylnLXAgMBAAGjggEeMIIBGjAOBgNVHQ8B
|
|
||||||
Af8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUjMD1u+au8ZZ5Svfo
|
|
||||||
uG1K4odr0XQwgdcGA1UdIASBzzCBzDCByQYEVR0gADCBwDArBggrBgEFBQcCARYf
|
|
||||||
aHR0cDovL3BraS5jb3Jwc2hhcmVkLm5ldC9jcHMvADCBkAYIKwYBBQUHAgIwgYMe
|
|
||||||
gYAARABhAGkAbQBsAGUAcgAgAEMAZQByAHQAaQBmAGkAYwBhAHQAZQAgAFAAbwBs
|
|
||||||
AGkAYwB5ACAAYQBuAGQAIABDAGUAcgB0AGkAZgBpAGMAYQB0AGkAbwBuACAAUABy
|
|
||||||
AGEAYwB0AGkAYwBlACAAUwB0AGEAdABlAG0AZQBuAHQALjANBgkqhkiG9w0BAQsF
|
|
||||||
AAOCAgEAO/YuDNU9uPMKlkjTHg7kzs3dtEE2HA/aRD2ko4UDkOf8fSynIv5AcuC2
|
|
||||||
O//bbcTmFByU7OFx/P6JXIsqXhnw+8HdScZB8RxUwskjbD9qSq2zG+vcL9WRvNw5
|
|
||||||
5/Igq3xbNMHWLix+h98IV3Rzok6i6btHr9/yvdvDMHlcy7hMfkMhsx9IoXveJLcB
|
|
||||||
2n0s/JYqkR+eN+zJ7C3sx+W/nAMkwqG3oFAiaKVUmvbRD9eKOssAEQGZi7AgCige
|
|
||||||
D395CIL+jIZfxrSotTlR5oxx0LabxACEAulL6I5Retnnpsnbc75sQnpMBKFvQO8n
|
|
||||||
dPTdzNCp7337Qby1fPnrzig4SndSSf/crbPBU3N/tZWKldC3SHmcOhAzBUwMibQC
|
|
||||||
GsvkPxIqROYFRoKRv5VlsoqSJkb225DTfq1TyP9wHhi80ZllOpHrFkdc+Z6a62O3
|
|
||||||
sGQNSymxC5xyNMsVd8GidgxbCa1xXHNtTnKTxsbzFvTXgL7GwbJnaf341uP/+sTt
|
|
||||||
L7i3SsMynWRMQgXIbu8h+zriacnAWoQmxeJ/by/TZUUSNcYxyZWDmIxR3ZIdS2AO
|
|
||||||
srlDmNt++Q3P0DHpJXOvZKeRoWyTsA8RceRvAoJWjBSBwuW2kThKHqwAOVRwQ2o9
|
|
||||||
uPU7Ic3wisWJTNmVF7d/QATRL2tVV2HV1+O4aTNl9s8bTKZ4P1w=
|
|
||||||
-----END CERTIFICATE-----
|
|
||||||
EOF
|
|
||||||
|
|
||||||
log_success "Mercedes-Benz Root-Zertifikate erstellt"
|
|
||||||
}
|
|
||||||
|
|
||||||
# System-Zertifikatsspeicher aktualisieren
|
|
||||||
update_system_cert_store() {
|
|
||||||
log_info "Aktualisiere System-Zertifikatsspeicher..."
|
|
||||||
|
|
||||||
case "$OS" in
|
|
||||||
"ubuntu")
|
|
||||||
# Ubuntu/Debian
|
|
||||||
cp certs/mercedes/root/*.crt /usr/local/share/ca-certificates/
|
|
||||||
update-ca-certificates
|
|
||||||
;;
|
|
||||||
"centos")
|
|
||||||
# CentOS/RHEL
|
|
||||||
cp certs/mercedes/root/*.crt /etc/pki/ca-trust/source/anchors/
|
|
||||||
update-ca-trust
|
|
||||||
;;
|
|
||||||
"arch")
|
|
||||||
# Arch Linux
|
|
||||||
cp certs/mercedes/root/*.crt /etc/ca-certificates/trust-source/anchors/
|
|
||||||
trust extract-compat
|
|
||||||
;;
|
|
||||||
"macos")
|
|
||||||
# macOS
|
|
||||||
for cert in certs/mercedes/root/*.crt; do
|
|
||||||
security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain "$cert"
|
|
||||||
done
|
|
||||||
;;
|
|
||||||
"windows")
|
|
||||||
# Windows (über PowerShell)
|
|
||||||
powershell.exe -Command "
|
|
||||||
Get-ChildItem -Path 'certs/mercedes/root/*.crt' | ForEach-Object {
|
|
||||||
Import-Certificate -FilePath \$_.FullName -CertStoreLocation Cert:\\LocalMachine\\Root
|
|
||||||
}
|
|
||||||
"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
log_warning "Unbekanntes OS - manuelle Installation erforderlich"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
log_success "System-Zertifikatsspeicher aktualisiert"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Python-Zertifikate aktualisieren
|
|
||||||
update_python_certs() {
|
|
||||||
log_info "Aktualisiere Python-Zertifikate..."
|
|
||||||
|
|
||||||
# Python certifi-Paket aktualisieren
|
|
||||||
if command -v pip3 &> /dev/null; then
|
|
||||||
pip3 install --upgrade certifi
|
|
||||||
elif command -v pip &> /dev/null; then
|
|
||||||
pip install --upgrade certifi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Requests-Zertifikate aktualisieren
|
|
||||||
python3 -c "
|
|
||||||
import ssl
|
|
||||||
import certifi
|
|
||||||
print(f'Python SSL-Kontext: {ssl.create_default_context().check_hostname}')
|
|
||||||
print(f'Certifi-Pfad: {certifi.where()}')
|
|
||||||
" 2>/dev/null || log_warning "Python-Zertifikat-Check fehlgeschlagen"
|
|
||||||
|
|
||||||
log_success "Python-Zertifikate aktualisiert"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Node.js-Zertifikate aktualisieren
|
|
||||||
update_nodejs_certs() {
|
|
||||||
if command -v node &> /dev/null; then
|
|
||||||
log_info "Aktualisiere Node.js-Zertifikate..."
|
|
||||||
|
|
||||||
# Node.js CA-Bundle aktualisieren
|
|
||||||
export NODE_EXTRA_CA_CERTS="$(pwd)/certs/mercedes/root/mercedes-root-ca.crt"
|
|
||||||
|
|
||||||
log_success "Node.js-Zertifikate konfiguriert"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Git-Zertifikate konfigurieren
|
|
||||||
configure_git_certs() {
|
|
||||||
if command -v git &> /dev/null; then
|
|
||||||
log_info "Konfiguriere Git-Zertifikate..."
|
|
||||||
|
|
||||||
# Git CA-Bundle setzen
|
|
||||||
git config --global http.sslCAInfo "$(pwd)/certs/mercedes/root/mercedes-root-ca.crt"
|
|
||||||
|
|
||||||
log_success "Git-Zertifikate konfiguriert"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Curl-Zertifikate konfigurieren
|
|
||||||
configure_curl_certs() {
|
|
||||||
if command -v curl &> /dev/null; then
|
|
||||||
log_info "Konfiguriere Curl-Zertifikate..."
|
|
||||||
|
|
||||||
# Curl CA-Bundle in .curlrc setzen
|
|
||||||
echo "cacert = $(pwd)/certs/mercedes/root/mercedes-root-ca.crt" >> ~/.curlrc
|
|
||||||
|
|
||||||
log_success "Curl-Zertifikate konfiguriert"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Wget-Zertifikate konfigurieren
|
|
||||||
configure_wget_certs() {
|
|
||||||
if command -v wget &> /dev/null; then
|
|
||||||
log_info "Konfiguriere Wget-Zertifikate..."
|
|
||||||
|
|
||||||
# Wget CA-Bundle in .wgetrc setzen
|
|
||||||
echo "ca_certificate = $(pwd)/certs/mercedes/root/mercedes-root-ca.crt" >> ~/.wgetrc
|
|
||||||
|
|
||||||
log_success "Wget-Zertifikate konfiguriert"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Browser-Zertifikate installieren
|
|
||||||
install_browser_certs() {
|
|
||||||
log_info "Installiere Browser-Zertifikate..."
|
|
||||||
|
|
||||||
case "$OS" in
|
|
||||||
"ubuntu"|"linux")
|
|
||||||
# Chrome/Chromium
|
|
||||||
if command -v google-chrome &> /dev/null || command -v chromium-browser &> /dev/null; then
|
|
||||||
mkdir -p ~/.pki/nssdb
|
|
||||||
certutil -A -n "Mercedes-Benz Root CA" -t "C,," -i certs/mercedes/root/mercedes-root-ca.crt -d ~/.pki/nssdb 2>/dev/null || true
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Firefox
|
|
||||||
if command -v firefox &> /dev/null; then
|
|
||||||
FIREFOX_PROFILE=$(find ~/.mozilla/firefox -name "*.default*" -type d | head -1)
|
|
||||||
if [[ -n "$FIREFOX_PROFILE" ]]; then
|
|
||||||
certutil -A -n "Mercedes-Benz Root CA" -t "C,," -i certs/mercedes/root/mercedes-root-ca.crt -d "$FIREFOX_PROFILE" 2>/dev/null || true
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
"macos")
|
|
||||||
# Safari verwendet System-Keychain (bereits installiert)
|
|
||||||
log_info "Safari verwendet System-Keychain"
|
|
||||||
;;
|
|
||||||
"windows")
|
|
||||||
# Internet Explorer/Edge verwenden Windows-Zertifikatsspeicher (bereits installiert)
|
|
||||||
log_info "IE/Edge verwenden Windows-Zertifikatsspeicher"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
log_success "Browser-Zertifikate installiert"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Zertifikat-Validierung
|
|
||||||
validate_certificates() {
|
|
||||||
log_info "Validiere installierte Zertifikate..."
|
|
||||||
|
|
||||||
# Test mit OpenSSL
|
|
||||||
if command -v openssl &> /dev/null; then
|
|
||||||
openssl verify -CAfile certs/mercedes/root/mercedes-root-ca.crt certs/mercedes/root/mercedes-root-ca.crt &>/dev/null && \
|
|
||||||
log_success "OpenSSL-Validierung erfolgreich" || \
|
|
||||||
log_warning "OpenSSL-Validierung fehlgeschlagen"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Test mit Python requests
|
|
||||||
python3 -c "
|
|
||||||
import requests
|
|
||||||
import ssl
|
|
||||||
try:
|
|
||||||
# Test HTTPS-Verbindung
|
|
||||||
response = requests.get('https://httpbin.org/get', timeout=10)
|
|
||||||
print('✅ Python requests: HTTPS-Verbindung erfolgreich')
|
|
||||||
except Exception as e:
|
|
||||||
print(f'⚠️ Python requests: {e}')
|
|
||||||
" 2>/dev/null || log_warning "Python requests-Test fehlgeschlagen"
|
|
||||||
|
|
||||||
# Test mit Curl
|
|
||||||
if command -v curl &> /dev/null; then
|
|
||||||
curl -s --connect-timeout 10 https://httpbin.org/get > /dev/null && \
|
|
||||||
log_success "Curl HTTPS-Test erfolgreich" || \
|
|
||||||
log_warning "Curl HTTPS-Test fehlgeschlagen"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Backup erstellen
|
|
||||||
create_backup() {
|
|
||||||
log_info "Erstelle Backup der ursprünglichen Zertifikate..."
|
|
||||||
|
|
||||||
case "$OS" in
|
|
||||||
"ubuntu")
|
|
||||||
cp -r /etc/ssl/certs certs/backup/original-certs-$(date +%Y%m%d) 2>/dev/null || true
|
|
||||||
;;
|
|
||||||
"centos")
|
|
||||||
cp -r /etc/pki/tls/certs certs/backup/original-certs-$(date +%Y%m%d) 2>/dev/null || true
|
|
||||||
;;
|
|
||||||
"macos")
|
|
||||||
security export -k /Library/Keychains/System.keychain -o certs/backup/system-keychain-$(date +%Y%m%d).p12 2>/dev/null || true
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
log_success "Backup erstellt"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Umgebungsvariablen setzen
|
|
||||||
set_environment_variables() {
|
|
||||||
log_info "Setze Umgebungsvariablen..."
|
|
||||||
|
|
||||||
# SSL-Umgebungsvariablen
|
|
||||||
cat >> ~/.bashrc << EOF
|
|
||||||
|
|
||||||
# Mercedes-Benz SSL-Zertifikat-Konfiguration
|
|
||||||
export SSL_CERT_FILE="$(pwd)/certs/mercedes/root/mercedes-root-ca.crt"
|
|
||||||
export SSL_CERT_DIR="$(pwd)/certs/mercedes/root"
|
|
||||||
export REQUESTS_CA_BUNDLE="$(pwd)/certs/mercedes/root/mercedes-root-ca.crt"
|
|
||||||
export CURL_CA_BUNDLE="$(pwd)/certs/mercedes/root/mercedes-root-ca.crt"
|
|
||||||
export NODE_EXTRA_CA_CERTS="$(pwd)/certs/mercedes/root/mercedes-root-ca.crt"
|
|
||||||
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# Für aktuelle Session
|
|
||||||
export SSL_CERT_FILE="$(pwd)/certs/mercedes/root/mercedes-root-ca.crt"
|
|
||||||
export SSL_CERT_DIR="$(pwd)/certs/mercedes/root"
|
|
||||||
export REQUESTS_CA_BUNDLE="$(pwd)/certs/mercedes/root/mercedes-root-ca.crt"
|
|
||||||
export CURL_CA_BUNDLE="$(pwd)/certs/mercedes/root/mercedes-root-ca.crt"
|
|
||||||
export NODE_EXTRA_CA_CERTS="$(pwd)/certs/mercedes/root/mercedes-root-ca.crt"
|
|
||||||
|
|
||||||
log_success "Umgebungsvariablen gesetzt"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Hauptfunktion
|
|
||||||
main() {
|
|
||||||
log_info "Starte Mercedes-Benz Zertifikat-Installation..."
|
|
||||||
|
|
||||||
detect_os
|
|
||||||
check_privileges
|
|
||||||
create_backup
|
|
||||||
create_cert_directories
|
|
||||||
install_mercedes_root_certs
|
|
||||||
update_system_cert_store
|
|
||||||
update_python_certs
|
|
||||||
update_nodejs_certs
|
|
||||||
configure_git_certs
|
|
||||||
configure_curl_certs
|
|
||||||
configure_wget_certs
|
|
||||||
install_browser_certs
|
|
||||||
set_environment_variables
|
|
||||||
validate_certificates
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
echo "=================================================================="
|
|
||||||
log_success "${MERCEDES} Mercedes-Benz Zertifikat-Installation abgeschlossen!"
|
|
||||||
echo "=================================================================="
|
|
||||||
echo ""
|
|
||||||
log_info "Nächste Schritte:"
|
|
||||||
echo " 1. Terminal neu starten oder 'source ~/.bashrc' ausführen"
|
|
||||||
echo " 2. Anwendungen neu starten für Zertifikat-Erkennung"
|
|
||||||
echo " 3. HTTPS-Verbindungen testen"
|
|
||||||
echo ""
|
|
||||||
log_info "Backup-Verzeichnis: $(pwd)/certs/backup"
|
|
||||||
log_info "Zertifikat-Verzeichnis: $(pwd)/certs/mercedes"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Fehlerbehandlung
|
|
||||||
trap 'log_error "Skript wurde unterbrochen"; exit 1' INT TERM
|
|
||||||
|
|
||||||
# Skript ausführen
|
|
||||||
main "$@"
|
|
File diff suppressed because it is too large
Load Diff
@ -1,994 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# ===================================================================
|
|
||||||
# MYP Druckerverwaltung - Raspberry Pi Schnellstart Optimierung
|
|
||||||
# Optimiert automatischen Start ohne Benutzeranmeldung
|
|
||||||
# Für bereits installierte Systeme
|
|
||||||
# ===================================================================
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# =========================== KONFIGURATION ===========================
|
|
||||||
KIOSK_USER="kiosk"
|
|
||||||
APP_USER="myp"
|
|
||||||
APP_DIR="/opt/myp-druckerverwaltung"
|
|
||||||
INSTALL_LOG="/var/log/myp-schnellstart.log"
|
|
||||||
|
|
||||||
# Farben für Ausgabe
|
|
||||||
RED='\033[0;31m'
|
|
||||||
GREEN='\033[0;32m'
|
|
||||||
YELLOW='\033[1;33m'
|
|
||||||
BLUE='\033[0;34m'
|
|
||||||
PURPLE='\033[0;35m'
|
|
||||||
NC='\033[0m'
|
|
||||||
|
|
||||||
# ========================== LOGGING-SYSTEM ==========================
|
|
||||||
log() {
|
|
||||||
echo -e "${GREEN}[$(date '+%Y-%m-%d %H:%M:%S')] $1${NC}" | tee -a "$INSTALL_LOG"
|
|
||||||
}
|
|
||||||
|
|
||||||
error() {
|
|
||||||
echo -e "${RED}[FEHLER] $1${NC}" | tee -a "$INSTALL_LOG"
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
warning() {
|
|
||||||
echo -e "${YELLOW}[WARNUNG] $1${NC}" | tee -a "$INSTALL_LOG"
|
|
||||||
}
|
|
||||||
|
|
||||||
info() {
|
|
||||||
echo -e "${BLUE}[INFO] $1${NC}" | tee -a "$INSTALL_LOG"
|
|
||||||
}
|
|
||||||
|
|
||||||
progress() {
|
|
||||||
echo -e "${PURPLE}[FORTSCHRITT] $1${NC}" | tee -a "$INSTALL_LOG"
|
|
||||||
}
|
|
||||||
|
|
||||||
# ========================== SYSTEM-CHECKS ==========================
|
|
||||||
check_root() {
|
|
||||||
if [ "$EUID" -ne 0 ]; then
|
|
||||||
error "Dieses Skript muss als Root ausgeführt werden: sudo $0"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
check_system() {
|
|
||||||
log "=== RASPBERRY PI SCHNELLSTART-OPTIMIERUNG ==="
|
|
||||||
|
|
||||||
# Prüfe ob Kiosk-Benutzer existiert
|
|
||||||
if ! id "$KIOSK_USER" &>/dev/null; then
|
|
||||||
# Kiosk-Benutzer erstellen falls nicht vorhanden
|
|
||||||
progress "Erstelle Kiosk-Benutzer: $KIOSK_USER"
|
|
||||||
if ! useradd -m -s /bin/bash "$KIOSK_USER" 2>/dev/null; then
|
|
||||||
adduser --disabled-password --gecos "" "$KIOSK_USER" || error "Kann Kiosk-Benutzer nicht erstellen"
|
|
||||||
fi
|
|
||||||
# Kiosk-Benutzer zu Audio/Video-Gruppen hinzufügen
|
|
||||||
usermod -aG audio,video,input "$KIOSK_USER" 2>/dev/null || true
|
|
||||||
info "Kiosk-Benutzer erstellt"
|
|
||||||
else
|
|
||||||
info "Kiosk-Benutzer existiert bereits"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Prüfe ob App-Verzeichnis existiert
|
|
||||||
if [ ! -d "$APP_DIR" ]; then
|
|
||||||
# App-Verzeichnis erstellen falls nicht vorhanden
|
|
||||||
progress "Erstelle App-Verzeichnis: $APP_DIR"
|
|
||||||
mkdir -p "$APP_DIR"
|
|
||||||
chown -R "$APP_USER:$APP_USER" "$APP_DIR" 2>/dev/null || true
|
|
||||||
info "App-Verzeichnis erstellt"
|
|
||||||
else
|
|
||||||
info "App-Verzeichnis existiert bereits"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Prüfe ob App-Benutzer existiert
|
|
||||||
if ! id "$APP_USER" &>/dev/null; then
|
|
||||||
# App-Benutzer erstellen falls nicht vorhanden
|
|
||||||
progress "Erstelle App-Benutzer: $APP_USER"
|
|
||||||
if ! useradd -m -s /bin/bash "$APP_USER" 2>/dev/null; then
|
|
||||||
adduser --disabled-password --gecos "" "$APP_USER" || error "Kann App-Benutzer nicht erstellen"
|
|
||||||
fi
|
|
||||||
usermod -aG sudo "$APP_USER" 2>/dev/null || true
|
|
||||||
info "App-Benutzer erstellt"
|
|
||||||
else
|
|
||||||
info "App-Benutzer existiert bereits"
|
|
||||||
fi
|
|
||||||
|
|
||||||
info "System-Checks erfolgreich"
|
|
||||||
}
|
|
||||||
|
|
||||||
# ========================== ESSENZIELLE PAKETE INSTALLIEREN ==========================
|
|
||||||
install_essential_packages() {
|
|
||||||
log "=== ESSENZIELLE PAKETE INSTALLIEREN ==="
|
|
||||||
|
|
||||||
progress "Aktualisiere Paketlisten..."
|
|
||||||
apt-get update -y || warning "APT Update teilweise fehlgeschlagen"
|
|
||||||
|
|
||||||
progress "Installiere essenzielle Pakete..."
|
|
||||||
apt-get install -y \
|
|
||||||
curl wget git unzip \
|
|
||||||
python3 python3-pip python3-dev \
|
|
||||||
build-essential libssl-dev libffi-dev \
|
|
||||||
sqlite3 nginx supervisor \
|
|
||||||
xorg xinit openbox \
|
|
||||||
xserver-xorg-video-all \
|
|
||||||
x11-xserver-utils xdotool unclutter \
|
|
||||||
lightdm lightdm-gtk-greeter \
|
|
||||||
pulseaudio alsa-utils \
|
|
||||||
fonts-liberation fonts-dejavu \
|
|
||||||
ca-certificates apt-transport-https \
|
|
||||||
|| warning "Paket-Installation teilweise fehlgeschlagen"
|
|
||||||
|
|
||||||
log "✅ Essenzielle Pakete installiert"
|
|
||||||
}
|
|
||||||
|
|
||||||
# ========================== BOOT-OPTIMIERUNG ==========================
|
|
||||||
optimize_boot() {
|
|
||||||
log "=== BOOT-OPTIMIERUNG ==="
|
|
||||||
|
|
||||||
progress "Optimiere Raspberry Pi Boot-Parameter..."
|
|
||||||
|
|
||||||
# Raspberry Pi Boot-Konfiguration
|
|
||||||
if [ -f "/boot/config.txt" ]; then
|
|
||||||
# GPU Memory für bessere Performance
|
|
||||||
if ! grep -q "gpu_mem=" /boot/config.txt; then
|
|
||||||
echo "gpu_mem=128" >> /boot/config.txt
|
|
||||||
info "GPU Memory auf 128MB gesetzt"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Disable Boot-Splash für schnelleren Start
|
|
||||||
if ! grep -q "disable_splash=" /boot/config.txt; then
|
|
||||||
echo "disable_splash=1" >> /boot/config.txt
|
|
||||||
info "Boot-Splash deaktiviert"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Boot-Delay reduzieren
|
|
||||||
if ! grep -q "boot_delay=" /boot/config.txt; then
|
|
||||||
echo "boot_delay=0" >> /boot/config.txt
|
|
||||||
info "Boot-Delay auf 0 gesetzt"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# HDMI-Hotplug für bessere Display-Erkennung
|
|
||||||
if ! grep -q "hdmi_force_hotplug=" /boot/config.txt; then
|
|
||||||
echo "hdmi_force_hotplug=1" >> /boot/config.txt
|
|
||||||
info "HDMI-Hotplug aktiviert"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Disable Rainbow-Splash
|
|
||||||
if ! grep -q "disable_overscan=" /boot/config.txt; then
|
|
||||||
echo "disable_overscan=1" >> /boot/config.txt
|
|
||||||
info "Overscan deaktiviert"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Kernel-Parameter optimieren
|
|
||||||
if [ -f "/boot/cmdline.txt" ]; then
|
|
||||||
# Backup erstellen
|
|
||||||
cp /boot/cmdline.txt /boot/cmdline.txt.backup
|
|
||||||
|
|
||||||
# Entferne Boot-Splash und optimiere
|
|
||||||
sed -i 's/splash//g' /boot/cmdline.txt
|
|
||||||
|
|
||||||
# Füge Performance-Parameter hinzu
|
|
||||||
if ! grep -q "quiet" /boot/cmdline.txt; then
|
|
||||||
sed -i 's/$/ quiet/' /boot/cmdline.txt
|
|
||||||
fi
|
|
||||||
if ! grep -q "loglevel=3" /boot/cmdline.txt; then
|
|
||||||
sed -i 's/$/ loglevel=3/' /boot/cmdline.txt
|
|
||||||
fi
|
|
||||||
if ! grep -q "logo.nologo" /boot/cmdline.txt; then
|
|
||||||
sed -i 's/$/ logo.nologo/' /boot/cmdline.txt
|
|
||||||
fi
|
|
||||||
if ! grep -q "vt.global_cursor_default=0" /boot/cmdline.txt; then
|
|
||||||
sed -i 's/$/ vt.global_cursor_default=0/' /boot/cmdline.txt
|
|
||||||
fi
|
|
||||||
|
|
||||||
info "Kernel-Parameter optimiert"
|
|
||||||
fi
|
|
||||||
|
|
||||||
log "✅ Boot-Optimierung abgeschlossen"
|
|
||||||
}
|
|
||||||
|
|
||||||
# ========================== AUTOLOGIN VERSTÄRKEN ==========================
|
|
||||||
strengthen_autologin() {
|
|
||||||
log "=== AUTOLOGIN-VERSTÄRKUNG ==="
|
|
||||||
|
|
||||||
progress "Verstärke automatischen Login..."
|
|
||||||
|
|
||||||
# Sicherstellen dass graphical.target Standard ist
|
|
||||||
systemctl set-default graphical.target
|
|
||||||
info "Graphical.target als Standard gesetzt"
|
|
||||||
|
|
||||||
# Getty Auto-Login verstärken
|
|
||||||
mkdir -p "/etc/systemd/system/getty@tty1.service.d"
|
|
||||||
cat > "/etc/systemd/system/getty@tty1.service.d/autologin.conf" << EOF
|
|
||||||
[Service]
|
|
||||||
ExecStart=
|
|
||||||
ExecStart=-/sbin/agetty --autologin $KIOSK_USER --noclear %I \$TERM
|
|
||||||
Type=simple
|
|
||||||
Restart=always
|
|
||||||
RestartSec=3
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# Getty Service aktivieren
|
|
||||||
systemctl enable getty@tty1.service
|
|
||||||
info "Getty Auto-Login konfiguriert"
|
|
||||||
|
|
||||||
# LightDM Auto-Login verstärken
|
|
||||||
if [ -f "/etc/lightdm/lightdm.conf" ]; then
|
|
||||||
# Backup erstellen
|
|
||||||
cp /etc/lightdm/lightdm.conf /etc/lightdm/lightdm.conf.backup
|
|
||||||
|
|
||||||
# Neue Konfiguration
|
|
||||||
cat > "/etc/lightdm/lightdm.conf" << EOF
|
|
||||||
[Seat:*]
|
|
||||||
# Automatischer Login für Kiosk-Benutzer
|
|
||||||
autologin-user=$KIOSK_USER
|
|
||||||
autologin-user-timeout=0
|
|
||||||
autologin-session=openbox
|
|
||||||
user-session=openbox
|
|
||||||
session-wrapper=/etc/X11/Xsession
|
|
||||||
greeter-session=lightdm-gtk-greeter
|
|
||||||
allow-guest=false
|
|
||||||
# Kein Benutzer-Wechsel möglich
|
|
||||||
greeter-hide-users=true
|
|
||||||
greeter-show-manual-login=false
|
|
||||||
# Automatischer Start ohne Verzögerung
|
|
||||||
autologin-in-background=false
|
|
||||||
# Session-Setup
|
|
||||||
session-setup-script=/usr/share/lightdm/setup-kiosk-session.sh
|
|
||||||
|
|
||||||
[SeatDefaults]
|
|
||||||
# Zusätzliche Sicherheitseinstellungen
|
|
||||||
autologin-user=$KIOSK_USER
|
|
||||||
autologin-user-timeout=0
|
|
||||||
autologin-session=openbox
|
|
||||||
greeter-hide-users=true
|
|
||||||
greeter-show-manual-login=false
|
|
||||||
allow-user-switching=false
|
|
||||||
EOF
|
|
||||||
info "LightDM Auto-Login verstärkt"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# LightDM Service-Override
|
|
||||||
mkdir -p "/etc/systemd/system/lightdm.service.d"
|
|
||||||
cat > "/etc/systemd/system/lightdm.service.d/autologin-override.conf" << EOF
|
|
||||||
[Unit]
|
|
||||||
After=multi-user.target network.target myp-druckerverwaltung.service
|
|
||||||
Wants=myp-druckerverwaltung.service
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
# Automatischer Restart bei Fehlern
|
|
||||||
Restart=always
|
|
||||||
RestartSec=3
|
|
||||||
# Umgebungsvariablen für Kiosk
|
|
||||||
Environment=DISPLAY=:0
|
|
||||||
Environment=KIOSK_MODE=1
|
|
||||||
# Verzögerung für Backend-Start
|
|
||||||
ExecStartPre=/bin/bash -c 'for i in {1..30}; do if curl -s http://localhost:5000 >/dev/null 2>&1; then break; fi; sleep 2; done'
|
|
||||||
EOF
|
|
||||||
|
|
||||||
systemctl enable lightdm.service
|
|
||||||
info "LightDM Service-Override konfiguriert"
|
|
||||||
|
|
||||||
log "✅ Autologin-Verstärkung abgeschlossen"
|
|
||||||
}
|
|
||||||
|
|
||||||
# ========================== KIOSK-BENUTZER OPTIMIERUNG ==========================
|
|
||||||
optimize_kiosk_user() {
|
|
||||||
log "=== KIOSK-BENUTZER OPTIMIERUNG ==="
|
|
||||||
|
|
||||||
KIOSK_HOME="/home/$KIOSK_USER"
|
|
||||||
|
|
||||||
progress "Optimiere Kiosk-Benutzer Autostart..."
|
|
||||||
|
|
||||||
# Verstärkte .bashrc
|
|
||||||
cat >> "$KIOSK_HOME/.bashrc" << 'EOF'
|
|
||||||
|
|
||||||
# ===== VERSTÄRKTER KIOSK AUTOSTART =====
|
|
||||||
if [ -z "$SSH_CLIENT" ] && [ -z "$SSH_TTY" ] && [ -z "$KIOSK_STARTED" ]; then
|
|
||||||
export KIOSK_STARTED=1
|
|
||||||
|
|
||||||
# Logge Autostart-Versuch
|
|
||||||
echo "$(date): Bashrc Autostart-Versuch auf $(tty)" >> /var/log/kiosk-autostart.log
|
|
||||||
|
|
||||||
# Prüfe ob wir auf tty1 sind und X noch nicht läuft
|
|
||||||
if [ "$(tty)" = "/dev/tty1" ] && [ -z "$DISPLAY" ]; then
|
|
||||||
echo "$(date): Starte X-Session automatisch via bashrc" >> /var/log/kiosk-autostart.log
|
|
||||||
exec startx
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Falls X läuft aber Kiosk-App nicht, starte sie
|
|
||||||
if [ -n "$DISPLAY" ] && ! pgrep -f "chromium.*kiosk" > /dev/null; then
|
|
||||||
echo "$(date): Starte Kiosk-Anwendung via bashrc" >> /var/log/kiosk-autostart.log
|
|
||||||
exec $HOME/start-kiosk.sh
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# Verstärkte .profile
|
|
||||||
cat >> "$KIOSK_HOME/.profile" << 'EOF'
|
|
||||||
|
|
||||||
# ===== VERSTÄRKTER KIOSK AUTOSTART (PROFILE) =====
|
|
||||||
if [ -z "$SSH_CLIENT" ] && [ -z "$SSH_TTY" ] && [ -z "$KIOSK_STARTED" ]; then
|
|
||||||
export KIOSK_STARTED=1
|
|
||||||
|
|
||||||
# Logge Profile-Autostart
|
|
||||||
echo "$(date): Profile Autostart-Versuch auf $(tty)" >> /var/log/kiosk-autostart.log
|
|
||||||
|
|
||||||
# Starte X-Session falls nicht vorhanden
|
|
||||||
if [ -z "$DISPLAY" ] && [ -z "$WAYLAND_DISPLAY" ] && [ "$(tty)" = "/dev/tty1" ]; then
|
|
||||||
echo "$(date): Starte X-Session via profile" >> /var/log/kiosk-autostart.log
|
|
||||||
exec startx
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# Optimierte .xinitrc
|
|
||||||
cat > "$KIOSK_HOME/.xinitrc" << EOF
|
|
||||||
#!/bin/bash
|
|
||||||
# Optimierte Xinit-Konfiguration für Kiosk-Modus
|
|
||||||
|
|
||||||
# Logge X-Start
|
|
||||||
echo "\$(date): X-Session gestartet via xinitrc" >> /var/log/kiosk-autostart.log
|
|
||||||
|
|
||||||
# Export Display
|
|
||||||
export DISPLAY=:0
|
|
||||||
|
|
||||||
# Session-Setup
|
|
||||||
xset s off
|
|
||||||
xset s noblank
|
|
||||||
xset s noexpose
|
|
||||||
xset -dpms
|
|
||||||
|
|
||||||
# Verstecke Mauszeiger
|
|
||||||
unclutter -idle 0.5 -root &
|
|
||||||
|
|
||||||
# Warte kurz auf System-Stabilisierung
|
|
||||||
sleep 3
|
|
||||||
|
|
||||||
# Starte Openbox
|
|
||||||
exec openbox-session
|
|
||||||
EOF
|
|
||||||
|
|
||||||
chmod +x "$KIOSK_HOME/.xinitrc"
|
|
||||||
|
|
||||||
# Desktop Autostart verstärken
|
|
||||||
mkdir -p "$KIOSK_HOME/.config/autostart"
|
|
||||||
cat > "$KIOSK_HOME/.config/autostart/kiosk-app.desktop" << EOF
|
|
||||||
[Desktop Entry]
|
|
||||||
Type=Application
|
|
||||||
Name=MYP Kiosk Application
|
|
||||||
Comment=Startet die MYP Kiosk-Anwendung automatisch
|
|
||||||
Exec=$KIOSK_HOME/start-kiosk.sh
|
|
||||||
Hidden=false
|
|
||||||
NoDisplay=false
|
|
||||||
X-GNOME-Autostart-enabled=true
|
|
||||||
StartupNotify=false
|
|
||||||
Terminal=false
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# Berechtigungen setzen
|
|
||||||
chown -R "$KIOSK_USER:$KIOSK_USER" "$KIOSK_HOME/.config"
|
|
||||||
chown "$KIOSK_USER:$KIOSK_USER" "$KIOSK_HOME/.bashrc"
|
|
||||||
chown "$KIOSK_USER:$KIOSK_USER" "$KIOSK_HOME/.profile"
|
|
||||||
chown "$KIOSK_USER:$KIOSK_USER" "$KIOSK_HOME/.xinitrc"
|
|
||||||
|
|
||||||
info "Kiosk-Benutzer Autostart optimiert"
|
|
||||||
|
|
||||||
log "✅ Kiosk-Benutzer Optimierung abgeschlossen"
|
|
||||||
}
|
|
||||||
|
|
||||||
# ========================== WATCHDOG VERSTÄRKEN ==========================
|
|
||||||
strengthen_watchdog() {
|
|
||||||
log "=== WATCHDOG-VERSTÄRKUNG ==="
|
|
||||||
|
|
||||||
progress "Verstärke Kiosk-Überwachung..."
|
|
||||||
|
|
||||||
# Verstärkter Kiosk-Watchdog Service
|
|
||||||
cat > "/etc/systemd/system/kiosk-watchdog-enhanced.service" << EOF
|
|
||||||
[Unit]
|
|
||||||
Description=Enhanced Kiosk Watchdog Service
|
|
||||||
After=multi-user.target lightdm.service
|
|
||||||
Wants=lightdm.service myp-druckerverwaltung.service
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=simple
|
|
||||||
User=root
|
|
||||||
ExecStart=/bin/bash -c '
|
|
||||||
while true; do
|
|
||||||
# Prüfe Backend-Service
|
|
||||||
if ! systemctl is-active --quiet myp-druckerverwaltung; then
|
|
||||||
echo "\$(date): Backend-Service nicht aktiv - starte neu" >> /var/log/kiosk-watchdog-enhanced.log
|
|
||||||
systemctl start myp-druckerverwaltung
|
|
||||||
sleep 5
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Prüfe Backend-Erreichbarkeit
|
|
||||||
if ! curl -s http://localhost:5000 >/dev/null 2>&1; then
|
|
||||||
echo "\$(date): Backend nicht erreichbar - starte Service neu" >> /var/log/kiosk-watchdog-enhanced.log
|
|
||||||
systemctl restart myp-druckerverwaltung
|
|
||||||
sleep 10
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Prüfe LightDM
|
|
||||||
if ! systemctl is-active --quiet lightdm; then
|
|
||||||
echo "\$(date): LightDM nicht aktiv - starte neu" >> /var/log/kiosk-watchdog-enhanced.log
|
|
||||||
systemctl start lightdm
|
|
||||||
sleep 5
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Prüfe Kiosk-Benutzer Session
|
|
||||||
if ! pgrep -u $KIOSK_USER > /dev/null; then
|
|
||||||
echo "\$(date): Kiosk-Benutzer nicht angemeldet - starte LightDM neu" >> /var/log/kiosk-watchdog-enhanced.log
|
|
||||||
systemctl restart lightdm
|
|
||||||
sleep 10
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Prüfe Chromium Kiosk-Prozess
|
|
||||||
if ! pgrep -u $KIOSK_USER -f "chromium.*kiosk" > /dev/null; then
|
|
||||||
echo "\$(date): Chromium-Kiosk nicht gefunden - starte Kiosk-Session neu" >> /var/log/kiosk-watchdog-enhanced.log
|
|
||||||
# Versuche Kiosk-Neustart als Kiosk-Benutzer
|
|
||||||
sudo -u $KIOSK_USER DISPLAY=:0 /home/$KIOSK_USER/start-kiosk.sh &
|
|
||||||
sleep 5
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Prüfe X-Server
|
|
||||||
if ! pgrep -f "X.*:0" > /dev/null; then
|
|
||||||
echo "\$(date): X-Server nicht gefunden - starte LightDM neu" >> /var/log/kiosk-watchdog-enhanced.log
|
|
||||||
systemctl restart lightdm
|
|
||||||
sleep 10
|
|
||||||
fi
|
|
||||||
|
|
||||||
sleep 20
|
|
||||||
done
|
|
||||||
'
|
|
||||||
Restart=always
|
|
||||||
RestartSec=5
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# Alten Watchdog deaktivieren und neuen aktivieren
|
|
||||||
systemctl disable kiosk-watchdog.service 2>/dev/null || true
|
|
||||||
systemctl enable kiosk-watchdog-enhanced.service
|
|
||||||
|
|
||||||
# Cron-Watchdog verstärken
|
|
||||||
cat > "/etc/cron.d/kiosk-watchdog-enhanced" << EOF
|
|
||||||
# Verstärkter Kiosk-Watchdog: Prüft alle 2 Minuten
|
|
||||||
*/2 * * * * $KIOSK_USER /bin/bash -c 'if ! pgrep -f "chromium.*kiosk" > /dev/null; then echo "\$(date): Cron-Watchdog startet Kiosk neu" >> /var/log/kiosk-cron-watchdog.log; DISPLAY=:0 $HOME/start-kiosk.sh & fi'
|
|
||||||
|
|
||||||
# System-Watchdog: Prüft Services alle 5 Minuten
|
|
||||||
*/5 * * * * root /bin/bash -c 'if ! systemctl is-active --quiet lightdm; then echo "\$(date): Cron startet LightDM neu" >> /var/log/system-cron-watchdog.log; systemctl start lightdm; fi'
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# RC.Local verstärken
|
|
||||||
cat > "/etc/rc.local" << EOF
|
|
||||||
#!/bin/bash
|
|
||||||
# Verstärkter rc.local - Kiosk-Fallback
|
|
||||||
|
|
||||||
# Logge Start
|
|
||||||
echo "\$(date): rc.local gestartet" >> /var/log/kiosk-fallback.log
|
|
||||||
|
|
||||||
# Warte auf System-Initialisierung
|
|
||||||
sleep 20
|
|
||||||
|
|
||||||
# Starte Backend-Service falls nicht läuft
|
|
||||||
if ! systemctl is-active --quiet myp-druckerverwaltung; then
|
|
||||||
echo "\$(date): Starte Backend-Service" >> /var/log/kiosk-fallback.log
|
|
||||||
systemctl start myp-druckerverwaltung
|
|
||||||
sleep 10
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Warte auf Backend-Verfügbarkeit
|
|
||||||
for i in {1..30}; do
|
|
||||||
if curl -s http://localhost:5000 >/dev/null 2>&1; then
|
|
||||||
echo "\$(date): Backend verfügbar nach \$i Versuchen" >> /var/log/kiosk-fallback.log
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
sleep 2
|
|
||||||
done
|
|
||||||
|
|
||||||
# Starte LightDM falls nicht läuft
|
|
||||||
if ! systemctl is-active --quiet lightdm; then
|
|
||||||
echo "\$(date): Starte LightDM" >> /var/log/kiosk-fallback.log
|
|
||||||
systemctl start lightdm
|
|
||||||
sleep 5
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Prüfe nach 30 Sekunden ob Kiosk-Benutzer angemeldet ist
|
|
||||||
sleep 30
|
|
||||||
if ! pgrep -u $KIOSK_USER > /dev/null; then
|
|
||||||
echo "\$(date): Kiosk-Benutzer nicht angemeldet - starte LightDM neu" >> /var/log/kiosk-fallback.log
|
|
||||||
systemctl restart lightdm
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "\$(date): rc.local Kiosk-Fallback abgeschlossen" >> /var/log/kiosk-fallback.log
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
EOF
|
|
||||||
|
|
||||||
chmod +x "/etc/rc.local"
|
|
||||||
|
|
||||||
info "Watchdog-Services verstärkt"
|
|
||||||
|
|
||||||
log "✅ Watchdog-Verstärkung abgeschlossen"
|
|
||||||
}
|
|
||||||
|
|
||||||
# ========================== SYSTEM-SERVICES OPTIMIEREN ==========================
|
|
||||||
optimize_services() {
|
|
||||||
log "=== SERVICE-OPTIMIERUNG ==="
|
|
||||||
|
|
||||||
progress "Optimiere System-Services für schnelleren Start..."
|
|
||||||
|
|
||||||
# Deaktiviere unnötige Services
|
|
||||||
DISABLE_SERVICES=(
|
|
||||||
"bluetooth"
|
|
||||||
"hciuart"
|
|
||||||
"triggerhappy"
|
|
||||||
"avahi-daemon"
|
|
||||||
"cups"
|
|
||||||
"cups-browsed"
|
|
||||||
"ModemManager"
|
|
||||||
"wpa_supplicant"
|
|
||||||
)
|
|
||||||
|
|
||||||
for service in "${DISABLE_SERVICES[@]}"; do
|
|
||||||
if systemctl is-enabled --quiet "$service" 2>/dev/null; then
|
|
||||||
systemctl disable "$service" 2>/dev/null || true
|
|
||||||
info "Service '$service' deaktiviert"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
# Optimiere wichtige Services
|
|
||||||
systemctl enable myp-druckerverwaltung
|
|
||||||
systemctl enable lightdm
|
|
||||||
systemctl enable kiosk-watchdog-enhanced
|
|
||||||
|
|
||||||
# Systemd-Daemon neu laden
|
|
||||||
systemctl daemon-reload
|
|
||||||
|
|
||||||
info "Services optimiert"
|
|
||||||
|
|
||||||
log "✅ Service-Optimierung abgeschlossen"
|
|
||||||
}
|
|
||||||
|
|
||||||
# ========================== SYSTEM-PARAMETER OPTIMIEREN ==========================
|
|
||||||
optimize_system_parameters() {
|
|
||||||
log "=== SYSTEM-PARAMETER OPTIMIERUNG ==="
|
|
||||||
|
|
||||||
progress "Optimiere System-Parameter..."
|
|
||||||
|
|
||||||
# Systemd-Logind für Kiosk optimieren
|
|
||||||
mkdir -p "/etc/systemd/logind.conf.d"
|
|
||||||
cat > "/etc/systemd/logind.conf.d/kiosk.conf" << EOF
|
|
||||||
[Login]
|
|
||||||
# Verhindere dass System bei Inaktivität heruntergefahren wird
|
|
||||||
IdleAction=ignore
|
|
||||||
IdleActionSec=infinity
|
|
||||||
|
|
||||||
# Verhindere Suspend/Hibernate
|
|
||||||
HandlePowerKey=ignore
|
|
||||||
HandleSuspendKey=ignore
|
|
||||||
HandleHibernateKey=ignore
|
|
||||||
HandleLidSwitch=ignore
|
|
||||||
|
|
||||||
# Session-Einstellungen für Kiosk
|
|
||||||
KillUserProcesses=no
|
|
||||||
UserStopDelaySec=10
|
|
||||||
|
|
||||||
# Automatic VT allocation
|
|
||||||
ReserveVT=1
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# Kernel-Parameter für bessere Performance
|
|
||||||
cat > "/etc/sysctl.d/99-kiosk-performance.conf" << EOF
|
|
||||||
# Kiosk-Performance Optimierungen
|
|
||||||
vm.swappiness=10
|
|
||||||
vm.dirty_ratio=15
|
|
||||||
vm.dirty_background_ratio=5
|
|
||||||
kernel.sched_autogroup_enabled=0
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# Tmpfs für bessere Performance
|
|
||||||
if ! grep -q "tmpfs.*tmp" /etc/fstab; then
|
|
||||||
echo "tmpfs /tmp tmpfs defaults,noatime,nosuid,size=100m 0 0" >> /etc/fstab
|
|
||||||
info "Tmpfs für /tmp konfiguriert"
|
|
||||||
fi
|
|
||||||
|
|
||||||
info "System-Parameter optimiert"
|
|
||||||
|
|
||||||
log "✅ System-Parameter Optimierung abgeschlossen"
|
|
||||||
}
|
|
||||||
|
|
||||||
# ========================== WARTUNGSTOOLS ERSTELLEN ==========================
|
|
||||||
create_maintenance_tools() {
|
|
||||||
log "=== WARTUNGSTOOLS ERSTELLEN ==="
|
|
||||||
|
|
||||||
progress "Erstelle Wartungs-Skript..."
|
|
||||||
|
|
||||||
# Wartungsskript
|
|
||||||
cat > "/usr/local/bin/myp-maintenance" << 'EOF'
|
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
case "$1" in
|
|
||||||
start)
|
|
||||||
echo "Starte alle MYP-Services..."
|
|
||||||
systemctl start myp-druckerverwaltung
|
|
||||||
systemctl start nginx
|
|
||||||
systemctl start lightdm
|
|
||||||
echo "Services gestartet."
|
|
||||||
;;
|
|
||||||
stop)
|
|
||||||
echo "Stoppe alle MYP-Services..."
|
|
||||||
systemctl stop lightdm
|
|
||||||
systemctl stop nginx
|
|
||||||
systemctl stop myp-druckerverwaltung
|
|
||||||
echo "Services gestoppt."
|
|
||||||
;;
|
|
||||||
restart)
|
|
||||||
echo "Starte alle MYP-Services neu..."
|
|
||||||
systemctl restart myp-druckerverwaltung
|
|
||||||
sleep 3
|
|
||||||
systemctl restart nginx
|
|
||||||
systemctl restart lightdm
|
|
||||||
echo "Services neugestartet."
|
|
||||||
;;
|
|
||||||
status)
|
|
||||||
echo "=== MYP SYSTEM STATUS ==="
|
|
||||||
echo
|
|
||||||
echo "📱 Anwendung:"
|
|
||||||
systemctl status myp-druckerverwaltung --no-pager -l
|
|
||||||
echo
|
|
||||||
echo "🌐 Nginx Proxy:"
|
|
||||||
systemctl status nginx --no-pager -l
|
|
||||||
echo
|
|
||||||
echo "🖥️ Display Manager:"
|
|
||||||
systemctl status lightdm --no-pager -l
|
|
||||||
echo
|
|
||||||
echo "👤 Kiosk-Benutzer-Sessions:"
|
|
||||||
who | grep kiosk || echo "Kein Kiosk-Benutzer angemeldet"
|
|
||||||
echo
|
|
||||||
echo "🌐 Anwendung erreichbar:"
|
|
||||||
if curl -s http://localhost:5000 > /dev/null; then
|
|
||||||
echo "✅ http://localhost:5000 erreichbar"
|
|
||||||
else
|
|
||||||
echo "❌ http://localhost:5000 NICHT erreichbar"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
logs)
|
|
||||||
echo "=== ANWENDUNGS-LOGS (Strg+C zum Beenden) ==="
|
|
||||||
journalctl -u myp-druckerverwaltung -f
|
|
||||||
;;
|
|
||||||
kiosk-logs)
|
|
||||||
echo "=== KIOSK-LOGS (Strg+C zum Beenden) ==="
|
|
||||||
echo "LightDM-Logs:"
|
|
||||||
journalctl -u lightdm -f &
|
|
||||||
echo "Session-Logs:"
|
|
||||||
tail -f /var/log/kiosk-session.log 2>/dev/null &
|
|
||||||
wait
|
|
||||||
;;
|
|
||||||
exit-kiosk)
|
|
||||||
echo "🔐 KIOSK-MODUS BEENDEN"
|
|
||||||
echo "WARNUNG: Stoppt den Kiosk und aktiviert Wartungsmodus!"
|
|
||||||
echo "Passwort erforderlich für Sicherheit."
|
|
||||||
read -s -p "Kiosk-Passwort: " password
|
|
||||||
echo
|
|
||||||
if [ "$password" = "744563017196A" ]; then
|
|
||||||
echo "✅ Passwort korrekt - beende Kiosk-Modus..."
|
|
||||||
systemctl stop lightdm
|
|
||||||
systemctl enable ssh
|
|
||||||
systemctl start ssh
|
|
||||||
echo "🔧 Wartungsmodus aktiviert:"
|
|
||||||
echo " • Kiosk gestoppt"
|
|
||||||
echo " • SSH aktiviert"
|
|
||||||
echo " • Console verfügbar"
|
|
||||||
echo "Kiosk-Neustart mit: myp-maintenance start"
|
|
||||||
else
|
|
||||||
echo "❌ Falsches Passwort! Kiosk bleibt aktiv."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
enable-ssh)
|
|
||||||
echo "Aktiviere SSH für Wartung..."
|
|
||||||
systemctl enable ssh
|
|
||||||
systemctl start ssh
|
|
||||||
echo "✅ SSH aktiviert für Remote-Wartung"
|
|
||||||
echo "SSH-Status: $(systemctl is-active ssh)"
|
|
||||||
echo "IP-Adresse: $(hostname -I | awk '{print $1}')"
|
|
||||||
;;
|
|
||||||
disable-ssh)
|
|
||||||
echo "Deaktiviere SSH für Sicherheit..."
|
|
||||||
systemctl stop ssh
|
|
||||||
systemctl disable ssh
|
|
||||||
echo "✅ SSH deaktiviert"
|
|
||||||
;;
|
|
||||||
check-health)
|
|
||||||
echo "=== SYSTEM-GESUNDHEITSCHECK ==="
|
|
||||||
echo
|
|
||||||
# Services-Check
|
|
||||||
echo "📋 Service-Status:"
|
|
||||||
for service in myp-druckerverwaltung nginx lightdm; do
|
|
||||||
if systemctl is-active --quiet $service; then
|
|
||||||
echo " ✅ $service: aktiv"
|
|
||||||
else
|
|
||||||
echo " ❌ $service: INAKTIV"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
echo
|
|
||||||
# Netzwerk-Check
|
|
||||||
echo "🌐 Netzwerk-Status:"
|
|
||||||
if curl -s http://localhost:5000 > /dev/null; then
|
|
||||||
echo " ✅ Anwendung erreichbar"
|
|
||||||
else
|
|
||||||
echo " ❌ Anwendung NICHT erreichbar"
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo
|
|
||||||
# Kiosk-Check
|
|
||||||
echo "🖥️ Kiosk-Status:"
|
|
||||||
if pgrep -u kiosk > /dev/null; then
|
|
||||||
echo " ✅ Kiosk-Benutzer angemeldet"
|
|
||||||
else
|
|
||||||
echo " ❌ Kiosk-Benutzer NICHT angemeldet"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if pgrep -f "chromium.*kiosk" > /dev/null; then
|
|
||||||
echo " ✅ Chromium-Kiosk läuft"
|
|
||||||
else
|
|
||||||
echo " ❌ Chromium-Kiosk läuft NICHT"
|
|
||||||
fi
|
|
||||||
echo
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "MYP Druckerverwaltung - Wartungstool"
|
|
||||||
echo
|
|
||||||
echo "VERWENDUNG: $0 BEFEHL"
|
|
||||||
echo
|
|
||||||
echo "SERVICE-MANAGEMENT:"
|
|
||||||
echo " start Alle Services starten"
|
|
||||||
echo " stop Alle Services stoppen"
|
|
||||||
echo " restart Alle Services neustarten"
|
|
||||||
echo " status Detaillierter Status aller Services"
|
|
||||||
echo
|
|
||||||
echo "LOGS & MONITORING:"
|
|
||||||
echo " logs Live Anwendungs-Logs anzeigen"
|
|
||||||
echo " kiosk-logs Live Kiosk-Logs anzeigen"
|
|
||||||
echo " check-health System-Gesundheitscheck"
|
|
||||||
echo
|
|
||||||
echo "KIOSK-KONTROLLE:"
|
|
||||||
echo " exit-kiosk Kiosk beenden (Passwort: 744563017196A)"
|
|
||||||
echo " enable-ssh SSH für Remote-Wartung aktivieren"
|
|
||||||
echo " disable-ssh SSH wieder deaktivieren"
|
|
||||||
echo
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
EOF
|
|
||||||
|
|
||||||
chmod +x "/usr/local/bin/myp-maintenance"
|
|
||||||
|
|
||||||
# Kiosk-Starter-Skript
|
|
||||||
progress "Erstelle Kiosk-Starter-Skript..."
|
|
||||||
|
|
||||||
KIOSK_HOME="/home/$KIOSK_USER"
|
|
||||||
|
|
||||||
cat > "$KIOSK_HOME/start-kiosk.sh" << EOF
|
|
||||||
#!/bin/bash
|
|
||||||
# MYP Kiosk-Starter
|
|
||||||
|
|
||||||
export DISPLAY=:0
|
|
||||||
|
|
||||||
# Logging für Debugging
|
|
||||||
exec > >(tee -a /var/log/kiosk-session.log) 2>&1
|
|
||||||
echo "\$(date): Kiosk-Session gestartet für Benutzer $KIOSK_USER"
|
|
||||||
|
|
||||||
# Bildschirmschoner deaktivieren
|
|
||||||
xset s off
|
|
||||||
xset s noblank
|
|
||||||
xset s noexpose
|
|
||||||
xset -dpms
|
|
||||||
|
|
||||||
# Mauszeiger verstecken
|
|
||||||
unclutter -idle 0.5 -root &
|
|
||||||
|
|
||||||
# Warte auf Anwendung
|
|
||||||
echo "Warte auf MYP-Anwendung..."
|
|
||||||
WAIT_COUNT=0
|
|
||||||
while ! curl -s http://localhost:5000 > /dev/null; do
|
|
||||||
echo "Warte auf MYP-Anwendung... (\$WAIT_COUNT/30)"
|
|
||||||
sleep 2
|
|
||||||
WAIT_COUNT=\$((WAIT_COUNT + 1))
|
|
||||||
if [ \$WAIT_COUNT -gt 30 ]; then
|
|
||||||
echo "FEHLER: MYP-Anwendung nach 60s nicht erreichbar!"
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
# Starte Chromium im Kiosk-Modus
|
|
||||||
if command -v chromium &> /dev/null; then
|
|
||||||
CHROMIUM_BIN="chromium"
|
|
||||||
elif command -v chromium-browser &> /dev/null; then
|
|
||||||
CHROMIUM_BIN="chromium-browser"
|
|
||||||
else
|
|
||||||
echo "Chromium nicht gefunden! Versuche alternativ Firefox..."
|
|
||||||
if command -v firefox &> /dev/null; then
|
|
||||||
firefox --kiosk http://localhost:5000
|
|
||||||
exit 0
|
|
||||||
else
|
|
||||||
echo "Kein unterstützter Browser gefunden!"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Starte \$CHROMIUM_BIN im Kiosk-Modus..."
|
|
||||||
|
|
||||||
\$CHROMIUM_BIN --kiosk --no-sandbox --disable-infobars --disable-session-crashed-bubble http://localhost:5000
|
|
||||||
|
|
||||||
echo "\$(date): Kiosk-Session beendet"
|
|
||||||
EOF
|
|
||||||
|
|
||||||
chmod +x "$KIOSK_HOME/start-kiosk.sh"
|
|
||||||
chown "$KIOSK_USER:$KIOSK_USER" "$KIOSK_HOME/start-kiosk.sh"
|
|
||||||
|
|
||||||
# Erstelle leere Log-Dateien
|
|
||||||
touch /var/log/kiosk-session.log
|
|
||||||
touch /var/log/kiosk-watchdog.log
|
|
||||||
touch /var/log/kiosk-autostart.log
|
|
||||||
touch /var/log/kiosk-fallback.log
|
|
||||||
chmod 666 /var/log/kiosk-session.log
|
|
||||||
chmod 666 /var/log/kiosk-watchdog.log
|
|
||||||
chmod 666 /var/log/kiosk-autostart.log
|
|
||||||
chmod 666 /var/log/kiosk-fallback.log
|
|
||||||
|
|
||||||
log "✅ Wartungstools erstellt"
|
|
||||||
}
|
|
||||||
|
|
||||||
# ========================== SERVICE-DATEIEN ERSTELLEN ==========================
|
|
||||||
create_service_files() {
|
|
||||||
log "=== SERVICE-DATEIEN ERSTELLEN ==="
|
|
||||||
|
|
||||||
progress "Erstelle myp-druckerverwaltung.service..."
|
|
||||||
|
|
||||||
# Service-Datei für die Hauptanwendung
|
|
||||||
cat > "/etc/systemd/system/myp-druckerverwaltung.service" << EOF
|
|
||||||
[Unit]
|
|
||||||
Description=MYP Druckerverwaltung Flask Application
|
|
||||||
After=network.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
Type=simple
|
|
||||||
User=$APP_USER
|
|
||||||
Group=$APP_USER
|
|
||||||
WorkingDirectory=$APP_DIR
|
|
||||||
Environment=PATH=/usr/local/bin:/usr/bin:/bin
|
|
||||||
Environment=PYTHONPATH=$APP_DIR
|
|
||||||
ExecStart=/usr/bin/python3 $APP_DIR/app.py
|
|
||||||
Restart=always
|
|
||||||
RestartSec=10
|
|
||||||
StandardOutput=journal
|
|
||||||
StandardError=journal
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# Erstelle eine einfache app.py falls keine vorhanden ist
|
|
||||||
if [ ! -f "$APP_DIR/app.py" ]; then
|
|
||||||
progress "Erstelle einfache app.py als Platzhalter..."
|
|
||||||
mkdir -p "$APP_DIR"
|
|
||||||
cat > "$APP_DIR/app.py" << 'EOF'
|
|
||||||
#!/usr/bin/python3
|
|
||||||
# Einfache Flask-Anwendung als Platzhalter
|
|
||||||
|
|
||||||
from flask import Flask, render_template_string
|
|
||||||
|
|
||||||
app = Flask(__name__)
|
|
||||||
|
|
||||||
@app.route('/')
|
|
||||||
def home():
|
|
||||||
return render_template_string("""
|
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>MYP Druckerverwaltung</title>
|
|
||||||
<style>
|
|
||||||
body { font-family: Arial, sans-serif; margin: 0; padding: 0; background: #f5f5f5; }
|
|
||||||
.container { max-width: 800px; margin: 0 auto; padding: 20px; }
|
|
||||||
h1 { color: #333; }
|
|
||||||
.box { background: white; border-radius: 5px; padding: 20px; box-shadow: 0 2px 5px rgba(0,0,0,0.1); }
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="container">
|
|
||||||
<h1>MYP Druckerverwaltung</h1>
|
|
||||||
<div class="box">
|
|
||||||
<h2>System erfolgreich gestartet</h2>
|
|
||||||
<p>Die MYP Druckerverwaltung läuft im Kiosk-Modus.</p>
|
|
||||||
<p>Sie können diese Anwendung nun durch Ihre eigentliche Anwendung ersetzen.</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
""")
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
app.run(host='0.0.0.0', port=5000)
|
|
||||||
EOF
|
|
||||||
chmod +x "$APP_DIR/app.py"
|
|
||||||
chown "$APP_USER:$APP_USER" "$APP_DIR/app.py"
|
|
||||||
|
|
||||||
# Installiere Flask falls nicht vorhanden
|
|
||||||
if ! python3 -c "import flask" &>/dev/null; then
|
|
||||||
progress "Installiere Flask..."
|
|
||||||
pip3 install flask --break-system-packages || true
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Erstelle Templates-Verzeichnis falls nicht vorhanden
|
|
||||||
if [ ! -d "$APP_DIR/templates" ]; then
|
|
||||||
mkdir -p "$APP_DIR/templates"
|
|
||||||
chown "$APP_USER:$APP_USER" "$APP_DIR/templates"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Erstelle Static-Verzeichnis falls nicht vorhanden
|
|
||||||
if [ ! -d "$APP_DIR/static" ]; then
|
|
||||||
mkdir -p "$APP_DIR/static"
|
|
||||||
chown "$APP_USER:$APP_USER" "$APP_DIR/static"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Systemd neu laden
|
|
||||||
systemctl daemon-reload
|
|
||||||
|
|
||||||
log "✅ Service-Dateien erstellt"
|
|
||||||
}
|
|
||||||
|
|
||||||
# ========================== HAUPTFUNKTION ==========================
|
|
||||||
main() {
|
|
||||||
log "=== RASPBERRY PI SCHNELLSTART-OPTIMIERUNG GESTARTET ==="
|
|
||||||
|
|
||||||
check_root
|
|
||||||
check_system
|
|
||||||
install_essential_packages
|
|
||||||
create_service_files
|
|
||||||
optimize_boot
|
|
||||||
strengthen_autologin
|
|
||||||
optimize_kiosk_user
|
|
||||||
create_maintenance_tools
|
|
||||||
strengthen_watchdog
|
|
||||||
optimize_services
|
|
||||||
optimize_system_parameters
|
|
||||||
|
|
||||||
log "=== OPTIMIERUNG ABGESCHLOSSEN ==="
|
|
||||||
log ""
|
|
||||||
log "🎉 RASPBERRY PI SCHNELLSTART-OPTIMIERUNG ERFOLGREICH!"
|
|
||||||
log ""
|
|
||||||
log "📋 ZUSAMMENFASSUNG:"
|
|
||||||
log " ✅ Service-Dateien erstellt"
|
|
||||||
log " ✅ Boot-Parameter optimiert"
|
|
||||||
log " ✅ Autologin verstärkt"
|
|
||||||
log " ✅ Kiosk-Benutzer optimiert"
|
|
||||||
log " ✅ Wartungstools erstellt"
|
|
||||||
log " ✅ Watchdog-Services verstärkt"
|
|
||||||
log " ✅ System-Services optimiert"
|
|
||||||
log " ✅ System-Parameter optimiert"
|
|
||||||
log ""
|
|
||||||
log "🔄 NEUSTART ERFORDERLICH:"
|
|
||||||
log " sudo reboot"
|
|
||||||
log ""
|
|
||||||
log "📊 NACH DEM NEUSTART:"
|
|
||||||
log " - System startet automatisch ohne Anmeldung"
|
|
||||||
log " - Kiosk-Modus wird automatisch gestartet"
|
|
||||||
log " - Web-UI ist sofort verfügbar"
|
|
||||||
log " - Mehrfache Überwachung aktiv"
|
|
||||||
log ""
|
|
||||||
log "🔧 WARTUNG:"
|
|
||||||
log " sudo myp-maintenance status # System-Status prüfen"
|
|
||||||
log " sudo myp-maintenance logs # Logs anzeigen"
|
|
||||||
log " sudo myp-maintenance restart # Services neustarten"
|
|
||||||
log ""
|
|
||||||
|
|
||||||
warning "WICHTIG: Führen Sie jetzt 'sudo reboot' aus, um die Optimierungen zu aktivieren!"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Skript ausführen
|
|
||||||
main "$@"
|
|
@ -1 +1,293 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# ===================================================================
|
||||||
|
# MYP Kiosk-Setup Test und Validierung
|
||||||
|
# Testet alle Komponenten der Kiosk-Installation
|
||||||
|
# ===================================================================
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Farben für Ausgabe
|
||||||
|
RED='\033[0;31m'
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
YELLOW='\033[1;33m'
|
||||||
|
BLUE='\033[0;34m'
|
||||||
|
NC='\033[0m'
|
||||||
|
|
||||||
|
# Test-Funktionen
|
||||||
|
test_passed() {
|
||||||
|
echo -e "${GREEN}✅ $1${NC}"
|
||||||
|
}
|
||||||
|
|
||||||
|
test_failed() {
|
||||||
|
echo -e "${RED}❌ $1${NC}"
|
||||||
|
}
|
||||||
|
|
||||||
|
test_warning() {
|
||||||
|
echo -e "${YELLOW}⚠️ $1${NC}"
|
||||||
|
}
|
||||||
|
|
||||||
|
test_info() {
|
||||||
|
echo -e "${BLUE}ℹ️ $1${NC}"
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "====================================================================="
|
||||||
|
echo "🧪 MYP Kiosk-Setup Validierung"
|
||||||
|
echo "====================================================================="
|
||||||
|
echo
|
||||||
|
|
||||||
|
# ========================== SYSTEM-TESTS ==========================
|
||||||
|
echo "🔍 SYSTEM-TESTS"
|
||||||
|
echo "---------------------------------------------------------------------"
|
||||||
|
|
||||||
|
# Benutzer-Tests
|
||||||
|
if id "kiosk" &>/dev/null; then
|
||||||
|
test_passed "Kiosk-Benutzer existiert"
|
||||||
|
else
|
||||||
|
test_failed "Kiosk-Benutzer fehlt"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if id "myp" &>/dev/null; then
|
||||||
|
test_passed "MYP-Benutzer existiert"
|
||||||
|
else
|
||||||
|
test_failed "MYP-Benutzer fehlt"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Verzeichnis-Tests
|
||||||
|
if [ -d "/opt/myp-druckerverwaltung" ]; then
|
||||||
|
test_passed "MYP-Anwendungsverzeichnis existiert"
|
||||||
|
else
|
||||||
|
test_failed "MYP-Anwendungsverzeichnis fehlt"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f "/opt/myp-druckerverwaltung/app.py" ]; then
|
||||||
|
test_passed "Flask-Anwendung gefunden"
|
||||||
|
else
|
||||||
|
test_warning "Flask-Anwendung nicht gefunden (wird erstellt)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ========================== SERVICE-TESTS ==========================
|
||||||
|
echo
|
||||||
|
echo "🔧 SERVICE-TESTS"
|
||||||
|
echo "---------------------------------------------------------------------"
|
||||||
|
|
||||||
|
# Systemd-Services prüfen
|
||||||
|
services=("myp-druckerverwaltung" "lightdm" "kiosk-chromium")
|
||||||
|
|
||||||
|
for service in "${services[@]}"; do
|
||||||
|
if systemctl is-enabled --quiet "$service" 2>/dev/null; then
|
||||||
|
test_passed "Service '$service' ist aktiviert"
|
||||||
|
|
||||||
|
if systemctl is-active --quiet "$service" 2>/dev/null; then
|
||||||
|
test_passed "Service '$service' läuft"
|
||||||
|
else
|
||||||
|
test_warning "Service '$service' läuft nicht (normal vor Reboot)"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
test_failed "Service '$service' ist nicht aktiviert"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# ========================== KONFIGURATION-TESTS ==========================
|
||||||
|
echo
|
||||||
|
echo "⚙️ KONFIGURATION-TESTS"
|
||||||
|
echo "---------------------------------------------------------------------"
|
||||||
|
|
||||||
|
# LightDM-Konfiguration
|
||||||
|
if [ -f "/etc/lightdm/lightdm.conf" ]; then
|
||||||
|
if grep -q "autologin-user=kiosk" /etc/lightdm/lightdm.conf; then
|
||||||
|
test_passed "LightDM Autologin konfiguriert"
|
||||||
|
else
|
||||||
|
test_failed "LightDM Autologin nicht konfiguriert"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
test_failed "LightDM-Konfiguration fehlt"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Kiosk-Skript
|
||||||
|
if [ -f "/home/kiosk/start-kiosk.sh" ]; then
|
||||||
|
if [ -x "/home/kiosk/start-kiosk.sh" ]; then
|
||||||
|
test_passed "Kiosk-Starter-Skript vorhanden und ausführbar"
|
||||||
|
else
|
||||||
|
test_failed "Kiosk-Starter-Skript nicht ausführbar"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
test_failed "Kiosk-Starter-Skript fehlt"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Openbox-Konfiguration
|
||||||
|
if [ -f "/home/kiosk/.config/openbox/rc.xml" ]; then
|
||||||
|
test_passed "Openbox-Konfiguration vorhanden"
|
||||||
|
else
|
||||||
|
test_failed "Openbox-Konfiguration fehlt"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Desktop-Autostart
|
||||||
|
if [ -f "/home/kiosk/.config/autostart/myp-kiosk.desktop" ]; then
|
||||||
|
test_passed "Desktop-Autostart konfiguriert"
|
||||||
|
else
|
||||||
|
test_failed "Desktop-Autostart fehlt"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ========================== PAKET-TESTS ==========================
|
||||||
|
echo
|
||||||
|
echo "📦 PAKET-TESTS"
|
||||||
|
echo "---------------------------------------------------------------------"
|
||||||
|
|
||||||
|
# Wichtige Pakete prüfen
|
||||||
|
packages=("chromium" "openbox" "lightdm" "python3" "unclutter" "xorg")
|
||||||
|
|
||||||
|
for package in "${packages[@]}"; do
|
||||||
|
if dpkg -l | grep -q "^ii.*$package" 2>/dev/null; then
|
||||||
|
test_passed "Paket '$package' installiert"
|
||||||
|
elif command -v "$package" &>/dev/null; then
|
||||||
|
test_passed "Programm '$package' verfügbar"
|
||||||
|
else
|
||||||
|
test_failed "Paket/Programm '$package' fehlt"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Chromium-Binary finden
|
||||||
|
if command -v chromium &>/dev/null; then
|
||||||
|
test_passed "Chromium-Binary gefunden: $(which chromium)"
|
||||||
|
elif command -v chromium-browser &>/dev/null; then
|
||||||
|
test_passed "Chromium-Browser-Binary gefunden: $(which chromium-browser)"
|
||||||
|
else
|
||||||
|
test_failed "Kein Chromium-Binary gefunden"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ========================== NETZWERK-TESTS ==========================
|
||||||
|
echo
|
||||||
|
echo "🌐 NETZWERK-TESTS"
|
||||||
|
echo "---------------------------------------------------------------------"
|
||||||
|
|
||||||
|
# Internetverbindung
|
||||||
|
if ping -c 1 google.com &>/dev/null; then
|
||||||
|
test_passed "Internetverbindung verfügbar"
|
||||||
|
else
|
||||||
|
test_warning "Keine Internetverbindung (optional)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Lokale Ports testen (falls Services laufen)
|
||||||
|
if systemctl is-active --quiet myp-druckerverwaltung 2>/dev/null; then
|
||||||
|
if curl -s --connect-timeout 5 http://localhost:5000 >/dev/null 2>&1; then
|
||||||
|
test_passed "Port 5000 erreichbar"
|
||||||
|
else
|
||||||
|
test_warning "Port 5000 nicht erreichbar"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if curl -s --connect-timeout 5 http://localhost:8080 >/dev/null 2>&1; then
|
||||||
|
test_passed "Port 8080 erreichbar"
|
||||||
|
else
|
||||||
|
test_info "Port 8080 nicht verfügbar (optional)"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
test_info "Backend-Service nicht aktiv - Port-Tests übersprungen"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ========================== RASPBERRY PI TESTS ==========================
|
||||||
|
echo
|
||||||
|
echo "🍓 RASPBERRY PI TESTS"
|
||||||
|
echo "---------------------------------------------------------------------"
|
||||||
|
|
||||||
|
if grep -q "Raspberry Pi" /proc/cpuinfo 2>/dev/null; then
|
||||||
|
test_passed "Raspberry Pi erkannt"
|
||||||
|
|
||||||
|
# Boot-Konfiguration prüfen
|
||||||
|
if [ -f "/boot/config.txt" ]; then
|
||||||
|
if grep -q "gpu_mem=" /boot/config.txt; then
|
||||||
|
GPU_MEM=$(grep "gpu_mem=" /boot/config.txt | cut -d= -f2)
|
||||||
|
test_passed "GPU Memory Split konfiguriert: ${GPU_MEM}MB"
|
||||||
|
else
|
||||||
|
test_warning "GPU Memory Split nicht konfiguriert"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if grep -q "disable_splash=1" /boot/config.txt; then
|
||||||
|
test_passed "Boot-Splash deaktiviert"
|
||||||
|
else
|
||||||
|
test_warning "Boot-Splash nicht deaktiviert"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
test_warning "/boot/config.txt nicht gefunden"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Temperatur prüfen
|
||||||
|
if command -v vcgencmd &>/dev/null; then
|
||||||
|
TEMP=$(vcgencmd measure_temp 2>/dev/null | cut -d= -f2 | cut -d"'" -f1)
|
||||||
|
if [ -n "$TEMP" ]; then
|
||||||
|
test_passed "CPU Temperatur: ${TEMP}°C"
|
||||||
|
if (( $(echo "$TEMP > 70" | bc -l 2>/dev/null || echo 0) )); then
|
||||||
|
test_warning "Hohe CPU Temperatur: ${TEMP}°C"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
test_info "Kein Raspberry Pi - Pi-spezifische Tests übersprungen"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ========================== WARTUNGSTOOLS-TESTS ==========================
|
||||||
|
echo
|
||||||
|
echo "🔧 WARTUNGSTOOLS-TESTS"
|
||||||
|
echo "---------------------------------------------------------------------"
|
||||||
|
|
||||||
|
if [ -f "/usr/local/bin/myp-maintenance" ]; then
|
||||||
|
if [ -x "/usr/local/bin/myp-maintenance" ]; then
|
||||||
|
test_passed "Wartungstool verfügbar"
|
||||||
|
else
|
||||||
|
test_failed "Wartungstool nicht ausführbar"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
test_failed "Wartungstool fehlt"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Log-Verzeichnisse
|
||||||
|
if [ -f "/var/log/kiosk-session.log" ]; then
|
||||||
|
test_passed "Kiosk-Session-Log verfügbar"
|
||||||
|
else
|
||||||
|
test_warning "Kiosk-Session-Log nicht vorhanden"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ========================== ZUSAMMENFASSUNG ==========================
|
||||||
|
echo
|
||||||
|
echo "====================================================================="
|
||||||
|
echo "📊 TEST-ZUSAMMENFASSUNG"
|
||||||
|
echo "====================================================================="
|
||||||
|
|
||||||
|
# Zähle Tests
|
||||||
|
TOTAL_TESTS=$(grep -E "(test_passed|test_failed|test_warning)" "$0" | wc -l)
|
||||||
|
echo "Gesamte Tests durchgeführt: $TOTAL_TESTS"
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "🎯 NÄCHSTE SCHRITTE:"
|
||||||
|
echo "---------------------------------------------------------------------"
|
||||||
|
|
||||||
|
if systemctl is-active --quiet lightdm 2>/dev/null; then
|
||||||
|
echo "✅ System ist bereits im Kiosk-Modus"
|
||||||
|
echo " - Kiosk läuft bereits"
|
||||||
|
echo " - Verwenden Sie 'sudo myp-maintenance status' für Details"
|
||||||
|
else
|
||||||
|
echo "🔄 System-Neustart erforderlich:"
|
||||||
|
echo " sudo reboot"
|
||||||
|
echo
|
||||||
|
echo "📋 Nach dem Neustart:"
|
||||||
|
echo " - System startet automatisch ohne Login"
|
||||||
|
echo " - Chromium öffnet im Kiosk-Modus"
|
||||||
|
echo " - Anwendung ist unter http://localhost:5000 oder :8080 verfügbar"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "🔧 WARTUNG:"
|
||||||
|
echo " sudo myp-maintenance status # System-Status"
|
||||||
|
echo " sudo myp-maintenance logs # Live-Logs"
|
||||||
|
echo " sudo myp-maintenance restart # Services neustarten"
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "📋 LOG-DATEIEN:"
|
||||||
|
echo " tail -f /var/log/kiosk-session.log"
|
||||||
|
echo " journalctl -u myp-druckerverwaltung -f"
|
||||||
|
echo " journalctl -u lightdm -f"
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo "====================================================================="
|
||||||
|
echo "🏁 Test abgeschlossen"
|
||||||
|
echo "====================================================================="
|
Loading…
x
Reference in New Issue
Block a user