UpstreamDataInc / goosebit

A simplistic, opinionated remote update server implementing hawkBit™'s DDI API.
https://goosebit.rtfd.io
Apache License 2.0
18 stars 3 forks source link
ddi embedded firmware-update hawkbit internet-of-things iot linux ota ota-update software-provisioning swupdate

gooseBit


A simplistic, opinionated remote update server implementing hawkBit™'s DDI API.

Quick Start

Installation

  1. Install dependencies using Poetry:

    poetry install
  2. Create the database:

    poetry run aerich upgrade
  3. Launch gooseBit:

    python main.py

Initial Configuration

Before running gooseBit for the first time, update the default credentials in settings.yaml. The default login for testing purposes is:

Assumptions

Features

Device Registry

When a device connects to gooseBit for the first time, it is automatically added to the device registry. The server will then request the device's configuration data, including:

The registry tracks each device's status, including the last online timestamp, installed software version, update state, and more.

Software Repository

Software packages (*.swu files) can be hosted directly on the gooseBit server or on an external server. gooseBit parses the software metadata to determine compatibility with specific hardware models and revisions.

Device Update Modes

Devices can be configured with different update modes. The default mode is Rollout.

1. Manual Update to Specified Software

Assign specific software to a device manually. Once installed, no further updates will be triggered.

2. Automatic Update to Latest Software

Automatically updates the device to the latest compatible software, based on the reported hw_model and hw_revision. Note: versions are interpreted as SemVer versions.

3. Software Rollout

Rollouts target all devices with a specified "feed" value, ensuring that the assigned software is installed on all matching devices. Rollouts also track success and error rates, with future plans for automatic aborts. If multiple rollouts exist for the same feed, the most recent rollout takes precedence.

Pause Updates

Devices can be pinned to their current software version, preventing any updates from being applied.

Real-time Update Logs

While updates are in progress, gooseBit captures real-time logs, which are accessible through the device repository.

Development

Database

Create or upgrade database

poetry run aerich upgrade

After a model change create the migration

poetry run aerich migrate

To seed some sample data (attention: drops all current data) use

poetry run generate-sample-data

Code formatting and linting

Code is formatted using different tools

Code is linted using different tools as well

Best to have pre-commit install git hooks that run all those tools before a commit:

poetry run pre-commit install

To manually apply the hooks to all files use:

pre-commit run --all-files

Testing

Tests are implemented using pytest. To run all tests

poetry run pytest

Structure

The structure of gooseBit is as follows: