🎉 Improved backend documentation and removed unnecessary scripts. 📚 #feat(backend)

This commit is contained in:
Till Tomczak 2025-05-31 20:52:47 +02:00
parent 7f7657fa80
commit c849e37493
6 changed files with 294 additions and 5021 deletions

1
backend/app/README.md Normal file
View File

@ -0,0 +1 @@

View File

@ -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 "$@"

View File

@ -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

View File

@ -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 "$@"

View File

@ -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 "====================================================================="