The service was failing with 'Read-only file system' when trying to create
discovered_sensors.json in the /etc/sensorpajen config directory.
Changes:
- config.py: Add STATE_DIR for runtime state
- System mode: /var/lib/sensorpajen (writable at runtime)
- Dev mode: config/ (same as config directory)
- config.py: Use STATE_DIR for discovered_sensors.json path
- debian/postinst: Create and own /var/lib/sensorpajen
- debian/sensorpajen.service: Add /var/lib/sensorpajen to ReadWritePaths
- debian/postinst: Remove discovered_sensors.json.example copy (created at runtime)
This separates:
- Config: /etc/sensorpajen (static, not updated by service)
- State: /var/lib/sensorpajen (dynamic, updated by service at runtime)
- Create debian/ directory structure with all required files:
- control: Package metadata and dependencies
- compat: Debhelper compatibility level
- changelog: Version history
- rules: Build instructions
- install: File installation mappings
- postinst: Post-installation setup (user, venv, setcap)
- prerm: Pre-removal script (stop service)
- postrm: Post-removal script (cleanup, preserve config)
- sensorpajen.service: System-wide systemd unit
- Update config.py to support dual-mode operation:
- Auto-detects system installation (/opt/sensorpajen)
- Uses /etc/sensorpajen for config in system mode
- Falls back to PROJECT_ROOT/config for development
- Update scripts/approve-sensors.sh for system paths:
- Detects system vs development installation
- Uses correct venv and config paths
- Create scripts/verify-deb.sh: Automated build and verification
- Create debian/README.md: Comprehensive packaging documentation
Package features:
- System-wide installation to /opt/sensorpajen/
- Configuration in /etc/sensorpajen/ (preserved on upgrade/remove)
- Dedicated sensorpajen system user
- Automatic venv creation with dependencies
- Bluetooth capabilities set automatically
- Service auto-enabled but waits for config before starting
- Dual-mode code supports both system and development installations