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)
- 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
- Create update bundles
- Sign/resign bundles
- Inspect bundle files
- Run as a system service (d-bus interface)
- Install bundles
- View system status information
- Change status of symmetric/asymmetric/custom slots
- 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)
Please see the documentation for details.
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
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.
git clone https://github.com/rauc/rauc cd rauc ./autogen.sh ./configure make
sudo apt-get install user-mode-linux slirp make check ./uml-test
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
rauc install update-2015.04-1.raucb
Fork the repository and send us a pull request.
Please read the Documentation's Contributing section for more details.