Skip to content

ukleinek/rauc

 
 

Repository files navigation

RAUC logo

RAUC - Robust Auto-Update Controller

LGPLv2.1 Travis_branch Codecov_branch Coverity 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)

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)
    • 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:
  • 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

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 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

Create a directory with the content that should be installed:

mkdir content-dir/
cp $SOURCE/rootfs.ext4.img 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=2015.04-1
[image.rootfs]
filename=rootfs.ext4.img
EOF

Let RAUC create a bundle from this:

rauc --cert autobuilder.cert.pem --key autobuilder.key.pem bundle content-dir/ update-2018.11-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.

About

Robust Auto-Update Controller

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C 77.8%
  • Shell 10.8%
  • M4 10.1%
  • Makefile 1.1%
  • Dockerfile 0.2%