Safe and secure software updates for embedded Linux
C M4 Shell Makefile
Clone or download
jluebbe and ejoerns test/sharness.sh: run cleanup functions even if tests failed
Fixes: #177
Signed-off-by: Jan Luebbe <jlu@pengutronix.de>
Latest commit ede0aa9 Aug 9, 2018
Permalink
Failed to load latest commit information.
build-aux configure: Add git-version-gen May 18, 2015
contrib Merge pull request #259 from mhei/fix-uboot-example Apr 6, 2018
data dbus: use wrapper when starting rauc service Jul 19, 2017
docs Introduce max-bundle-download-size config setting (fixes #287) Aug 10, 2018
include Introduce max-bundle-download-size config setting (fixes #287) Aug 10, 2018
m4 configure: update ax_code_coverage.m4 from autoconf-archive master Dec 7, 2017
src Merge pull request #295 from ejoerns/topic/u-boot-testing Aug 10, 2018
test test/sharness.sh: run cleanup functions even if tests failed Aug 14, 2018
.gitignore gitignore: fix location of rauc-installer-generated.[ch] May 22, 2018
.travis.yml .travis.yml: enable coverity again Jul 4, 2018
.uncrustify.cfg uncrustify: add newline between function signature and '{' Mar 16, 2018
CHANGES CHANGES: document changes in version 0.4 Apr 9, 2018
COPYING Initialize project for autotools Apr 23, 2015
Makefile.am Makefile.am: allow building doc out-of-tree Mar 16, 2018
README.rst src: preserve original uig/gid during tar extraction Jul 5, 2018
autogen.sh autogen.sh: call autoreconf with -f option May 18, 2015
build-uncrustify.sh .travis.yml: build and run uncrustify Mar 16, 2018
configure.ac configure.ac: depend on GLib 2.45.8 for automatic cleanup helpers Jun 28, 2018
rauc_logo.png README: add logo Apr 12, 2017
rauc_logo_small.png README: move markdown to rst May 9, 2017
tap-t tap-t: run sharness with verbose output Aug 14, 2018
tap-test test: run test binaries under catchsegv Mar 13, 2016
uml-test test/rauc.t: fix bootname simulation Jan 12, 2018
uml-test-init uml-test-init: show log on error Aug 14, 2018
uncrustify.sh .travis.yml: build and run uncrustify Mar 16, 2018

README.rst

RAUC logo

RAUC - Robust Auto-Update Controller

LGPLv2.1 Travis branch Coveralls branch Coverity Documentation Chat

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)

Features

  • Fail-Safe & Atomic:
    • An update may be interrupted at any point without breaking the running system.
    • Update compatibility check
  • Cryptographic signing and verification of updates using OpenSSL (signatures based on x.509 certificates)
  • 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
  • Two update modes:
    • Bundle: single file containing the whole update
    • Network: separate manifest and component files
  • Bootloader support:
  • Storage support:
    • ext2/3/4 filesystem
    • eMMC boot partitions (atomic update)
    • vfat filesystem
    • UBI volumes
    • UBIFS
    • raw NAND (using nandwrite)
    • squashfs
  • Independent from updates 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
  • Boot target selection support in the bootloader
  • Enough mass storage for two symmetric/asymmetric/custom slots
  • For bundle mode:
    • Enough storage for the compressed bundle file (in memory, in a temporary partition or on an external storage device)
  • For network mode:
    • No additional storage needed
    • Network interface
  • Hardware watchdog (optional, but recommended)
  • RTC (optional, but recommended)

Usage

Please see the documentation for details.

Prerequisites

Host (Build) Prerequisites

  • automake

  • libtool

  • libglib2.0-dev

  • libcurl3-dev

  • libssl-dev

    sudo apt-get install automake libtool libglib2.0-dev libcurl3-dev libssl-dev libjson-glib-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 tool might be required. The documentation chapter Required Target Tools gives a more detailed list on these.

Building from Sources

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

Testing

sudo apt-get install user-mode-linux slirp
make check
./uml-test

Creating a Bundle

mkdir content-dir/
cp $SOURCE/rootfs.ext4.img content-dir/
cat >> content-dir/manifest.raucm << EOF
[update]
compatible=FooCorp Super BarBazzer
version=2015.04-1
[image.rootfs]
filename=rootfs.ext4.img
EOF
rauc --cert autobuilder.cert.pem --key autobuilder.key.pem bundle content-dir/ update-2015.04-1.raucb

Installing a Bundle

rauc install update-2015.04-1.raucb

Contributing

Fork the repository and send us a pull request.

Please read the Documentation's Contributing section for more details.