All Projects → rauc → Rauc

rauc / Rauc

Licence: lgpl-2.1
Safe and secure software updates for embedded Linux

Programming Languages

c
50402 projects - #5 most used programming language

Projects that are alternatives of or similar to Rauc

Blynk Library
Blynk library for embedded hardware. Works with Arduino, ESP8266, Raspberry Pi, Intel Edison/Galileo, LinkIt ONE, Particle Core/Photon, Energia, ARM mbed, etc.
Stars: ✭ 3,305 (+818.06%)
Mutual labels:  iot, ota, embedded
rauc-hawkbit-updater
The RAUC hawkBit updater is a simple commandline tool/daemon that runs on your target and interfaces between RAUC and hawkBit's DDI API.
Stars: ✭ 40 (-88.89%)
Mutual labels:  embedded, ota, update
Swupdate
Software Update for Embedded Systems
Stars: ✭ 711 (+97.5%)
Mutual labels:  iot, ota, embedded
Pjon
PJON (Padded Jittering Operative Network) is an experimental, arduino-compatible, multi-master, multi-media network protocol.
Stars: ✭ 2,615 (+626.39%)
Mutual labels:  iot, embedded
Opcua
A client and server implementation of the OPC UA specification written in Rust
Stars: ✭ 202 (-43.89%)
Mutual labels:  iot, embedded
Platform Espressif8266
Espressif 8266: development platform for PlatformIO
Stars: ✭ 206 (-42.78%)
Mutual labels:  iot, embedded
Bee
A framework for IOTA nodes, clients and applications in Rust
Stars: ✭ 176 (-51.11%)
Mutual labels:  iot, client
Elegantota
Push OTAs to ESP8266 or ESP32 Elegantly.
Stars: ✭ 128 (-64.44%)
Mutual labels:  update, ota
Parse Embedded Sdks
The Embedded SDKs for the Parse Platform
Stars: ✭ 244 (-32.22%)
Mutual labels:  iot, embedded
Awesome Circuitpython
A curated list of awesome CircuitPython guides, videos, libraries, frameworks, software and resources.
Stars: ✭ 360 (+0%)
Mutual labels:  iot, embedded
kocherga
Robust platform-agnostic Cyphal/DroneCAN bootloader for deeply embedded systems
Stars: ✭ 21 (-94.17%)
Mutual labels:  embedded, ota
Tock
A secure embedded operating system for microcontrollers
Stars: ✭ 3,258 (+805%)
Mutual labels:  iot, embedded
Deviceplane
Open source device management for embedded systems and edge computing
Stars: ✭ 917 (+154.72%)
Mutual labels:  iot, embedded
Blynk Server
Blynk is an Internet of Things Platform aimed to simplify building mobile and web applications for the Internet of Things. Easily connect 400+ hardware models like Arduino, ESP8266, ESP32, Raspberry Pi and similar MCUs and drag-n-drop IOT mobile apps for iOS and Android in 5 minutes
Stars: ✭ 8 (-97.78%)
Mutual labels:  iot, ota
Openthread
OpenThread released by Google is an open-source implementation of the Thread networking protocol
Stars: ✭ 2,643 (+634.17%)
Mutual labels:  iot, embedded
Zenoh
zenoh unifies data in motion, data in-use, data at rest and computations. It carefully blends traditional pub/sub with geo-distributed storages, queries and computations, while retaining a level of time and space efficiency that is well beyond any of the mainstream stacks.
Stars: ✭ 182 (-49.44%)
Mutual labels:  iot, embedded
Tasmota
Alternative firmware for ESP8266 with easy configuration using webUI, OTA updates, automation using timers or rules, expandability and entirely local control over MQTT, HTTP, Serial or KNX. Full documentation at
Stars: ✭ 16,624 (+4517.78%)
Mutual labels:  iot, ota
Esp8266 Firmware
DeviceHive esp8266 firmware. Control hardware via clouds with DeviceHive!
Stars: ✭ 154 (-57.22%)
Mutual labels:  iot, embedded
Wasm Micro Runtime
WebAssembly Micro Runtime (WAMR)
Stars: ✭ 2,440 (+577.78%)
Mutual labels:  iot, embedded
Wolfmqtt
wolfMQTT is a small, fast, portable MQTT client implementation, including support for TLS 1.3.
Stars: ✭ 316 (-12.22%)
Mutual labels:  iot, embedded

.. image:: rauc_logo_small.png :alt: RAUC logo :align: center

RAUC - Robust Auto-Update Controller

|LGPLv2.1| |CI_branch| |Codecov_branch| |Coverity| |lgtm| |Documentation| |Matrix|

RAUC controls the update process on embedded Linux systems. It is both a target application that runs as an update client and a host/target tool that allows you to create, inspect and modify installation artifacts.

Source Code: https://github.com/rauc/rauc

Documentation: https://rauc.readthedocs.org/

Chat: IRC channel #rauc on freenode (bridged to the Matrix channel #rauc:matrix.org <https://app.element.io/#/room/#rauc:matrix.org>_)

Features

  • Fail-Safe & Atomic:

    • An update may be interrupted at any point without breaking the running system.
    • Update compatibility check
    • Atomic bootloader updates (eMMC boot partitions, MBR, GPT)
  • Cryptographic signing and verification of updates using OpenSSL (signatures based on x.509 certificates)

    • Keys and certificates on PKCS#11 tokens (HSMs) are supported
  • Flexible and customizable redundancy/storage setup

    • Symmetric setup (Root-FS A & B)
    • Asymmetric setup (recovery & normal)
    • Application partition, data partitions, ...
    • Allows grouping of multiple slots (rootfs, appfs) as update targets
  • Network streaming mode using casync

    • chunk-based binary delta updates
    • significantly reduce download size
    • no extra storage required
  • Bootloader support:

    • grub <https://www.gnu.org/software/grub/>_
    • barebox <http://barebox.org/>_
    • u-boot <http://www.denx.de/wiki/U-Boot>_
    • EFI <https://de.wikipedia.org/wiki/Unified_Extensible_Firmware_Interface>_
    • Custom implementation
  • Storage support:

    • ext4 filesystem
    • eMMC boot partitions (atomic update)
    • vfat filesystem
    • UBI volumes
    • UBIFS
    • raw NAND flash (using nandwrite)
    • raw NOR flash (using flashcp)
    • squashfs
    • MBR partition table
    • GPT partition table
  • Independent from update source

    • USB Stick
    • Software provisioning server (e.g. hawkBit)
  • Controllable via D-Bus interface

  • Supports data migration

  • Network protocol support using libcurl (https, http, ftp, ssh, ...)

  • Several layers of update customization

    • Update-specific extensions (hooks)
    • System-specific extensions (handlers)
    • fully custom update script

Host Features


*  Create update bundles
*  Sign/resign bundles
*  Inspect bundle files

Target Features
  • Run as a system service (D-Bus interface)
  • Install bundles
  • View system status information
  • Change status of symmetric/asymmetric/custom slots

Target Requirements

  • Boot state storage

    • GRUB: environment file on SD/eMMC/SSD/disk
    • Barebox: State partition on EEPROM/FRAM/MRAM or NAND flash
    • U-Boot: environment variable
    • EFI: EFI variables
    • Custom: depends on implementation
  • Boot target selection support in the bootloader

  • Enough mass storage for two symmetric/asymmetric/custom slots

  • For normal bundle mode:

    • Enough storage for the compressed bundle file (in memory, in a temporary partition or on an external storage device)
  • For casync bundle mode:

    • No additional storage needed
    • Network interface
  • Hardware watchdog (optional, but recommended)

  • RTC (optional, but recommended)

Usage

Please see the documentation <https://rauc.readthedocs.org/>__ for details.

Prerequisites

Host (Build) Prerequisites


-  build-essential
-  automake
-  libtool
-  libdbus-1-dev
-  libglib2.0-dev
-  libcurl3-dev
-  libssl-dev

::

   sudo apt-get install build-essential automake libtool libdbus-1-dev libglib2.0-dev libcurl3-dev libssl-dev

If you intend to use json-support you also need

::

    sudo apt-get install libjson-glib-dev

Target Prerequisites
~~~~~~~~~~~~~~~~~~~~

Required kernel options:

-  ``CONFIG_BLK_DEV_LOOP=y``
-  ``CONFIG_SQUASHFS=y``

For using tar archive in RAUC bundles with Busybox tar, you have to enable the
following Busybox feature:

-  ``CONFIG_FEATURE_TAR_AUTODETECT=y``
-  ``CONFIG_FEATURE_TAR_LONG_OPTIONS=y``

Depending on the actual storage type and/or filesystem used, further target
tools might be required.
The documentation chapter
`Required Target Tools <http://rauc.readthedocs.io/en/latest/integration.html#required-target-tools>`_
gives a more detailed list on these.

Building from Sources
---------------------

.. note:: RAUC is intended to be built both as a host tool as well as a target
   tool (service). Therefore it is fully prepared for `automake cross-compilation
   <https://www.gnu.org/software/automake/manual/html_node/Cross_002dCompilation.html>`_

::

    git clone https://github.com/rauc/rauc
    cd rauc
    ./autogen.sh
    ./configure
    make

Manual Installation
-------------------

.. note:: To prepare RAUC for the target device, it is highly recommended to
  use an embedded Linux distribution build suite such as Yocto/OE, PTXdist or
  Buildroot.

On the host system RAUC can be used directly from the build dir, or optionally
be installed. On the target instead, installing is highly recommended as it
also unpacks service and D-Bus configuration files required to run RAUC
properly::

    make install

Running the Test Suite
----------------------

::

    sudo apt-get install qemu-system-x86 time squashfs-tools
    # Optional to run all tests:
    # sudo apt-get install faketime casync grub-common softhsm2 opensc opensc-pkcs11 libengine-pkcs11-openssl mtd-utils
    make check
    ./qemu-test

Creating a Bundle (Host)
------------------------

Create a directory with the content that should be installed::

    mkdir content-dir/
    cp $SOURCE/rootfs.ext4 content-dir/

Create a manifest describing which image to install where together with some
meta info::

    cat >> content-dir/manifest.raucm << EOF
    [update]
    compatible=FooCorp Super BarBazzer
    version=2019.01-1
    [image.rootfs]
    filename=rootfs.ext4
    EOF

Let RAUC create a bundle from this::

    rauc --cert autobuilder.cert.pem --key autobuilder.key.pem bundle content-dir/ update-2019.01-1.raucb

Starting the RAUC Service (Target)
----------------------------------

Create a system configuration file in ``/etc/rauc/system.conf`` and start the
service process in background::

    rauc service &

Installing a Bundle (Target)
----------------------------

To install the bundle on your target device, run::

    rauc install update-2019.01-1.raucb

Contributing
------------

Fork the repository and send us a pull request.

Please read the Documentation's
`Contributing <http://rauc.readthedocs.io/en/latest/contributing.html>`_
section for more details.

.. |LGPLv2.1| image:: https://img.shields.io/badge/license-LGPLv2.1-blue.svg
   :target: https://raw.githubusercontent.com/rauc/rauc/master/COPYING
.. |CI_branch| image:: https://github.com/rauc/rauc/workflows/tests/badge.svg
   :target: https://github.com/rauc/rauc/actions?query=workflow%3Atests
.. |Codecov_branch| image:: https://codecov.io/gh/rauc/rauc/branch/master/graph/badge.svg
   :target: https://codecov.io/gh/rauc/rauc
.. |Coverity| image:: https://scan.coverity.com/projects/5085/badge.svg
   :target: https://scan.coverity.com/projects/5085
.. |Documentation| image:: https://readthedocs.org/projects/rauc/badge/?version=latest
   :target: http://rauc.readthedocs.org/en/latest/?badge=latest
.. |Matrix| image:: https://img.shields.io/matrix/rauc:matrix.org?label=matrix%20chat
   :target: https://app.element.io/#/room/#rauc:matrix.org
.. |lgtm| image:: https://img.shields.io/lgtm/grade/cpp/g/rauc/rauc.svg?logo=lgtm&logoWidth=18
   :target: https://lgtm.com/projects/g/rauc/rauc/context:cpp
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].