diff --git a/Installation.md b/Installation.md index 2143230..6a3166d 100644 --- a/Installation.md +++ b/Installation.md @@ -2,6 +2,44 @@ **Lua API-Gateway für digitale Souveränität** +## Source-Code beschaffen + +### Git-Repository clonen + +furt-Quellen aus dem Dragons@Work-Repository beschaffen: + +```bash +# Repository clonen +git clone https://smida.dragons-at-work.de/DAW/furt.git /tmp/furt-source +cd /tmp/furt-source +``` + +**Repository-Struktur validieren:** +```bash +# Erforderliche Verzeichnisse prüfen +ls -la src/main.lua config/furt.conf.example scripts/start.sh integrations/ + +# Erwartete Struktur: +# src/ - Lua-Quellcode +# config/ - Konfigurationsbeispiele +# scripts/ - Helper-Scripts (start.sh) +# integrations/ - merkwerk-Integration +# docs/ - Dokumentation +# VERSION - Versions-Information +``` + +**Git-Installation falls erforderlich:** + +*OpenBSD:* +```bash +doas pkg_add git +``` + +*Debian/Ubuntu:* +```bash +apt install git +``` + ## Systemanforderungen verstehen ### Lua-Runtime Anforderungen @@ -75,35 +113,50 @@ Lua sucht Module über `LUA_PATH`-Environment-Variable. furt erweitert Standard- ### 1. Systemanforderungen prüfen -**Lua-Installation validieren:** +**Lua-Installation validieren mit automatischer Command-Detection:** + ```bash -# Lua 5.1 verfügbar? -lua5.1 -v +# Lua-Command erkennen (plattformspezifisch) +if command -v lua5.1 >/dev/null 2>&1; then + LUA_CMD="lua5.1" +elif command -v lua >/dev/null 2>&1; then + LUA_CMD="lua" +else + echo "Kein Lua gefunden" + exit 1 +fi + +# Lua-Version prüfen +$LUA_CMD -v # Erwartete Ausgabe: # Lua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Rio -# Required modules testen -lua5.1 -e "require('socket')" -lua5.1 -e "require('cjson')" +# Required modules testen +$LUA_CMD -e "require('socket')" +$LUA_CMD -e "require('cjson')" ``` +**Warum Command-Detection:** OpenBSD installiert Lua als `lua`, Linux-Distributionen oft als `lua5.1`. + **Fehlende Module installieren:** +*Arch Linux:* +```bash +pacman -S lua51-socket lua51-dkjson lua51-sec +``` + *OpenBSD:* ```bash -pkg_add lua-socket lua-cjson +pkg_add lua-socket lua-cjson luasec ``` *Debian/Ubuntu:* ```bash -apt install lua-socket lua-cjson +apt install lua-socket lua-cjson lua-sec ``` -*Arch Linux:* -```bash -pacman -S lua51-socket lua51-cjson -``` +**Warum lua-sec:** furt nutzt SMTP mit SSL/TLS-Verschlüsselung (Port 465). Ohne SSL-Bibliothek schlägt Mail-Versendung fehl. ### 2. Benutzer und Verzeichnisse erstellen @@ -145,9 +198,13 @@ chown furt:furt /var/log/furt **Source-Code kopieren:** ```bash +# In furt-source-Verzeichnis (aus Schritt 0) +cd /tmp/furt-source + # Haupt-Bibliothek installieren cp -r src/ /usr/local/share/furt/ cp -r config/ /usr/local/share/furt/ +cp -r scripts/ /usr/local/share/furt/ cp -r integrations/ /usr/local/share/furt/ # Versions-Dateien für merkwerk-Integration @@ -159,47 +216,31 @@ chown -R root:wheel /usr/local/share/furt # OpenBSD/FreeBSD chown -R root:root /usr/local/share/furt # Linux chmod -R 644 /usr/local/share/furt find /usr/local/share/furt -type d -exec chmod 755 {} \; +chmod +x /usr/local/share/furt/scripts/start.sh ``` -### 4. Startup-Script erstellen +**Warum scripts/ inkludieren:** Das `start.sh`-Script löst Service-vs-Interactive-Detection und Lua-Command-Erkennung. -**Wrapper-Script für Lua-Pfad-Management:** +### 4. Startup-Script konfigurieren + +**furt nutzt das integrierte `start.sh`-Script für plattformspezifische Anpassungen:** -*OpenBSD/FreeBSD* - `/usr/local/bin/furt`: ```bash -#!/bin/sh -# furt HTTP API-Gateway - -# Lua-Module-Pfad für furt erweitern -export LUA_PATH="/usr/local/share/furt/?.lua;;" - -# Working Directory für relative Pfade +# start.sh-Funktionalität testen cd /usr/local/share/furt +./scripts/start.sh -# Lua-Interpreter mit main.lua starten -exec lua5.1 src/main.lua "$@" +# Erwartete Ausgabe: +# Auto-detected lua command: lua +# Furt HTTP-Server started on 127.0.0.1:7811 +# [...] ``` -*Linux* - `/usr/local/bin/furt`: -```bash -#!/bin/bash -# furt HTTP API-Gateway - -# Lua-Module-Pfad für furt erweitern -export LUA_PATH="/usr/local/share/furt/?.lua;;" - -# Working Directory für relative Pfade -cd /usr/local/share/furt - -# Lua-Interpreter mit main.lua starten -exec lua5.1 src/main.lua "$@" -``` - -```bash -chmod +x /usr/local/bin/furt -``` - -**Warum ein Wrapper-Script:** Lua benötigt explizite Pfad-Konfiguration für Module-Erkennung. Das Script setzt `LUA_PATH` ohne globale Environment-Änderungen. +**Warum start.sh statt direkter Lua-Aufruf:** +- Automatische Lua-Command-Detection (lua vs lua5.1) +- Service-vs-Interactive-Mode-Erkennung +- Plattformspezifische Pfad-Anpassungen +- Robuste Daemon-Integration ### 5. Konfiguration verstehen @@ -249,7 +290,7 @@ allowed_ips = 127.0.0.1, 10.0.0.0/8 # Identische Konfiguration wie oben ``` -**Sicherheits-Berechtigungen:** +**Sicherheits-Berechtigungen für Produktion:** *OpenBSD/FreeBSD:* ```bash @@ -263,19 +304,42 @@ chmod 640 /etc/furt/furt.conf chown root:furt /etc/furt/furt.conf ``` +**Testing-Berechtigungen:** Für manuelle Tests als normaler Benutzer temporär lesbare Berechtigungen setzen: + +```bash +# Temporär für Testing +chmod 644 /usr/local/etc/furt/furt.conf # OpenBSD/FreeBSD +chmod 644 /etc/furt/furt.conf # Linux + +# Nach Testing wieder sichern +chmod 640 /usr/local/etc/furt/furt.conf # OpenBSD/FreeBSD +chmod 640 /etc/furt/furt.conf # Linux +``` + +**Oder als Service-User testen:** +```bash +# OpenBSD/FreeBSD +doas -u _furt /usr/local/share/furt/scripts/start.sh + +# Linux +sudo -u furt /usr/local/share/furt/scripts/start.sh +``` + ### 6. Service-Integration **OpenBSD rc.d-Script** - `/etc/rc.d/furt`: ```bash #!/bin/ksh -daemon="/usr/local/bin/furt" -daemon_flags="" +daemon="/usr/local/share/furt/scripts/start.sh" daemon_user="_furt" -daemon_logger="daemon.info" +daemon_cwd="/usr/local/share/furt" +daemon_flags="start" . /etc/rc.d/rc.subr +pexp="lua.*src/main.lua" + rc_cmd $1 ``` @@ -285,6 +349,8 @@ echo "furt_flags=" >> /etc/rc.conf.local rcctl enable furt ``` +**Warum start.sh statt direkter Lua-Aufruf:** Das integrierte `start.sh`-Script löst Plattform-Detection, Service-Mode-Erkennung und Lua-Command-Detection automatisch. Direkte `exec lua`-Aufrufe hängen im Daemon-Context. + **Linux systemd-Unit** - `/etc/systemd/system/furt.service`: ```ini [Unit] @@ -295,12 +361,12 @@ After=network.target Type=simple User=furt Group=furt -ExecStart=/usr/local/bin/furt +ExecStart=/usr/local/share/furt/scripts/start.sh start +WorkingDirectory=/usr/local/share/furt Restart=always RestartSec=5 StandardOutput=journal StandardError=journal -WorkingDirectory=/usr/local/share/furt [Install] WantedBy=multi-user.target