🎉 Improved installer script ('installer.sh')

This commit is contained in:
2025-05-31 22:11:31 +02:00
parent a36c14115a
commit f0692d1816
12 changed files with 327 additions and 61 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+327 -61
View File
@@ -115,7 +115,6 @@ remove_desktop_environments() {
libreoffice* \ libreoffice* \
thunderbird* \ thunderbird* \
firefox* \ firefox* \
chromium-browser \
vlc* \ vlc* \
gimp* \ gimp* \
scratch* \ scratch* \
@@ -165,10 +164,24 @@ install_minimal_x11() {
x11-xserver-utils \ x11-xserver-utils \
xdotool \ xdotool \
unclutter \ unclutter \
chromium-browser \
openbox \ openbox \
|| error "X11 Installation fehlgeschlagen" || error "X11 Installation fehlgeschlagen"
# Chromium Browser mit Fallback-Mechanismus installieren
progress "Installiere Chromium Browser..."
if apt-get install -y chromium 2>/dev/null; then
log "✅ Chromium erfolgreich installiert"
elif apt-get install -y chromium-browser 2>/dev/null; then
log "✅ Chromium-Browser erfolgreich installiert"
elif apt-get install -y firefox-esr 2>/dev/null; then
warning "⚠️ Chromium nicht verfügbar - Firefox ESR als Fallback installiert"
# Firefox-Konfiguration für Kiosk-Modus anpassen
progress "Konfiguriere Firefox für Kiosk-Modus..."
FIREFOX_BROWSER="firefox-esr"
else
error "❌ Kein Browser verfügbar (chromium, chromium-browser, firefox-esr)"
fi
log "✅ Minimale X11-Umgebung installiert" log "✅ Minimale X11-Umgebung installiert"
} }
@@ -316,6 +329,66 @@ install_system_dependencies() {
create_backend_services() { create_backend_services() {
log "=== ERSTELLE 3 BACKEND-SERVICES ===" log "=== ERSTELLE 3 BACKEND-SERVICES ==="
# Python-Startskripte für die verschiedenen Ports erstellen
progress "Erstelle Python-Startskripte..."
# HTTPS-Startskript (Port 443)
cat > "$APP_DIR/start_https.py" << 'EOF'
#!/usr/bin/env python3
import sys
import os
# Füge App-Verzeichnis zum Python-Pfad hinzu
sys.path.insert(0, '/opt/myp')
# Setze Umgebungsvariablen
os.environ['FLASK_PORT'] = '443'
os.environ['FLASK_HOST'] = '0.0.0.0'
os.environ['FLASK_ENV'] = 'production'
try:
from app import app, get_ssl_context
ssl_context = get_ssl_context()
if ssl_context:
print("Starte HTTPS-Server auf Port 443...")
app.run(host='0.0.0.0', port=443, debug=False, ssl_context=ssl_context, threaded=True)
else:
print('SSL-Kontext nicht verfügbar')
sys.exit(1)
except Exception as e:
print(f"Fehler beim Starten des HTTPS-Servers: {e}")
sys.exit(1)
EOF
# HTTP-Startskript (Port 80)
cat > "$APP_DIR/start_http.py" << 'EOF'
#!/usr/bin/env python3
import sys
import os
# Füge App-Verzeichnis zum Python-Pfad hinzu
sys.path.insert(0, '/opt/myp')
# Setze Umgebungsvariablen
os.environ['FLASK_PORT'] = '80'
os.environ['FLASK_HOST'] = '0.0.0.0'
os.environ['FLASK_ENV'] = 'production'
try:
from app import app
print("Starte HTTP-Server auf Port 80...")
app.run(host='0.0.0.0', port=80, debug=False, threaded=True)
except Exception as e:
print(f"Fehler beim Starten des HTTP-Servers: {e}")
sys.exit(1)
EOF
# Skripte ausführbar machen
chmod +x "$APP_DIR/start_https.py"
chmod +x "$APP_DIR/start_http.py"
# Service 1: Kiosk-Backend (Port 5000) # Service 1: Kiosk-Backend (Port 5000)
progress "Erstelle myp-kiosk.service (Port 5000)..." progress "Erstelle myp-kiosk.service (Port 5000)..."
cat > "/etc/systemd/system/${SERVICE_NAME_KIOSK}.service" << EOF cat > "/etc/systemd/system/${SERVICE_NAME_KIOSK}.service" << EOF
@@ -374,20 +447,7 @@ Type=simple
User=root User=root
Group=root Group=root
WorkingDirectory=$APP_DIR WorkingDirectory=$APP_DIR
ExecStart=/usr/bin/python3 -c " ExecStart=/usr/bin/python3 $APP_DIR/start_https.py
import sys, os
sys.path.insert(0, '$APP_DIR')
os.environ['FLASK_PORT'] = '443'
os.environ['FLASK_HOST'] = '0.0.0.0'
os.environ['FLASK_ENV'] = 'production'
from app import app, get_ssl_context
ssl_context = get_ssl_context()
if ssl_context:
app.run(host='0.0.0.0', port=443, debug=False, ssl_context=ssl_context, threaded=True)
else:
print('SSL-Kontext nicht verfügbar')
exit(1)
"
Restart=always Restart=always
RestartSec=5 RestartSec=5
StartLimitBurst=5 StartLimitBurst=5
@@ -431,15 +491,7 @@ Type=simple
User=root User=root
Group=root Group=root
WorkingDirectory=$APP_DIR WorkingDirectory=$APP_DIR
ExecStart=/usr/bin/python3 -c " ExecStart=/usr/bin/python3 $APP_DIR/start_http.py
import sys, os
sys.path.insert(0, '$APP_DIR')
os.environ['FLASK_PORT'] = '80'
os.environ['FLASK_HOST'] = '0.0.0.0'
os.environ['FLASK_ENV'] = 'production'
from app import app
app.run(host='0.0.0.0', port=80, debug=False, threaded=True)
"
Restart=always Restart=always
RestartSec=5 RestartSec=5
StartLimitBurst=5 StartLimitBurst=5
@@ -469,7 +521,7 @@ ReadWritePaths=$APP_DIR
WantedBy=multi-user.target WantedBy=multi-user.target
EOF EOF
log "✅ 3 Backend-Services erstellt" log "✅ 3 Backend-Services mit separaten Python-Skripten erstellt"
} }
# ========================== AUTOLOGIN KONFIGURIEREN ========================== # ========================== AUTOLOGIN KONFIGURIEREN ==========================
@@ -498,6 +550,110 @@ configure_kiosk_browser() {
KIOSK_HOME="/home/$KIOSK_USER" KIOSK_HOME="/home/$KIOSK_USER"
# Openbox-Konfiguration für randlosen Vollbildmodus
progress "Konfiguriere Openbox für randlosen Vollbildmodus..."
mkdir -p "$KIOSK_HOME/.config/openbox"
cat > "$KIOSK_HOME/.config/openbox/rc.xml" << 'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<openbox_config xmlns="http://openbox.org/3.4/rc" xmlns:xi="http://www.w3.org/2001/XInclude">
<resistance>
<strength>10</strength>
<screen_edge_strength>20</screen_edge_strength>
</resistance>
<focus>
<focusNew>yes</focusNew>
<followMouse>no</followMouse>
</focus>
<placement>
<policy>Smart</policy>
<center>yes</center>
</placement>
<theme>
<name>Clearlooks</name>
<titleLayout>NLIMC</titleLayout>
<keepBorder>no</keepBorder>
<animateIconify>yes</animateIconify>
</theme>
<desktops>
<number>1</number>
<firstdesk>1</firstdesk>
<names>
<name>Desktop 1</name>
</names>
<popupTime>875</popupTime>
</desktops>
<resize>
<drawContents>yes</drawContents>
<popupShow>Nonpixel</popupShow>
<popupPosition>Center</popupPosition>
</resize>
<margins>
<top>0</top>
<bottom>0</bottom>
<left>0</left>
<right>0</right>
</margins>
<dock>
<position>TopLeft</position>
<floatingX>0</floatingX>
<floatingY>0</floatingY>
<noStrut>no</noStrut>
<stacking>Above</stacking>
<direction>Vertical</direction>
<autoHide>no</autoHide>
<hideDelay>300</hideDelay>
<showDelay>300</showDelay>
<moveButton>Middle</moveButton>
</dock>
<keyboard>
<!-- Deaktiviere alle Tastenkombinationen für Kiosk-Sicherheit -->
</keyboard>
<mouse>
<dragThreshold>8</dragThreshold>
<doubleClickTime>200</doubleClickTime>
<screenEdgeWarpTime>400</screenEdgeWarpTime>
</mouse>
<applications>
<!-- Chromium/Browser Konfiguration -->
<application name="chromium*">
<decor>no</decor>
<shade>no</shade>
<position force="yes">
<x>0</x>
<y>0</y>
</position>
<size>
<width>100%</width>
<height>100%</height>
</size>
<fullscreen>yes</fullscreen>
<maximized>yes</maximized>
<skip_pager>yes</skip_pager>
<skip_taskbar>yes</skip_taskbar>
<layer>above</layer>
</application>
<application name="firefox*">
<decor>no</decor>
<shade>no</shade>
<position force="yes">
<x>0</x>
<y>0</y>
</position>
<size>
<width>100%</width>
<height>100%</height>
</size>
<fullscreen>yes</fullscreen>
<maximized>yes</maximized>
<skip_pager>yes</skip_pager>
<skip_taskbar>yes</skip_taskbar>
<layer>above</layer>
</application>
</applications>
</openbox_config>
EOF
# .bashrc für automatischen X-Start erweitern # .bashrc für automatischen X-Start erweitern
progress "Konfiguriere automatischen X-Start..." progress "Konfiguriere automatischen X-Start..."
cat >> "$KIOSK_HOME/.bashrc" << 'EOF' cat >> "$KIOSK_HOME/.bashrc" << 'EOF'
@@ -509,18 +665,32 @@ fi
EOF EOF
# .xinitrc für Kiosk-Session erstellen # .xinitrc für Kiosk-Session erstellen
progress "Erstelle Kiosk X-Session..." progress "Erstelle optimierte Kiosk X-Session..."
cat > "$KIOSK_HOME/.xinitrc" << 'EOF' cat > "$KIOSK_HOME/.xinitrc" << 'EOF'
#!/bin/bash #!/bin/bash
# Bildschirmschoner und Energieverwaltung deaktivieren # Bildschirmauflösung automatisch erkennen
RESOLUTION=$(xrandr | grep '*' | head -1 | awk '{print $1}')
if [ -z "$RESOLUTION" ]; then
RESOLUTION="1920x1080" # Fallback-Auflösung
fi
WIDTH=$(echo $RESOLUTION | cut -d'x' -f1)
HEIGHT=$(echo $RESOLUTION | cut -d'x' -f2)
echo "Erkannte Bildschirmauflösung: ${WIDTH}x${HEIGHT}"
# Bildschirmschoner und Energieverwaltung komplett deaktivieren
xset s off xset s off
xset s noblank xset s noblank
xset s noexpose xset s noexpose
xset -dpms xset -dpms
xset s 0 0
# Mauszeiger verstecken # Mauszeiger verstecken (aggressiver)
unclutter -idle 0.5 -root & unclutter -idle 0.1 -root -noevents &
# Openbox im Hintergrund starten
openbox &
# Warte auf Backend-Services # Warte auf Backend-Services
echo "Warte auf MYP Backend-Services..." echo "Warte auf MYP Backend-Services..."
@@ -537,43 +707,139 @@ done
echo "Backend erreichbar - starte Kiosk-Browser..." echo "Backend erreichbar - starte Kiosk-Browser..."
# Chromium im Vollbild-Kiosk-Modus # Browser-Erkennung und -Start mit optimierten Vollbild-Flags
exec chromium-browser \ if command -v chromium >/dev/null 2>&1; then
--kiosk \ echo "Starte Chromium Browser mit Auflösung ${WIDTH}x${HEIGHT}..."
--no-sandbox \ exec chromium \
--disable-infobars \ --kiosk \
--disable-session-crashed-bubble \ --no-sandbox \
--disable-restore-session-state \ --disable-infobars \
--disable-web-security \ --disable-session-crashed-bubble \
--disable-features=TranslateUI \ --disable-restore-session-state \
--disable-extensions \ --disable-web-security \
--disable-plugins \ --disable-features=TranslateUI \
--disable-popup-blocking \ --disable-extensions \
--disable-prompt-on-repost \ --disable-plugins \
--disable-sync \ --disable-popup-blocking \
--disable-translate \ --disable-prompt-on-repost \
--noerrdialogs \ --disable-sync \
--no-first-run \ --disable-translate \
--no-default-browser-check \ --noerrdialogs \
--autoplay-policy=no-user-gesture-required \ --no-first-run \
--start-fullscreen \ --no-default-browser-check \
--window-position=0,0 \ --autoplay-policy=no-user-gesture-required \
--user-data-dir=/home/kiosk/.chromium-kiosk \ --start-fullscreen \
--disable-background-mode \ --start-maximized \
--force-device-scale-factor=1.0 \ --window-size=${WIDTH},${HEIGHT} \
--disable-pinch \ --window-position=0,0 \
--overscroll-history-navigation=0 \ --user-data-dir=/home/kiosk/.chromium-kiosk \
--disable-dev-shm-usage \ --disable-background-mode \
--memory-pressure-off \ --force-device-scale-factor=1.0 \
--max_old_space_size=512 \ --disable-pinch \
http://localhost:5000 --overscroll-history-navigation=0 \
--disable-dev-shm-usage \
--memory-pressure-off \
--max_old_space_size=512 \
--disable-background-timer-throttling \
--disable-backgrounding-occluded-windows \
--disable-renderer-backgrounding \
--disable-features=VizDisplayCompositor \
--enable-features=OverlayScrollbar \
--hide-scrollbars \
http://localhost:5000
elif command -v chromium-browser >/dev/null 2>&1; then
echo "Starte Chromium-Browser mit Auflösung ${WIDTH}x${HEIGHT}..."
exec chromium-browser \
--kiosk \
--no-sandbox \
--disable-infobars \
--disable-session-crashed-bubble \
--disable-restore-session-state \
--disable-web-security \
--disable-features=TranslateUI \
--disable-extensions \
--disable-plugins \
--disable-popup-blocking \
--disable-prompt-on-repost \
--disable-sync \
--disable-translate \
--noerrdialogs \
--no-first-run \
--no-default-browser-check \
--autoplay-policy=no-user-gesture-required \
--start-fullscreen \
--start-maximized \
--window-size=${WIDTH},${HEIGHT} \
--window-position=0,0 \
--user-data-dir=/home/kiosk/.chromium-kiosk \
--disable-background-mode \
--force-device-scale-factor=1.0 \
--disable-pinch \
--overscroll-history-navigation=0 \
--disable-dev-shm-usage \
--memory-pressure-off \
--max_old_space_size=512 \
--disable-background-timer-throttling \
--disable-backgrounding-occluded-windows \
--disable-renderer-backgrounding \
--disable-features=VizDisplayCompositor \
--enable-features=OverlayScrollbar \
--hide-scrollbars \
http://localhost:5000
elif command -v firefox-esr >/dev/null 2>&1; then
echo "Starte Firefox ESR mit Auflösung ${WIDTH}x${HEIGHT}..."
# Firefox-Profil für Kiosk erstellen
mkdir -p /home/kiosk/.mozilla/firefox/kiosk.default
cat > /home/kiosk/.mozilla/firefox/kiosk.default/user.js << FIREFOXEOF
user_pref("browser.shell.checkDefaultBrowser", false);
user_pref("browser.startup.homepage", "http://localhost:5000");
user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true);
user_pref("browser.tabs.warnOnClose", false);
user_pref("browser.sessionstore.resume_from_crash", false);
user_pref("security.tls.insecure_fallback_hosts", "localhost");
user_pref("browser.cache.disk.enable", false);
user_pref("browser.cache.memory.enable", true);
user_pref("browser.cache.offline.enable", false);
user_pref("network.http.use-cache", false);
user_pref("browser.fullscreen.autohide", true);
user_pref("dom.disable_open_during_load", false);
user_pref("privacy.popups.disable_from_plugins", 0);
user_pref("dom.popup_maximum", 0);
FIREFOXEOF
# Firefox CSS für randlosen Vollbildmodus
mkdir -p /home/kiosk/.mozilla/firefox/kiosk.default/chrome
cat > /home/kiosk/.mozilla/firefox/kiosk.default/chrome/userChrome.css << FIREFOXCSS
/* Firefox Kiosk Mode - Hide all UI elements */
#navigator-toolbox { display: none !important; }
#sidebar-box { display: none !important; }
#urlbar-container { display: none !important; }
#TabsToolbar { display: none !important; }
#nav-bar { display: none !important; }
#PersonalToolbar { display: none !important; }
.toolbar-items { display: none !important; }
#main-window[sizemode="fullscreen"] .tabbrowser-tab {
visibility: collapse !important;
}
FIREFOXCSS
exec firefox-esr \
--kiosk \
--width=${WIDTH} \
--height=${HEIGHT} \
--profile /home/kiosk/.mozilla/firefox/kiosk.default \
http://localhost:5000
else
echo "FEHLER: Kein Browser verfügbar!"
exit 1
fi
EOF EOF
# Berechtigungen setzen # Berechtigungen setzen
chmod +x "$KIOSK_HOME/.xinitrc" chmod +x "$KIOSK_HOME/.xinitrc"
chown -R "$KIOSK_USER:$KIOSK_USER" "$KIOSK_HOME" chown -R "$KIOSK_USER:$KIOSK_USER" "$KIOSK_HOME"
log "✅ Kiosk-Browser konfiguriert" log "✅ Kiosk-Browser mit optimiertem Vollbildmodus konfiguriert"
} }
# ========================== PRODUKTIONS-KIOSK SETUP ========================== # ========================== PRODUKTIONS-KIOSK SETUP ==========================