Remove stale .pyc files and __pycache__ directories before installing the sensorpajen package to ensure Python rebuilds bytecode fresh. This should prevent cached bytecode issues from old syntax errors.
152 lines
6.3 KiB
Bash
Executable File
152 lines
6.3 KiB
Bash
Executable File
#!/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
|
|
# Clean up any stale bytecode before building wheel
|
|
find . -name "*.pyc" -delete
|
|
find . -name "__pycache__" -type d -delete
|
|
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
|