81 lines
2.5 KiB
Bash
Executable File
81 lines
2.5 KiB
Bash
Executable File
#!/bin/sh
|
|
set -e
|
|
|
|
cd "$(dirname "$0")/.."
|
|
INSTALL_DIR="$(pwd)"
|
|
SERVICE_USER="${SERVICE_USER:-${SUDO_USER:-$USER}}"
|
|
VENV_PYTHON="$INSTALL_DIR/.venv/bin/python"
|
|
|
|
if [ "$SERVICE_USER" = "root" ] || [ -z "$SERVICE_USER" ]; then
|
|
echo "Set SERVICE_USER or run via sudo as your normal user." >&2
|
|
exit 1
|
|
fi
|
|
|
|
if ! getent group patlite >/dev/null; then
|
|
echo "Group 'patlite' not found. Run ./scripts/install-udev.sh first." >&2
|
|
exit 1
|
|
fi
|
|
|
|
if ! id -nG "$SERVICE_USER" | tr ' ' '\n' | grep -qx patlite; then
|
|
echo "Warning: user '$SERVICE_USER' is not in group 'patlite' (USB access may fail)." >&2
|
|
echo "Run: sudo usermod -aG patlite $SERVICE_USER" >&2
|
|
fi
|
|
|
|
if ! command -v python3 >/dev/null; then
|
|
echo "python3 is required." >&2
|
|
exit 1
|
|
fi
|
|
|
|
if ! ldconfig -p 2>/dev/null | grep -q 'libusb-1.0\.so'; then
|
|
echo "Warning: libusb-1.0 may be missing. Install: sudo apt install libusb-1.0-0" >&2
|
|
fi
|
|
|
|
if ! python3 -c "import venv" 2>/dev/null; then
|
|
echo "python3-venv is required. Install with: sudo apt install python3-venv" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -x .venv/bin/python ]; then
|
|
python3 -m venv .venv
|
|
fi
|
|
|
|
if ! .venv/bin/python -m pip --version >/dev/null 2>&1; then
|
|
if ! .venv/bin/python -m ensurepip --upgrade >/dev/null 2>&1; then
|
|
echo "pip is missing from the venv. Install with:" >&2
|
|
echo " sudo apt install python3-venv python3-pip" >&2
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
.venv/bin/python -m pip install -q -U pip
|
|
.venv/bin/python -m pip install -q -r requirements.txt
|
|
|
|
sudo mkdir -p /etc/patlite-mqtt
|
|
if [ ! -f /etc/patlite-mqtt/patlite-mqtt.env ]; then
|
|
sudo install -m 640 systemd/patlite-mqtt.env.example /etc/patlite-mqtt/patlite-mqtt.env
|
|
sudo chown root:"$SERVICE_USER" /etc/patlite-mqtt/patlite-mqtt.env
|
|
echo "Created /etc/patlite-mqtt/patlite-mqtt.env — edit MQTT settings before starting."
|
|
else
|
|
echo "Keeping existing /etc/patlite-mqtt/patlite-mqtt.env"
|
|
fi
|
|
|
|
sed \
|
|
-e "s|@INSTALL_DIR@|$INSTALL_DIR|g" \
|
|
-e "s|@VENV_PYTHON@|$VENV_PYTHON|g" \
|
|
-e "s|@SERVICE_USER@|$SERVICE_USER|g" \
|
|
systemd/patlite-mqtt.service.in | sudo tee /etc/systemd/system/patlite-mqtt.service >/dev/null
|
|
|
|
sudo systemctl daemon-reload
|
|
sudo systemctl enable patlite-mqtt.service
|
|
|
|
echo ""
|
|
echo "Installed patlite-mqtt.service"
|
|
echo " Install dir: $INSTALL_DIR"
|
|
echo " Service user: $SERVICE_USER"
|
|
echo " Config: /etc/patlite-mqtt/patlite-mqtt.env"
|
|
echo ""
|
|
echo "Edit config, then:"
|
|
echo " sudo systemctl restart patlite-mqtt"
|
|
echo " sudo systemctl status patlite-mqtt"
|
|
echo " journalctl -u patlite-mqtt -n 30 --no-pager"
|