Skip to contentSkip to conversation

package/mender: new package

PATCH Superseded Angelo Compagnucci 2 participants 5 messages May 3, 2018 – May 4, 2018

v2 of 3 Superseded Latest is v3 →

lore
Share & tools
lore
#0 lore raw

PATCH v2 1/1 package/mender: new package

From: Angelo Compagnucci <[email protected]>

This patch adds mender, an open source over-the-air (OTA) software updater for embedded Linux devices.

---
 package/Config.in                        |  1 +
 package/mender/Config.in                 | 14 +++++++++
 package/mender/mender-device-identity    | 52 ++++++++++++++++++++++++++++++++
 package/mender/mender-inventory-hostinfo | 21 +++++++++++++
 package/mender/mender-inventory-network  | 47 +++++++++++++++++++++++++++++
 package/mender/mender.conf               | 14 +++++++++
 package/mender/mender.hash               |  2 ++
 package/mender/mender.mk                 | 31 +++++++++++++++++++
 package/mender/mender.service            | 15 +++++++++
 package/mender/server.crt                | 22 ++++++++++++++
 package/mender/tenant.conf               |  0
 11 files changed, 219 insertions(+)
 create mode 100644 package/mender/Config.in
 create mode 100644 package/mender/mender-device-identity
 create mode 100644 package/mender/mender-inventory-hostinfo
 create mode 100644 package/mender/mender-inventory-network
 create mode 100644 package/mender/mender.conf
 create mode 100644 package/mender/mender.hash
 create mode 100644 package/mender/mender.mk
 create mode 100644 package/mender/mender.service
 create mode 100644 package/mender/server.crt
 create mode 100644 package/mender/tenant.conf
package/Config.in +1 -0
index fe36d31..d87ccbd 100644
@@ -2006,6 +2006,7 @@ menu "System tools"
 	source "package/kvmtool/Config.in"
 	source "package/libostree/Config.in"
 	source "package/lxc/Config.in"
+	source "package/mender/Config.in"
 	source "package/monit/Config.in"
 	source "package/ncdu/Config.in"
 	source "package/numactl/Config.in"
package/mender/Config.in new file +14 -0
new file mode 100644
index 0000000..b80ad4a
@@ -0,0 +1,14 @@
+config BR2_PACKAGE_MENDER
+	bool "mender"
+	depends on BR2_PACKAGE_HOST_GO_ARCH_SUPPORTS
+	depends on BR2_PACKAGE_HOST_GO_CGO_LINKING_SUPPORTS
+	depends on BR2_TOOLCHAIN_HAS_THREADS
+	depends on BR2_INIT_SYSTEMD
+
+	help
+	  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.
+
+	  https://github.com/mendersoftware/mender
package/mender/mender-device-identity new file +52 -0

52 lines not on this page · raw message

package/mender/mender-inventory-hostinfo new file +21 -0
new file mode 100644
index 0000000..cf508fd
@@ -0,0 +1,21 @@
+#!/bin/sh
+#
+# The example script collects information about current host
+#
+
+set -ue
+
+LC_ALL=C
+export LC_ALL
+
+grep 'model name' /proc/cpuinfo | uniq | awk -F': ' '
+     // { printf("cpu_model=%s\n", $2);}
+'
+echo "kernel=$(cat /proc/version)"
+
+cat /proc/meminfo | awk '
+/MemTotal/ {printf("mem_total_kB=%d\n", $2)}
+'
+
+echo "hostname=$(cat /etc/hostname)"
+
package/mender/mender-inventory-network new file +47 -0

47 lines not on this page · raw message

package/mender/mender.conf new file +14 -0
new file mode 100644
index 0000000..a5c7c54
@@ -0,0 +1,14 @@
+{
+  "ClientProtocol": "http",
+  "HttpsClient": {
+    "Certificate": "",
+    "Key": ""
+  },
+  "RootfsPartA": "@MENDER_ROOTFS_PART_A@",
+  "RootfsPartB": "@MENDER_ROOTFS_PART_B@",
+  "UpdatePollIntervalSeconds": @MENDER_UPDATE_POLL_INTERVAL_SECONDS@,
+  "InventoryPollIntervalSeconds": @MENDER_INVENTORY_POLL_INTERVAL_SECONDS@,
+  "RetryPollIntervalSeconds": @MENDER_RETRY_POLL_INTERVAL_SECONDS@,
+  "ServerURL": "@MENDER_SERVER_URL@",
+  "ServerCertificate": "@MENDER_CERT_LOCATION@"
+}
package/mender/mender.hash new file +2 -0
new file mode 100644
index 0000000..30a04fa
@@ -0,0 +1,2 @@
+# Locally computed:
+sha256 267fa73ad472b034248ee298593b5c52ea0b105fd73c91febb3587280c61bee2 mender-1.4.0.tar.gz
package/mender/mender.mk new file +31 -0
new file mode 100644
index 0000000..c0c4aba
@@ -0,0 +1,31 @@
+################################################################################
+#
+# mender
+#
+################################################################################
+
+MENDER_VERSION = 1.4.0
+MENDER_SOURCE = mender-$(MENDER_VERSION).tar.gz
+MENDER_SITE = $(call github,mendersoftware,mender,$(MENDER_VERSION))
+
+define MENDER_INSTALL_TARGET_CMDS
+	$(INSTALL) -dm 0755 $(TARGET_DIR)/etc/mender/
+	$(INSTALL) -dm 0755 $(TARGET_DIR)/var/share/mender/identity/
+	$(INSTALL) -dm 0755 $(TARGET_DIR)/var/share/mender/inventory/
+	$(INSTALL) -D -m 0644 package/mender/mender.conf \
+		$(TARGET_DIR)/etc/mender/mender.conf
+	$(INSTALL) -D -m 0644 package/mender/tenant.conf \
+		$(TARGET_DIR)/etc/mender/mender.conf
+	$(INSTALL) -D -m 0644 package/mender/server.crt \
+		$(TARGET_DIR)/etc/mender/server.crt
+	$(INSTALL) -D -m 0755 package/mender/mender-device-identity \
+		$(TARGET_DIR)/var/share/mender/identity/mender-device-identity
+	$(INSTALL) -D -m 0755 package/mender/mender-inventory-network \
+		$(TARGET_DIR)/var/share/mender/inventory/mender-inventory-network
+	$(INSTALL) -D -m 0755 package/mender/mender-inventory-hostinfo \
+		$(TARGET_DIR)/var/share/mender/inventory/mender-inventory-hostinfo
+	$(INSTALL) -D -m 0644 package/mender/mender.service \
+		$(TARGET_DIR)/usr/lib/systemd/system/mender.service
+endef
+
+$(eval $(golang-package))
package/mender/mender.service new file +15 -0
new file mode 100644
index 0000000..ec77fbc
@@ -0,0 +1,15 @@
+[Unit]
+Description=Mender OTA update service
+After=systemd-resolved.service
+
+[Service]
+Type=idle
+User=root
+Group=root
+ExecStartPre=/bin/mkdir -p -m 0700 /data/mender
+ExecStartPre=/bin/ln -sf /etc/mender/tenant.conf /var/lib/mender/authtentoken
+ExecStart=/usr/bin/mender -daemon
+Restart=on-abort
+
+[Install]
+WantedBy=multi-user.target
package/mender/server.crt new file +22 -0
new file mode 100644
index 0000000..79a57e1
@@ -0,0 +1,22 @@
+-----BEGIN CERTIFICATE-----
+MIIBfTCCASOgAwIBAgIJAJOS76a0qWuZMAoGCCqGSM49BAMCMBsxGTAXBgNVBAMM
+EGRvY2tlci5tZW5kZXIuaW8wHhcNMTYxMjE0MTk1MjQ2WhcNMjYxMjEyMTk1MjQ2
+WjAbMRkwFwYDVQQDDBBkb2NrZXIubWVuZGVyLmlvMFkwEwYHKoZIzj0CAQYIKoZI
+zj0DAQcDQgAE7AVYis6MWGPGQYU1/tlLEnskRifDIhvkRb8Y4nQPekRkLkiBYYT3
+iJ46wHrnejbHaLstU9GRdKWOmOuU6HGdO6NQME4wHQYDVR0OBBYEFGOIU4q++Vz8
+9HuT1jg9V+wFeJcyMB8GA1UdIwQYMBaAFGOIU4q++Vz89HuT1jg9V+wFeJcyMAwG
+A1UdEwQFMAMBAf8wCgYIKoZIzj0EAwIDSAAwRQIhAPLnEeWPNeN7eDCEYRitBfyO
+X1yf2kzOm4ohBE5GY9gzAiBCq7HOSkzQDkelmQCCCpGXf/UwYNgQJjSoeGfk0j1a
+TQ==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIBhDCCASmgAwIBAgIJALQrf4QDot4IMAoGCCqGSM49BAMCMB4xHDAaBgNVBAMM
+E3MzLmRvY2tlci5tZW5kZXIuaW8wHhcNMTYxMjE0MTk1MjQ2WhcNMjYxMjEyMTk1
+MjQ2WjAeMRwwGgYDVQQDDBNzMy5kb2NrZXIubWVuZGVyLmlvMFkwEwYHKoZIzj0C
+AQYIKoZIzj0DAQcDQgAEEc/Y3T+l3DvINePkpvVZORMIdHVs29jgsl48ia7z/NRX
+HlKtKxVGJyFN5Y7sBZeLgBYH3F4Bo3KfmxI7ad0tI6NQME4wHQYDVR0OBBYEFIUm
+cip00QZYpe4ULflbGNJan+Y9MB8GA1UdIwQYMBaAFIUmcip00QZYpe4ULflbGNJa
+n+Y9MAwGA1UdEwQFMAMBAf8wCgYIKoZIzj0EAwIDSQAwRgIhANHij9VZBDHOUPaC
+pFiagnWnYL2HBR72W1xTKQbrLLTXAiEAvpwA4HzSnGmLd3010+jqQuMRHArN5WaX
+h0fy7niBbIQ=
+-----END CERTIFICATE-----
package/mender/tenant.conf new file +0 -0
new file mode 100644
index 0000000..e69de29
Signature · 1 line
2.7.4
#1 lore raw

PATCH v2 1/1 package/mender: new package

Hello Angelo,

Thanks for pushing this further. We definitely want to have Mender.io support in Buildroot, so it's great to see this make progress.

Quoted 1 line · Angelo Compagnucci
 package/mender/server.crt                | 22 ++++++++++++++

Not a complete review by far, but I'm wondering if it makes sense to include server certificates in Buildroot. I would assume that one would want to generate his own certificate instead, no ?

package/mender/Config.in line 6

Quoted 12 lines
package/mender/Config.in new file +6 -0
new file mode 100644
index 0000000..b80ad4a
@@ -0,0 +1,14 @@
+config BR2_PACKAGE_MENDER
+	bool "mender"
+	depends on BR2_PACKAGE_HOST_GO_ARCH_SUPPORTS
+	depends on BR2_PACKAGE_HOST_GO_CGO_LINKING_SUPPORTS
+	depends on BR2_TOOLCHAIN_HAS_THREADS
+	depends on BR2_INIT_SYSTEMD

Is there anything that makes mender tied to systemd, other than the fact that you provide only a systemd mender.service, and no init script ?

package/mender/Config.in line 7

Quoted 1 line
package/mender/Config.in new file +1 -0
+

Unneeded empty new line.

package/mender/Config.in line 11

Quoted 4 lines
package/mender/Config.in new file +4 -0
+define MENDER_INSTALL_TARGET_CMDS
+	$(INSTALL) -dm 0755 $(TARGET_DIR)/etc/mender/
+	$(INSTALL) -dm 0755 $(TARGET_DIR)/var/share/mender/identity/
+	$(INSTALL) -dm 0755 $(TARGET_DIR)/var/share/mender/inventory/

These commands are not needed: the $(INSTALL) -D below, with full destination paths, will create the intermediate directories if they don't already exist.

package/mender/Config.in

Quoted 4 lines
package/mender/Config.in new file +4 -0
+	$(INSTALL) -D -m 0644 package/mender/mender.conf \
+		$(TARGET_DIR)/etc/mender/mender.conf
+	$(INSTALL) -D -m 0644 package/mender/tenant.conf \
+		$(TARGET_DIR)/etc/mender/mender.conf

Are you sure that installing tenant.conf as mender.conf is what you want to do here ?

package/mender/Config.in

Quoted 10 lines
package/mender/Config.in new file +10 -0
+	$(INSTALL) -D -m 0644 package/mender/server.crt \
+		$(TARGET_DIR)/etc/mender/server.crt
+	$(INSTALL) -D -m 0755 package/mender/mender-device-identity \
+		$(TARGET_DIR)/var/share/mender/identity/mender-device-identity
+	$(INSTALL) -D -m 0755 package/mender/mender-inventory-network \
+		$(TARGET_DIR)/var/share/mender/inventory/mender-inventory-network
+	$(INSTALL) -D -m 0755 package/mender/mender-inventory-hostinfo \
+		$(TARGET_DIR)/var/share/mender/inventory/mender-inventory-hostinfo
+	$(INSTALL) -D -m 0644 package/mender/mender.service \
+		$(TARGET_DIR)/usr/lib/systemd/system/mender.service

Is this enough to enable the systemd service ? In most packages, we do a dance like this:

define OLSR_INSTALL_INIT_SYSTEMD

        $(INSTALL) -D -m 644 package/olsr/olsr.service \
                $(TARGET_DIR)/usr/lib/systemd/system/olsr.service
        mkdir -p $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants
        ln -sf ../../../../usr/lib/systemd/system/olsr.service \
                $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants/olsr.service

endef

Best regards,

Thomas Petazzoni

Signature · 3 lines
Thomas Petazzoni, CTO, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering
https://bootlin.com
#2 lore raw

PATCH v2 1/1 package/mender: new package

Dear Thomas,

Quoted 5 lines · Thomas Petazzoni

Hello Angelo,

Thanks for pushing this further. We definitely want to have Mender.io support in Buildroot, so it's great to see this make progress.

Quoted 7 lines
Quoted 1 line · Angelo Compagnucci
 package/mender/server.crt                | 22 ++++++++++++++

Not a complete review by far, but I'm wondering if it makes sense to include server certificates in Buildroot. I would assume that one would want to generate his own certificate instead, no ?

It's a test certificate just to starting up. The same file is included in the official yocto package so I thought it could useful to have here.

Quoted 17 lines

package/mender/Config.in line 6

Quoted 13 lines
package/mender/Config.in new file +6 -0
new file mode 100644
index 0000000..b80ad4a
@@ -0,0 +1,14 @@
+config BR2_PACKAGE_MENDER
+     bool "mender"
+     depends on BR2_PACKAGE_HOST_GO_ARCH_SUPPORTS
+     depends on BR2_PACKAGE_HOST_GO_CGO_LINKING_SUPPORTS
+     depends on BR2_TOOLCHAIN_HAS_THREADS
+     depends on BR2_INIT_SYSTEMD

Is there anything that makes mender tied to systemd, other than the fact that you provide only a systemd mender.service, and no init script ?

Mender depends on systemd stating to the requirements here
https://docs.mender.io/1.4/devices/system-requirements

Quoted 15 lines

package/mender/Config.in line 7

Quoted 2 lines
package/mender/Config.in new file +1 -0
+

Unneeded empty new line.

package/mender/Config.in line 11

Quoted 4 lines
package/mender/Config.in new file +4 -0
+define MENDER_INSTALL_TARGET_CMDS
+     $(INSTALL) -dm 0755 $(TARGET_DIR)/etc/mender/
+     $(INSTALL) -dm 0755 $(TARGET_DIR)/var/share/mender/identity/
+     $(INSTALL) -dm 0755 $(TARGET_DIR)/var/share/mender/inventory/

These commands are not needed: the $(INSTALL) -D below, with full destination paths, will create the intermediate directories if they don't already exist.

Quoted 7 lines

package/mender/Config.in

Quoted 4 lines
package/mender/Config.in new file +4 -0
+     $(INSTALL) -D -m 0644 package/mender/mender.conf \
+             $(TARGET_DIR)/etc/mender/mender.conf
+     $(INSTALL) -D -m 0644 package/mender/tenant.conf \
+             $(TARGET_DIR)/etc/mender/mender.conf

Are you sure that installing tenant.conf as mender.conf is what you want to do here ?

Ouch.

Quoted 30 lines

package/mender/Config.in

Quoted 11 lines
package/mender/Config.in new file +10 -0
+     $(INSTALL) -D -m 0644 package/mender/server.crt \
+             $(TARGET_DIR)/etc/mender/server.crt
+     $(INSTALL) -D -m 0755 package/mender/mender-device-identity \
+             $(TARGET_DIR)/var/share/mender/identity/mender-device-identity
+     $(INSTALL) -D -m 0755 package/mender/mender-inventory-network \
+             $(TARGET_DIR)/var/share/mender/inventory/mender-inventory-network
+     $(INSTALL) -D -m 0755 package/mender/mender-inventory-hostinfo \
+             $(TARGET_DIR)/var/share/mender/inventory/mender-inventory-hostinfo
+     $(INSTALL) -D -m 0644 package/mender/mender.service \
+             $(TARGET_DIR)/usr/lib/systemd/system/mender.service

Is this enough to enable the systemd service ? In most packages, we do a dance like this:

define OLSR_INSTALL_INIT_SYSTEMD

        $(INSTALL) -D -m 644 package/olsr/olsr.service \
                $(TARGET_DIR)/usr/lib/systemd/system/olsr.service
        mkdir -p $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants
        ln -sf ../../../../usr/lib/systemd/system/olsr.service \
                $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants/olsr.service

endef

Best regards,

Thomas Petazzoni
--
Thomas Petazzoni, CTO, Bootlin (formerly Free Electrons) Embedded Linux and Kernel engineering
https://bootlin.com

#3 lore raw

PATCH v2 1/1 package/mender: new package

Hello,

Quoted 7 lines · Angelo Compagnucci
Quoted 3 lines

Not a complete review by far, but I'm wondering if it makes sense to include server certificates in Buildroot. I would assume that one would want to generate his own certificate instead, no ?

It's a test certificate just to starting up. The same file is included in the official yocto package so I thought it could useful to have here.

Ah, OK. Then perhaps it is fine to have this test certificate as well.

Quoted 6 lines
Quoted 3 lines

Is there anything that makes mender tied to systemd, other than the fact that you provide only a systemd mender.service, and no init script ?

Mender depends on systemd stating to the requirements here
https://docs.mender.io/1.4/devices/system-requirements

I'm wondering whether this is a real dependency (i.e they are linked with systemd libraries), or whether it is just that they have only tested their integration with systemd.

But OK, if they advertise this as a dependency, it's reasonable to have that as well in Buildroot. It can be relaxed later on if someone is interested in using Mender in a non-systemd system.

Thanks!

Thomas

Signature · 3 lines
Thomas Petazzoni, CTO, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering
https://bootlin.com
#4 lore raw

PATCH v2 1/1 package/mender: new package

Dear Thomas,

Quoted 21 lines · Thomas Petazzoni

Hello,

Quoted 7 lines · Angelo Compagnucci
Quoted 3 lines

Not a complete review by far, but I'm wondering if it makes sense to include server certificates in Buildroot. I would assume that one would want to generate his own certificate instead, no ?

It's a test certificate just to starting up. The same file is included in the official yocto package so I thought it could useful to have here.

Ah, OK. Then perhaps it is fine to have this test certificate as well.

Quoted 6 lines
Quoted 3 lines

Is there anything that makes mender tied to systemd, other than the fact that you provide only a systemd mender.service, and no init script ?

Mender depends on systemd stating to the requirements here
https://docs.mender.io/1.4/devices/system-requirements

Quoted 7 lines

I'm wondering whether this is a real dependency (i.e they are linked with systemd libraries), or whether it is just that they have only tested their integration with systemd.

But OK, if they advertise this as a dependency, it's reasonable to have that as well in Buildroot. It can be relaxed later on if someone is interested in using Mender in a non-systemd system.

Systemd is used to automate the workflow of download/install/reboot/verify operations of the mender daemon. This part can be disabled at compile time if a user is planning to use mender manually and don't want to relay on the mender daemon.
I think this is fairly a not so common use case to justify the package changes.

BTW, I will look into this if there is the requirement.

Quoted 8 lines

Thanks!

Thomas
--
Thomas Petazzoni, CTO, Bootlin (formerly Free Electrons) Embedded Linux and Kernel engineering
https://bootlin.com