Replace raw read commands with ask_yes_no function for rtlamr
installation prompts on both macOS and Debian. The helper properly
handles non-interactive mode and missing TTY scenarios.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add verbose_results flag to store full device details in sweep results
- Add non-interactive mode (--non-interactive) to setup.sh
- Add ask_yes_no helper for interactive prompts with TTY detection
- Update reports.py to handle new results structure with fallbacks
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add check_optional() function for non-critical tools
- Change rtlamr from required to optional tool
- Add install_rtlamr_from_source() that auto-installs Go and compiles rtlamr
- Prompt user during setup whether to install rtlamr
- Fixes setup failure for users who don't need utility meter monitoring
- Added rtlamr mode for decoding utility meters (water, gas, electric)
- Starts rtl_tcp server first, then connects rtlamr to it
- Supports multiple message types: SCM, SCM+, IDM, NetIDM, R900, R900 BCD
- Added frequency presets for 912 MHz (NA) and 868 MHz (EU)
- Includes meter ID filtering and unique message options
- Updated setup.sh to check and install rtlamr and rtl_tcp
- Added UI components: navigation button, mode template, JavaScript functions
- Integrated into SDR/RF dropdown menu with lightning bolt icon
- Updates mode indicator with frequency when listening
- Added help documentation and requirements section
Aggressively handle broken rtl-sdr package states:
- Use dpkg --force-remove-reinstreq to remove broken rtl-sdr
- Use dpkg --force-all to force remove librtlsdr2
- Run apt-get --fix-broken install after cleanup
- Improved detection of broken package states
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Remove all packages that depend on librtlsdr2 before upgrading:
- dump1090-mutability (will be rebuilt from source later)
- libgnuradio-osmosdr0.2.0t64
- rtl-433 (will be reinstalled)
- librtlsdr2 and rtl-sdr
This resolves the file conflict between librtlsdr2 (2.0.1) and librtlsdr0 (2.0.2).
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Fix broken package states by:
- Running apt --fix-broken install before attempting installation
- Removing both librtlsdr2 and rtl-sdr when conflict detected
- Cleaning up with autoremove
- Running dpkg --configure -a to fix partial installations
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Remove conflicting librtlsdr2 package before installing rtl-sdr to prevent dpkg errors when librtlsdr0 tries to overwrite shared library files.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
The bkerler fork still uses SWIG. The velichkov fork has a
dedicated maint-3.10 branch with proper GNU Radio 3.10 support.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Use bkerler fork with pybind11 support for GNU Radio 3.10+ since
the original gr-gsm repo uses GrSwig which was removed in 3.10.
- Detect GNU Radio version and select appropriate fork
- Add pybind11-dev and python3-pybind11 to build dependencies
- Add python3-numpy to build dependencies
- Set CMAKE_PREFIX_PATH to find source-built libosmocore
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Use dpkg --force-remove-reinstreq to remove broken packages.
Skip stock rtl-sdr package entirely - RTL-SDR Blog drivers are
better and will be built from source instead.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Run apt --fix-broken install and dpkg --configure -a to resolve
any lingering package conflicts before proceeding.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Remove conflicting librtlsdr packages before installing to avoid
dpkg errors when RTL-SDR Blog drivers conflict with stock packages.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Ubuntu 24.04 and newer don't have Osmocom packages in repos.
This builds libosmocore from source as a fallback.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
libosmocore packages are not in standard Ubuntu repos.
This adds the Osmocom repository before installing gr-gsm deps.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove output suppression so errors are visible
- Add clearer error messages at each step
- Fix subshell isolation that was swallowing errors
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add spectrum monitoring via rtl_power with configurable presets
- Add OpenCelliD tower integration with Leaflet map display
- Add grgsm_scanner integration for passive GSM cell detection (alpha)
- Add rules engine for anomaly detection and findings
- Add baseline recording and comparison system
- Add setup.sh support for gr-gsm installation on Debian/Ubuntu
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Build and install RTL-SDR Blog fork drivers during setup to provide
proper support for RTL-SDR Blog V4 devices (R828D tuner). These
drivers are backward compatible with V3 and other RTL-SDR devices.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Adds direwolf (APRS decoder) installation for both Debian and macOS
platforms to support the APRS mode functionality.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- New device_identity.py: Clusters BLE/WiFi observations into probable
physical devices using passive fingerprinting (not MAC addresses)
- Fingerprinting based on manufacturer data, service UUIDs, capabilities,
timing patterns, and RSSI trajectories
- Session tracking with automatic gap detection
- Risk indicators: stable RSSI, MAC rotation, ESP32 chipsets, audio-capable
- Full audit trail for all clustering decisions
- New ble_scanner.py: Cross-platform BLE scanning with bleak library
- Detects AirTags, Tile, SmartTags, ESP32 by manufacturer ID
- Fallback to system tools (btmgmt, hcitool, system_profiler)
- Added API endpoints for device identity clustering (/tscm/identity/*)
- Updated setup.sh with bleak dependency
- Updated documentation with TSCM features and hardware requirements
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add routes/acars.py with start/stop/stream endpoints for ACARS decoding
- Build acarsdec from source in Dockerfile (not available in Debian slim)
- Add acarsdec installation script to setup.sh for native installs
- Add ACARS to dependency checker in utils/dependencies.py
- Add collapsible ACARS sidebar next to map in aircraft tracking tab
- Add collapsible ACARS panel in ADS-B dashboard with same layout
- Include guidance about needing two SDRs for simultaneous ADS-B + ACARS
- Support regional frequency presets (N.America, Europe, Asia-Pacific)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The soapysdr-tools package pulls in xtrx-dkms, which fails to compile
its kernel module on Kernel 6.14+ and causes apt to hang. Explicitly
exclude xtrx-dkms since most users don't have XTRX hardware.
Fixes#56
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add install_multimon_ng_from_source_macos() since multimon-ng is not
available in Homebrew core
- Fix brew_install() to properly check return code before printing success
- Show startup instructions before tool check so users see them on macOS
- Make missing Bluetooth tools a warning on macOS instead of hard failure
(bluetoothctl/hcitool/hciconfig are Linux-only BlueZ utilities)
- Rebrand from INTERCEPT to iNTERCEPT
- New logo design with 'i' and signal wave brackets
- Add animated landing page with "See the Invisible" tagline
- Fix tuning dial audio issues with debouncing and restart prevention
- Fix Listening Post scanner with proper signal hit logging
- Update setup script for apt-based Python package installation
- Add Instagram promo video template
- Add full-size logo assets for external use
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Show actual error output when apt-get fails instead of silently
failing. Now displays which packages failed, the last 10 lines of
apt output, and suggests a manual fix command.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Wrap build in subshell to isolate EXIT trap, preventing
orig_dir unbound variable error at script exit.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Shows step counter with visual progress bar during installation:
[3/15] ██████░░░░░░░░░░░░░░ 20% - Installing ffmpeg
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Set DEBIAN_FRONTEND and NEEDRESTART_MODE to prevent the
"scanning processes/candidates/microcode" messages during apt installs.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Merge the improved setup-dev.sh logic into setup.sh and remove the
separate dev script. The consolidated script includes:
- Stricter bash error handling (set -Eeuo pipefail)
- Cleaner output with info/ok/warn/fail helpers
- gpsd installation for GPS daemon support
- Required tools verification with hard fail
- Source build fallback for dump1090
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add get_tool_path() to check /usr/sbin and /sbin for tools
- Update wifi.py to use full paths for airmon-ng, airodump-ng, aireplay-ng, aircrack-ng
- Add hcxdumptool and hcxtools to setup.sh for Debian and macOS
- Update check_cmd() in setup.sh to also check /usr/sbin and /sbin
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Each package install now pauses for 1 second after completion
so the user can see what happened before it scrolls away.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Changed set -e to set +e - handle errors explicitly instead
- set -e was causing silent early exits on any failure
- Improved dump1090 build with more dependencies
- Added BLADERF=no to skip optional BladeRF dependency
- Falls back to simpler antirez/dump1090 if FlightAware fails
- Better success/failure output for each package
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove conditional MISSING_* checks - just install all tools
- apt-get will skip already-installed packages anyway
- Add verification step at end showing what actually got installed
- Better output showing success/failure for each package
- This fixes issues where flag-based logic was failing silently
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Reorder: check tools -> install tools -> Python deps
- This ensures system tools install even if pip fails
- Make pip failures non-fatal (continue with warning)
- Auto-install python3-venv if needed on Debian
- Don't exit on venv creation failure, continue with tools
The previous order meant if pip failed (common on fresh installs),
the script would exit before installing rtl-sdr, multimon-ng, etc.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
On newer Debian versions (like Trixie), dump1090 isn't available
in the package repositories. Now automatically builds from the
FlightAware GitHub repo as a fallback:
- Installs build dependencies (build-essential, librtlsdr-dev, etc.)
- Clones from github.com/flightaware/dump1090
- Compiles and installs to /usr/local/bin
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove all Y/n prompts for tool installation
- Install tools automatically when missing
- Show clear progress for each package being installed
- Show warnings if individual packages fail instead of silent failure
- Changed apt to apt-get for better script compatibility
- Auto-setup udev rules on Linux without prompting
- Auto-install Homebrew on macOS if missing
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The Listening Post actually uses ffmpeg for audio encoding, not sox.
Updated all documentation, setup scripts, and code to reflect this:
- Removed unused find_sox() function from listening_post.py
- Simplified tools endpoint to only check for ffmpeg
- Updated CHANGELOG, README, HARDWARE.md, Dockerfile
- Fixed setup.sh to check for ffmpeg
- Updated frontend warnings to mention ffmpeg
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add Listening Post mode with frequency scanner and audio monitoring
- Add dependency warning for aircraft dashboard listen feature
- Auto-restart audio when switching frequencies
- Fix toolbar overflow on aircraft dashboard custom frequency
- Update setup script with full macOS/Debian support
- Clean up README and documentation for clarity
- Add sox and dump1090 to Dockerfile
- Add comprehensive tool reference to HARDWARE.md
- Add correlation, settings, and database utilities
- Add new test files for routes, validation, correlation, database
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Try dump1090-fa, dump1090-mutability, dump1090 variants
- Use pkg_available() to check actual installability
- Skip gracefully on Debian Trixie and other versions without it
- Only show manual install message if not already installed
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- dump1090 is not available in standard Debian repositories
- Show manual installation instructions with FlightAware link
- Add pkg_available() helper for reliable package checks
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>