4.0 KiB
Upgrade Guide
This document describes changes that may affect users upgrading from previous versions.
Upgrading from v0.9.3 to v0.9.4
Service Layout and Ownership
The standalone installer and Debian package now keep executable code root-owned and separate mutable runtime data:
| Component | Linux | macOS |
|---|---|---|
| Code and virtual environment | /opt/meshcore-bot |
/usr/local/meshcore-bot |
| Configuration | /etc/meshcore-bot/config.ini |
/usr/local/etc/meshcore-bot/config.ini |
| Database and local plugins | /var/lib/meshcore-bot |
/usr/local/var/lib/meshcore-bot |
| Logs | /var/log/meshcore-bot |
/usr/local/var/log/meshcore-bot |
Run sudo ./install-service.sh --upgrade from an updated source checkout. The
installer requires Python 3.10+ and rsync. It stops an active service before the
database migration, copies relative-path databases coherently, rewrites the migrated
configuration, builds a fresh virtual environment, and restarts a service that was
active before the upgrade.
Before upgrading, keep a separate backup of your configuration and database. The installer preserves:
- the active configuration and absolute custom paths;
- relative-path databases, logs, and the
local/plugin tree; - installed-only files under
modules/commands/alternatives/.
Trusted source versions still replace shipped alternative commands. If the upgrade fails after stopping an active service, the installer attempts one best-effort restart and retains the original failure exit status. Inspect the reported error before retrying.
Configuration Compatibility
v0.9.3 shipped configuration examples pass the v0.9.4 strict validator. Normal startup warns about unknown sections or keys without refusing to start. You can check a config before upgrading:
python3 validate_config.py --config /path/to/config.ini --strict
Outbound HTTP and Feeds
Outbound HTTP now validates every resolved address and redirect. Private feed URLs
remain disabled by default; set allow_private_urls = true only for intentional
private-network feeds. Cloud metadata and non-unicast destinations remain blocked.
Feed responses are bounded by max_response_bytes and max_parsed_items.
Optional Geocoding Data
pycountry and us remain optional under the geo extra. Install them for improved
country and US-state normalization:
pip install -e ".[geo]"
The standalone installer also offers the geocoding extras interactively.
Upgrading from v0.8 to v0.9
- Python 3.10+ is required.
- The global
[Aliases]section was replaced by per-commandaliases =keys. - Database migrations run automatically at startup.
- Review web-viewer authentication before binding beyond localhost.
- Connection and radio settings still require a process restart after changes.
Upgrading from v0.7
Config Compatibility
Previous config files continue to work. The following legacy config formats are supported:
[Jokes]withjoke_enabled/dadjoke_enabled— Migrated to[Joke_Command]and[DadJoke_Command]withenabled. Both formats work; consider updating to the new format.[Stats]/stats_enabled,[Sports]/sports_enabled,[Hacker]/hacker_enabled,[Alert_Command]/alert_enabled— All support the legacy*_enabledkey; the newenabledkey is preferred.
Banned Users: Prefix Matching
[Banned_Users] uses prefix (starts-with) matching for banned_users entries. A banned entry "Awful Username" matches both "Awful Username" and "Awful Username 🍆". If you rely on exact matching, ensure your banned entries are specific enough.
New Optional Sections
[Feed_Manager]— If you use RSS/API feeds, add this section. If absent, the feed manager is disabled. New installs and minimal configs include[Feed_Manager]withfeed_manager_enabled = false.[Path_Command]— New options likepath_selection_preset,enable_p_shortcut(default: true), and graph-related settings. Omitted options use sensible defaults.