<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.yoctoproject.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Thomas+Perrot</id>
	<title>Yocto Project - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.yoctoproject.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Thomas+Perrot"/>
	<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/Special:Contributions/Thomas_Perrot"/>
	<updated>2026-04-12T03:01:01Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.5</generator>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=System_Update&amp;diff=86663</id>
		<title>System Update</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=System_Update&amp;diff=86663"/>
		<updated>2025-07-29T12:04:54Z</updated>

		<summary type="html">&lt;p&gt;Thomas Perrot: Update RAUC features&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
This page compares different system update mechanisms. The purpose is to help the project with picking a suitable mechanism that the project then will support going forward. Users may find this page relevant for picking a mechanism that suits their specific needs.&lt;br /&gt;
&lt;br /&gt;
A system update mechanism must ensure that a device running an older release of the operating systems runs with a more recent release when the update mechanism is done. This includes updating everything that defines the system (rootfs, kernel, bootloader, etc.), restarting running processes and potentially a reboot. An ideal mechanism:&lt;br /&gt;
* never ends up in an inconsistent state (atomic update),&lt;br /&gt;
* always keeps the device usable (fallback to previous state when there are problems, or at least supporting a recovery mode),&lt;br /&gt;
* requires little additional resources (disk space, RAM),&lt;br /&gt;
* minimizes downtime while updating,&lt;br /&gt;
* works in combination with security technology (integrity protection),&lt;br /&gt;
* is secure (does not install or execute software created by an attacker).&lt;br /&gt;
&lt;br /&gt;
These are conflicting requirements. Different mechanisms will have different strengths and weaknesses. Therefore the first chapter provides a more detailed definition of the different aspects and has a table comparing the mechanisms. The following sections then describe each mechanism in more detail.&lt;br /&gt;
&lt;br /&gt;
Some talks at Embedded Linux Conference presented an overview of the current mechanisms:&lt;br /&gt;
* How do you update your embedded Linux devices? by Daniel Sangorrin / Keijiro Yano http://events.linuxfoundation.org/sites/events/files/slides/linuxcon-japan-2016-softwre-updates-sangorrin.pdf&lt;br /&gt;
* Comparison of Linux Software Update Technologies by Matt Porter http://events.linuxfoundation.org/sites/events/files/slides/Comparison%20of%20Linux%20Software%20Update%20Technologies_0.pdf. Video at https://youtu.be/pdHV9H9nZks?list=PLbzoR-pLrL6pRFP6SOywVJWdEHlmQE51q. Full paper done for Automotive Grade Linux (AGL) here: https://lists.linuxfoundation.org/pipermail/automotive-discussions/2016-May/002061.html&lt;br /&gt;
* Software update for IoT: the current state of play by Chris Simmonds http://de.slideshare.net/chrissimmonds/software-update-for-iot-the-current-state-of-play&lt;br /&gt;
* OSS Remote Firmware Updates for IoT-like Projects by Silvano Cirujano Cuesta http://events.linuxfoundation.org/sites/events/files/slides/OSS_Remote_Firmware_Updates_for_IoT-like_Projects.pdf&lt;br /&gt;
* &amp;quot;Surviving in the Wilderness: Integrity Protection and System Update&amp;quot; by Patrick Ohly: [https://openiotelcna2017.sched.com/event/9J5i/surviving-in-the-wilderness-integrity-protection-and-system-update-patrick-ohly-intel-gmbh abstract and slides], [https://www.youtube.com/watch?v=N8V0W0p3YBU video recording of talk]&lt;br /&gt;
&lt;br /&gt;
== Comparison ==&lt;br /&gt;
&lt;br /&gt;
;Type&lt;br /&gt;
: &#039;&#039;Block-based&#039;&#039; update mechanisms directly modify blocks in the partition(s) that they update, without going through the filesystem. This implies that the partition has to be the same for all devices and that devices must use exactly the same partition size. &#039;&#039;File-based&#039;&#039; update mechanisms modify files and directories. Therefore devices with different partition sizes can use the same update data and it may be possible to update without a reboot.&lt;br /&gt;
;Disk layout&lt;br /&gt;
: Dependencies on boot loader, number and kind of partitions, etc. Flexible mechanisms make no or only few assumptions about the system, but typically then require additional work to integrate with a specific setup.&lt;br /&gt;
;Rootfs&lt;br /&gt;
: The partition which contains the OS. May be strictly read-only (block-based update mechanisms) or read/write (file-based). Some update mechanisms support installing and updating a subset of the full OS.&lt;br /&gt;
;Updates from&lt;br /&gt;
: describes from where the update mechanism gets the update.&lt;br /&gt;
;Updates what&lt;br /&gt;
: describes which parts of the overall system the mechanism updates.&lt;br /&gt;
;Code stability&lt;br /&gt;
: Based on how long the code has been in use, personal experience, security track record in existing deployments, etc.&lt;br /&gt;
;OE/Yocto integration&lt;br /&gt;
: Whether the mechanism is already available and who supports it.&lt;br /&gt;
;Resource requirements on server&lt;br /&gt;
: affect both build time and long-term storage capacity. Likely to depend on the complexity of the changes.&lt;br /&gt;
;Resource requirements on client&lt;br /&gt;
: Amount of temporary disk space, CPU/network load, ..., again for different scenarios.&lt;br /&gt;
;Failure resilience&lt;br /&gt;
: Summarizes how the mechanism copes with potential problems.&lt;br /&gt;
;Complexity&lt;br /&gt;
: Some mechanisms are harder to use correctly than others (usability). Also includes how difficult is to set up the mechanism because of dependencies.&lt;br /&gt;
;Downtime&lt;br /&gt;
: How long normal operation of the device needs to be interrupted for an update.&lt;br /&gt;
;Security&lt;br /&gt;
: Compatibility with other technology, protection of the update mechanism itself.&lt;br /&gt;
;License&lt;br /&gt;
: License of the client running on the target device.&lt;br /&gt;
;Backend&lt;br /&gt;
: Back end solution for rolling out software updates.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot;|Mechanism&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot;|Type&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot;|Disk layout&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot;|Rootfs&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot;|Updates from&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot;|Updates what&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot;|Code stability&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot;|OE/Yocto integration&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;|Resource requirements&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot;|Failure resilience&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot;|Complexity&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot;|Downtime&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot;|Security&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot;|License&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot;|Backend&lt;br /&gt;
|-&lt;br /&gt;
! on server&lt;br /&gt;
! on client&lt;br /&gt;
|-&lt;br /&gt;
! [https://clearlinux.org/documentation/swupdate_about_sw_update.html swupd]&lt;br /&gt;
| file-based&lt;br /&gt;
| flexible&lt;br /&gt;
| read/write&lt;br /&gt;
| HTTP(S) server, local media&lt;br /&gt;
| depends on setup&lt;br /&gt;
| relatively stable, under active development&lt;br /&gt;
| [http://git.yoctoproject.org/cgit/cgit.cgi/meta-swupd meta-swupd]&lt;br /&gt;
| moderate, suitable for frequent updates&lt;br /&gt;
| minimal download, needs sufficient free space in rootfs&lt;br /&gt;
| favors fast updates over failure resilience&lt;br /&gt;
| some planning required&lt;br /&gt;
| minimal, reboot optional&lt;br /&gt;
| Compatible with Linux IMA, Smack, SELinux. Signed update data, HTTPS transfer protection.&lt;br /&gt;
| GPL-2.0-or-later&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! [https://github.com/sbabic/swupdate sbabic&#039;s swupdate]&lt;br /&gt;
| block-based / file based&lt;br /&gt;
| flexible&lt;br /&gt;
| depends on setup (read-only supported)&lt;br /&gt;
| local and remote (plain HTTP(S) or custom server)&lt;br /&gt;
| depends on setup&lt;br /&gt;
| Code relatively stable, 6 months release cycle&lt;br /&gt;
| [https://github.com/sbabic/meta-swupdate meta-swupdate], [https://github.com/sbabic/meta-swupdate-boards meta-swupdate-boards]&lt;br /&gt;
| archives full image per build&lt;br /&gt;
| download and write full (compressed) image, zero-copy&lt;br /&gt;
| integrated rollback (requires bootloader support)&lt;br /&gt;
| easy to use (but also very customizable)&lt;br /&gt;
| reboot required&lt;br /&gt;
| signed and encrypted images, HTTPS&lt;br /&gt;
| GPL-2.0-only&lt;br /&gt;
| [https://github.com/eclipse/hawkbit hawkBit], [https://github.com/siemens/wfx wfx], HTTP(S) server&lt;br /&gt;
|-&lt;br /&gt;
! [https://github.com/mendersoftware Mender]&lt;br /&gt;
| block-based / file based&lt;br /&gt;
| [https://docs.mender.io/Devices/Partition-layout flexible (minimum four partitions)], U-Boot or GRUB as boot loader&lt;br /&gt;
| supports read-write and read-only&lt;br /&gt;
| remote using Mender management server ([https://docs.mender.io/Architecture/Overview#modes-of-operation managed mode]) or local using CLI ([https://docs.mender.io/Architecture/Overview#modes-of-operation standalone mode])&lt;br /&gt;
| Complete rootfs, including kernel (built-in). Customizable with [https://docs.mender.io/artifacts/update-modules Update Modules].&lt;br /&gt;
| relatively stable, fully supported and tested [https://docs.mender.io/administration/upgrading upgrade path]&lt;br /&gt;
| [https://github.com/mendersoftware/meta-mender meta-mender]&lt;br /&gt;
| compressed rootfs per build&lt;br /&gt;
| download and write [https://docs.mender.io/architecture/mender-artifacts#streaming-and-compression compressed rootfs]&lt;br /&gt;
| integrated rollback&lt;br /&gt;
| easy when using meta-mender&lt;br /&gt;
| reboot required&lt;br /&gt;
| HTTPS enforced, [https://docs.mender.io/artifacts/signing-and-verification signed images]&lt;br /&gt;
| Apache 2.0&lt;br /&gt;
| [https://hosted.mender.io/ Hosted Mender] or self-hosted Mender server&lt;br /&gt;
|-&lt;br /&gt;
! [https://github.com/ostreedev/ostree OSTree]&lt;br /&gt;
| file-based&lt;br /&gt;
| flexible, but supports only limited set of bootloaders&lt;br /&gt;
| read/write, OS trees bind mounted read-only, /etc and /var writable&lt;br /&gt;
| local and remote repositories&lt;br /&gt;
| kernel and filesystem&lt;br /&gt;
| relatively stable, significant user base, under active development&lt;br /&gt;
| meta-ostree (WIP), [https://github.com/advancedtelematic/meta-updater meta-updater] (public)&lt;br /&gt;
| generating commits based on new builds, storing them in repository&lt;br /&gt;
| updating local repository, hard links for sharing unchanged content between deployments&lt;br /&gt;
| rollback to a different deployed OS tree&lt;br /&gt;
| some work required&lt;br /&gt;
| reboot required&lt;br /&gt;
| GPG-signed commits&lt;br /&gt;
| LGPL-2.0-or-later&lt;br /&gt;
| rpm-ostree?&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! [https://github.com/rauc/rauc RAUC]&lt;br /&gt;
| block based / file-based (tar)&lt;br /&gt;
| flexible (block-device/MTD)&lt;br /&gt;
| depends on setup (read-only supported)&lt;br /&gt;
| depends on setup&lt;br /&gt;
| depends on setup (any storage device)&lt;br /&gt;
| relatively stable, under active development&lt;br /&gt;
| [https://github.com/rauc/meta-rauc meta-rauc]&lt;br /&gt;
| archives full (compressed) image per build&lt;br /&gt;
| download and write full (compressed) image&lt;br /&gt;
| integrated rollback and/or rescue (requires bootloader support)&lt;br /&gt;
| some customization required&lt;br /&gt;
| reboot required&lt;br /&gt;
| X509-signed update bundles&lt;br /&gt;
| LGPL-2.1-only&lt;br /&gt;
| [https://github.com/eclipse/hawkbit hawkBit] or HTTP(S) server (for example lighttpd) or USB Stick&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== swupd ==&lt;br /&gt;
&lt;br /&gt;
;Disk layout&lt;br /&gt;
: swupd updates files in a single partition. Other than that, it makes no assumptions about disk layout, filesystem and boot mechanism.&lt;br /&gt;
;Rootfs&lt;br /&gt;
: Files provided by the OS are read-only, everything else is read/write (/etc, /var) and preserved during updates. OS can be split up into a core OS (always installed) and optional bundles which may or may not be installed.&lt;br /&gt;
;Updates from&lt;br /&gt;
: Uses libcurl to fetch update data and thus supports all URL schemes supported by libcurl, in particular http(s) and local files.&lt;br /&gt;
;Updates what&lt;br /&gt;
: swupd itself updates files in the rootfs, other components then need to be updated (boot loader, kernel, firmware, ...) then need be updated via custom plugins.&lt;br /&gt;
;Code stability&lt;br /&gt;
: Used and maintained in Clear Linux OS. Code relatively stable, but would benefit from a rewrite (evolved from a prototype). Code changes not written for Clear Linux OS tend to get merged only slowly or not at all (examples: [https://github.com/clearlinux/swupd-server/pull/25 assumption about filesystem], [https://github.com/clearlinux/swupd-server/pull/26 error checking], [https://github.com/clearlinux/swupd-client/pull/71 path configuration]).&lt;br /&gt;
;OE/Yocto integration&lt;br /&gt;
: Layer available, not part of Yocto releases, experimental. Supports building incremental updates (= only changes since last build are stored for new build) and deltas (= optimized update pack for specific previous builds, typically major milestones).&lt;br /&gt;
;Resource requirements on server&lt;br /&gt;
: Build time and storage for each update linear with total number of files (file system analysis, zero packs) plus linear with number of modified files (compression). When using swupd purely as update mechanism (i.e. no bundles), space requirement on the server could be reduced to linear with the number of modified files by not creating the zero packs. Optionally can prepare deltas from certain previous builds, which is linear with the number of modified files since each of those builds.&lt;br /&gt;
;Resource requirements on client&lt;br /&gt;
: In the best case (delta prepared by server), a single archive with just some file diffs gets downloaded, unpacked and applied. In other cases, each new or modified file gets downloaded and unpacked. Staging new content needs free space in the rootfs partition, i.e. partition must be at least twice as large as the base OS.&lt;br /&gt;
;Failure resilience&lt;br /&gt;
: No recovery mechanism built into swupd itself. Short period of time where interrupted update may leave behind inconsistent rootfs. No updates possible when there is not enough free space left. Updating files while system services are running reduces downtime, but is also more risky if system services aren&#039;t prepared for it. Could be extended to do updates without that risk, at the expense of increased downtime.&lt;br /&gt;
;Complexity&lt;br /&gt;
: Upgrade path must be considered as part of release process (deltas, incompatible changes).&lt;br /&gt;
;Downtime&lt;br /&gt;
: Downloading and staging in parallel to normal operation. Services are kept running until after the update, at which point the device admin needs to restart services or reboot depending on what was updated (not automated at the moment in meta-swupd layer).&lt;br /&gt;
;Security&lt;br /&gt;
: Compatible with Linux IMA, Smack, SELinux. Conceptually incompatible with dm-verity. Relies on HTTPS and (optionally) [https://clearlinux.org/blogs/security-software-update-clear-linux-os-intel%C2%AE-architecture signing] to protect integrity of update data (not integrated into meta-swupd yet).&lt;br /&gt;
&lt;br /&gt;
== babic&#039;s SWUpdate ==&lt;br /&gt;
&lt;br /&gt;
;Disk layout&lt;br /&gt;
: There is no constraint how software is stored. SWUPdate supports raw flash (NOR, NAND), UBI volumes, disk partitions or can update files (provided in a tarball) into an existing filesystem. Each artifact can be stored on a different storage device.&lt;br /&gt;
;Rootfs&lt;br /&gt;
: No constrain where software is stored. During an update, a single partition, multiple partitions or generically multiple different storages can be updated.&lt;br /&gt;
:&lt;br /&gt;
: SWUpdate is often used in one of the following setup:&lt;br /&gt;
:&lt;br /&gt;
:* &#039;&#039;&#039;rescue&#039;&#039;&#039; : The system reboots in maintenance mode and SWUpdate is started from a Ramdisk. Just one copy of the Software is stored into the system.&lt;br /&gt;
:* &#039;&#039;&#039;dual-copy&#039;&#039;&#039; : two copies of the software (rootfs, kernel) are stored into the system and SWUpdate installs the stand-by copy.&lt;br /&gt;
;Updates from&lt;br /&gt;
:&lt;br /&gt;
:* local provisioning : USB, SD, etc.&lt;br /&gt;
:* generic URL : HTTP(S), FTP. It uses the libcurl library and supports what libcurl provides.&lt;br /&gt;
:* Webserver : SWUpdate integrates a Webserver (mongoose)&lt;br /&gt;
:* External Backend connector (suricatta mode) to bind with an external backend server. Currently, the Hawkbit server is supported https://github.com/eclipse/hawkbit. Open to further backends.&lt;br /&gt;
:* Custom Protocol: SWUPdate provides a library (LGPLv2.1) in case of custom protocol.&lt;br /&gt;
;Updates what&lt;br /&gt;
:&lt;br /&gt;
:* bootloader (risky !)&lt;br /&gt;
:* kernel&lt;br /&gt;
:* interface to bootloader (U-Boot) Allows to change u-boot variables and allow to use plugins to make changes to other bootloaders.&lt;br /&gt;
;* disk partitions&lt;br /&gt;
;* provide interface to update FPGAs, external microcontrollers, etc.&lt;br /&gt;
;* custom handlers: an interface allows to add own installers written in C or in LUA.&lt;br /&gt;
;* system update: atomic update of network connected devices as they are just one.&lt;br /&gt;
;Resources on client&lt;br /&gt;
:&lt;br /&gt;
:* &#039;&#039;&#039;rescue&#039;&#039;&#039; : meta-swupdate provides recipe to generate a compressed ramdisk with small footprint. Including support for signed image, the whole rootfs is ~4MB. The minimal requirement for a complete rescue (bootloader, kernel for SWUpdate and ramdisk) is 8MB. This allows to put the rescue in a small storage like a SPI-NOR, while the software is stored on another and bigger device (NAND, eMMC).&lt;br /&gt;
:* &#039;&#039;&#039;dual-copy&#039;&#039;&#039; : Needs active/passive rootfs partition, and bandwidth to download compressed rootfs image. No additional space is required if the image is directly streamed to the stand-by copy.&lt;br /&gt;
;Failure resilience&lt;br /&gt;
: SWUpdate provides interface to bootloaders (U-Boot, GRUB, EFIBootGuard). Update can be marked good or bad and it starts a fallback (support from bootloader required). &lt;br /&gt;
; Downtime&lt;br /&gt;
:&lt;br /&gt;
:* &#039;&#039;&#039;rescue&#039;&#039;&#039; : There is need to reboot in maintenance mode and once the image is installed, needs to reboot again with the new production image. &lt;br /&gt;
:* &#039;&#039;&#039;dual-copy&#039;&#039;&#039; :  Update is downloaded and applied during normal operation. Afterwards one reboot is required, no other downtime. &lt;br /&gt;
;Security&lt;br /&gt;
:&lt;br /&gt;
:* Connection with HTTPS to the external the server.&lt;br /&gt;
:* Signed images : it is possible to sign the images used for the update in order to check its integrity. X.509 cryptography (CMS) or RSA keys.&lt;br /&gt;
:* Split in several processes: connection to the internet can run with a different userid / groupid as the installer (privilege separation). The installer runs often with high privileges because it has to write the hardware.&lt;br /&gt;
:* Support for encrypted artifacts&lt;br /&gt;
:* Signing / Encryption with openSSL or MbedTLS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mender ==&lt;br /&gt;
&lt;br /&gt;
;Disk layout&lt;br /&gt;
: No upper limit on partitions, [https://docs.mender.io/devices/partition-layout minimum four]. Dual rootfs partitions with two extra partitions, a boot and a data partition. Depends on either U-Boot or GRUB as boot loader for the automatic rollback.&lt;br /&gt;
;Rootfs&lt;br /&gt;
: Stored in one active and one passive partition, read/write while in use, but modifications to it get lost during updates when switching partitions, so persistent data should be stored in the data partition. Kernel is stored on rootfs.&lt;br /&gt;
;Updates from&lt;br /&gt;
: Mender Server over HTTPS ([https://docs.mender.io/architecture/overview#modes-of-operation managed mode])&lt;br /&gt;
: manual provisioning : local file system/URL, e.g. USB, SD, HTTP(S) ([https://docs.mender.io/architecture/overview#modes-of-operation standalone mode])&lt;br /&gt;
;Update what&lt;br /&gt;
: Built-in support for rootfs update, including kernel. Can be customized via [https://docs.mender.io/artifacts/update-modules Update Modules] to update files, packages or external components.&lt;br /&gt;
;Code stability&lt;br /&gt;
: Stable release. Upgrade path fully supported and tested.&lt;br /&gt;
;Resources on server&lt;br /&gt;
: Needs to store one compressed rootfs image for each update, plus small meta data section.&lt;br /&gt;
;Resources on client&lt;br /&gt;
: Needs active/passive rootfs partition, and bandwidth to download compressed rootfs image. Needs no additional space on device beyond the partitions (update is streamed), space for the Mender binary, and a tiny local database.&lt;br /&gt;
;Failure resilience&lt;br /&gt;
: Automatic rollback if the device either fails to boot, or the Mender daemon cannot connect to the Mender server afterwards.&lt;br /&gt;
;Complexity&lt;br /&gt;
: Relatively easy to [https://docs.mender.io/Artifacts/Building-Mender-Yocto-image build with Yocto]. More complex if [https://mender.io/blog/porting-mender-to-a-non-yocto-build-system not using Yocto].&lt;br /&gt;
;Downtime&lt;br /&gt;
: Update is downloaded and applied during normal operation. Afterwards one reboot is required, no other downtime.&lt;br /&gt;
;Security&lt;br /&gt;
: Secure connection to the server (TLS). [https://docs.mender.io/1.1/artifacts/signing-and-verification Artifact signing] with RSA or ECDSA.&lt;br /&gt;
&lt;br /&gt;
== OSTree ==&lt;br /&gt;
&lt;br /&gt;
;Disk layout&lt;br /&gt;
:Only limited set of bootloaders supported (those that support [http://www.freedesktop.org/wiki/Specifications/BootLoaderSpec The Boot Loader Specification] and some exceptions). The root file system has to have the /boot directory managed by OSTree. The actual deployed OS trees have certain conventions and requirements. For example, /etc and /var need to be writable, while /usr is mounted read-only.&lt;br /&gt;
;Rootfs&lt;br /&gt;
:Files provided by OS are expected to be in /usr, which is mounted read-only. /etc and /var are writable.&lt;br /&gt;
;Updates from&lt;br /&gt;
:Local and remote repostories. OSTree works by replicating a repository to the target device and then &amp;quot;checking out&amp;quot; deployment directories from the repository. Local and HTTP methods for replicating the repository are available.&lt;br /&gt;
;Updates what&lt;br /&gt;
:OSTree (atomically) updates root file system trees and the kernel. If anything else needs to be updated, it needs to happen by running custom code on the target device.&lt;br /&gt;
;Code stability&lt;br /&gt;
:OSTree is relatively stable. It&#039;s used by many distributions and projects, such as Fedora Atomic and Flatpak. OSTree is under active development and has an open-source community around it.&lt;br /&gt;
;OE/Yocto integration&lt;br /&gt;
:Meta-ostree layer is work in progress.&lt;br /&gt;
;Resource requirements on server&lt;br /&gt;
:OSTree generates &amp;quot;commit objects&amp;quot; based on the filesystem changes between builds. These commit objects are stored in a commit chain the same way as git does. The commit objects transmitted over the network as binary diffs when the remote and local repositories are synchronized.&lt;br /&gt;
;Resource requirements on client&lt;br /&gt;
:Client has the local copy of the repository. The repository contains the objects, which map to the files on the OS trees. The deployments of the OS trees (or &amp;quot;checkouts&amp;quot; in git termininology) are made using hard links to the repository content. This means that the required space is only increased when the data changes: the static data files are shared between deployments.&lt;br /&gt;
:OSTree allows deleting of data. This means that the full operating system history doesn&#039;t need to be stored in the repository. A typical OSTree-based system might have two deployed OS trees: one that is being currently used and one fallback.&lt;br /&gt;
;Failure resilience&lt;br /&gt;
:OSTree controls the booting to the different deployed trees using bootloader entries. If booting a deployed OS tree fails, a different bootloader entry can be chosen for booting into a different OS tree.&lt;br /&gt;
;Complexity&lt;br /&gt;
:Some work is needed to fit the root filesystem into the conventions that OSTree likes. Some documentation of the needed steps [https://ostree.readthedocs.io/en/latest/manual/adapting-existing/ is available here].&lt;br /&gt;
;Downtime&lt;br /&gt;
:Reboot is required after updates. Changing between deployed OS trees is done by selecting a different boot loader entry.&lt;br /&gt;
;Security&lt;br /&gt;
:The commits can be signed with GPG-based signatures. OSTree repositories store file extended attributes, which means that the security mechanisms using extended attributes should be functional with OSTree.&lt;br /&gt;
&lt;br /&gt;
== RAUC ==&lt;br /&gt;
&lt;br /&gt;
;Type&lt;br /&gt;
: RAUC supports filesystems on block devices and MTD (NAND/NOR) as well as raw images (bootloaders, FPGA bitstreams).&lt;br /&gt;
;Disk layout&lt;br /&gt;
: RAUC does not depend on a fixed disk layout but allows to flexibly [https://rauc.readthedocs.io/en/latest/reference.html#sec-ref-slot-config configure] one. It supports A+B scenarios as well as A+recovery or more complex setups. &lt;br /&gt;
;Rootfs&lt;br /&gt;
: There are no limitations on the root file system, it can be read-only or read-write. It has to contain the RAUC system configuration file, a keyring for verification and the small RAUC binary itself.&lt;br /&gt;
;Updates from&lt;br /&gt;
: RAUC is the updating core that is meant to be integrated in a custom environment. Thus it supports installing bundles from local file paths, while another application is responsible fetching the update.&lt;br /&gt;
: External storage (USB, SD): direct access, no copying required&lt;br /&gt;
: Webserver: Application downloads Bundle to local tmpfs / storage.&lt;br /&gt;
: Demo-applications planned.&lt;br /&gt;
;Updates what&lt;br /&gt;
:&lt;br /&gt;
:* everything which is updatable&lt;br /&gt;
:* default handler for common storage types and file systems (ext4, NAND, UBI, raw copy)&lt;br /&gt;
:* allows [https://rauc.readthedocs.io/en/latest/using.html#customizing-the-update custom handler] for each update target (script or application, information passed as environment variables)&lt;br /&gt;
;Resources on client&lt;br /&gt;
: At least one production rootfs and a rescue system. Temporary storage for update Bundle (compressed) if provided by a webserver.&lt;br /&gt;
;Failure resilience&lt;br /&gt;
: Interface to [https://rauc.readthedocs.io/en/latest/integration.html#interfacing-with-the-bootloader Booloader] (Barebox, U-Boot, GRUB, UEFI) allows atomic updates (correct fallback handling is up to the bootloader). Interface to mark updates good or bad after certain checks in the newly booted rootfs (must be supported by bootloader).&lt;br /&gt;
;Complexity&lt;br /&gt;
: Integration into the rootfs and generating update Bundles is relatively easy with Yocto ([https://github.com/rauc/meta-rauc meta-rauc]) or [https://www.mail-archive.com/ptxdist@pengutronix.de/msg11471.html PTXdist]. Manual integration described [https://rauc.readthedocs.io/en/latest/integration.html here].&lt;br /&gt;
;Downtime&lt;br /&gt;
: Normally, downloading and installing will be perforemd as background operation. A reboot is needed to make the new system active (might be scheduled).&lt;br /&gt;
;Security&lt;br /&gt;
: Signed images: Signing images is mandatory. X.509 cryptography (CMS) is used to sign the bundle and a full PKI with revocations is supported. An example script allows creating key/cert/keychain for test purposes.&lt;br /&gt;
: Verified boot: When using image updates, compatible with IMA, SELinux, dm-verity, ... (as it does require write access to the filesystems).&lt;/div&gt;</summary>
		<author><name>Thomas Perrot</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=System_Update&amp;diff=86662</id>
		<title>System Update</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=System_Update&amp;diff=86662"/>
		<updated>2025-07-29T11:56:51Z</updated>

		<summary type="html">&lt;p&gt;Thomas Perrot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
This page compares different system update mechanisms. The purpose is to help the project with picking a suitable mechanism that the project then will support going forward. Users may find this page relevant for picking a mechanism that suits their specific needs.&lt;br /&gt;
&lt;br /&gt;
A system update mechanism must ensure that a device running an older release of the operating systems runs with a more recent release when the update mechanism is done. This includes updating everything that defines the system (rootfs, kernel, bootloader, etc.), restarting running processes and potentially a reboot. An ideal mechanism:&lt;br /&gt;
* never ends up in an inconsistent state (atomic update),&lt;br /&gt;
* always keeps the device usable (fallback to previous state when there are problems, or at least supporting a recovery mode),&lt;br /&gt;
* requires little additional resources (disk space, RAM),&lt;br /&gt;
* minimizes downtime while updating,&lt;br /&gt;
* works in combination with security technology (integrity protection),&lt;br /&gt;
* is secure (does not install or execute software created by an attacker).&lt;br /&gt;
&lt;br /&gt;
These are conflicting requirements. Different mechanisms will have different strengths and weaknesses. Therefore the first chapter provides a more detailed definition of the different aspects and has a table comparing the mechanisms. The following sections then describe each mechanism in more detail.&lt;br /&gt;
&lt;br /&gt;
Some talks at Embedded Linux Conference presented an overview of the current mechanisms:&lt;br /&gt;
* How do you update your embedded Linux devices? by Daniel Sangorrin / Keijiro Yano http://events.linuxfoundation.org/sites/events/files/slides/linuxcon-japan-2016-softwre-updates-sangorrin.pdf&lt;br /&gt;
* Comparison of Linux Software Update Technologies by Matt Porter http://events.linuxfoundation.org/sites/events/files/slides/Comparison%20of%20Linux%20Software%20Update%20Technologies_0.pdf. Video at https://youtu.be/pdHV9H9nZks?list=PLbzoR-pLrL6pRFP6SOywVJWdEHlmQE51q. Full paper done for Automotive Grade Linux (AGL) here: https://lists.linuxfoundation.org/pipermail/automotive-discussions/2016-May/002061.html&lt;br /&gt;
* Software update for IoT: the current state of play by Chris Simmonds http://de.slideshare.net/chrissimmonds/software-update-for-iot-the-current-state-of-play&lt;br /&gt;
* OSS Remote Firmware Updates for IoT-like Projects by Silvano Cirujano Cuesta http://events.linuxfoundation.org/sites/events/files/slides/OSS_Remote_Firmware_Updates_for_IoT-like_Projects.pdf&lt;br /&gt;
* &amp;quot;Surviving in the Wilderness: Integrity Protection and System Update&amp;quot; by Patrick Ohly: [https://openiotelcna2017.sched.com/event/9J5i/surviving-in-the-wilderness-integrity-protection-and-system-update-patrick-ohly-intel-gmbh abstract and slides], [https://www.youtube.com/watch?v=N8V0W0p3YBU video recording of talk]&lt;br /&gt;
&lt;br /&gt;
== Comparison ==&lt;br /&gt;
&lt;br /&gt;
;Type&lt;br /&gt;
: &#039;&#039;Block-based&#039;&#039; update mechanisms directly modify blocks in the partition(s) that they update, without going through the filesystem. This implies that the partition has to be the same for all devices and that devices must use exactly the same partition size. &#039;&#039;File-based&#039;&#039; update mechanisms modify files and directories. Therefore devices with different partition sizes can use the same update data and it may be possible to update without a reboot.&lt;br /&gt;
;Disk layout&lt;br /&gt;
: Dependencies on boot loader, number and kind of partitions, etc. Flexible mechanisms make no or only few assumptions about the system, but typically then require additional work to integrate with a specific setup.&lt;br /&gt;
;Rootfs&lt;br /&gt;
: The partition which contains the OS. May be strictly read-only (block-based update mechanisms) or read/write (file-based). Some update mechanisms support installing and updating a subset of the full OS.&lt;br /&gt;
;Updates from&lt;br /&gt;
: describes from where the update mechanism gets the update.&lt;br /&gt;
;Updates what&lt;br /&gt;
: describes which parts of the overall system the mechanism updates.&lt;br /&gt;
;Code stability&lt;br /&gt;
: Based on how long the code has been in use, personal experience, security track record in existing deployments, etc.&lt;br /&gt;
;OE/Yocto integration&lt;br /&gt;
: Whether the mechanism is already available and who supports it.&lt;br /&gt;
;Resource requirements on server&lt;br /&gt;
: affect both build time and long-term storage capacity. Likely to depend on the complexity of the changes.&lt;br /&gt;
;Resource requirements on client&lt;br /&gt;
: Amount of temporary disk space, CPU/network load, ..., again for different scenarios.&lt;br /&gt;
;Failure resilience&lt;br /&gt;
: Summarizes how the mechanism copes with potential problems.&lt;br /&gt;
;Complexity&lt;br /&gt;
: Some mechanisms are harder to use correctly than others (usability). Also includes how difficult is to set up the mechanism because of dependencies.&lt;br /&gt;
;Downtime&lt;br /&gt;
: How long normal operation of the device needs to be interrupted for an update.&lt;br /&gt;
;Security&lt;br /&gt;
: Compatibility with other technology, protection of the update mechanism itself.&lt;br /&gt;
;License&lt;br /&gt;
: License of the client running on the target device.&lt;br /&gt;
;Backend&lt;br /&gt;
: Back end solution for rolling out software updates.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot;|Mechanism&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot;|Type&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot;|Disk layout&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot;|Rootfs&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot;|Updates from&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot;|Updates what&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot;|Code stability&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot;|OE/Yocto integration&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot;|Resource requirements&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot;|Failure resilience&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot;|Complexity&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot;|Downtime&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot;|Security&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot;|License&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot;|Backend&lt;br /&gt;
|-&lt;br /&gt;
! on server&lt;br /&gt;
! on client&lt;br /&gt;
|-&lt;br /&gt;
! [https://clearlinux.org/documentation/swupdate_about_sw_update.html swupd]&lt;br /&gt;
| file-based&lt;br /&gt;
| flexible&lt;br /&gt;
| read/write&lt;br /&gt;
| HTTP(S) server, local media&lt;br /&gt;
| depends on setup&lt;br /&gt;
| relatively stable, under active development&lt;br /&gt;
| [http://git.yoctoproject.org/cgit/cgit.cgi/meta-swupd meta-swupd]&lt;br /&gt;
| moderate, suitable for frequent updates&lt;br /&gt;
| minimal download, needs sufficient free space in rootfs&lt;br /&gt;
| favors fast updates over failure resilience&lt;br /&gt;
| some planning required&lt;br /&gt;
| minimal, reboot optional&lt;br /&gt;
| Compatible with Linux IMA, Smack, SELinux. Signed update data, HTTPS transfer protection.&lt;br /&gt;
| GPL-2.0-or-later&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! [https://github.com/sbabic/swupdate sbabic&#039;s swupdate]&lt;br /&gt;
| block-based / file based&lt;br /&gt;
| flexible&lt;br /&gt;
| depends on setup (read-only supported)&lt;br /&gt;
| local and remote (plain HTTP(S) or custom server)&lt;br /&gt;
| depends on setup&lt;br /&gt;
| Code relatively stable, 6 months release cycle&lt;br /&gt;
| [https://github.com/sbabic/meta-swupdate meta-swupdate], [https://github.com/sbabic/meta-swupdate-boards meta-swupdate-boards]&lt;br /&gt;
| archives full image per build&lt;br /&gt;
| download and write full (compressed) image, zero-copy&lt;br /&gt;
| integrated rollback (requires bootloader support)&lt;br /&gt;
| easy to use (but also very customizable)&lt;br /&gt;
| reboot required&lt;br /&gt;
| signed and encrypted images, HTTPS&lt;br /&gt;
| GPL-2.0-only&lt;br /&gt;
| [https://github.com/eclipse/hawkbit hawkBit], [https://github.com/siemens/wfx wfx], HTTP(S) server&lt;br /&gt;
|-&lt;br /&gt;
! [https://github.com/mendersoftware Mender]&lt;br /&gt;
| block-based / file based&lt;br /&gt;
| [https://docs.mender.io/Devices/Partition-layout flexible (minimum four partitions)], U-Boot or GRUB as boot loader&lt;br /&gt;
| supports read-write and read-only&lt;br /&gt;
| remote using Mender management server ([https://docs.mender.io/Architecture/Overview#modes-of-operation managed mode]) or local using CLI ([https://docs.mender.io/Architecture/Overview#modes-of-operation standalone mode])&lt;br /&gt;
| Complete rootfs, including kernel (built-in). Customizable with [https://docs.mender.io/artifacts/update-modules Update Modules].&lt;br /&gt;
| relatively stable, fully supported and tested [https://docs.mender.io/administration/upgrading upgrade path]&lt;br /&gt;
| [https://github.com/mendersoftware/meta-mender meta-mender]&lt;br /&gt;
| compressed rootfs per build&lt;br /&gt;
| download and write [https://docs.mender.io/architecture/mender-artifacts#streaming-and-compression compressed rootfs]&lt;br /&gt;
| integrated rollback&lt;br /&gt;
| easy when using meta-mender&lt;br /&gt;
| reboot required&lt;br /&gt;
| HTTPS enforced, [https://docs.mender.io/artifacts/signing-and-verification signed images]&lt;br /&gt;
| Apache 2.0&lt;br /&gt;
| [https://hosted.mender.io/ Hosted Mender] or self-hosted Mender server&lt;br /&gt;
|-&lt;br /&gt;
! [https://github.com/ostreedev/ostree OSTree]&lt;br /&gt;
| file-based&lt;br /&gt;
| flexible, but supports only limited set of bootloaders&lt;br /&gt;
| read/write, OS trees bind mounted read-only, /etc and /var writable&lt;br /&gt;
| local and remote repositories&lt;br /&gt;
| kernel and filesystem&lt;br /&gt;
| relatively stable, significant user base, under active development&lt;br /&gt;
| meta-ostree (WIP), [https://github.com/advancedtelematic/meta-updater meta-updater] (public)&lt;br /&gt;
| generating commits based on new builds, storing them in repository&lt;br /&gt;
| updating local repository, hard links for sharing unchanged content between deployments&lt;br /&gt;
| rollback to a different deployed OS tree&lt;br /&gt;
| some work required&lt;br /&gt;
| reboot required&lt;br /&gt;
| GPG-signed commits&lt;br /&gt;
| LGPL-2.0-or-later&lt;br /&gt;
| rpm-ostree?&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
! [https://github.com/rauc/rauc RAUC]&lt;br /&gt;
| block based / file-based (tar)&lt;br /&gt;
| flexible (block-device/MTD)&lt;br /&gt;
| depends on setup (read-only supported)&lt;br /&gt;
| depends on setup&lt;br /&gt;
| depends on setup (any storage device)&lt;br /&gt;
| relatively stable, under active development&lt;br /&gt;
| [https://github.com/rauc/meta-rauc meta-rauc]&lt;br /&gt;
| archives full (compressed) image per build&lt;br /&gt;
| download and write full (compressed) image&lt;br /&gt;
| integrated rollback (requires bootloader support)&lt;br /&gt;
| some customization required&lt;br /&gt;
| reboot required&lt;br /&gt;
| X509-signed update bundles&lt;br /&gt;
| LGPL-2.1-only&lt;br /&gt;
| [https://github.com/eclipse/hawkbit hawkBit] or HTTP(S) server (for example lighttpd) or USB Stick&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== swupd ==&lt;br /&gt;
&lt;br /&gt;
;Disk layout&lt;br /&gt;
: swupd updates files in a single partition. Other than that, it makes no assumptions about disk layout, filesystem and boot mechanism.&lt;br /&gt;
;Rootfs&lt;br /&gt;
: Files provided by the OS are read-only, everything else is read/write (/etc, /var) and preserved during updates. OS can be split up into a core OS (always installed) and optional bundles which may or may not be installed.&lt;br /&gt;
;Updates from&lt;br /&gt;
: Uses libcurl to fetch update data and thus supports all URL schemes supported by libcurl, in particular http(s) and local files.&lt;br /&gt;
;Updates what&lt;br /&gt;
: swupd itself updates files in the rootfs, other components then need to be updated (boot loader, kernel, firmware, ...) then need be updated via custom plugins.&lt;br /&gt;
;Code stability&lt;br /&gt;
: Used and maintained in Clear Linux OS. Code relatively stable, but would benefit from a rewrite (evolved from a prototype). Code changes not written for Clear Linux OS tend to get merged only slowly or not at all (examples: [https://github.com/clearlinux/swupd-server/pull/25 assumption about filesystem], [https://github.com/clearlinux/swupd-server/pull/26 error checking], [https://github.com/clearlinux/swupd-client/pull/71 path configuration]).&lt;br /&gt;
;OE/Yocto integration&lt;br /&gt;
: Layer available, not part of Yocto releases, experimental. Supports building incremental updates (= only changes since last build are stored for new build) and deltas (= optimized update pack for specific previous builds, typically major milestones).&lt;br /&gt;
;Resource requirements on server&lt;br /&gt;
: Build time and storage for each update linear with total number of files (file system analysis, zero packs) plus linear with number of modified files (compression). When using swupd purely as update mechanism (i.e. no bundles), space requirement on the server could be reduced to linear with the number of modified files by not creating the zero packs. Optionally can prepare deltas from certain previous builds, which is linear with the number of modified files since each of those builds.&lt;br /&gt;
;Resource requirements on client&lt;br /&gt;
: In the best case (delta prepared by server), a single archive with just some file diffs gets downloaded, unpacked and applied. In other cases, each new or modified file gets downloaded and unpacked. Staging new content needs free space in the rootfs partition, i.e. partition must be at least twice as large as the base OS.&lt;br /&gt;
;Failure resilience&lt;br /&gt;
: No recovery mechanism built into swupd itself. Short period of time where interrupted update may leave behind inconsistent rootfs. No updates possible when there is not enough free space left. Updating files while system services are running reduces downtime, but is also more risky if system services aren&#039;t prepared for it. Could be extended to do updates without that risk, at the expense of increased downtime.&lt;br /&gt;
;Complexity&lt;br /&gt;
: Upgrade path must be considered as part of release process (deltas, incompatible changes).&lt;br /&gt;
;Downtime&lt;br /&gt;
: Downloading and staging in parallel to normal operation. Services are kept running until after the update, at which point the device admin needs to restart services or reboot depending on what was updated (not automated at the moment in meta-swupd layer).&lt;br /&gt;
;Security&lt;br /&gt;
: Compatible with Linux IMA, Smack, SELinux. Conceptually incompatible with dm-verity. Relies on HTTPS and (optionally) [https://clearlinux.org/blogs/security-software-update-clear-linux-os-intel%C2%AE-architecture signing] to protect integrity of update data (not integrated into meta-swupd yet).&lt;br /&gt;
&lt;br /&gt;
== babic&#039;s SWUpdate ==&lt;br /&gt;
&lt;br /&gt;
;Disk layout&lt;br /&gt;
: There is no constraint how software is stored. SWUPdate supports raw flash (NOR, NAND), UBI volumes, disk partitions or can update files (provided in a tarball) into an existing filesystem. Each artifact can be stored on a different storage device.&lt;br /&gt;
;Rootfs&lt;br /&gt;
: No constrain where software is stored. During an update, a single partition, multiple partitions or generically multiple different storages can be updated.&lt;br /&gt;
:&lt;br /&gt;
: SWUpdate is often used in one of the following setup:&lt;br /&gt;
:&lt;br /&gt;
:* &#039;&#039;&#039;rescue&#039;&#039;&#039; : The system reboots in maintenance mode and SWUpdate is started from a Ramdisk. Just one copy of the Software is stored into the system.&lt;br /&gt;
:* &#039;&#039;&#039;dual-copy&#039;&#039;&#039; : two copies of the software (rootfs, kernel) are stored into the system and SWUpdate installs the stand-by copy.&lt;br /&gt;
;Updates from&lt;br /&gt;
:&lt;br /&gt;
:* local provisioning : USB, SD, etc.&lt;br /&gt;
:* generic URL : HTTP(S), FTP. It uses the libcurl library and supports what libcurl provides.&lt;br /&gt;
:* Webserver : SWUpdate integrates a Webserver (mongoose)&lt;br /&gt;
:* External Backend connector (suricatta mode) to bind with an external backend server. Currently, the Hawkbit server is supported https://github.com/eclipse/hawkbit. Open to further backends.&lt;br /&gt;
:* Custom Protocol: SWUPdate provides a library (LGPLv2.1) in case of custom protocol.&lt;br /&gt;
;Updates what&lt;br /&gt;
:&lt;br /&gt;
:* bootloader (risky !)&lt;br /&gt;
:* kernel&lt;br /&gt;
:* interface to bootloader (U-Boot) Allows to change u-boot variables and allow to use plugins to make changes to other bootloaders.&lt;br /&gt;
;* disk partitions&lt;br /&gt;
;* provide interface to update FPGAs, external microcontrollers, etc.&lt;br /&gt;
;* custom handlers: an interface allows to add own installers written in C or in LUA.&lt;br /&gt;
;* system update: atomic update of network connected devices as they are just one.&lt;br /&gt;
;Resources on client&lt;br /&gt;
:&lt;br /&gt;
:* &#039;&#039;&#039;rescue&#039;&#039;&#039; : meta-swupdate provides recipe to generate a compressed ramdisk with small footprint. Including support for signed image, the whole rootfs is ~4MB. The minimal requirement for a complete rescue (bootloader, kernel for SWUpdate and ramdisk) is 8MB. This allows to put the rescue in a small storage like a SPI-NOR, while the software is stored on another and bigger device (NAND, eMMC).&lt;br /&gt;
:* &#039;&#039;&#039;dual-copy&#039;&#039;&#039; : Needs active/passive rootfs partition, and bandwidth to download compressed rootfs image. No additional space is required if the image is directly streamed to the stand-by copy.&lt;br /&gt;
;Failure resilience&lt;br /&gt;
: SWUpdate provides interface to bootloaders (U-Boot, GRUB, EFIBootGuard). Update can be marked good or bad and it starts a fallback (support from bootloader required). &lt;br /&gt;
; Downtime&lt;br /&gt;
:&lt;br /&gt;
:* &#039;&#039;&#039;rescue&#039;&#039;&#039; : There is need to reboot in maintenance mode and once the image is installed, needs to reboot again with the new production image. &lt;br /&gt;
:* &#039;&#039;&#039;dual-copy&#039;&#039;&#039; :  Update is downloaded and applied during normal operation. Afterwards one reboot is required, no other downtime. &lt;br /&gt;
;Security&lt;br /&gt;
:&lt;br /&gt;
:* Connection with HTTPS to the external the server.&lt;br /&gt;
:* Signed images : it is possible to sign the images used for the update in order to check its integrity. X.509 cryptography (CMS) or RSA keys.&lt;br /&gt;
:* Split in several processes: connection to the internet can run with a different userid / groupid as the installer (privilege separation). The installer runs often with high privileges because it has to write the hardware.&lt;br /&gt;
:* Support for encrypted artifacts&lt;br /&gt;
:* Signing / Encryption with openSSL or MbedTLS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mender ==&lt;br /&gt;
&lt;br /&gt;
;Disk layout&lt;br /&gt;
: No upper limit on partitions, [https://docs.mender.io/devices/partition-layout minimum four]. Dual rootfs partitions with two extra partitions, a boot and a data partition. Depends on either U-Boot or GRUB as boot loader for the automatic rollback.&lt;br /&gt;
;Rootfs&lt;br /&gt;
: Stored in one active and one passive partition, read/write while in use, but modifications to it get lost during updates when switching partitions, so persistent data should be stored in the data partition. Kernel is stored on rootfs.&lt;br /&gt;
;Updates from&lt;br /&gt;
: Mender Server over HTTPS ([https://docs.mender.io/architecture/overview#modes-of-operation managed mode])&lt;br /&gt;
: manual provisioning : local file system/URL, e.g. USB, SD, HTTP(S) ([https://docs.mender.io/architecture/overview#modes-of-operation standalone mode])&lt;br /&gt;
;Update what&lt;br /&gt;
: Built-in support for rootfs update, including kernel. Can be customized via [https://docs.mender.io/artifacts/update-modules Update Modules] to update files, packages or external components.&lt;br /&gt;
;Code stability&lt;br /&gt;
: Stable release. Upgrade path fully supported and tested.&lt;br /&gt;
;Resources on server&lt;br /&gt;
: Needs to store one compressed rootfs image for each update, plus small meta data section.&lt;br /&gt;
;Resources on client&lt;br /&gt;
: Needs active/passive rootfs partition, and bandwidth to download compressed rootfs image. Needs no additional space on device beyond the partitions (update is streamed), space for the Mender binary, and a tiny local database.&lt;br /&gt;
;Failure resilience&lt;br /&gt;
: Automatic rollback if the device either fails to boot, or the Mender daemon cannot connect to the Mender server afterwards.&lt;br /&gt;
;Complexity&lt;br /&gt;
: Relatively easy to [https://docs.mender.io/Artifacts/Building-Mender-Yocto-image build with Yocto]. More complex if [https://mender.io/blog/porting-mender-to-a-non-yocto-build-system not using Yocto].&lt;br /&gt;
;Downtime&lt;br /&gt;
: Update is downloaded and applied during normal operation. Afterwards one reboot is required, no other downtime.&lt;br /&gt;
;Security&lt;br /&gt;
: Secure connection to the server (TLS). [https://docs.mender.io/1.1/artifacts/signing-and-verification Artifact signing] with RSA or ECDSA.&lt;br /&gt;
&lt;br /&gt;
== OSTree ==&lt;br /&gt;
&lt;br /&gt;
;Disk layout&lt;br /&gt;
:Only limited set of bootloaders supported (those that support [http://www.freedesktop.org/wiki/Specifications/BootLoaderSpec The Boot Loader Specification] and some exceptions). The root file system has to have the /boot directory managed by OSTree. The actual deployed OS trees have certain conventions and requirements. For example, /etc and /var need to be writable, while /usr is mounted read-only.&lt;br /&gt;
;Rootfs&lt;br /&gt;
:Files provided by OS are expected to be in /usr, which is mounted read-only. /etc and /var are writable.&lt;br /&gt;
;Updates from&lt;br /&gt;
:Local and remote repostories. OSTree works by replicating a repository to the target device and then &amp;quot;checking out&amp;quot; deployment directories from the repository. Local and HTTP methods for replicating the repository are available.&lt;br /&gt;
;Updates what&lt;br /&gt;
:OSTree (atomically) updates root file system trees and the kernel. If anything else needs to be updated, it needs to happen by running custom code on the target device.&lt;br /&gt;
;Code stability&lt;br /&gt;
:OSTree is relatively stable. It&#039;s used by many distributions and projects, such as Fedora Atomic and Flatpak. OSTree is under active development and has an open-source community around it.&lt;br /&gt;
;OE/Yocto integration&lt;br /&gt;
:Meta-ostree layer is work in progress.&lt;br /&gt;
;Resource requirements on server&lt;br /&gt;
:OSTree generates &amp;quot;commit objects&amp;quot; based on the filesystem changes between builds. These commit objects are stored in a commit chain the same way as git does. The commit objects transmitted over the network as binary diffs when the remote and local repositories are synchronized.&lt;br /&gt;
;Resource requirements on client&lt;br /&gt;
:Client has the local copy of the repository. The repository contains the objects, which map to the files on the OS trees. The deployments of the OS trees (or &amp;quot;checkouts&amp;quot; in git termininology) are made using hard links to the repository content. This means that the required space is only increased when the data changes: the static data files are shared between deployments.&lt;br /&gt;
:OSTree allows deleting of data. This means that the full operating system history doesn&#039;t need to be stored in the repository. A typical OSTree-based system might have two deployed OS trees: one that is being currently used and one fallback.&lt;br /&gt;
;Failure resilience&lt;br /&gt;
:OSTree controls the booting to the different deployed trees using bootloader entries. If booting a deployed OS tree fails, a different bootloader entry can be chosen for booting into a different OS tree.&lt;br /&gt;
;Complexity&lt;br /&gt;
:Some work is needed to fit the root filesystem into the conventions that OSTree likes. Some documentation of the needed steps [https://ostree.readthedocs.io/en/latest/manual/adapting-existing/ is available here].&lt;br /&gt;
;Downtime&lt;br /&gt;
:Reboot is required after updates. Changing between deployed OS trees is done by selecting a different boot loader entry.&lt;br /&gt;
;Security&lt;br /&gt;
:The commits can be signed with GPG-based signatures. OSTree repositories store file extended attributes, which means that the security mechanisms using extended attributes should be functional with OSTree.&lt;br /&gt;
&lt;br /&gt;
== RAUC ==&lt;br /&gt;
&lt;br /&gt;
;Type&lt;br /&gt;
: RAUC supports filesystems on block devices and MTD (NAND/NOR) as well as raw images (bootloaders, FPGA bitstreams).&lt;br /&gt;
;Disk layout&lt;br /&gt;
: RAUC does not depend on a fixed disk layout but allows to flexibly [https://rauc.readthedocs.io/en/latest/reference.html#sec-ref-slot-config configure] one. It supports A+B scenarios as well as A+recovery or more complex setups. &lt;br /&gt;
;Rootfs&lt;br /&gt;
: There are no limitations on the root file system, it can be read-only or read-write. It has to contain the RAUC system configuration file, a keyring for verification and the small RAUC binary itself.&lt;br /&gt;
;Updates from&lt;br /&gt;
: RAUC is the updating core that is meant to be integrated in a custom environment. Thus it supports installing bundles from local file paths, while another application is responsible fetching the update.&lt;br /&gt;
: External storage (USB, SD): direct access, no copying required&lt;br /&gt;
: Webserver: Application downloads Bundle to local tmpfs / storage.&lt;br /&gt;
: Demo-applications planned.&lt;br /&gt;
;Updates what&lt;br /&gt;
:&lt;br /&gt;
:* everything which is updatable&lt;br /&gt;
:* default handler for common storage types and file systems (ext4, NAND, UBI, raw copy)&lt;br /&gt;
:* allows [https://rauc.readthedocs.io/en/latest/using.html#customizing-the-update custom handler] for each update target (script or application, information passed as environment variables)&lt;br /&gt;
;Resources on client&lt;br /&gt;
: At least one production rootfs and a rescue system. Temporary storage for update Bundle (compressed) if provided by a webserver.&lt;br /&gt;
;Failure resilience&lt;br /&gt;
: Interface to [https://rauc.readthedocs.io/en/latest/integration.html#interfacing-with-the-bootloader Booloader] (Barebox, U-Boot, GRUB, UEFI) allows atomic updates (correct fallback handling is up to the bootloader). Interface to mark updates good or bad after certain checks in the newly booted rootfs (must be supported by bootloader).&lt;br /&gt;
;Complexity&lt;br /&gt;
: Integration into the rootfs and generating update Bundles is relatively easy with Yocto ([https://github.com/rauc/meta-rauc meta-rauc]) or [https://www.mail-archive.com/ptxdist@pengutronix.de/msg11471.html PTXdist]. Manual integration described [https://rauc.readthedocs.io/en/latest/integration.html here].&lt;br /&gt;
;Downtime&lt;br /&gt;
: Normally, downloading and installing will be perforemd as background operation. A reboot is needed to make the new system active (might be scheduled).&lt;br /&gt;
;Security&lt;br /&gt;
: Signed images: Signing images is mandatory. X.509 cryptography (CMS) is used to sign the bundle and a full PKI with revocations is supported. An example script allows creating key/cert/keychain for test purposes.&lt;br /&gt;
: Verified boot: When using image updates, compatible with IMA, SELinux, dm-verity, ... (as it does require write access to the filesystems).&lt;/div&gt;</summary>
		<author><name>Thomas Perrot</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=User:Thomas_Perrot&amp;diff=86547</id>
		<title>User:Thomas Perrot</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=User:Thomas_Perrot&amp;diff=86547"/>
		<updated>2025-02-04T08:45:39Z</updated>

		<summary type="html">&lt;p&gt;Thomas Perrot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Embedded Linux and kernel engineer at Bootlin&lt;br /&gt;
&lt;br /&gt;
    pub   rsa3072/0x9FC00B0571FE0AED Thomas Perrot &amp;lt;thomas.perrot@bootlin.com&amp;gt;&lt;br /&gt;
    Key fingerprint = 8740 77C6 A6A3 0A23 03A8  1221 9FC0 0B05 71FE 0AED&lt;br /&gt;
&lt;br /&gt;
    pub   rsa4096/0x53A3D309F9177FB2 Thomas Perrot &amp;lt;thomas.perrot@tupi.fr&amp;gt;&lt;br /&gt;
    Key fingerprint = 088F DE87 B7F1 F018 B520  666B 53A3 D309 F917 7FB2&lt;br /&gt;
&lt;br /&gt;
On Matrix as @tperrot:matrix.org.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;s&amp;gt;On IRC Libera as tprrt or tperrot.&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In Southern France, close to Toulouse.&lt;/div&gt;</summary>
		<author><name>Thomas Perrot</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=User:Thomas_Perrot&amp;diff=84741</id>
		<title>User:Thomas Perrot</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=User:Thomas_Perrot&amp;diff=84741"/>
		<updated>2021-06-06T17:47:33Z</updated>

		<summary type="html">&lt;p&gt;Thomas Perrot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Embedded Linux and kernel engineer at Bootlin&lt;br /&gt;
&lt;br /&gt;
    pub   rsa3072/0x9FC00B0571FE0AED Thomas Perrot &amp;lt;thomas.perrot@bootlin.com&amp;gt;&lt;br /&gt;
    Key fingerprint = 8740 77C6 A6A3 0A23 03A8  1221 9FC0 0B05 71FE 0AED&lt;br /&gt;
&lt;br /&gt;
    pub   rsa4096/0x53A3D309F9177FB2 Thomas Perrot &amp;lt;thomas.perrot@tupi.fr&amp;gt;&lt;br /&gt;
    Key fingerprint = 088F DE87 B7F1 F018 B520  666B 53A3 D309 F917 7FB2&lt;br /&gt;
&lt;br /&gt;
On IRC Libera as tprrt or tperrot.&lt;br /&gt;
&lt;br /&gt;
In Southern France, close to Toulouse.&lt;/div&gt;</summary>
		<author><name>Thomas Perrot</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=User:Thomas_Perrot&amp;diff=84740</id>
		<title>User:Thomas Perrot</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=User:Thomas_Perrot&amp;diff=84740"/>
		<updated>2021-06-06T17:44:20Z</updated>

		<summary type="html">&lt;p&gt;Thomas Perrot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Embedded Linux and kernel engineer at Bootlin&lt;br /&gt;
&lt;br /&gt;
    pub   rsa3072/0x9FC00B0571FE0AED Thomas Perrot &amp;lt;thomas.perrot@bootlin.com&amp;gt;&lt;br /&gt;
    Key fingerprint = 8740 77C6 A6A3 0A23 03A8  1221 9FC0 0B05 71FE 0AED&lt;br /&gt;
&lt;br /&gt;
On IRC Libera as tprrt or tperrot.&lt;br /&gt;
&lt;br /&gt;
In France.&lt;/div&gt;</summary>
		<author><name>Thomas Perrot</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Yocto_Build_Failure_Swat_Team&amp;diff=84558</id>
		<title>Yocto Build Failure Swat Team</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Yocto_Build_Failure_Swat_Team&amp;diff=84558"/>
		<updated>2021-03-15T07:21:08Z</updated>

		<summary type="html">&lt;p&gt;Thomas Perrot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
All builds that are run on the public autobuilder are important for the Yocto Project, whether they be routine validation runs or pre-integration test builds. Random failures if ignored accumulate and can result in a significant number of builds failing.&lt;br /&gt;
&lt;br /&gt;
The role of the Bug Swat Team is to monitor the autobuilder and do preliminary investigation of failures, to ensure that they are logged and brought to the attention of the appropriate owner.&lt;br /&gt;
&lt;br /&gt;
Importantly, the Swat Team &#039;&#039;&#039;isn&#039;t responsible for resolving issues&#039;&#039;&#039; encountered on the autobuilder, simply just enough analysis so that it can be logged for later analysis and ideally make the right people aware of them.&lt;br /&gt;
&lt;br /&gt;
Each week a different member of the team is on call. Every build that fails on the autobuilder should be monitored unless stated otherwise.  The rotation happens at the end of Friday (deliberately vague), any failures over the weekend should be triaged by the incoming member on Monday. &lt;br /&gt;
&lt;br /&gt;
The Swat Chairs are the primary contact for the Swat Team. The current Swat Chairs are [[User:RossBurton | Ross Burton]] and [[User:Rpurdie | Richard Purdie]]. The Chairs are assisted by Stephen K. Jolley who handles the rotation process.  If the person currently on call, or about to be on call, can no longer perform their duty then they should contact Stephen to arrange a replacement.&lt;br /&gt;
&lt;br /&gt;
== Process ==&lt;br /&gt;
&lt;br /&gt;
The SWAT process is now using a specific tool, [https://swatbot.yoctoproject.org/ swatbot]. Swatbot has a filter which will list all the pending issues that need to be triaged using [https://swatbot.yoctoproject.org/mainindex/swat/  this link ] or the &amp;quot;SWAT Pending Builds&amp;quot; link on the left hand menu. Each issue has links to the autobuilder logs for the failing step (e.g. usually stdio and warning/error logs).&lt;br /&gt;
&lt;br /&gt;
The builds are shown in a tree like structure with the parent build and any child builds under it. The builds are edited as a group under the parent as quite often a failure might be common to the child builds. Each failure does need to be triaged individually although multiple builds can be changed at once to a given resolution.&lt;br /&gt;
&lt;br /&gt;
Swatbot can filter pending issues to be triaged using the [https://swatbot.yoctoproject.org/mainindex/swat/ SWAT Pending Builds] link. Once you have selected an issue to triage, you will have to take the correct reporting action and finally edit the entry to indicate what was done.&lt;br /&gt;
&lt;br /&gt;
You can also be notified when a build fails by subscribing to the [https://lists.yoctoproject.org/g/yocto-builds yocto-builds] mailing list.  This is sending a mail when a build fails, including direct links to the [https://autobuilder.yoctoproject.org/ autobuilder job summary] and the [https://errors.yoctoproject.org/Errors/Latest/Autobuilder/ Error Reporting Service].  The mail will also state if it is expected that the build is triaged by Swat, so check this to see if the build can be ignored as the owner is taking full responsibility. Currently, swatbot will not give you this information so you have to get it from the autobuilder build entry (the &amp;lt;tt&amp;gt;Build properties&amp;lt;/tt&amp;gt; tab should have: &amp;lt;tt&amp;gt;swat_monitor	true&amp;lt;/tt&amp;gt;), the autobuilder API, or the notification email.&lt;br /&gt;
&lt;br /&gt;
Another tool that can be used to monitor builds is the [https://autobuilder.yoctoproject.org/typhoon/#/console Autobuilder &#039;Yocto Console View&#039;] which is an overview of the top-level builds (&#039;&#039;a-full&#039;&#039; and &#039;&#039;a-quick&#039;&#039;) and the sub-builds they trigger.&lt;br /&gt;
&lt;br /&gt;
Both the top-level build entry and the mail notification will include notes from the build owner, so check this for any useful context.  For example, it may request that failures are reported directly to a specific person instead of bugs created, or that particular failures that are expected.&lt;br /&gt;
&lt;br /&gt;
=== Report ===&lt;br /&gt;
&lt;br /&gt;
There are two categories of builds that Swat will be monitoring: official branches and staging branches.  The official branches are the primary top-level branches in Poky, that is master and all of the release branches (gatesgarth, dunfell, etc).  The staging branches are where patches are held for testing, such as master-next, stable/dunfell-nut, or ross/mut.&lt;br /&gt;
&lt;br /&gt;
Communication is important: if the build owner is on IRC then it&#039;s always worth discussing issues with them first as they may have further context and directions.  Also, if the build owner triages the build failures then they must update the swatbot entries so that Swat doesn&#039;t duplicate the work.&lt;br /&gt;
&lt;br /&gt;
When reporting an issue, be it in a mailing list post or a new bug, the following information should be included:&lt;br /&gt;
* Relevant details about the build configuration. For example: did the failure happen just once, or in all PowerPC builds? Was it specific to multilib configurations?  Look across the entire build run and identify any patterns.&lt;br /&gt;
* The error itself. Trim the log down to just the error and any relevant context in the bug description.&lt;br /&gt;
* A link to the build failure.  Either a link to the [http://errors.yoctoproject.org/ error reports] page (such as http://errors.yoctoproject.org/Errors/Details/199667/) or a link to the autobuilder build log (such as https://autobuilder.yoctoproject.org/typhoon/#/builders/34/builds/168).&lt;br /&gt;
&lt;br /&gt;
When filing bugs, always search Bugzilla first to see if the issue is already known.  For example, there are some bugs that occur intermittently and are already filed with &#039;&#039;AB-INT&#039;&#039; in the whiteboard field. They are listed here: [https://bugzilla.yoctoproject.org/buglist.cgi?quicksearch=whiteboard%3AAB-INT&amp;amp;list_id=640327 Autobuilder issues]&lt;br /&gt;
&lt;br /&gt;
The exact progress depends on whether the branch is an official branch or a staging branch.&lt;br /&gt;
&lt;br /&gt;
==== Staging Branches ====&lt;br /&gt;
&lt;br /&gt;
For builds against staging branches which contain patches under test for integration (such as master-next, stable/dunfell-nut, ross/mut, etc), first attempt to identify if there is a patch in the branch that is likely to be responsible for the failure. For example, if &amp;lt;tt&amp;gt;wget&amp;lt;/tt&amp;gt; fails with &amp;lt;tt&amp;gt;libgnutls&amp;lt;/tt&amp;gt; errors and there is a GnuTLS upgrade in the branch, then that is a likely candidate.  If a patch can be identified that hasn&#039;t yet been merged into an official branch, then reply to the patch on the mailing list with the details.  If it isn&#039;t obvious which patch is responsible for the failure, or a patch can be identified but it has already been merged to the release branch, then file a bug and ensure the branch maintainer (see the [[Releases]] page for names) is on the CC list.&lt;br /&gt;
&lt;br /&gt;
Most of the failures will be for staging branches as master-next is the branch that is tested the most. However, it is rebased quite frequently so it is not always easy to find which patchs were included. In that case, you have to get the actual commit hash, for example in the build properties, the variable is &amp;lt;tt&amp;gt;yp_build_revision&amp;lt;/tt&amp;gt; or in the build configuration at the beginning of the stdio log. For example, this qemux86 build [https://autobuilder.yoctoproject.org/typhoon/#/builders/59/builds/3120] was master-next at revision 47482eff9897ccde946e9247724babc3a586d318.&lt;br /&gt;
With that information, you can then clone poky (or any other layer of interest) and fetch the proper commit and see the git log:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git clone git://git.yoctoproject.org/poky&lt;br /&gt;
$ cd poky&lt;br /&gt;
$ git fetch origin 47482eff9897ccde946e9247724babc3a586d318&lt;br /&gt;
$ git log FETCH_HEAD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;If in doubt, file a bug&#039;&#039;&#039;. All errors must be taken care of.&lt;br /&gt;
&lt;br /&gt;
If the issue is in the infrastructure or autobuilder itself then file a bug against &amp;quot;Infrastructure: Autobuilder&amp;quot;, infrastructure bugs should be assigned to [[User:Halstead| Michael Halstead]] and autobuilder logic bugs to [[User:Rpurdie | Richard Purdie]].&lt;br /&gt;
&lt;br /&gt;
==== Official Branches ====&lt;br /&gt;
&lt;br /&gt;
For builds of official branches, that is master or a release branch, &#039;&#039;&#039;all failures or warnings are critical&#039;&#039;&#039; and must be [[#Filing_bugs | filed in Bugzilla]]. Remember to check that the issue isn&#039;t already filed. Where an issue is already filed, please do add a comment so we can assess how frequently different issues are occurring.&lt;br /&gt;
&lt;br /&gt;
=== Update ===&lt;br /&gt;
&lt;br /&gt;
Finally the swatbot build entry must be updated with a summary of the outcome.  Three different resolutions are available:&lt;br /&gt;
* Mail sent: used when you replied to the problematic patch directly on the mailing list.&lt;br /&gt;
* Bug Opened: used when a new bug has been opened or a new comment has been added to a bug. Please add the bug number in the notes.&lt;br /&gt;
* Handled (other): used when the maintainer is already aware of the issue and is working on it resolution or a patch has already been sent to solve the issue.&lt;br /&gt;
&lt;br /&gt;
You need an account for this step. If it hasn&#039;t been provided, please ask on the swat mailling list.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Every issue that is dealt with must be annotated&#039;&#039;&#039;, so it is easy to see which issues have been handled.  This includes filing new bugs, finding existing bugs, contacting the mailing list, contacting the maintainer directly on IRC, or identifying that a patch has already been sent to fix the issue.&lt;br /&gt;
&lt;br /&gt;
== Tips ==&lt;br /&gt;
&lt;br /&gt;
An issue will quite often repeat itself across multiple builds. It is worth looking for those repetitions as swatbot will allow you to select many builds and update them all at once.&lt;br /&gt;
&lt;br /&gt;
In the stdio logs window, clicking on the looking glass icon will load the full log in the browser, allowing you to use the search feature of the browser. Quite often, you&#039;ll start by looking for &amp;quot;error:&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Handoff ==&lt;br /&gt;
&lt;br /&gt;
At the end of the week, the outgoing person on Swat should email swat@lists.yoctoproject.org summarising the week and noting anything that the incoming person on Swat next week should be aware of. For example, noting that there&#039;s a new intermittent bug to watch for.&lt;br /&gt;
&lt;br /&gt;
== Members ==&lt;br /&gt;
&lt;br /&gt;
* [[User:RossBurton | Ross Burton]]&lt;br /&gt;
&lt;br /&gt;
* [[User:Leonardo_Sandoval | Leo Sandoval]]&lt;br /&gt;
&lt;br /&gt;
* [[User:Anibal Limon | Anibal Limon]]&lt;br /&gt;
&lt;br /&gt;
* [[User:Köry maincent | Köry Maincent]]&lt;br /&gt;
&lt;br /&gt;
* [[User:Thomas Perrot | Thomas Perrot]]&lt;br /&gt;
&lt;br /&gt;
* [[User:SaulWold | Saul Wold]]&lt;br /&gt;
&lt;br /&gt;
* [[User:Oleksiy Obitotskyy | Oleksiy Obitotskyy]]&lt;br /&gt;
&lt;br /&gt;
* [[User:Alejandro Enedino Hernandez Samaniego | Alejandro Hernandez Samaniego]]&lt;br /&gt;
&lt;br /&gt;
* [[User:PaulEggleton | Paul Eggleton]]&lt;br /&gt;
&lt;br /&gt;
* [[User:Naveen Kumar Saini | Naveen Saini]]&lt;br /&gt;
&lt;br /&gt;
* [[User:Alexandre Belloni | Alexandre Belloni]]&lt;br /&gt;
&lt;br /&gt;
* [[User:Kergoth | Christopher Larson]]&lt;br /&gt;
&lt;br /&gt;
* [[User:Lee_chee_yang | Lee Chee Yang]]&lt;br /&gt;
&lt;br /&gt;
* [[User:Jon Mason | Jon Mason]]&lt;br /&gt;
&lt;br /&gt;
* [[User:Minjae Kim | Minjae Kim]]&lt;br /&gt;
&lt;br /&gt;
* [[User:Jagadheesan | Jaga]]&lt;/div&gt;</summary>
		<author><name>Thomas Perrot</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=Yocto_Build_Failure_Swat_Team&amp;diff=84549</id>
		<title>Yocto Build Failure Swat Team</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=Yocto_Build_Failure_Swat_Team&amp;diff=84549"/>
		<updated>2021-03-08T15:52:52Z</updated>

		<summary type="html">&lt;p&gt;Thomas Perrot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
All builds that are run on the public autobuilder are important for the Yocto Project, whether they be routine validation runs or pre-integration test builds. Random failures if ignored accumulate and can result in a significant number of builds failing.&lt;br /&gt;
&lt;br /&gt;
The role of the Bug Swat Team is to monitor the autobuilder and do preliminary investigation of failures, to ensure that they are logged and brought to the attention of the appropriate owner.&lt;br /&gt;
&lt;br /&gt;
Importantly, the Swat Team &#039;&#039;&#039;isn&#039;t responsible for resolving issues&#039;&#039;&#039; encountered on the autobuilder, simply just enough analysis so that it can be logged for later analysis and ideally make the right people aware of them.&lt;br /&gt;
&lt;br /&gt;
Each week a different member of the team is on call. Every build that fails on the autobuilder should be monitored unless stated otherwise.  The rotation happens at the end of Friday (deliberately vague), any failures over the weekend should be triaged by the incoming member on Monday. &lt;br /&gt;
&lt;br /&gt;
The Swat Chairs are the primary contact for the Swat Team. The current Swat Chairs are [[User:RossBurton | Ross Burton]] and [[User:Rpurdie | Richard Purdie]]. The Chairs are assisted by Stephen K. Jolley who handles the rotation process.  If the person currently on call, or about to be on call, can no longer perform their duty then they should contact Stephen to arrange a replacement.&lt;br /&gt;
&lt;br /&gt;
== Process ==&lt;br /&gt;
&lt;br /&gt;
The SWAT process is now using a specific tool, [https://swatbot.yoctoproject.org/ swatbot]. Swatbot has a filter which will list all the pending issues that need to be triaged using [https://swatbot.yoctoproject.org/mainindex/swat/  this link ] or the &amp;quot;SWAT Pending Builds&amp;quot; link on the left hand menu. Each issue has links to the autobuilder logs for the failing step (e.g. usually stdio and warning/error logs).&lt;br /&gt;
&lt;br /&gt;
The builds are shown in a tree like structure with the parent build and any child builds under it. The builds are edited as a group under the parent as quite often a failure might be common to the child builds. Each failure does need to be triaged individually although multiple builds can be changed at once to a given resolution.&lt;br /&gt;
&lt;br /&gt;
Swatbot can filter pending issues to be triaged using the [https://swatbot.yoctoproject.org/mainindex/swat/ SWAT Pending Builds] link. Once you have selected an issue to triage, you will have to take the correct reporting action and finally edit the entry to indicate what was done.&lt;br /&gt;
&lt;br /&gt;
You can also be notified when a build fails by subscribing to the [https://lists.yoctoproject.org/g/yocto-builds yocto-builds] mailing list.  This is sending a mail when a build fails, including direct links to the [https://autobuilder.yoctoproject.org/ autobuilder job summary] and the [https://errors.yoctoproject.org/Errors/Latest/Autobuilder/ Error Reporting Service].  The mail will also state if it is expected that the build is triaged by Swat, so check this to see if the build can be ignored as the owner is taking full responsibility. Currently, swatbot will not give you this information so you have to get it from the autobuilder build entry (the &amp;lt;tt&amp;gt;Build properties&amp;lt;/tt&amp;gt; tab should have: &amp;lt;tt&amp;gt;swat_monitor	true&amp;lt;/tt&amp;gt;), the autobuilder API, or the notification email.&lt;br /&gt;
&lt;br /&gt;
Another tool that can be used to monitor builds is the [https://autobuilder.yoctoproject.org/typhoon/#/console Autobuilder &#039;Yocto Console View&#039;] which is an overview of the top-level builds (&#039;&#039;a-full&#039;&#039; and &#039;&#039;a-quick&#039;&#039;) and the sub-builds they trigger.&lt;br /&gt;
&lt;br /&gt;
Both the top-level build entry and the mail notification will include notes from the build owner, so check this for any useful context.  For example, it may request that failures are reported directly to a specific person instead of bugs created, or that particular failures that are expected.&lt;br /&gt;
&lt;br /&gt;
=== Report ===&lt;br /&gt;
&lt;br /&gt;
There are two categories of builds that Swat will be monitoring: official branches and staging branches.  The official branches are the primary top-level branches in Poky, that is master and all of the release branches (gatesgarth, dunfell, etc).  The staging branches are where patches are held for testing, such as master-next, stable/dunfell-nut, or ross/mut.&lt;br /&gt;
&lt;br /&gt;
Communication is important: if the build owner is on IRC then it&#039;s always worth discussing issues with them first as they may have further context and directions.  Also, if the build owner triages the build failures then they must update the swatbot entries so that Swat doesn&#039;t duplicate the work.&lt;br /&gt;
&lt;br /&gt;
When reporting an issue, be it in a mailing list post or a new bug, the following information should be included:&lt;br /&gt;
* Relevant details about the build configuration. For example: did the failure happen just once, or in all PowerPC builds? Was it specific to multilib configurations?  Look across the entire build run and identify any patterns.&lt;br /&gt;
* The error itself. Trim the log down to just the error and any relevant context in the bug description.&lt;br /&gt;
* A link to the build failure.  Either a link to the [http://errors.yoctoproject.org/ error reports] page (such as http://errors.yoctoproject.org/Errors/Details/199667/) or a link to the autobuilder build log (such as https://autobuilder.yoctoproject.org/typhoon/#/builders/34/builds/168).&lt;br /&gt;
&lt;br /&gt;
When filing bugs, always search Bugzilla first to see if the issue is already known.  For example, there are some bugs that occur intermittently and are already filed with &#039;&#039;AB-INT&#039;&#039; in the whiteboard field. They are listed here: [https://bugzilla.yoctoproject.org/buglist.cgi?quicksearch=AB-INT&amp;amp;list_id=620110 Autobuilder issues]&lt;br /&gt;
&lt;br /&gt;
The exact progress depends on whether the branch is an official branch or a staging branch.&lt;br /&gt;
&lt;br /&gt;
==== Staging Branches ====&lt;br /&gt;
&lt;br /&gt;
For builds against staging branches which contain patches under test for integration (such as master-next, stable/dunfell-nut, ross/mut, etc), first attempt to identify if there is a patch in the branch that is likely to be responsible for the failure. For example, if &amp;lt;tt&amp;gt;wget&amp;lt;/tt&amp;gt; fails with &amp;lt;tt&amp;gt;libgnutls&amp;lt;/tt&amp;gt; errors and there is a GnuTLS upgrade in the branch, then that is a likely candidate.  If a patch can be identified that hasn&#039;t yet been merged into an official branch, then reply to the patch on the mailing list with the details.  If it isn&#039;t obvious which patch is responsible for the failure, or a patch can be identified but it has already been merged to the release branch, then file a bug and ensure the branch maintainer (see the [[Releases]] page for names) is on the CC list.&lt;br /&gt;
&lt;br /&gt;
Most of the failures will be for staging branches as master-next is the branch that is tested the most. However, it is rebased quite frequently so it is not always easy to find which patchs were included. In that case, you have to get the actual commit hash, for example in the build properties, the variable is &amp;lt;tt&amp;gt;yp_build_revision&amp;lt;/tt&amp;gt; or in the build configuration at the beginning of the stdio log. For example, this qemux86 build [https://autobuilder.yoctoproject.org/typhoon/#/builders/59/builds/3120] was master-next at revision 47482eff9897ccde946e9247724babc3a586d318.&lt;br /&gt;
With that information, you can then clone poky (or any other layer of interest) and fetch the proper commit and see the git log:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git clone git://git.yoctoproject.org/poky&lt;br /&gt;
$ cd poky&lt;br /&gt;
$ git fetch origin 47482eff9897ccde946e9247724babc3a586d318&lt;br /&gt;
$ git log FETCH_HEAD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;If in doubt, file a bug&#039;&#039;&#039;. All errors must be taken care of.&lt;br /&gt;
&lt;br /&gt;
If the issue is in the infrastructure or autobuilder itself then file a bug against &amp;quot;Infrastructure: Autobuilder&amp;quot;, infrastructure bugs should be assigned to [[User:Halstead| Michael Halstead]] and autobuilder logic bugs to [[User:Rpurdie | Richard Purdie]].&lt;br /&gt;
&lt;br /&gt;
==== Official Branches ====&lt;br /&gt;
&lt;br /&gt;
For builds of official branches, that is master or a release branch, &#039;&#039;&#039;all failures or warnings are critical&#039;&#039;&#039; and must be [[#Filing_bugs | filed in Bugzilla]]. Remember to check that the issue isn&#039;t already filed. Where an issue is already filed, please do add a comment so we can assess how frequently different issues are occurring.&lt;br /&gt;
&lt;br /&gt;
=== Update ===&lt;br /&gt;
&lt;br /&gt;
Finally the swatbot build entry must be updated with a summary of the outcome.  Three different resolutions are available:&lt;br /&gt;
* Mail sent: used when you replied to the problematic patch directly on the mailing list.&lt;br /&gt;
* Bug Opened: used when a new bug has been opened or a new comment has been added to a bug. Please add the bug number in the notes.&lt;br /&gt;
* Handled (other): used when the maintainer is already aware of the issue and is working on it resolution or a patch has already been sent to solve the issue.&lt;br /&gt;
&lt;br /&gt;
You need an account for this step. If it hasn&#039;t been provided, please ask on the swat mailling list.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Every issue that is dealt with must be annotated&#039;&#039;&#039;, so it is easy to see which issues have been handled.  This includes filing new bugs, finding existing bugs, contacting the mailing list, contacting the maintainer directly on IRC, or identifying that a patch has already been sent to fix the issue.&lt;br /&gt;
&lt;br /&gt;
== Tips ==&lt;br /&gt;
&lt;br /&gt;
An issue will quite often repeat itself across multiple builds. It is worth looking for those repetitions as swatbot will allow you to select many builds and update them all at once.&lt;br /&gt;
&lt;br /&gt;
In the stdio logs window, clicking on the looking glass icon will load the full log in the browser, allowing you to use the search feature of the browser. Quite often, you&#039;ll start by looking for &amp;quot;error:&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Handoff ==&lt;br /&gt;
&lt;br /&gt;
At the end of the week, the outgoing person on Swat should email swat@lists.yoctoproject.org summarising the week and noting anything that the incoming person on Swat next week should be aware of. For example, noting that there&#039;s a new intermittent bug to watch for.&lt;br /&gt;
&lt;br /&gt;
== Members ==&lt;br /&gt;
&lt;br /&gt;
* [[User:RossBurton | Ross Burton]]&lt;br /&gt;
&lt;br /&gt;
* [[User:Leonardo_Sandoval | Leo Sandoval]]&lt;br /&gt;
&lt;br /&gt;
* [[User:Anibal Limon | Anibal Limon]]&lt;br /&gt;
&lt;br /&gt;
* [[User:Köry maincent | Köry Maincent]]&lt;br /&gt;
&lt;br /&gt;
* [[User:Thomas Perrot | Thomas Perrot]]&lt;br /&gt;
&lt;br /&gt;
* [[User:SaulWold | Saul Wold]]&lt;br /&gt;
&lt;br /&gt;
* [[User:Alejandro Enedino Hernandez Samaniego | Alejandro Hernandez Samaniego]]&lt;br /&gt;
&lt;br /&gt;
* [[User:PaulEggleton | Paul Eggleton]]&lt;br /&gt;
&lt;br /&gt;
* [[User:Naveen Kumar Saini | Naveen Saini]]&lt;br /&gt;
&lt;br /&gt;
* [[User:Alexandre Belloni | Alexandre Belloni]]&lt;br /&gt;
&lt;br /&gt;
* [[User:Kergoth | Christopher Larson]]&lt;br /&gt;
&lt;br /&gt;
* [[User:Lee_chee_yang | Lee Chee Yang]]&lt;br /&gt;
&lt;br /&gt;
* [[User:Jon Mason | Jon Mason]]&lt;br /&gt;
&lt;br /&gt;
* [[User:Minjae Kim | Minjae Kim]]&lt;br /&gt;
&lt;br /&gt;
* [[User:Jagadheesan | Jaga]]&lt;/div&gt;</summary>
		<author><name>Thomas Perrot</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=User:Thomas_Perrot&amp;diff=84548</id>
		<title>User:Thomas Perrot</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=User:Thomas_Perrot&amp;diff=84548"/>
		<updated>2021-03-08T12:40:39Z</updated>

		<summary type="html">&lt;p&gt;Thomas Perrot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Embedded Linux and kernel engineer at Bootlin&lt;br /&gt;
&lt;br /&gt;
    pub   rsa3072/0x9FC00B0571FE0AED Thomas Perrot &amp;lt;thomas.perrot@bootlin.com&amp;gt;&lt;br /&gt;
    Key fingerprint = 8740 77C6 A6A3 0A23 03A8  1221 9FC0 0B05 71FE 0AED&lt;br /&gt;
&lt;br /&gt;
On IRC Freenode as tprrt or tperrot.&lt;br /&gt;
&lt;br /&gt;
In France.&lt;/div&gt;</summary>
		<author><name>Thomas Perrot</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=User:Thomas_Perrot&amp;diff=84547</id>
		<title>User:Thomas Perrot</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=User:Thomas_Perrot&amp;diff=84547"/>
		<updated>2021-03-08T12:40:17Z</updated>

		<summary type="html">&lt;p&gt;Thomas Perrot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Embedded Linux and kernel engineer at Bootlin&lt;br /&gt;
&lt;br /&gt;
pub   rsa3072/0x9FC00B0571FE0AED Thomas Perrot &amp;lt;thomas.perrot@bootlin.com&amp;gt;&lt;br /&gt;
Key fingerprint = 8740 77C6 A6A3 0A23 03A8  1221 9FC0 0B05 71FE 0AED&lt;br /&gt;
&lt;br /&gt;
On IRC Freenode as tprrt or tperrot.&lt;br /&gt;
&lt;br /&gt;
In France.&lt;/div&gt;</summary>
		<author><name>Thomas Perrot</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=User:Thomas_Perrot&amp;diff=84546</id>
		<title>User:Thomas Perrot</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=User:Thomas_Perrot&amp;diff=84546"/>
		<updated>2021-03-08T12:38:27Z</updated>

		<summary type="html">&lt;p&gt;Thomas Perrot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Embedded Linux and kernel engineer at Bootlin&lt;br /&gt;
&lt;br /&gt;
pub   rsa3072/0x9FC00B0571FE0AED Thomas Perrot &amp;lt;thomas.perrot@bootlin.com&amp;gt;&lt;br /&gt;
      Key fingerprint = 8740 77C6 A6A3 0A23 03A8  1221 9FC0 0B05 71FE 0AED&lt;br /&gt;
&lt;br /&gt;
On IRC Freenode as tprrt or tperrot.&lt;br /&gt;
&lt;br /&gt;
In France.&lt;/div&gt;</summary>
		<author><name>Thomas Perrot</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=User:Thomas_Perrot&amp;diff=84545</id>
		<title>User:Thomas Perrot</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=User:Thomas_Perrot&amp;diff=84545"/>
		<updated>2021-03-08T12:33:26Z</updated>

		<summary type="html">&lt;p&gt;Thomas Perrot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Embedded Linux and kernel engineer at Bootlin&lt;br /&gt;
&lt;br /&gt;
tprrt or tperrot on Freenode&lt;br /&gt;
&lt;br /&gt;
https://www.linkedin.com/in/tprrt/&lt;/div&gt;</summary>
		<author><name>Thomas Perrot</name></author>
	</entry>
	<entry>
		<id>https://wiki.yoctoproject.org/wiki/index.php?title=User:Thomas_Perrot&amp;diff=84544</id>
		<title>User:Thomas Perrot</title>
		<link rel="alternate" type="text/html" href="https://wiki.yoctoproject.org/wiki/index.php?title=User:Thomas_Perrot&amp;diff=84544"/>
		<updated>2021-03-08T11:40:22Z</updated>

		<summary type="html">&lt;p&gt;Thomas Perrot: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Embedded Linux and kernel engineer at Bootlin&lt;br /&gt;
&lt;br /&gt;
https://www.linkedin.com/in/tprrt/&lt;/div&gt;</summary>
		<author><name>Thomas Perrot</name></author>
	</entry>
</feed>