🎉 Improved installer script ('installer.sh')

This commit is contained in:
Till Tomczak 2025-05-31 22:11:31 +02:00
parent a36c14115a
commit f0692d1816
12 changed files with 327 additions and 61 deletions

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,7 +707,48 @@ 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
if command -v chromium >/dev/null 2>&1; then
echo "Starte Chromium Browser mit Auflösung ${WIDTH}x${HEIGHT}..."
exec chromium \
--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 chromium-browser >/dev/null 2>&1; then
echo "Starte Chromium-Browser mit Auflösung ${WIDTH}x${HEIGHT}..."
exec chromium-browser \ exec chromium-browser \
--kiosk \ --kiosk \
--no-sandbox \ --no-sandbox \
@ -557,6 +768,8 @@ exec chromium-browser \
--no-default-browser-check \ --no-default-browser-check \
--autoplay-policy=no-user-gesture-required \ --autoplay-policy=no-user-gesture-required \
--start-fullscreen \ --start-fullscreen \
--start-maximized \
--window-size=${WIDTH},${HEIGHT} \
--window-position=0,0 \ --window-position=0,0 \
--user-data-dir=/home/kiosk/.chromium-kiosk \ --user-data-dir=/home/kiosk/.chromium-kiosk \
--disable-background-mode \ --disable-background-mode \
@ -566,14 +779,67 @@ exec chromium-browser \
--disable-dev-shm-usage \ --disable-dev-shm-usage \
--memory-pressure-off \ --memory-pressure-off \
--max_old_space_size=512 \ --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 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 ==========================