78 lines
2.4 KiB
Bash
78 lines
2.4 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
# One-time setup script for Smart Serow Backend on Raspberry Pi
|
||
|
|
# Run this ON the Pi itself
|
||
|
|
|
||
|
|
set -e
|
||
|
|
|
||
|
|
echo "=== Smart Serow Backend Setup ==="
|
||
|
|
|
||
|
|
PI_USER="${USER:-$(whoami)}"
|
||
|
|
echo "Setting up for user: $PI_USER"
|
||
|
|
|
||
|
|
BACKEND_DIR="/opt/smartserow-backend"
|
||
|
|
SERVICE_FILE="/etc/systemd/system/smartserow-backend.service"
|
||
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
|
|
|
||
|
|
# Create backend directory
|
||
|
|
echo "Creating backend directory: $BACKEND_DIR"
|
||
|
|
sudo mkdir -p "$BACKEND_DIR"
|
||
|
|
sudo chown -R "$PI_USER:$PI_USER" "$BACKEND_DIR"
|
||
|
|
|
||
|
|
# Install uv if not present
|
||
|
|
if ! command -v uv &> /dev/null; then
|
||
|
|
echo "Installing uv..."
|
||
|
|
curl -LsSf https://astral.sh/uv/install.sh | sh
|
||
|
|
echo " → Restart your shell or run: source ~/.bashrc"
|
||
|
|
else
|
||
|
|
echo "uv already installed: $(uv --version)"
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Install gpsd
|
||
|
|
echo "Installing gpsd..."
|
||
|
|
sudo apt-get update
|
||
|
|
sudo apt-get install -y gpsd gpsd-clients
|
||
|
|
|
||
|
|
# Configure gpsd (user needs to edit DEVICES)
|
||
|
|
GPSD_CONFIG="/etc/default/gpsd"
|
||
|
|
echo ""
|
||
|
|
echo "gpsd installed. Configure your GPS device:"
|
||
|
|
echo " sudo nano $GPSD_CONFIG"
|
||
|
|
echo " Set DEVICES=\"/dev/ttyUSB0\" (or your GPS serial port)"
|
||
|
|
echo " Set GPSD_OPTIONS=\"-n\""
|
||
|
|
echo " Then: sudo systemctl restart gpsd"
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# Install systemd service
|
||
|
|
echo "Installing systemd service..."
|
||
|
|
if [ -f "$SCRIPT_DIR/smartserow-backend.service" ]; then
|
||
|
|
sed -e "s/User=.*/User=$PI_USER/" \
|
||
|
|
-e "s/Group=.*/Group=$PI_USER/" \
|
||
|
|
-e "s|/home/pi|/home/$PI_USER|g" \
|
||
|
|
"$SCRIPT_DIR/smartserow-backend.service" | sudo tee "$SERVICE_FILE" > /dev/null
|
||
|
|
echo " → Installed to $SERVICE_FILE"
|
||
|
|
else
|
||
|
|
echo "WARNING: Service template not found at $SCRIPT_DIR/smartserow-backend.service"
|
||
|
|
echo "Copy it manually to $SERVICE_FILE"
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Enable service (but don't start - no code deployed yet)
|
||
|
|
echo "Enabling service..."
|
||
|
|
sudo systemctl daemon-reload
|
||
|
|
sudo systemctl enable smartserow-backend
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "=== Setup Complete ==="
|
||
|
|
echo ""
|
||
|
|
echo "Next steps:"
|
||
|
|
echo "1. Configure gpsd: sudo nano /etc/default/gpsd"
|
||
|
|
echo "2. Deploy backend: python3 scripts/deploy_backend.py (from dev machine)"
|
||
|
|
echo "3. On Pi, install deps: cd $BACKEND_DIR && uv sync"
|
||
|
|
echo "4. Start service: sudo systemctl start smartserow-backend"
|
||
|
|
echo ""
|
||
|
|
echo "Useful commands:"
|
||
|
|
echo " systemctl status smartserow-backend"
|
||
|
|
echo " journalctl -u smartserow-backend -f"
|
||
|
|
echo " curl http://localhost:5000/health"
|
||
|
|
echo " gpsmon # test gpsd directly"
|
||
|
|
echo ""
|