🎉 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.
+298 -32
View File
@@ -115,7 +115,6 @@ remove_desktop_environments() {
libreoffice* \
thunderbird* \
firefox* \
chromium-browser \
vlc* \
gimp* \
scratch* \
@@ -165,10 +164,24 @@ install_minimal_x11() {
x11-xserver-utils \
xdotool \
unclutter \
chromium-browser \
openbox \
|| 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"
}
@@ -316,6 +329,66 @@ install_system_dependencies() {
create_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)
progress "Erstelle myp-kiosk.service (Port 5000)..."
cat > "/etc/systemd/system/${SERVICE_NAME_KIOSK}.service" << EOF
@@ -374,20 +447,7 @@ Type=simple
User=root
Group=root
WorkingDirectory=$APP_DIR
ExecStart=/usr/bin/python3 -c "
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)
"
ExecStart=/usr/bin/python3 $APP_DIR/start_https.py
Restart=always
RestartSec=5
StartLimitBurst=5
@@ -431,15 +491,7 @@ Type=simple
User=root
Group=root
WorkingDirectory=$APP_DIR
ExecStart=/usr/bin/python3 -c "
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)
"
ExecStart=/usr/bin/python3 $APP_DIR/start_http.py
Restart=always
RestartSec=5
StartLimitBurst=5
@@ -469,7 +521,7 @@ ReadWritePaths=$APP_DIR
WantedBy=multi-user.target
EOF
log "✅ 3 Backend-Services erstellt"
log "✅ 3 Backend-Services mit separaten Python-Skripten erstellt"
}
# ========================== AUTOLOGIN KONFIGURIEREN ==========================
@@ -498,6 +550,110 @@ configure_kiosk_browser() {
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
progress "Konfiguriere automatischen X-Start..."
cat >> "$KIOSK_HOME/.bashrc" << 'EOF'
@@ -509,18 +665,32 @@ fi
EOF
# .xinitrc für Kiosk-Session erstellen
progress "Erstelle Kiosk X-Session..."
progress "Erstelle optimierte Kiosk X-Session..."
cat > "$KIOSK_HOME/.xinitrc" << 'EOF'
#!/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 noblank
xset s noexpose
xset -dpms
xset s 0 0
# Mauszeiger verstecken
unclutter -idle 0.5 -root &
# Mauszeiger verstecken (aggressiver)
unclutter -idle 0.1 -root -noevents &
# Openbox im Hintergrund starten
openbox &
# Warte auf Backend-Services
echo "Warte auf MYP Backend-Services..."
@@ -537,7 +707,48 @@ done
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 \
--kiosk \
--no-sandbox \
@@ -557,6 +768,8 @@ exec chromium-browser \
--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 \
@@ -566,14 +779,67 @@ exec chromium-browser \
--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
# Berechtigungen setzen
chmod +x "$KIOSK_HOME/.xinitrc"
chown -R "$KIOSK_USER:$KIOSK_USER" "$KIOSK_HOME"
log "✅ Kiosk-Browser konfiguriert"
log "✅ Kiosk-Browser mit optimiertem Vollbildmodus konfiguriert"
}
# ========================== PRODUKTIONS-KIOSK SETUP ==========================