Files
brother-ql-bridge/scripts/deploy.sh
Tim Hadwen b48a0ffe93 Add nightly auto-update via systemd timer
Add scripts/update.sh that fetches origin/main, resets if changed,
reinstalls dependencies when requirements.txt differs, and restarts
the service. Deploy script now installs a systemd timer that triggers
the update nightly at 03:00 with Persistent=true for catch-up on
missed runs.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-26 16:29:35 +10:00

121 lines
3.2 KiB
Bash
Executable File

#!/bin/bash
# Brother QL Bridge - Raspberry Pi Deployment Script
# Run this from within the cloned repository
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
echo "=== Brother QL Bridge Deployment ==="
echo "Project directory: $PROJECT_DIR"
echo ""
# Check if running on Raspberry Pi
if [[ ! -f /proc/device-tree/model ]] || ! grep -q "Raspberry Pi" /proc/device-tree/model 2>/dev/null; then
echo "Warning: This doesn't appear to be a Raspberry Pi"
read -p "Continue anyway? [y/N] " -n 1 -r
echo
[[ $REPLY =~ ^[Yy]$ ]] || exit 1
fi
# Step 1: Install system dependencies
echo "[1/6] Installing system dependencies..."
sudo apt update
sudo apt install -y python3 python3-pip python3-venv libusb-1.0-0-dev
# Step 2: Install uv if not present
echo "[2/6] Setting up Python package manager..."
if ! command -v uv &> /dev/null; then
echo "Installing uv..."
curl -LsSf https://astral.sh/uv/install.sh | sh
export PATH="$HOME/.local/bin:$PATH"
fi
# Step 3: Setup Python environment
echo "[3/6] Installing Python dependencies..."
cd "$PROJECT_DIR"
uv venv
uv pip install -r requirements.txt
# Step 4: Setup udev rules
echo "[4/6] Configuring USB permissions..."
if [[ ! -f /etc/udev/rules.d/99-brother-ql.rules ]]; then
sudo tee /etc/udev/rules.d/99-brother-ql.rules > /dev/null << 'EOF'
# Brother QL label printers
SUBSYSTEM=="usb", ATTR{idVendor}=="04f9", MODE="0666"
EOF
sudo udevadm control --reload-rules
sudo udevadm trigger
echo "USB permissions configured. You may need to unplug and replug the printer."
else
echo "USB permissions already configured."
fi
# Step 5: Install systemd service
echo "Installing systemd service..."
sudo tee /etc/systemd/system/brother-ql-bridge.service > /dev/null << EOF
[Unit]
Description=Brother QL USB-to-Network Bridge
After=network.target
[Service]
Type=simple
User=$USER
WorkingDirectory=$PROJECT_DIR
ExecStart=$PROJECT_DIR/.venv/bin/python bridge.py
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable brother-ql-bridge
# Step 6: Install nightly update timer
echo "[5/6] Installing nightly update timer..."
chmod +x "$PROJECT_DIR/scripts/update.sh"
sudo tee /etc/systemd/system/brother-ql-bridge-update.service > /dev/null << EOF
[Unit]
Description=Update Brother QL Bridge from GitHub
[Service]
Type=oneshot
User=$USER
WorkingDirectory=$PROJECT_DIR
ExecStart=$PROJECT_DIR/scripts/update.sh
EOF
sudo tee /etc/systemd/system/brother-ql-bridge-update.timer > /dev/null << 'EOF'
[Unit]
Description=Nightly update for Brother QL Bridge
[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true
[Install]
WantedBy=timers.target
EOF
echo "[6/6] Enabling update timer..."
sudo systemctl daemon-reload
sudo systemctl enable --now brother-ql-bridge-update.timer
echo ""
echo "=== Deployment Complete ==="
echo ""
echo "To start the service:"
echo " sudo systemctl start brother-ql-bridge"
echo ""
echo "To check status:"
echo " sudo systemctl status brother-ql-bridge"
echo ""
echo "To view logs:"
echo " sudo journalctl -u brother-ql-bridge -f"
echo ""
echo "To test manually:"
echo " cd $PROJECT_DIR && source .venv/bin/activate && python bridge.py -v"