Skip to content

Ookla Speedtest Integration - Release 3.0.0

Choose a tag to compare

@soulripper13 soulripper13 released this 19 Mar 12:46
aec746a

Ookla Speedtest Integration - Release 3.0.0

Release Date: March 19, 2026

Shell Scripts Replaced with Pure Python

This is a major release that eliminates all shell script dependencies. The integration now uses pure Python for binary setup, speedtest execution, and server listing — permanently fixing the PermissionError: [Errno 13] / 500 Internal Server Error that affected HACS installs, git-cloned installs, and Docker volume mounts where chmod has no effect.

Why This Matters

Previous versions relied on .sh scripts that required execute permissions. Despite fixes in v2.3.8 and v2.3.9, some environments (read-only mounts, certain NAS devices, restrictive Docker configs) simply cannot set execute bits. By removing shell scripts entirely, the integration now works everywhere Python runs — no filesystem permission workarounds needed.

What Changed

Before (v2.x) After (v3.0.0)
setup_speedtest.sh downloads the binary via curl + tar binary_manager.py downloads via urllib.request + tarfile
launch_speedtest.sh runs the speedtest Direct binary invocation from Python
list_servers.sh lists servers Already used direct binary invocation (no change)
Binary stored in /config/shell/ Binary stored in integration folder (custom_components/ookla_speedtest/bin/)
ensure_shell_scripts_executable() called on every startup Removed entirely — no longer needed

Automatic Migration

Updating to v3.0.0 is seamless:

  • Existing binary users — The integration downloads a fresh copy to its own bin/ directory on first run. No manual action needed.
  • Legacy cleanup — Old files (launch_speedtest.sh, list_servers.sh, setup_speedtest.sh, speedtest.bin) are automatically removed from /config/shell/. The /config/shell/ directory itself is left untouched in case other tools use it.
  • Config entries — No schema changes. Your server selection, schedule, and all settings carry over as-is.

Technical Details

New file: binary_manager.py

  • detect_arch() — Maps platform.machine() to Ookla's naming (x86_64, aarch64, armhf, armel, i386)
  • async_setup_speedtest(hass) — Async entry point that creates the bin/ directory, validates or downloads the binary, and accepts the Ookla license/GDPR
  • Legacy file cleanup for users upgrading from v2.x

Modified files:

  • __init__.py — Speedtest runs via [speedtest.bin, --accept-license, --accept-gdpr, --format=json] directly, no bash wrapper
  • config_flow.py — Setup calls async_setup_speedtest() instead of shelling out to setup_speedtest.sh
  • helpers.py — Removed ensure_shell_scripts_executable() (no longer needed)
  • const.py — Removed LAUNCH_SCRIPT_PATH and INTEGRATION_SHELL_DIR constants; updated SPEEDTEST_BIN_PATH to integration folder

Deleted files:

  • shell/setup_speedtest.sh
  • shell/launch_speedtest.sh
  • shell/list_servers.sh

Installation

Update to version 3.0.0 via HACS. The integration will automatically set up the binary and clean up legacy files on next restart.

No manual steps required.