Conversation
Devices in the field cannot reach GitHub or PyPI, and every path through the installer assumes they can: install.sh downloads a release, install_requirements.sh runs apt, create_venv.sh runs pip against PyPI. offline-update.sh moves that requirement onto the machine doing the updating. It probes the device over SSH, collects the release and every Python wheel resolved for the device's architecture, Python version and glibc, copies the lot over and installs it there. The device makes no outbound connection. --pack-only writes the bundle without deploying, for sites where the device is not reachable from the machine with internet either. pip can only cross-select wheels, never build them, so a dependency that publishes none is built here and kept only if it came out architecture independent; anything else stops the build rather than shipping a wheel for the wrong machine. PyEventEmitter is the current case. Python packages install with --no-index --upgrade, so dependency changes ship with the update. The virtual environment is kept and upgraded in place, which is what makes a repeat update take a second rather than a rebuild the device has no way to perform. Scoped to updating devices that already have DWE OS: apt is never run, so GStreamer, python3-venv and ttyd have to be present, which they are after the initial install or from the Pi image. Nothing existing is modified, so this can be dropped by deleting the script and its doc. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014D18VpvYkhtJJHD47Z9viP
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds
offline-update.sh, a new deployment tool that enables updating DWE OS on devices without internet access. The script runs on a machine with internet connectivity, probes the target device for its architecture and Python version, collects the release and all required Python wheels, and ships everything to the device over SSH for installation.This solves the problem of updating air-gapped or isolated devices that cannot reach GitHub or PyPI directly. The script also supports building bundles for manual transfer via USB or other media when the device is not reachable via SSH.
Type of change
Quick Checklist
Details
New files:
offline-update.sh: Main update script that handles device probing, wheel collection, bundle creation, and remote installationdocs/offline-update.md: User documentation explaining usage patterns and limitationsKey features:
Limitations (by design):
apt(GStreamer, python3-venv, ttyd must already be present)https://claude.ai/code/session_014D18VpvYkhtJJHD47Z9viP