#!/bin/bash set -e case "$1" in configure) # Create sensorpajen system user if it doesn't exist if ! getent passwd sensorpajen > /dev/null; then useradd --system --no-create-home --shell /usr/sbin/nologin sensorpajen echo "Created system user: sensorpajen" fi # Create config directory with proper permissions mkdir -p /etc/sensorpajen chown sensorpajen:sensorpajen /etc/sensorpajen chmod 750 /etc/sensorpajen # Create state directory with proper permissions (writable at runtime) mkdir -p /var/lib/sensorpajen chown sensorpajen:sensorpajen /var/lib/sensorpajen chmod 750 /var/lib/sensorpajen # Copy example configs to /etc/sensorpajen if they don't exist for sample in sensorpajen.env.example sensors.json.example; do source_file="/usr/share/doc/sensorpajen/examples/$sample" target_file="/etc/sensorpajen/${sample%.example}" if [ -f "$source_file" ] && [ ! -f "$target_file" ]; then cp "$source_file" "$target_file" chown sensorpajen:sensorpajen "$target_file" # Set restrictive permissions on env file (contains credentials) if [ "$sample" = "sensorpajen.env.example" ]; then chmod 600 "$target_file" echo "Created $target_file (edit this file with your MQTT credentials)" else chmod 640 "$target_file" echo "Created $target_file" fi fi done # Create virtual environment in /opt/sensorpajen cd /opt/sensorpajen if [ ! -d "venv" ]; then echo "Creating Python virtual environment..." python3 -m venv venv venv/bin/pip install --upgrade pip setuptools wheel fi # Install Python dependencies from requirements.txt echo "Installing Python dependencies..." if [ -f "/opt/sensorpajen/requirements.txt" ]; then venv/bin/pip install -r /opt/sensorpajen/requirements.txt else echo "Warning: requirements.txt not found, installing bluepy and paho-mqtt directly" venv/bin/pip install bluepy paho-mqtt pybluez fi if [ $? -ne 0 ]; then echo "Error: Failed to install dependencies" exit 1 fi # Install sensorpajen package itself echo "Installing sensorpajen application..." cd /opt/sensorpajen venv/bin/pip install --no-deps . || { echo "Error: Failed to install sensorpajen package" exit 1 } cd / # Set ownership of application directory BEFORE setting capabilities chown -R sensorpajen:sensorpajen /opt/sensorpajen # Set Bluetooth capabilities on Python executable (after ownership change) PYTHON_PATH=$(readlink -f /opt/sensorpajen/venv/bin/python3) if command -v setcap >/dev/null 2>&1; then setcap cap_net_raw,cap_net_admin+eip "$PYTHON_PATH" || { echo "Warning: setcap failed. You may need to run Bluetooth operations as root." echo "Try: sudo setcap cap_net_raw,cap_net_admin+eip $PYTHON_PATH" } else echo "Warning: setcap not found (install libcap2-bin package)" fi # Install systemd service file if [ -f /opt/sensorpajen/debian/sensorpajen.service ]; then cp /opt/sensorpajen/debian/sensorpajen.service /etc/systemd/system/ elif [ -f /usr/share/doc/sensorpajen/sensorpajen.service ]; then cp /usr/share/doc/sensorpajen/sensorpajen.service /etc/systemd/system/ fi # Reload systemd systemctl daemon-reload # Enable service (but don't start - needs configuration first) systemctl enable sensorpajen.service || { echo "Warning: Could not enable sensorpajen service" } # Check if configuration is ready if [ -f /etc/sensorpajen/sensorpajen.env ] && [ -f /etc/sensorpajen/sensors.json ]; then # Check if env file has been configured (not default values) if grep -q "MQTT_HOST=192.168.0.114" /etc/sensorpajen/sensorpajen.env; then echo "" echo "======================================================================" echo " Configuration needed!" echo "======================================================================" echo " Edit /etc/sensorpajen/sensorpajen.env with your MQTT settings" echo " Edit /etc/sensorpajen/sensors.json with your sensor list" echo " Then run: sudo systemctl start sensorpajen" echo "======================================================================" echo "" else # Configuration appears to be customized, restart service systemctl restart sensorpajen.service && { echo "Sensorpajen service started" echo "View logs: sudo journalctl -u sensorpajen -f" } || { echo "Failed to start service. Check: sudo systemctl status sensorpajen" } fi else echo "" echo "======================================================================" echo " Sensorpajen installed successfully!" echo "======================================================================" echo " Next steps:" echo " 1. Edit /etc/sensorpajen/sensorpajen.env" echo " 2. Edit /etc/sensorpajen/sensors.json" echo " 3. sudo systemctl start sensorpajen" echo " 4. sudo journalctl -u sensorpajen -f" echo "======================================================================" echo "" fi ;; abort-upgrade|abort-remove|abort-deconfigure) ;; *) echo "postinst called with unknown argument \`$1'" >&2 exit 1 ;; esac exit 0