FRUP now automatically detects your system environment and intelligently handles package compatibility:
- Automatic System Detection: Identifies your OS, architecture, desktop environment, and special environments (Termux, Raspbian, SSH sessions)
- Desktop Environment Detection: Checks for X11, Wayland, and other desktop indicators
- Smart Package Skipping: Automatically skips desktop-only packages (like Sideband) on headless systems
- System Info Display: Shows detailed system information before running update checks
FRUP correctly identifies and handles:
- π₯οΈ Desktop Systems: Full package support including Sideband
- π€ Termux (Android): Automatically skips desktop-only packages
- π₯§ Raspberry Pi OS: Detects headless vs desktop configurations
- π Raspberry Pi Zero: Extended timeout + warnings for slow packages (Sideband takes 30+ min to compile)
- π§ SSH/Server: Recognizes remote sessions without desktop
- π§ Headless Linux: Works on servers and minimal installations
FRUP automatically adjusts installation timeouts based on system speed:
- Pi Zero: 5 minutes (very slow single-core ARM11)
- Other slow systems: 4 minutes (single-core or Termux)
- Normal systems: 2 minutes
On slow systems like Pi Zero with unstable connections, FRUP automatically retries failed downloads:
- Pi Zero: Up to 5 automatic retries on network failures
- Other systems: Up to 3 automatic retries
- Detects connection errors: "Connection aborted", "Remote end closed", timeouts, etc.
- Shows progress: "Retry attempt 2/5..." during recovery
This prevents installation failures due to intermittent network issues common on Pi Zero's slow WiFi.
FRUP automatically detects and offers to install system dependencies required by certain packages:
LXST on Raspberry Pi requires:
python3-pyaudio- Audio codec supportcodec2- Speech codec library
Sideband on Raspberry Pi requires (Debian 13 "Trixie"+):
python3-pyaudio- Audio processingcodec2- Speech codecxclip,xsel- Clipboard support
Sideband on Raspberry Pi OS Bookworm (Debian 12) requires additional build tools:
python3-dev,build-essential- Compilation toolslibopusfile0,libsdl2-dev,libavcodec-dev,libavdevice-dev,libavfilter-dev,portaudio19-dev,libcodec2-1.0- Audio/video libraries- Plus the basic dependencies above
FRUP automatically detects your Debian version and uses the appropriate dependency list.
When installing packages with dependencies, FRUP will:
- Detect your OS version (Bookworm vs Trixie)
- Check if dependencies are already installed
- Prompt to install them via
sudo apt install - Only proceed with pip install after dependencies are satisfied
Example interaction on Raspberry Pi 4 with Trixie:
Sideband:
Not installed (Available: 1.8.2)
Do you want to install Sideband? (y/n): y
βΉ Sideband requires system packages: python3-pyaudio, codec2, xclip, xsel
Install system dependencies with 'sudo apt install'? (y/n): y
Installing system dependencies (this may take a while)...
β System dependencies installed
Installing Sideband...
β Sideband installed successfully!
On Raspberry Pi Zero:
- Sideband CAN be installed but takes 30+ minutes to compile (user must confirm)
- LXST works but may need retries due to network issues
- Extended timeouts and automatic network retry help with slow connections
This prevents cryptic compilation errors when Python packages need system libraries.
On a headless server:
** System Information **
Debian GNU/Linux 12 (bookworm) | x86_64 | Headless/Server | Python 3.11.2
βΉ No desktop environment detected
βΉ Desktop-only packages (like Sideband) will be skipped
On Raspberry Pi Zero with Desktop:
** System Information **
Raspberry Pi Zero | armv6l | Desktop | Python 3.9.2
β Slow system detected - package installs may take longer
β Pi Zero detected - using extended timeout (5 minutes)
β Network issues? Script will auto-retry up to 5 times
β Sideband compilation may take 30+ minutes (be patient!)
Installing Sideband on Pi Zero:
Sideband:
Not installed (Available: 1.8.2)
Do you want to install Sideband? (y/n): y
β WARNING: This will take 30+ minutes to compile on Pi Zero!
Are you sure you want to continue? (y/n): y
βΉ Sideband requires system packages: python3-pyaudio, codec2, xclip, xsel
Install system dependencies with 'sudo apt install'? (y/n): y
Installing system dependencies (this may take a while)...
β System dependencies installed
Installing Sideband...
This may take several minutes on your system...
[... patiently waits 30+ minutes ...]
β Sideband installed successfully!
Packages can specify system dependencies with automatic Debian version detection:
LXST (simple dependencies):
{
"name": "lxst",
"pypi_name": "lxst",
"system_dependencies": {
"debian": ["python3-pyaudio", "codec2"],
"check_command": "apt"
}
}Sideband (version-specific dependencies):
{
"name": "sideband",
"pypi_name": "sbapp",
"requires_desktop": true,
"slow_on_pi_zero": true,
"system_dependencies": {
"debian": ["python3-pyaudio", "codec2", "xclip", "xsel"],
"debian_bookworm": [
"python3-pip", "python3-pyaudio", "python3-dev",
"python3-cryptography", "build-essential", "libopusfile0",
"libsdl2-dev", "libavcodec-dev", "libavdevice-dev",
"libavfilter-dev", "portaudio19-dev", "codec2",
"libcodec2-1.0", "xclip", "xsel"
],
"check_command": "apt"
}
}debian: Dependencies for Debian 13+ (Trixie and newer)debian_bookworm: Extra build dependencies for Debian 12 (Bookworm)slow_on_pi_zero: Warns user about 30+ minute compilation time- FRUP automatically detects your Debian version and uses the right list
Sideband on Pi Zero:
While Sideband CAN be installed on Pi Zero with Desktop environment, compilation takes 30+ minutes due to the slow ARM11 CPU. FRUP will:
- Warn you about the long compilation time
- Ask for confirmation before proceeding
- Use extended timeout and network retry
- Eventually succeed if you're patient!
Important Update (January 2026): FRUP has been updated to check PyPI instead of GitHub for package versions. This makes version checking faster, more reliable, and aligns with how Reticulum packages are now being released.
- PyPI-First Checking: Now checks PyPI.org directly for package versions (much faster!)
- GitHub Fallback: Only uses GitHub for packages not available on PyPI
- New Packages Added:
- β¨ LXST - Reticulum Audio Protocol
- β¨ Columba - Android-based LXMF client
- Fixed Sideband: Now uses correct PyPI package name (
sbapp)
Automatically Updatable (PyPI):
- RNS, LXMF, LXST, NomadNet, Sideband
Information Only (GitHub - Manual Install):
- MeshChat, Columba, RNode, RNode CE, RNode TN
Mark Qvist (Reticulum's author) now publishes releases primarily to PyPI rather than GitHub. This means:
- β Faster version checks (no GitHub API rate limits)
- β More reliable (PyPI has higher uptime)
- β Matches official release process
- β No need for GitHub tokens
If you have a custom frup_config.json, you'll need to update it to use the new format:
Old format:
{
"name": "Sideband",
"url": "https://github.com/markqvist/Sideband"
}New format:
{
"name": "sideband",
"display_name": "Sideband",
"pypi_name": "sbapp",
"url": "https://github.com/markqvist/Sideband"
}Generate a new example config with:
python3 frup.py --save-configA Python tool to check and update Reticulum ecosystem packages.
Minor fix: Fixed display typo "updateing" bug
- Single API call per package - Caches GitHub version checks
- Timeouts on all network and subprocess operations
- Efficient version checking with normalized comparison
- Colored output (automatic, with fallback if colorama not installed)
- Progress indicators (β β β β βΉ)
- Config status display - Shows whether using default or custom config
- Summary report showing updated, skipped, and failed packages
- Clear status messages throughout the process
--auto/-a: Automatically update all packages without prompting--check-only/-c: Only check versions without updating--quiet/-q: Minimal output (errors and summary only)--break-system-packages/-b: Use --break-system-packages flag for pip (required on some systems)--save-config: Generate example configuration file--version/-v: Show version information--help/-h: Show help message
Supports custom package lists via JSON configuration. Checks for config in:
frup_config.json(current directory).frup_config.json(hidden file in current directory)~/.frup_config.json(user home directory)
When starting, the script shows whether it's using default or custom configuration.
- Network timeouts (10 seconds for API calls)
- Process timeouts (120 seconds for pip operations)
- Graceful failure handling with clear error messages
- Keyboard interrupt handling (Ctrl+C)
- Python 3.6+
- pip
- requests library (
pip install requests) - colorama library (optional, for colored output:
pip install colorama)
# Make executable (optional)
chmod +x frup.py
# Install optional colorama for colored output
pip install coloramapython3 frup.pyShows all information and prompts for each update.
python3 frup.py --autoAutomatically updates all out-of-date packages without prompting.
# Interactive with system packages flag
python3 frup.py --break-system-packages
# Auto-update with system packages flag
python3 frup.py --break-system-packages --auto
# Short form
python3 frup.py -b -apython3 frup.py --check-onlyShows version comparison without performing any updates.
python3 frup.py --quiet --autoSilently updates all packages, showing only the summary.
python3 frup.py --save-configCreates frup_config_example.json that you can customize and rename to frup_config.json.
Create a frup_config.json file to customize which packages to check:
{
"packages": [
{
"name": "RNS",
"url": "https://github.com/markqvist/Reticulum"
},
{
"name": "CustomPackage",
"url": "https://github.com/user/repo",
"manual_install": true,
"skip_local_check": false
}
]
}name: Package name (used for pip)url: GitHub repository URLmanual_install: If true, only shows available versionskip_local_check: Skip checking local installationskip_version_comparison: Skip version comparisononline_only: Only check GitHub version
- β Success / Up to date
- β Error / Failed
- β Warning / Timeout
- β Not installed / Skipped
- βΉ Information
When starting, the script displays which configuration it's using:
Using default configuration- No config file found, using built-in packagesUsing custom config: [path]- Found and loaded custom configuration
- v0.8 - Minor fix of "updateing" display typo bug
- v0.7 - Major rewrite with CLI args, config files, colored output, better error handling
- v0.6 - Fixed Linux keyboard permission issue
- v0.5 - Initial version
Created by F
Open source - feel free to modify and distribute
Modern systems (Debian 12+, Ubuntu 23.04+, etc.) require the --break-system-packages flag:
python3 frup.py --break-system-packages --auto
# or short form
python3 frup.py -b -aThe script will automatically detect this and prompt you to retry with the flag if needed.
Install colorama: pip install colorama
No longer requires sudo! The keyboard dependency was removed in v0.6+
The tool has a 10-second timeout for GitHub API calls. Check your internet connection.
Make sure the package name matches exactly what's used in pip.
Simply delete or rename your frup_config.json file.