OpenBSD rc.d Service-File-Problem #77

Closed
opened 2025-06-23 12:46:31 +02:00 by Michael · 1 comment
Michael commented 2025-06-23 12:46:31 +02:00 (Migrated from gitea.dragons-at-work.de)

🎯 Session-Übergabe: Deployment-Script erfolgreich, Service-File-Problem isoliert

Was funktioniert:

Deployment-Script ist production-ready:

  • Files deployed - karl → walter korrekt übertragen
  • Permissions fixed - _furt:_furt ownership
  • Service-File erstellt - /etc/rc.d/furt mit korrekten Pfaden
  • Service enabled - rcctl enable furt
  • HTTP-Server funktioniert - Health-Check: {"status":"healthy"}
  • Manual start.sh works - ./scripts/start.sh start läuft perfekt

Noch offen:

OpenBSD rc.d Service-File-Problem:

  • Service startet (furt(ok)) aber wird nicht getrackt (furt(failed))
  • pexp Pattern-Matching funktioniert nicht korrekt
  • rcctl stop kann Service nicht stoppen
  • Root-Cause: Shell-Script-Wrapper + OpenBSD rc.d Incompatibility

🔧 Nächste Session:

  1. RC_DEBUG=1 Output analysieren - Was passiert genau beim Start?
  2. pexp Pattern testen - Verschiedene Patterns systematisch testen
  3. Alternative rc.d Approaches - Custom rc_start(), daemon(8), direkter lua-Aufruf
  4. Fallback-Strategie - Manual Service-Management wenn rc.d nicht funktioniert

📋 Status:

Issue #76: 90% erfolgreich - Deployment funktioniert, nur Service-Tracking problematisch.


🚀 Git-Commit-Message:

feat(deployment): implement comprehensive karl→walter deployment script

- Add automated rsync-based file synchronization with _furt user permissions
- Implement OpenBSD rcctl service management with backup/rollback functionality  
- Add port availability checks and health validation after deployment
- Include comprehensive error handling and status reporting
- Support dry-run mode for safe deployment testing
- Provide automatic service file generation with correct paths

Features:
- SSH-based secure transfer with permission preservation
- Pre-deployment backup with configurable retention (3 backups)
- Intelligent service stop/start handling for OpenBSD rcctl
- Health check validation via HTTP endpoint
- Colored output and structured logging for better UX
- Support for --dry-run, --rollback, and --force modes

Successfully deploys furt-lua from development (karl) to staging (walter).
Manual service management required due to OpenBSD rc.d pexp pattern issues.

Closes #76 (deployment automation)
Related: Service file pexp pattern matching requires follow-up investigation

Files:
- scripts/deploy/deploy_walter.sh (new)

Das Deployment-Script ist ein voller Erfolg! 🎉

Das Service-File-Problem ist isoliert und blockiert nicht die Hauptfunktionalität - furt läuft perfekt, nur das OpenBSD-Tracking ist problematisch.

## 🎯 Session-Übergabe: Deployment-Script erfolgreich, Service-File-Problem isoliert ### ✅ Was funktioniert: **Deployment-Script ist production-ready:** - ✅ **Files deployed** - karl → walter korrekt übertragen - ✅ **Permissions fixed** - `_furt:_furt` ownership - ✅ **Service-File erstellt** - `/etc/rc.d/furt` mit korrekten Pfaden - ✅ **Service enabled** - `rcctl enable furt` - ✅ **HTTP-Server funktioniert** - Health-Check: `{"status":"healthy"}` - ✅ **Manual start.sh works** - `./scripts/start.sh start` läuft perfekt ### ❌ Noch offen: **OpenBSD rc.d Service-File-Problem:** - Service startet (`furt(ok)`) aber wird nicht getrackt (`furt(failed)`) - `pexp` Pattern-Matching funktioniert nicht korrekt - `rcctl stop` kann Service nicht stoppen - Root-Cause: Shell-Script-Wrapper + OpenBSD rc.d Incompatibility ### 🔧 Nächste Session: 1. **RC_DEBUG=1 Output analysieren** - Was passiert genau beim Start? 2. **pexp Pattern testen** - Verschiedene Patterns systematisch testen 3. **Alternative rc.d Approaches** - Custom rc_start(), daemon(8), direkter lua-Aufruf 4. **Fallback-Strategie** - Manual Service-Management wenn rc.d nicht funktioniert ### 📋 Status: **Issue #76: 90% erfolgreich** - Deployment funktioniert, nur Service-Tracking problematisch. --- ## 🚀 Git-Commit-Message: ```bash feat(deployment): implement comprehensive karl→walter deployment script - Add automated rsync-based file synchronization with _furt user permissions - Implement OpenBSD rcctl service management with backup/rollback functionality - Add port availability checks and health validation after deployment - Include comprehensive error handling and status reporting - Support dry-run mode for safe deployment testing - Provide automatic service file generation with correct paths Features: - SSH-based secure transfer with permission preservation - Pre-deployment backup with configurable retention (3 backups) - Intelligent service stop/start handling for OpenBSD rcctl - Health check validation via HTTP endpoint - Colored output and structured logging for better UX - Support for --dry-run, --rollback, and --force modes Successfully deploys furt-lua from development (karl) to staging (walter). Manual service management required due to OpenBSD rc.d pexp pattern issues. Closes #76 (deployment automation) Related: Service file pexp pattern matching requires follow-up investigation Files: - scripts/deploy/deploy_walter.sh (new) ``` **Das Deployment-Script ist ein voller Erfolg!** 🎉 Das Service-File-Problem ist isoliert und blockiert nicht die Hauptfunktionalität - furt läuft perfekt, nur das OpenBSD-Tracking ist problematisch.
Michael commented 2025-06-23 19:51:56 +02:00 (Migrated from gitea.dragons-at-work.de)

ISSUE #77 KOMPLETT GELÖST

🎯 Root-Cause gefunden und behoben:

Problem: OpenBSD rc.subr überschreibt automatisch das pexp Pattern basierend auf ${daemon}${daemon_flags}, aber der tatsächlich laufende Prozess unterscheidet sich vom Wrapper-Script.

Was erwartet wurde:

/usr/local/furt/furt-lua/scripts/start.sh start

Was tatsächlich läuft:

/usr/local/bin/lua src/main.lua (lua51)

🔧 Lösung implementiert:

1. Service-File Fix (/etc/rc.d/furt):

#!/bin/ksh
daemon="/usr/local/furt/furt-lua/scripts/start.sh"
daemon_user="_furt"
daemon_cwd="/usr/local/furt/furt-lua"
daemon_flags="start"

. /etc/rc.d/rc.subr

# CRITICAL: pexp NACH rc.subr überschreiben
pexp="/usr/local/bin/lua src/main.lua.*"

rc_cmd $1

2. TTY-basierte Daemon-Detection in start.sh:

if [ ! -t 0 ]; then
    # Service mode (rcctl) - Background
    $LUA_CMD src/main.lua &
    echo "Furt started in daemon mode (PID: $!)"
else
    # Interactive mode (development) - Foreground
    echo "Press Ctrl+C to stop"
    $LUA_CMD src/main.lua
fi

3. Deployment-Script Process-Detection Fix:

# Von (broken): '_furt.*furt-lua.*src/main.lua'
# Zu (working): pgrep -u _furt -f 'src/main.lua'

验证结果:

Service-Management funktioniert:

walter$ doas rcctl start furt
furt(ok)
walter$ doas rcctl check furt  
furt(ok)
walter$ doas rcctl stop furt
furt(ok)

Health-Check funktioniert:

walter$ curl http://127.0.0.1:8080/health
{"version":"1.0.0","status":"healthy","service":"furt-lua"}

Deployment-Workflow funktioniert:

[SUCCESS] Service started successfully (rcctl: running, process: running)
[SUCCESS] Health check passed
[SUCCESS] Deployment completed successfully!

🔍 Technische Details:

OpenBSD rc.subr Besonderheit:

  • rc.subr generiert automatisch pexp="$(eval echo ${daemon}${daemon_flags:+ ${daemon_flags}})"
  • Dies geschieht NACH dem Sourcing von rc.subr
  • Daher muss pexp NACH . /etc/rc.d/rc.subr überschrieben werden

pgrep -xf Verhalten:

  • -x = Exact match des kompletten Command-Strings
  • -f = Match gegen vollständige Argument-Liste
  • Pattern muss exakt mit der ps-Ausgabe übereinstimmen

📋 Follow-up Issues erstellt:

  • Service-File Repository Integration: Template-basiertes Deployment
  • Dokumentation: OpenBSD rc.d Guide und Troubleshooting
  • pexp-Pattern Optimierung: Eindeutigere Service-Identification

🎉 Ergebnis:

Furt ist jetzt production-ready auf OpenBSD mit:

  • Vollständiges Service-Management (start/stop/check/restart)
  • Automatisches Deployment karl → walter
  • Health-Check Integration
  • Backup/Rollback-Mechanismen
  • TTY-basierte Mode-Detection (Development vs Production)

Issue #77 ist vollständig resolved. 🚀

## ✅ ISSUE #77 KOMPLETT GELÖST ### 🎯 Root-Cause gefunden und behoben: **Problem:** OpenBSD `rc.subr` überschreibt automatisch das `pexp` Pattern basierend auf `${daemon}${daemon_flags}`, aber der tatsächlich laufende Prozess unterscheidet sich vom Wrapper-Script. **Was erwartet wurde:** ``` /usr/local/furt/furt-lua/scripts/start.sh start ``` **Was tatsächlich läuft:** ``` /usr/local/bin/lua src/main.lua (lua51) ``` ### 🔧 Lösung implementiert: **1. Service-File Fix (`/etc/rc.d/furt`):** ```bash #!/bin/ksh daemon="/usr/local/furt/furt-lua/scripts/start.sh" daemon_user="_furt" daemon_cwd="/usr/local/furt/furt-lua" daemon_flags="start" . /etc/rc.d/rc.subr # CRITICAL: pexp NACH rc.subr überschreiben pexp="/usr/local/bin/lua src/main.lua.*" rc_cmd $1 ``` **2. TTY-basierte Daemon-Detection in start.sh:** ```bash if [ ! -t 0 ]; then # Service mode (rcctl) - Background $LUA_CMD src/main.lua & echo "Furt started in daemon mode (PID: $!)" else # Interactive mode (development) - Foreground echo "Press Ctrl+C to stop" $LUA_CMD src/main.lua fi ``` **3. Deployment-Script Process-Detection Fix:** ```bash # Von (broken): '_furt.*furt-lua.*src/main.lua' # Zu (working): pgrep -u _furt -f 'src/main.lua' ``` ### ✅验证结果: **Service-Management funktioniert:** ```bash walter$ doas rcctl start furt furt(ok) walter$ doas rcctl check furt furt(ok) walter$ doas rcctl stop furt furt(ok) ``` **Health-Check funktioniert:** ```bash walter$ curl http://127.0.0.1:8080/health {"version":"1.0.0","status":"healthy","service":"furt-lua"} ``` **Deployment-Workflow funktioniert:** ``` [SUCCESS] Service started successfully (rcctl: running, process: running) [SUCCESS] Health check passed [SUCCESS] Deployment completed successfully! ``` ### 🔍 Technische Details: **OpenBSD rc.subr Besonderheit:** - `rc.subr` generiert automatisch `pexp="$(eval echo ${daemon}${daemon_flags:+ ${daemon_flags}})"` - Dies geschieht NACH dem Sourcing von `rc.subr` - Daher muss `pexp` NACH `. /etc/rc.d/rc.subr` überschrieben werden **pgrep -xf Verhalten:** - `-x` = Exact match des kompletten Command-Strings - `-f` = Match gegen vollständige Argument-Liste - Pattern muss exakt mit der ps-Ausgabe übereinstimmen ### 📋 Follow-up Issues erstellt: - **Service-File Repository Integration:** Template-basiertes Deployment - **Dokumentation:** OpenBSD rc.d Guide und Troubleshooting - **pexp-Pattern Optimierung:** Eindeutigere Service-Identification ### 🎉 Ergebnis: **Furt ist jetzt production-ready auf OpenBSD mit:** - ✅ Vollständiges Service-Management (start/stop/check/restart) - ✅ Automatisches Deployment karl → walter - ✅ Health-Check Integration - ✅ Backup/Rollback-Mechanismen - ✅ TTY-basierte Mode-Detection (Development vs Production) **Issue #77 ist vollständig resolved.** 🚀
michael added this to the v0.1.2 - Gateway Basics milestone 2025-08-14 05:21:02 +02:00
michael added
status
done
and removed
status
in-progress
labels 2025-08-14 07:23:17 +02:00
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: DAW/furt#77
No description provided.