Hacker gadgets AIO SDR and Intercept

,

Sorry, forgot to mention, AIO v1

I had quite a bit of difficulty installing Intercept on a CM5 + AIOV2 setup. Every time I installed it, something else would break, and since I was still in the process of configuring the system, I kept ending up restoring and rebuilding everything from scratch.

Because of that, I ended up creating this script. AI helped me a lot in understanding all the dependencies, and I put together this installer script to share with the community.

Feel free to modify or improve it, but the main idea was to keep the dependencies under control, avoid removing unrelated packages, and install only what is actually necessary. That made Intercept run in a much more stable and well-behaved way on the system.

Note: Use at your own risk. It works on my uConsole. =)

Linux clockworkpi 6.12.93-v8-16k+ #4 SMP PREEMPT Thu Jun 11 20:31:33 EDT 2026 aarch64 GNU/Linux

```bash
#!/usr/bin/env bash
set -euo pipefail

APP_NAME="intercept"
REPO_URL="https://github.com/smittix/intercept.git"
INSTALL_DIR="$HOME/Apps/intercept"
VENV_DIR="$INSTALL_DIR/.venv"
DESKTOP_DIR="$HOME/Desktop"
LOG_DIR="$HOME/.local/share/intercept"
START_SCRIPT="$HOME/.local/bin/start-intercept"
STOP_SCRIPT="$HOME/.local/bin/stop-intercept"
BLACKLIST_FILE="/etc/modprobe.d/rtl-sdr-blacklist.conf"

PACKAGES=(
  git
  curl
  wget
  python3
  python3-venv
  python3-pip
  python3-dev
  build-essential
  cmake
  rtl-sdr
  rtl-433
  gr-osmosdr
  gnuradio
  hackrf
  aircrack-ng
  wireless-tools
  iw
  net-tools
  bluez
  bluetooth
  gpsd
  gpsd-clients
  sqlite3
)

usage() {
  echo "Usage:"
  echo "  $0 install"
  echo "  $0 uninstall"
  exit 1
}

install_intercept() {
  echo "[INFO] Installation mode."
  echo "[INFO] This script does NOT run full-upgrade and does NOT remove existing packages."
  echo "[INFO] It installs only missing APT packages and uses an isolated Python venv."

  mkdir -p "$HOME/Apps" "$HOME/.local/bin" "$LOG_DIR" "$DESKTOP_DIR"

  echo "[+] Updating APT index..."
  sudo apt update

  echo "[+] Checking dependencies..."
  MISSING=()

  for pkg in "${PACKAGES[@]}"; do
    if dpkg -s "$pkg" >/dev/null 2>&1; then
      echo "    OK: $pkg"
    else
      echo "    MISSING: $pkg"
      MISSING+=("$pkg")
    fi
  done

  if [ "${#MISSING[@]}" -gt 0 ]; then
    echo "[+] Installing only missing packages..."
    sudo apt install -y "${MISSING[@]}"
  else
    echo "[+] All main APT dependencies already exist."
  fi

  echo "[+] Configuring RTL-SDR DVB blacklist if needed..."
  if [ ! -f "$BLACKLIST_FILE" ]; then
    sudo tee "$BLACKLIST_FILE" >/dev/null <<EOF
blacklist dvb_usb_rtl28xxu
blacklist rtl2832
blacklist rtl2830
EOF
    echo "    Created: $BLACKLIST_FILE"
  else
    echo "    Already exists: $BLACKLIST_FILE"
    echo "    Not modified."
  fi

  echo "[+] Cloning or updating Intercept..."
  if [ ! -d "$INSTALL_DIR/.git" ]; then
    git clone "$REPO_URL" "$INSTALL_DIR"
  else
    cd "$INSTALL_DIR"
    git pull --ff-only || echo "[WARNING] Git pull failed; keeping local version."
  fi

  cd "$INSTALL_DIR"

  echo "[+] Creating isolated Python environment..."
  if [ ! -d "$VENV_DIR" ]; then
    python3 -m venv "$VENV_DIR"
  fi

  echo "[+] Updating pip/wheel/setuptools only inside the venv..."
  "$VENV_DIR/bin/python" -m pip install --upgrade pip wheel setuptools

  echo "[+] Installing Python dependencies inside the venv..."
  if [ -f "$INSTALL_DIR/requirements.txt" ]; then
    "$VENV_DIR/bin/pip" install -r "$INSTALL_DIR/requirements.txt"
  else
    echo "[WARNING] requirements.txt not found. Installing common libraries."
    "$VENV_DIR/bin/pip" install flask flask-socketio geopy pyserial numpy requests psutil
  fi

  echo "[+] Detecting main file..."
  MAIN_FILE=""

  for candidate in app.py intercept.py main.py server.py; do
    if [ -f "$INSTALL_DIR/$candidate" ]; then
      MAIN_FILE="$candidate"
      break
    fi
  done

  if [ -z "$MAIN_FILE" ]; then
    echo "[ERROR] Could not find app.py, intercept.py, main.py or server.py."
    echo "Check the contents of: $INSTALL_DIR"
    exit 1
  fi

  echo "    Main file: $MAIN_FILE"

  echo "[+] Creating start-intercept command..."
  cat > "$START_SCRIPT" <<EOF
#!/usr/bin/env bash
set -euo pipefail

INSTALL_DIR="$INSTALL_DIR"
VENV_DIR="$VENV_DIR"
LOG_DIR="$LOG_DIR"
MAIN_FILE="$MAIN_FILE"

mkdir -p "\$LOG_DIR"
cd "\$INSTALL_DIR"

if pgrep -f "\$INSTALL_DIR/\$MAIN_FILE" >/dev/null 2>&1; then
  notify-send "Intercept" "Intercept is already running." 2>/dev/null || true
  exit 0
fi

nohup "\$VENV_DIR/bin/python" "\$INSTALL_DIR/\$MAIN_FILE" > "\$LOG_DIR/intercept.log" 2>&1 &

sleep 2

notify-send "Intercept" "Intercept started. Open http://localhost:5000" 2>/dev/null || true

if command -v xdg-open >/dev/null 2>&1; then
  xdg-open http://localhost:5000 >/dev/null 2>&1 || true
fi
EOF

  chmod +x "$START_SCRIPT"

  echo "[+] Creating stop-intercept command..."
  cat > "$STOP_SCRIPT" <<EOF
#!/usr/bin/env bash
set -euo pipefail

INSTALL_DIR="$INSTALL_DIR"
MAIN_FILE="$MAIN_FILE"

PIDS=\$(pgrep -f "\$INSTALL_DIR/\$MAIN_FILE" || true)

if [ -z "\$PIDS" ]; then
  notify-send "Intercept" "Intercept is not running." 2>/dev/null || true
  exit 0
fi

echo "\$PIDS" | xargs kill

sleep 2

PIDS_LEFT=\$(pgrep -f "\$INSTALL_DIR/\$MAIN_FILE" || true)

if [ -n "\$PIDS_LEFT" ]; then
  echo "\$PIDS_LEFT" | xargs kill -9
fi

notify-send "Intercept" "Intercept stopped." 2>/dev/null || true
EOF

  chmod +x "$STOP_SCRIPT"

  echo "[+] Creating Desktop shortcuts..."

  cat > "$DESKTOP_DIR/Start Intercept.desktop" <<EOF
[Desktop Entry]
Type=Application
Name=Start Intercept
Comment=Start Intercept SDR Dashboard
Exec=$START_SCRIPT
Icon=utilities-terminal
Terminal=false
Categories=Utility;
EOF

  cat > "$DESKTOP_DIR/Stop Intercept.desktop" <<EOF
[Desktop Entry]
Type=Application
Name=Stop Intercept
Comment=Stop Intercept SDR Dashboard
Exec=$STOP_SCRIPT
Icon=process-stop
Terminal=false
Categories=Utility;
EOF

  chmod +x "$DESKTOP_DIR/Start Intercept.desktop"
  chmod +x "$DESKTOP_DIR/Stop Intercept.desktop"

  echo
  echo "[OK] Installation completed."
  echo
  echo "Installed at:"
  echo "  $INSTALL_DIR"
  echo
  echo "Commands:"
  echo "  start-intercept"
  echo "  stop-intercept"
  echo
  echo "Interface:"
  echo "  http://localhost:5000"
  echo
  echo "Logs:"
  echo "  $LOG_DIR/intercept.log"
  echo
  echo "If the RTL-SDR does not appear, reboot:"
  echo "  sudo reboot"
}

uninstall_intercept() {
  echo "[INFO] Uninstall mode."
  echo "[INFO] This mode removes only files created by this script."
  echo "[INFO] It does NOT remove shared APT packages."

  echo "[+] Stopping Intercept if it is running..."
  if [ -x "$STOP_SCRIPT" ]; then
    "$STOP_SCRIPT" || true
  else
    pkill -f "$INSTALL_DIR" || true
  fi

  echo "[+] Removing shortcuts..."
  rm -f "$DESKTOP_DIR/Start Intercept.desktop"
  rm -f "$DESKTOP_DIR/Stop Intercept.desktop"

  echo "[+] Removing local commands..."
  rm -f "$START_SCRIPT"
  rm -f "$STOP_SCRIPT"

  echo "[+] Removing Intercept installation..."
  rm -rf "$INSTALL_DIR"

  echo "[+] Removing Intercept logs..."
  rm -rf "$LOG_DIR"

  echo
  echo "[OK] Uninstallation completed."
  echo
  echo "Note:"
  echo "  The file $BLACKLIST_FILE was NOT removed automatically."
  echo "  Reason: it may be used by other SDR applications."
  echo
  echo "If you want to remove it manually:"
  echo "  sudo rm $BLACKLIST_FILE"
  echo "  sudo reboot"
}

case "${1:-}" in
  install)
    install_intercept
    ;;
  uninstall|remove)
    uninstall_intercept
    ;;
  *)
    usage
    ;;
esac
```

1 Like

I’ve had a similar experience with intercept not behaving well. Huge potential for it but the headaches have thinking its not worth it.

I’ll give your script a try in the next few days and let you know how it goes

1 Like

Had a few minutes last night and tried your script. I wasn’t getting any output in their terminal after a copy+paste to textfile and chmod+x to make it executable. I’ll keep poking at it to see if i can make it work.

Kinda weird folks are having issues with this. We had an issue a few months ago, but Smittix hosts the missing files on the github now.

The script has a good level of verbosity… did it manage to create the folder?

/home/YourUser/Apps/intercept

if the directory was created… run “sudo ./start.sh”… if you want to change something, reinstall things, or add something, use “sudo ./setup.sh” — this one starts the intercept configuration (downloads things, enables things, etc.)

When you run start.sh… you’ll see intercept loading its services and the webserver, and once it loads… just point your browser to: HTTP://127.0.0.1:5050/LOGIN
If everything still goes wrong, copy and paste the script’s output here. Remember that you’ll need to be running Kernel 6.12.94-v8-16k+ and the dependencies… but theoretically the script would handle that for you. Copy and paste the script, I’ll help you, or send it to me in a PM.

Thanks for checking back. I’m travelling without my uconsole rn but will follow up late next week.