Skip to contentSkip to conversation

package/mender: new package

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

lore
Share & tools
lore
#0 lore raw

PATCH v3 1/1 package/mender: new package

From: Angelo Compagnucci <[email protected]>

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

---
Changes:
v2-v3:
* Fixing path error (suggested by Thomas)
* Fixing installation of service file (suggested by Thomas)

 package/Config.in                        |  1 +
 package/mender/Config.in                 | 13 ++++++++
 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                 | 34 +++++++++++++++++++++
 package/mender/mender.service            | 15 +++++++++
 package/mender/server.crt                | 22 ++++++++++++++
 package/mender/tenant.conf               |  0
 11 files changed, 221 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 +13 -0
new file mode 100644
index 0000000..183930d
@@ -0,0 +1,13 @@
+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 +34 -0
new file mode 100644
index 0000000..6a4c995
@@ -0,0 +1,34 @@
+################################################################################
+#
+# 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) -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/tenant.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
+endef
+
+define MENDER_INSTALL_INIT_SYSTEMD
+	$(INSTALL) -D -m 0644 package/mender/mender.service \
+		$(TARGET_DIR)/usr/lib/systemd/system/mender.service
+	mkdir -p $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants
+	ln -fs ../../../../usr/lib/systemd/system/mender.service \
+		$(TARGET_DIR)/etc/systemd/system/multi-user.target.wants/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 v3 1/1 package/mender: new package

Hello,

Quoted 6 lines · Angelo Compagnucci

From: Angelo Compagnucci <[email protected]>

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

I went ahead and applied this to master, but after doing some changes. I was a bit surprised by one of the changes I had to do though, because it clearly outlined that the package was not properly tested. See below for details.

Quoted 4 lines
 package/Config.in                        |  1 +
 package/mender/Config.in                 | 13 ++++++++
 package/mender/mender-device-identity    | 52 ++++++++++++++++++++++++++++++++
 package/mender/mender-inventory-hostinfo | 21 +++++++++++++
Quoted 8 lines
 package/mender/mender-inventory-network  | 47 +++++++++++++++++++++++++++++
 package/mender/mender.conf               | 14 +++++++++
 package/mender/mender.hash               |  2 ++
 package/mender/mender.mk                 | 34 +++++++++++++++++++++
 package/mender/mender.service            | 15 +++++++++
 package/mender/server.crt                | 22 ++++++++++++++
 package/mender/tenant.conf               |  0
 11 files changed, 221 insertions(+)

An entry in the DEVELOPERS file was missing, so I've added it.

package/mender/Config.in line 5

Quoted 11 lines
package/mender/Config.in new file +5 -0
new file mode 100644
index 0000000..183930d
@@ -0,0 +1,13 @@
+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

This dependency was lacking the corresponding Config.in comment, so I've added it.

package/mender/Config.in line 6

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

Since systemd is not a build dependency nor even a runtime dependency, I've dropped this dependency.

Quoted 20 lines
package/mender/mender.mk new file +14 -0
new file mode 100644
index 0000000..6a4c995
@@ -0,0 +1,34 @@
+################################################################################
+#
+# 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) -D -m 0644 package/mender/mender.conf \
+		$(TARGET_DIR)/etc/mender/mender.conf
+	$(INSTALL) -D -m 0644 package/mender/tenant.conf \

package/mender/mender.mk line 24

Quoted 10 lines
package/mender/mender.mk new file +10 -0
+		$(TARGET_DIR)/etc/mender/tenant.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
+endef

Because you override the install target commands here, the mender binary is not installed at all to the target! I'm not sure how you tested this, as it obviously doesn't work: usr/bin/mender is not installed to the target.

I've fixed this by using a post install hook instead, so that the default target installation logic of golang-package is preserved.

Thanks for this contribution! I'm looking forward to seeing the additional patches from Dan to integrate Mender in a non-systemd configuration.

Thanks!

Thomas

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

PATCH v3 1/1 package/mender: new package

Quoted 77 lines · Thomas Petazzoni

Hello,

Quoted 6 lines · Angelo Compagnucci

From: Angelo Compagnucci <[email protected]>

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

I went ahead and applied this to master, but after doing some changes. I was a bit surprised by one of the changes I had to do though, because it clearly outlined that the package was not properly tested. See below for details.

Quoted 4 lines
 package/Config.in                        |  1 +
 package/mender/Config.in                 | 13 ++++++++
 package/mender/mender-device-identity    | 52 ++++++++++++++++++++++++++++++++
 package/mender/mender-inventory-hostinfo | 21 +++++++++++++
Quoted 8 lines
 package/mender/mender-inventory-network  | 47 +++++++++++++++++++++++++++++
 package/mender/mender.conf               | 14 +++++++++
 package/mender/mender.hash               |  2 ++
 package/mender/mender.mk                 | 34 +++++++++++++++++++++
 package/mender/mender.service            | 15 +++++++++
 package/mender/server.crt                | 22 ++++++++++++++
 package/mender/tenant.conf               |  0
 11 files changed, 221 insertions(+)

An entry in the DEVELOPERS file was missing, so I've added it.

package/mender/Config.in line 5

Quoted 11 lines
package/mender/Config.in new file +5 -0
new file mode 100644
index 0000000..183930d
@@ -0,0 +1,13 @@
+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

This dependency was lacking the corresponding Config.in comment, so I've added it.

package/mender/Config.in line 6

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

Since systemd is not a build dependency nor even a runtime dependency, I've dropped this dependency.

Quoted 27 lines
package/mender/mender.mk new file +21 -0
new file mode 100644
index 0000000..6a4c995
@@ -0,0 +1,34 @@
+################################################################################
+#
+# 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) -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/tenant.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
Quoted 8 lines

package/mender/mender.mk line 24

Quoted 3 lines
package/mender/mender.mk new file +3 -0
+     $(INSTALL) -D -m 0755 package/mender/mender-inventory-hostinfo \
+             $(TARGET_DIR)/var/share/mender/inventory/mender-inventory-hostinfo
+endef

Because you override the install target commands here, the mender binary is not installed at all to the target! I'm not sure how you tested this, as it obviously doesn't work: usr/bin/mender is not installed to the target.

Sorry Thomas but this patch predates the final golang infrastructure and probably something went missing somewhere. Moreover I didn't a proper on the field test cause we went for swupdate for a job.

Quoted 2 lines

I've fixed this by using a post install hook instead, so that the default target installation logic of golang-package is preserved.

Thanks for the fixing!

Quoted 12 lines

Thanks for this contribution! I'm looking forward to seeing the additional patches from Dan to integrate Mender in a non-systemd configuration.

Thanks!

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