#!/usr/bin/env bash # ============================================================================== # SafeButReady.com — Bare-Minimum 1-Command Plug-and-Play Jetson Nano Installer # Works on ANY stock NVIDIA Jetson Nano / Orin Nano or Ubuntu/Debian Node # Auto-Detects: Brother QL Series, DYMO LabelWriter, Zebra ZPL, Rollo & CUPS # Usage: curl -sSL https://safebutready.com/install.sh | sudo bash # ============================================================================== set -euo pipefail SBR_DIR="/opt/safebutready" mkdir -p "${SBR_DIR}/config" echo "==================================================================" echo " 🛡️ SafeButReady.com — Sovereign Intake & Label Printer Installer" echo "==================================================================" export DEBIAN_FRONTEND=noninteractive echo "[1/5] Installing bare-minimum system & USB thermal printer packages..." apt-get update -qq apt-get install -y -qq \ python3 python3-pip python3-pil python3-usb python3-requests \ libusb-1.0-0-dev cups cups-bsd printer-driver-ptouch \ avahi-daemon avahi-utils usbutils curl jq fonts-dejavu-core echo "[2/5] Configuring universal USB udev permissions (Brother, DYMO, Zebra, Rollo)..." cat << 'EOF' > /etc/udev/rules.d/99-safebutready-printers.rules # Brother QL Thermal Printers (QL-700, QL-800, QL-810W, QL-820NWB) SUBSYSTEM=="usb", ATTR{idVendor}=="04f9", MODE="0666", GROUP="lp" # Zebra Direct Thermal Printers (ZD410, ZD411, GK420d, LP2824) SUBSYSTEM=="usb", ATTR{idVendor}=="0a5f", MODE="0666", GROUP="lp" # DYMO LabelWriter Printers (450, 450 Turbo, 550) SUBSYSTEM=="usb", ATTR{idVendor}=="0922", MODE="0666", GROUP="lp" # Rollo / Munbyn / Generic ESC-POS / TSPL Thermal Label Printers SUBSYSTEM=="usb", ATTR{idVendor}=="2d37", MODE="0666", GROUP="lp" SUBSYSTEM=="usb", ATTR{idVendor}=="0fe6", MODE="0666", GROUP="lp" EOF udevadm control --reload-rules && udevadm trigger || true echo "[3/5] Installing Python thermal raster libraries..." pip3 install --quiet brother_ql pyusb pillow qrcode requests flask echo "[4/5] Scanning USB & Wi-Fi/LAN for your Label Machine..." DRIVER="cups_universal" MODEL="AUTO" DEVICE_URI="auto" USB_OUT=$(lsusb || true) if echo "$USB_OUT" | grep -iq "04f9:"; then PID=$(echo "$USB_OUT" | grep -i "04f9:" | head -n1 | sed -E 's/.*04f9:([0-9a-fA-F]{4}).*/\1/') DRIVER="brother_ql" DEVICE_URI="usb://0x04f9:0x${PID}" case "$PID" in 209b) MODEL="QL-800" ;; 209c) MODEL="QL-810W" ;; 209d) MODEL="QL-820NWB" ;; *) MODEL="QL-800" ;; esac echo " -> Detected Brother Thermal Label Machine (${MODEL}) at ${DEVICE_URI}" elif echo "$USB_OUT" | grep -iq "0a5f:"; then DRIVER="zebra_zpl" MODEL="ZEBRA_ZD411" DEVICE_URI="/dev/usb/lp0" echo " -> Detected Zebra Thermal Label Machine (${MODEL}) at ${DEVICE_URI}" elif echo "$USB_OUT" | grep -iq "0922:"; then DRIVER="dymo_cups" MODEL="DYMO_LABELWRITER" DEVICE_URI="cups" echo " -> Detected DYMO LabelWriter via CUPS Direct Queue" else echo " -> Universal Hot-Plug Mode Enabled (supports any USB or Wi-Fi printer)" fi cat << EOF > "${SBR_DIR}/config/printer.json" { "driver": "${DRIVER}", "model": "${MODEL}", "device_uri": "${DEVICE_URI}", "label_size": "62", "installed_at": "$(date -u +%Y-%m-%dT%H:%M:%SZ)" } EOF echo "[5/5] Downloading SafeButReady Universal Label Bridge & starting service..." curl -sSL https://safebutready.com/universal_label_bridge.py -o "${SBR_DIR}/universal_label_bridge.py" chmod +x "${SBR_DIR}/universal_label_bridge.py" cat << 'EOF' > /etc/systemd/system/safebutready-bridge.service [Unit] Description=SafeButReady Sovereign Intake & Universal Thermal Label Bridge After=network.target cups.service [Service] Type=simple WorkingDirectory=/opt/safebutready ExecStart=/usr/bin/python3 /opt/safebutready/universal_label_bridge.py Restart=always RestartSec=3 [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl enable safebutready-bridge.service systemctl restart safebutready-bridge.service LOCAL_IP=$(hostname -I | awk '{print $1}') echo "==================================================================" echo " ✅ SAFEBUTREADY.COM SOVEREIGN NODE INSTALLED!" echo " 🖨️ Detected Printer: ${DRIVER} (${MODEL})" echo " 📱 Open Check-In Kiosk on any iPad/Tablet: http://${LOCAL_IP}:3111/checkin" echo "=================================================================="