Deb packages

Description

The Deb Update Module updates software on the device using the native local package manager.

A Mender Artifact containing one or more software packages is sent to the device, where the Update Module will call the package manager to install them in alphabetical order.

Specification

Module name deb
Supports rollback no
Requires restart no
Artifact generation script no
Full system updater no
Source code Update Module
Maintainer Community

Please be aware that Mender Update modules are meant to update parts of the system and if not configured properly they could potentially delete parts or the complete system. Always inspect the code carefully and only test modules on a systems that you can recover easily.

It is not recommended to install a Mender Artifact on your workstation

Prepare the device

This section describes how to setup your target device, i.e. the device to be updated. This will also be referred to as the device environment.

All commands outlined in this section should be run in the device environment.

Prerequisites

This update module has the following prerequisites for the device environment:

Install the Update Module

Download the latest version of this Update Module by running:

mkdir -p /usr/share/mender/modules/v3 && wget -P /usr/share/mender/modules/v3 https://raw.githubusercontent.com/mendersoftware/mender/master/support/modules/deb

Prepare the development environment on your workstation

This section describes how to set up your development environment on your workstation.

All commands outlined in this section should be run in the development environment.

Prerequisites

This Update Modules has the following prerequisites for the development environment:

Create Mender Artifacts

The Artifact can be generated using the mender-artifact tool.

Now generate a Mender Artifact using the following command:

ARTIFACT_NAME="my-update-1.0"
DEVICE_TYPE="my-device-type"
OUTPUT_PATH="my-update-1.0.mender"
PACKAGES="my-package-1.deb my-package-2.deb"
mender-artifact write module-image -T deb -n ${ARTIFACT_NAME} -t ${DEVICE_TYPE} -o ${OUTPUT_PATH} -f $(echo "$PACKAGES" | sed -e 's/ / -f /g')
  • ARTIFACT_NAME - The name of the Mender Artifact
  • DEVICE_TYPE - The compatible device type of this Mender Artifact
  • OUTPUT_PATH - The path where to place the output Mender Artifact. This should always have a .mender suffix
  • PACKAGES - List of all .deb packages to be contained in the Artifact.

You can either deploy this Artifact in managed mode with the Mender server (upload it under Releases in the server UI) or by using the Mender client only in Standalone deployments.

Artifact technical details

The Mender Artifact used by this Update Module has a payload with as many files as software packages we are sending in the Artifact.

Example of a deb Update Module Artifact with two packages will look like:

Mender artifact:
  Name: my-update-1.0
  Format: mender
  Version: 3
  Signature: no signature
  Compatible devices: '[my-device-type]'
  Provides group: 
  Depends on one of artifact(s): []
  Depends on one of group(s): []
  State scripts:

Updates:
    0:
    Type:   deb
    Provides: Nothing
    Depends: Nothing
    Metadata: Nothing
    Files:
      name:     my-package-1.deb
      size:     0
      modified: 2019-04-15 11:27:10 +0200 CEST
      checksum: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
    Files:
      name:     my-package-2.deb
      size:     0
      modified: 2019-04-15 11:27:12 +0200 CEST
      checksum: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b85

Thanks for that.

What is the best way to run sudo apt —fix-broken-install on the remote client?

Hi @mladen.miljic, you can always ssh into the device and run the command manually. Alternatively you can setup a state script to run that. Depending on your needs a preinstall or a postinstall script might be the best choice.
Drew

So this will install all the packages in the artifact as oppose to using the mender script to install the artifact in the new partition and switch over? So kind of like an apt-get update for your embedded os? I am assuming this takes care of kernel and system level files and patches?

2 posts were split to a new topic: Are state scripts available for mender standalone artifact updates?

Yes, this particular implementation simply installs into the active root filesystem. You have to be careful with kernel updates this way to make sure the files are put in the same location as is expected by the Mender bootloader logic but otherwise it should work. You will need an explicit reboot in that case.

1 Like

Thanks. I noticed the Download Leave was not available but I was able to use the ArtifactInstall_Enter to run the script to save the SSH Keys. I am not sure why the output show as ERR when there wasn’t any errors, but the scripts seems to work.

Hi @drewmoseley,
thanks a lot fore the reply.

I understand, the update module will call: dpkg -i [package…deb]

For me, that ends for in manual handling to resolve dependencies.
What is the reason you decided to go with dpkg -i ./name.deb instead of apt install ./name.deb
(the apt install does actually do dpkg -i ./name.deb and then apt-get install -f which resolves the dependencies.

This is really intended as a reference implementation and not necessarily as the best way to do this for any use case. We don’t really want to rely on external package repositories with this reference implementation since that basically cedes control of the software contents to the provider of the external repo.

You could certainly implement an apt based update module and I think it would be a good reference implementation here on Mender hub.

Drew