Skip to content

Simple daemon running on your embedded Linux target interfacing between RAUC and hawkBit

License

Notifications You must be signed in to change notification settings

b4u-mw/rauc-hawkbit-updater

 
 

Repository files navigation

RAUC hawkBit Updater

Build Status License CodeQL Documentation Matrix

The RAUC hawkBit updater is a simple command-line tool/daemon written in C (glib). It is a port of the RAUC hawkBit Client written in Python. The daemon runs on your target and operates as an interface between the RAUC D-Bus API and the hawkBit DDI API.

Quickstart

The RAUC hawkBit updater is primarily meant to be used as a daemon, but it also allows you to do a one-shot instantly checking and install new software.

To quickly get started with hawkBit server, follow this instruction.

Setup target (device) configuration file:

  [client]
  hawkbit_server                = hawkbit.example.com
  target_name                   = target-1234
  auth_token                    = bhVahL1Il1shie2aj2poojeChee6ahShu
  #gateway_token                = chietha8eiD8Ujaxerifoxoh6Aed1koof
  #ssl_key                      = pkcs11:token=mytoken;object=mykey
  #ssl_cert                     = /path/to/certificate.pem
  bundle_download_location      = /tmp/bundle.raucb
  #tenant_id                    = DEFAULT
  #ssl                          = true
  #ssl_verify                   = true
  #ssl_engine                   = pkcs11
  #connect_timeout              = 20
  #timeout                      = 60
  #retry_wait                   = 300
  #low_speed_time               = 60
  #low_speed_rate               = 100
  #resume_downloads             = false
  #stream_bundle                = false
  #post_update_reboot           = false
  #log_level                    = message
  #send_download_authentication = true

  [device]
  product                   = Terminator
  model                     = T-1000
  serialnumber              = 8922673153
  hw_revision               = 2
  key1                      = value
  key2                      = value

All key/values under [device] group are sent to hawkBit as data (attributes). The attributes in hawkBit can be used in target filters.

Finally start the updater as daemon:

$ ./rauc-hawkbit-updater -c config.conf

Debugging

When setting the log level to 'debug' the RAUC hawkBit client will print JSON payload sent and received. This can be done by using option -d.

$ ./rauc-hawkbit-updater -d -c config.conf

Compile

Install build pre-requisites:

  • meson
  • libcurl
  • libjson-glib
$ sudo apt-get update
$ sudo apt-get install meson libcurl4-openssl-dev libjson-glib-dev
$ meson setup build
$ ninja -C build

Test Suite

Prepare test suite:

$ sudo apt install libcairo2-dev libgirepository1.0-dev nginx-full libnginx-mod-http-ndk libnginx-mod-http-lua
$ python3 -m venv venv
$ source venv/bin/activate
(venv) $ pip install --upgrade pip
(venv) $ pip install -r test-requirements.txt

Run hawkBit docker container:

$ docker pull hawkbit/hawkbit-update-server
$ docker run -d --name hawkbit -p ::1:8080:8080 -p 127.0.0.1:8080:8080 \
    hawkbit/hawkbit-update-server \
    --hawkbit.server.security.dos.filter.enabled=false \
    --hawkbit.server.security.dos.maxStatusEntriesPerAction=-1 \
    --server.forward-headers-strategy=NATIVE

Run test suite:

(venv) $ ./test/wait-for-hawkbit-online && dbus-run-session -- pytest -v

Pass -o log_cli=true to pytest in order to enable live logging for all test cases.

Usage / Options

$ /usr/bin/rauc-hawkbit-updater --help
Usage:
  rauc-hawkbit-updater [OPTION?]

Help Options:
  -h, --help               Show help options

Application Options:
  -c, --config-file        Configuration file
  -v, --version            Version information
  -d, --debug              Enable debug output
  -r, --run-once           Check and install new software and exit
  -s, --output-systemd     Enable output to systemd

About

Simple daemon running on your embedded Linux target interfacing between RAUC and hawkBit

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 61.6%
  • Python 35.7%
  • Meson 1.7%
  • Shell 1.0%