create service sh hinzugefügt
parent
4a51ae5c83
commit
e112537164
1 changed files with 257 additions and 0 deletions
257
create-service-sh.md
Normal file
257
create-service-sh.md
Normal file
|
|
@ -0,0 +1,257 @@
|
|||
# create-service.sh
|
||||
|
||||
**System-Service für furt automatisch erstellen**
|
||||
|
||||
## Getestet unter
|
||||
- OpenBSD 7.7
|
||||
- Debian 12
|
||||
- Arch Linux
|
||||
|
||||
## Zweck des Scripts
|
||||
|
||||
Das `create-service.sh` Script erstellt System-Services für furt mit betriebssystem-spezifischen Templates aus dem Repository. OpenBSD verwendet rc.d-Scripts, Linux nutzt systemd-Units.
|
||||
|
||||
Das Script eliminiert manuelles Kopieren von Service-Definitionen und stellt sicher dass furt als System-Service korrekt konfiguriert und aktiviert wird.
|
||||
|
||||
## Wie das Script funktioniert
|
||||
|
||||
Das Script ist Template-basiert und nutzt vorgefertigte Service-Definitionen aus dem `deployment/` Verzeichnis. Es prüft zunächst ob es sich im furt-Quellverzeichnis befindet:
|
||||
|
||||
```bash
|
||||
if [ ! -d "deployment" ]; then
|
||||
echo "Error: deployment/ directory not found - not in furt source directory?"
|
||||
exit 1
|
||||
fi
|
||||
```
|
||||
|
||||
Dann kopiert es die passende Service-Definition basierend auf dem Betriebssystem:
|
||||
|
||||
```bash
|
||||
if [ "$(uname)" = "OpenBSD" ]; then
|
||||
cp deployment/openbsd/rc.d-furt /etc/rc.d/furt
|
||||
chmod +x /etc/rc.d/furt
|
||||
echo "furt_flags=" >> /etc/rc.conf.local
|
||||
rcctl enable furt
|
||||
```
|
||||
|
||||
Das Template-System stellt sicher dass Service-Definitionen mit der furt-Codebase versioniert werden und bei Updates automatisch die neuesten Konfigurationen erhalten.
|
||||
|
||||
## Betriebssystem-Philosophien verstehen
|
||||
|
||||
Die verschiedenen Service-Systeme spiegeln unterschiedliche System-Design-Philosophien wider:
|
||||
|
||||
### BSD-Ansatz (OpenBSD)
|
||||
OpenBSD nutzt das traditionelle rc.d-System mit einfachen Shell-Scripts. Diese Scripts sind menschenlesbar, editierbar und folgen einer klaren, vorhersagbaren Struktur.
|
||||
|
||||
```bash
|
||||
# OpenBSD rc.d-Service
|
||||
cp deployment/openbsd/rc.d-furt /etc/rc.d/furt
|
||||
chmod +x /etc/rc.d/furt
|
||||
echo "furt_flags=" >> /etc/rc.conf.local
|
||||
rcctl enable furt
|
||||
```
|
||||
|
||||
Das rc.d-System ist minimalistisch aber mächtig - Services werden über `rcctl` verwaltet und Konfiguration erfolgt über `/etc/rc.conf.local`. Diese Einfachheit macht Debugging und Anpassungen straightforward.
|
||||
|
||||
### Linux-Ansatz (systemd)
|
||||
Linux-Distributionen nutzen meist systemd als Service-Manager. systemd bietet erweiterte Features wie Dependency-Management, Socket-Activation und Resource-Limiting.
|
||||
|
||||
```bash
|
||||
# systemd Service-Unit
|
||||
cp deployment/linux/furt.service /etc/systemd/system/
|
||||
systemctl daemon-reload
|
||||
systemctl enable furt
|
||||
```
|
||||
|
||||
Der `daemon-reload` ist notwendig damit systemd neue Service-Units erkennt. Das `enable` sorgt für automatischen Start beim Boot - unabhängig vom aktuellen Service-Status.
|
||||
|
||||
## Template-Architektur verstehen
|
||||
|
||||
Das Script nutzt Repository-Templates statt Inline-Generierung:
|
||||
|
||||
**Template-Vorteile:** Service-Definitionen sind versioniert, testbar und reviewbar. Änderungen werden über Git getrackt und können einfach rückgängig gemacht werden.
|
||||
|
||||
**Consistency:** Alle furt-Installationen nutzen identische Service-Konfigurationen. Templates stellen sicher dass bewährte Praktiken automatisch angewendet werden.
|
||||
|
||||
**Maintainability:** Updates an Service-Definitionen werden zentral im Repository verwaltet. Bei Fresh-Installations werden automatisch die neuesten Templates verwendet.
|
||||
|
||||
## Service-Management nach Installation
|
||||
|
||||
Nach erfolgreicher Script-Ausführung ist furt als System-Service konfiguriert:
|
||||
|
||||
### OpenBSD Service-Management
|
||||
```bash
|
||||
# Service starten
|
||||
rcctl start furt
|
||||
|
||||
# Service stoppen
|
||||
rcctl stop furt
|
||||
|
||||
# Service-Status prüfen
|
||||
rcctl check furt
|
||||
|
||||
# Service-Logs anzeigen
|
||||
tail -f /var/log/daemon
|
||||
```
|
||||
|
||||
### Linux Service-Management
|
||||
```bash
|
||||
# Service starten
|
||||
systemctl start furt
|
||||
|
||||
# Service stoppen
|
||||
systemctl stop furt
|
||||
|
||||
# Service-Status prüfen
|
||||
systemctl status furt
|
||||
|
||||
# Service-Logs anzeigen
|
||||
journalctl -u furt -f
|
||||
```
|
||||
|
||||
## Script praktisch nutzen
|
||||
|
||||
### Standard-Installation
|
||||
```bash
|
||||
# Nach setup-user.sh und setup-directories.sh ausführen
|
||||
sudo ./scripts/create-service.sh
|
||||
```
|
||||
|
||||
Ausgabe bestätigt die Service-Erstellung:
|
||||
```
|
||||
OpenBSD service created and enabled using repository template
|
||||
```
|
||||
|
||||
### Als Teil der orchestrierten Installation
|
||||
```bash
|
||||
./install.sh
|
||||
# [INFO] Phase 4: Creating system service... OK
|
||||
```
|
||||
|
||||
Das Orchestrator-Script ruft `create-service.sh` nach der Binary-Installation auf damit der Service auf die korrekte furt-Binary verweist.
|
||||
|
||||
### Upgrade-Installation
|
||||
```bash
|
||||
# Service-Update explizit anfordern
|
||||
./install.sh --create-service
|
||||
```
|
||||
|
||||
Im Upgrade-Modus wird Service-Erstellung übersprungen außer explizit angefordert. Das verhindert Überschreibung von manuell angepassten Service-Konfigurationen.
|
||||
|
||||
## Installation validieren
|
||||
|
||||
Nach der Script-Ausführung kannst du die Service-Installation prüfen:
|
||||
|
||||
```bash
|
||||
# OpenBSD
|
||||
ls -la /etc/rc.d/furt
|
||||
grep furt_flags /etc/rc.conf.local
|
||||
rcctl ls enabled | grep furt
|
||||
|
||||
# Linux
|
||||
ls -la /etc/systemd/system/furt.service
|
||||
systemctl list-unit-files | grep furt
|
||||
```
|
||||
|
||||
Korrekte Installation zeigt:
|
||||
```
|
||||
# OpenBSD
|
||||
-rwxr-xr-x 1 root wheel 1234 Nov 15 10:30 /etc/rc.d/furt
|
||||
furt_flags=
|
||||
furt
|
||||
|
||||
# Linux
|
||||
-rw-r--r-- 1 root root 567 Nov 15 10:30 /etc/systemd/system/furt.service
|
||||
furt.service enabled
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### "deployment/ directory not found"
|
||||
```
|
||||
Error: deployment/ directory not found - not in furt source directory?
|
||||
```
|
||||
Das Script muss aus dem furt-Quellverzeichnis ausgeführt werden:
|
||||
```bash
|
||||
cd /path/to/furt-source
|
||||
sudo ./scripts/create-service.sh
|
||||
```
|
||||
|
||||
### "Template not found"
|
||||
```
|
||||
Error: deployment/openbsd/rc.d-furt template not found
|
||||
```
|
||||
Das Repository ist unvollständig oder beschädigt:
|
||||
```bash
|
||||
# Prüfe Template-Verzeichnis
|
||||
ls -la deployment/
|
||||
git status # Prüfe auf fehlende Dateien
|
||||
```
|
||||
|
||||
### "Permission denied" bei Service-Erstellung
|
||||
```
|
||||
cp: /etc/rc.d/furt: Permission denied
|
||||
```
|
||||
Das Script benötigt Root-Rechte für System-Service-Installation:
|
||||
```bash
|
||||
sudo ./scripts/create-service.sh # Linux
|
||||
doas ./scripts/create-service.sh # OpenBSD
|
||||
```
|
||||
|
||||
### Service kann nicht aktiviert werden
|
||||
```
|
||||
rcctl: furt: failed
|
||||
```
|
||||
Prüfe ob die furt-Binary existiert und ausführbar ist:
|
||||
```bash
|
||||
ls -la /usr/local/bin/furt
|
||||
# Binary muss vor Service-Erstellung installiert sein
|
||||
```
|
||||
|
||||
### systemd kann Service nicht laden
|
||||
```
|
||||
systemctl: Failed to enable unit: Invalid argument
|
||||
```
|
||||
Prüfe Template-Syntax:
|
||||
```bash
|
||||
systemd-analyze verify /etc/systemd/system/furt.service
|
||||
```
|
||||
|
||||
## Template anpassen
|
||||
|
||||
### OpenBSD rc.d-Anpassungen
|
||||
```bash
|
||||
# Bearbeite deployment/openbsd/rc.d-furt
|
||||
# Dann Script erneut ausführen
|
||||
sudo ./scripts/create-service.sh
|
||||
```
|
||||
|
||||
### systemd-Unit-Anpassungen
|
||||
```bash
|
||||
# Bearbeite deployment/linux/furt.service
|
||||
# Dann Script erneut ausführen
|
||||
sudo ./scripts/create-service.sh
|
||||
systemctl daemon-reload # Nach manuellen Änderungen
|
||||
```
|
||||
|
||||
## Script erweitern
|
||||
|
||||
### Zusätzliche Service-Manager
|
||||
```bash
|
||||
elif [ "$(uname)" = "NetBSD" ]; then
|
||||
# NetBSD nutzt ebenfalls rc.d
|
||||
cp deployment/netbsd/rc.d-furt /etc/rc.d/furt
|
||||
chmod +x /etc/rc.d/furt
|
||||
echo "furt=YES" >> /etc/rc.conf
|
||||
echo "NetBSD service created and enabled"
|
||||
```
|
||||
|
||||
### Custom Installation-Pfade
|
||||
```bash
|
||||
# Support für alternative Prefixes
|
||||
PREFIX="${PREFIX:-/usr/local}"
|
||||
cp deployment/openbsd/rc.d-furt /etc/rc.d/furt
|
||||
sed -i "s|/usr/local|$PREFIX|g" /etc/rc.d/furt
|
||||
```
|
||||
|
||||
Das `create-service.sh` Script abstrahiert die Komplexität verschiedener Service-Management-Systeme und macht furt zu einem echten System-Service der automatisch startet, überwacht wird und in die Betriebssystem-Verwaltung integriert ist.
|
||||
Loading…
Add table
Add a link
Reference in a new issue