OTAClient is software to perform over-the-air software updates for linux devices. It provides a set of APIs for user to start the OTA and monitor the progress and status.
It is designed to work with web.auto FMS OTA component.
- A/B partition update with support for generic x86_64 device, NVIDIA Jetson series based devices and Raspberry Pi
- A/B update of the partition contract layouts (
bootloader: grub-verityon x86_64,jetson-dpion NVIDIA Jetson,driveos-dpion NVIDIA DRIVE), where the platform's DPI writes the slots as partition images (on DriveOS, hands NVIDIA DRIVE Update the package that does) and otaclient drives it - Full Rootfs update, with delta update support.
- Local delta calculation, allowing update to any version of OTA image without the need of a pre-generated delta OTA package.
- Support persist files from active slot to newly updated slot.
- Verification over OTA image by digital signature and PKI.
- Support for protected OTA server with cookie.
- Optional OTA proxy support and OTA cache support.
- Multiple ECU OTA supports.
- Python 3.10 or higher
- Linux (Ubuntu 22.04, 24.04)
Tested on ubuntu 22.04~24.04, and should work on modern linux distros that use systemd.
- For development: Install from source code or use a released Python wheel package. See Development Guide.
- For deployment: Using the OTAClient app image is recommended.
Sample configuration files are available in the samples/ directory:
ecu_info.yaml- ECU information configurationproxy_info.yaml- Proxy settingsotaclient.service- systemd service file
ecu_info.yaml and proxy_info.yaml are installed at /boot/ota/. At each OTA, the copies in the OTA image's /boot/ota/ replace them:
- A file listed in the OTA image's persist files, by itself or by a parent folder, keeps its current content.
- A file not shipped in the OTA image, or not valid, keeps its current content.
- When the OTA image's
ecu_info.yamlhas a differentecu_id, neither file is replaced, as the OTA image is not for this ECU. - Changes made on the ECU are overwritten, so change the files in the OTA image instead.
OTAClient uses protobuf for its API interface. To use OTAClient API in your Python project:
pip install https://raw.githubusercontent.com/tier4/ota-client/main/proto/whl/otaclient_pb2-<version>-py3-none-any.whlOr add to your requirements.txt:
https://raw.githubusercontent.com/tier4/ota-client/main/proto/whl/otaclient_pb2-<version>-py3-none-any.whl
from otaclient_pb2.v2 import otaclient_pb2
from otaclient_pb2.v2 import otaclient_pb2_grpcNote: Tests live under the
tests/folder, organized by category:
tests/unit/- Unit teststests/integration/- Integration teststests/e2e/- End-to-end testsPlease follow this structure when adding or updating tests.
- Development Guide - For contributors and developers
Please refer to DEVELOPMENT.md for development setup, testing, and contribution guidelines.
OTAClient is licensed under the Apache License 2.0.
This project uses open-source software, each under its own license. For details, see the table below:
| Software | License | Source |
|---|---|---|
| certifi | MPL-2.0 | GitHub |