Mender is an open source over-the-air (OTA) software updater for embedded Linux devices. Mender comprises a client running at the embedded device, as well as a server that manages deployments across many devices.
Embedded product teams often end up creating homegrown updaters at the last minute due to the need to fix bugs in field-deployed devices. However, the most important requirement for an embedded update process is robustness, for example loss of power at any time should not brick a device. This creates a challenge given the time constraints to develop and maintain a homegrown updater.
Mender aims to address this challenge with a robust and easy to use updater for embedded Linux devices, which is open source and available to anyone.
Robustness is ensured with atomic image-based deployments using a dual A/B rootfs partition layout. This makes it always possible to roll back to a working state, even when losing power at any time during the update process.
Ease of use is addressed with an intuitive UI, comprehensive documentation, a meta layer for the Yocto Project for easy integration into existing environments, and high quality software (see the test coverage badge).
This repository contains the Mender client updater, which can be run in standalone mode (manually triggered through its command line interface) or managed mode (connected to the Mender server).
Mender not only provides the client-side updater, but also the backend and UI for managing deployments as open source. The Mender server is designed as a microservices architecture and comprises several repositories.
The Mender client binary can be cross-compiled for a given device architecture. Note that in this case you will also need to do bootloader integration and partition setup to integrate it to a device. See the device integration documentation for more information.
Pre-compiled tool-chain (e.g. linaro, bootlin) can be used for building Mender client binary as well as self-compiled customized tool-chain built with crosstool-ng.
Use client-cross-compilation-tool --help command to find out supported CPUs and available options.
crosstool-ng dependencies:
- gperf, texinfo, bison, flex, help2man, ncurses-dev
Default target directory for crosstool-ng based toolchain is ~/x-tools.
To work with go-executable-build script first specifiy the location of your workspace with the GOPATH environment variable. Copy script to $GOPATH/src directory. Use go get github.com/mendersoftware/mender to download the Mender client code.
Having tool-chain ready (either pre-compiled or customized) one can compile Mender client binary. Use go-executable-build script to perform that job. Building binaries for more that one architecture at once is supported. To distinguish binaries their names follow the scheme: mender-OS-ARCH.
We welcome and ask for your contribution. If you would like to contribute to Mender, please read our guide on how to best get started contributing code or documentation.
Mender is licensed under the Apache License, Version 2.0. See LICENSE for the full license text.
We take security very seriously. If you come across any issue regarding security, please disclose the information by sending an email to [email protected]. Please do not create a new public issue. We thank you in advance for your cooperation.
- Join the Mender Hub discussion forum
- Follow us on Twitter. Please feel free to tweet us questions.
- Fork us on Github
- Create an issue in the bugtracker
- Email us at [email protected]
- Connect to the #mender IRC channel on Freenode