Repository files navigation

RAUC logo

RAUC - Robust Auto-Update Controller

LGPLv2.1Travis_branchCodecov_branchCoveritylgtmDocumentationMatrix

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
    • 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:
  • Storage support:
    • ext4 filesystem
    • eMMC boot partitions (atomic update)
    • vfat filesystem
    • UBI volumes
    • UBIFS
    • raw NAND (using nandwrite)
    • 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 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 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

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 section for more details.

About

Safe and secure software updates for embedded Linux

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

RAUC logo

RAUC - Robust Auto-Update Controller

LGPLv2.1Travis_branchCodecov_branchCoveritylgtmDocumentationMatrix

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
    • 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:
  • Storage support:
    • ext4 filesystem
    • eMMC boot partitions (atomic update)
    • vfat filesystem
    • UBI volumes
    • UBIFS
    • raw NAND (using nandwrite)
    • 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 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 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

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 section for more details.

About

Safe and secure software updates for embedded Linux

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

RAUC logo

RAUC - Robust Auto-Update Controller

LGPLv2.1Travis_branchCodecov_branchCoveritylgtmDocumentationMatrix

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
    • 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:
  • Storage support:
    • ext4 filesystem
    • eMMC boot partitions (atomic update)
    • vfat filesystem
    • UBI volumes
    • UBIFS
    • raw NAND (using nandwrite)
    • 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 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 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

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 section for more details.

About

Safe and secure software updates for embedded Linux

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

RAUC logo

RAUC - Robust Auto-Update Controller

LGPLv2.1Travis_branchCodecov_branchCoveritylgtmDocumentationMatrix

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
    • 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:
  • Storage support:
    • ext4 filesystem
    • eMMC boot partitions (atomic update)
    • vfat filesystem
    • UBI volumes
    • UBIFS
    • raw NAND (using nandwrite)
    • 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 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 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

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 section for more details.

About

Safe and secure software updates for embedded Linux

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

RAUC logo

RAUC - Robust Auto-Update Controller

LGPLv2.1Travis_branchCodecov_branchCoveritylgtmDocumentationMatrix

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
    • 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:
  • Storage support:
    • ext4 filesystem
    • eMMC boot partitions (atomic update)
    • vfat filesystem
    • UBI volumes
    • UBIFS
    • raw NAND (using nandwrite)
    • 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 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 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

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 section for more details.

About

Safe and secure software updates for embedded Linux

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

RAUC logo

RAUC - Robust Auto-Update Controller

LGPLv2.1Travis_branchCodecov_branchCoveritylgtmDocumentationMatrix

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
    • 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:
  • Storage support:
    • ext4 filesystem
    • eMMC boot partitions (atomic update)
    • vfat filesystem
    • UBI volumes
    • UBIFS
    • raw NAND (using nandwrite)
    • 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 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 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

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 section for more details.

About

Safe and secure software updates for embedded Linux

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

RAUC logo

RAUC - Robust Auto-Update Controller

LGPLv2.1Travis_branchCodecov_branchCoveritylgtmDocumentationMatrix

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
    • 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:
  • Storage support:
    • ext4 filesystem
    • eMMC boot partitions (atomic update)
    • vfat filesystem
    • UBI volumes
    • UBIFS
    • raw NAND (using nandwrite)
    • 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 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 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

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 section for more details.

About

Safe and secure software updates for embedded Linux

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

RAUC logo

RAUC - Robust Auto-Update Controller

LGPLv2.1Travis_branchCodecov_branchCoveritylgtmDocumentationMatrix

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
    • 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:
  • Storage support:
    • ext4 filesystem
    • eMMC boot partitions (atomic update)
    • vfat filesystem
    • UBI volumes
    • UBIFS
    • raw NAND (using nandwrite)
    • 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 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 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

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 section for more details.

About

Safe and secure software updates for embedded Linux

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages