diff mbox series

[isar-cip-core,RFC] Add option to use swupdate-handler-roundrobin

Message ID 20210430133351.26394-1-Quirin.Gylstorff@siemens.com (mailing list archive)
State New
Headers show
Series [isar-cip-core,RFC] Add option to use swupdate-handler-roundrobin | expand

Commit Message

Quirin Gylstorff April 30, 2021, 1:33 p.m. UTC
From: Quirin Gylstorff <quirin.gylstorff@siemens.com>

The new swupdate round robin handler is available under[1].
Add the Option `SWUPDATE_USE_ROUND_ROBIN_HANDLER_REPO` to
use the handler directly from the repository.

The handler currently doesn't support secureboot.

[1]:https://gitlab.com/cip-playground/swupdate-handler-roundrobin/

Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com>
---
 classes/swupdate-config.bbclass               | 12 ++++++---
 kas/opt/ebg-secure-boot-base.yml              |  3 +++
 .../files/secure-boot/sw-description.tmpl     |  2 +-
 recipes-core/images/files/sw-description.tmpl | 21 ++++++++++-----
 .../files/swupdate.handler.efibootguard.ini   | 26 +++++++++++++++++++
 recipes-core/swupdate/swupdate.bb             |  9 ++++++-
 6 files changed, 62 insertions(+), 11 deletions(-)
 create mode 100644 recipes-core/swupdate/files/swupdate.handler.efibootguard.ini

Comments

Jan Kiszka April 30, 2021, 2:42 p.m. UTC | #1
On 30.04.21 15:33, Q. Gylstorff wrote:
> From: Quirin Gylstorff <quirin.gylstorff@siemens.com>
> 
> The new swupdate round robin handler is available under[1].
> Add the Option `SWUPDATE_USE_ROUND_ROBIN_HANDLER_REPO` to
> use the handler directly from the repository.
> 
> The handler currently doesn't support secureboot.

...but the in-tree handler does. How much effort is needed to port that
feature into the new handler?

Jan

> 
> [1]:https://gitlab.com/cip-playground/swupdate-handler-roundrobin/
> 
> Signed-off-by: Quirin Gylstorff <quirin.gylstorff@siemens.com>
> ---
>  classes/swupdate-config.bbclass               | 12 ++++++---
>  kas/opt/ebg-secure-boot-base.yml              |  3 +++
>  .../files/secure-boot/sw-description.tmpl     |  2 +-
>  recipes-core/images/files/sw-description.tmpl | 21 ++++++++++-----
>  .../files/swupdate.handler.efibootguard.ini   | 26 +++++++++++++++++++
>  recipes-core/swupdate/swupdate.bb             |  9 ++++++-
>  6 files changed, 62 insertions(+), 11 deletions(-)
>  create mode 100644 recipes-core/swupdate/files/swupdate.handler.efibootguard.ini
> 
> diff --git a/classes/swupdate-config.bbclass b/classes/swupdate-config.bbclass
> index 8ec1104..e425aa2 100644
> --- a/classes/swupdate-config.bbclass
> +++ b/classes/swupdate-config.bbclass
> @@ -21,9 +21,17 @@ KFEATURE_lua = ""
>  KFEATURE_lua[BUILD_DEB_DEPENDS] = "liblua5.3-dev"
>  KFEATURE_lua[KCONFIG_SNIPPETS] = "file://swupdate_defconfig_lua.snippet"
>  
> +SWUPDATE_USE_ROUND_ROBIN_HANDLER_REPO ?= "1"
> +
> +SRC_URI_append = " ${@ 'git://gitlab.com/cip-playground/swupdate-handler-roundrobin.git;protocol=https;destsuffix=swupdate-handler-roundrobin;name=swupdate-handler-roundrobin' \
> +    if d.getVar('SWUPDATE_USE_ROUND_ROBIN_HANDLER_REPO') == '1' else '' \
> +    }"
> +SRCREV_swupdate-handler-roundrobin ?= "6ac9e49eaa4e866a3eda12eee3a223820ba8e0bf"
> +SWUPDATE_LUASCRIPT ?= "swupdate-handler-roundrobin/swupdate_handlers_roundrobin.lua"
>  KFEATURE_luahandler = ""
>  KFEATURE_luahandler[KCONFIG_SNIPPETS] = "file://swupdate_defconfig_luahandler.snippet"
> -KFEATURE_luahandler[SRC_URI] = "file://${SWUPDATE_LUASCRIPT}"
> +KFEATURE_luahandler[SRC_URI] = "${@ 'file://${SWUPDATE_LUASCRIPT}' \
> +                                  if d.getVar('SWUPDATE_USE_ROUND_ROBIN_HANDLER_REPO') == '0' else '' }"
>  
>  KFEATURE_DEPS = ""
>  KFEATURE_DEPS[luahandler] = "lua"
> @@ -58,8 +66,6 @@ KFEATURE_u-boot[DEBIAN_DEPENDS] = "${@ 'libubootenv0.1, u-boot-${MACHINE}-config
>  KFEATURE_u-boot[DEPENDS] = "${SWUPDATE_U_BOOT} libubootenv"
>  KFEATURE_u-boot[KCONFIG_SNIPPETS] = "file://swupdate_defconfig_u-boot.snippet"
>  
> -SWUPDATE_LUASCRIPT ?= "swupdate_handlers.lua"
> -
>  def get_bootloader_featureset(d):
>      bootloader = d.getVar("SWUPDATE_BOOTLOADER", True) or ""
>      if bootloader == "efibootguard":
> diff --git a/kas/opt/ebg-secure-boot-base.yml b/kas/opt/ebg-secure-boot-base.yml
> index 30ca35a..484d0e5 100644
> --- a/kas/opt/ebg-secure-boot-base.yml
> +++ b/kas/opt/ebg-secure-boot-base.yml
> @@ -16,3 +16,6 @@ local_conf_header:
>    initramfs: |
>      IMAGE_INSTALL += "initramfs-abrootfs-secureboot"
>      SWU_DESCRIPTION = "secureboot"
> +  swupdate-secureboot: |
> +    SWUPDATE_USE_ROUND_ROBIN_HANDLER_REPO = "0"
> +    SWUPDATE_LUASCRIPT = "swupdate_handler.efibootguard.secureboot.lua"
> diff --git a/recipes-core/images/files/secure-boot/sw-description.tmpl b/recipes-core/images/files/secure-boot/sw-description.tmpl
> index bce97d0..897d819 100644
> --- a/recipes-core/images/files/secure-boot/sw-description.tmpl
> +++ b/recipes-core/images/files/secure-boot/sw-description.tmpl
> @@ -16,7 +16,7 @@ software =
>              filename = "${ROOTFS_PARTITION_NAME}";
>              device = "fedcba98-7654-3210-cafe-5e0710000001,fedcba98-7654-3210-cafe-5e0710000002";
>              type = "roundrobin";
> -            compressed = "true";
> +            compressed = "zlib";
>              filesystem = "ext4";
>      });
>      files: ({
> diff --git a/recipes-core/images/files/sw-description.tmpl b/recipes-core/images/files/sw-description.tmpl
> index bb34088..3309271 100644
> --- a/recipes-core/images/files/sw-description.tmpl
> +++ b/recipes-core/images/files/sw-description.tmpl
> @@ -16,21 +16,30 @@ software =
>              filename = "${ROOTFS_PARTITION_NAME}";
>              device = "fedcba98-7654-3210-cafe-5e0710000001,fedcba98-7654-3210-cafe-5e0710000002";
>              type = "roundrobin";
> -            compressed = "true";
> +            compressed = "zlib";
>              filesystem = "ext4";
> +            properties: {
> +                        subtype = "image";
> +            };
>      });
>      files: ({
>              filename = "${KERNEL_IMAGE}";
>              path = "vmlinuz";
> -            type = "kernelfile";
> -            device = "sda2,sda3";
> +            type = "roundrobin";
> +            device = "fedcba98-7654-3210-cafe-5e0710000001->sda2,fedcba98-7654-3210-cafe-5e0710000002->sda3";
>              filesystem = "vfat";
> +            properties: {
> +                        subtype = "kernel";
> +            };
>      },
>      {
>              filename = "${INITRD_IMAGE}";
> -            path = "initrd.img";
> -            type = "kernelfile";
> -            device = "sda2,sda3";
> +            path = "${INITRD_IMAGE}";
> +            type = "roundrobin";
> +            device = "fedcba98-7654-3210-cafe-5e0710000001->sda2,fedcba98-7654-3210-cafe-5e0710000002->sda3";
>              filesystem = "vfat";
> +            properties: {
> +                        subtype = "initrd";
> +            };
>      });
>  }
> diff --git a/recipes-core/swupdate/files/swupdate.handler.efibootguard.ini b/recipes-core/swupdate/files/swupdate.handler.efibootguard.ini
> new file mode 100644
> index 0000000..3aee76c
> --- /dev/null
> +++ b/recipes-core/swupdate/files/swupdate.handler.efibootguard.ini
> @@ -0,0 +1,26 @@
> +[image]
> +chainhandler=raw
> +
> +[image.selector]
> +method=cmdline_rr
> +key=root
> +
> +[image.bootenv]
> +kernelparams=root=PARTUUID=${rrtarget} ${cmdline_root}
> +
> +[kernel]
> +chainhandler=rawfile
> +
> +[kernel.selector]
> +method=cmdline_rrmap
> +key=root
> +
> +[kernel.bootenv]
> +kernelfile=C:BOOT${rrindex}:vmlinuz
> +
> +[initrd]
> +chainhandler=rawfile
> +
> +[initrd.selector]
> +method=cmdline_rrmap
> +key=root
> diff --git a/recipes-core/swupdate/swupdate.bb b/recipes-core/swupdate/swupdate.bb
> index 526c72f..c03c70b 100644
> --- a/recipes-core/swupdate/swupdate.bb
> +++ b/recipes-core/swupdate/swupdate.bb
> @@ -29,6 +29,7 @@ DEBIAN_DEPENDS = "${shlibs:Depends}, ${misc:Depends}"
>  inherit dpkg
>  inherit swupdate-config
>  
> +SRC_URI += "file://swupdate.handler.${BOOTLOADER}.ini"
>  KFEATURES += "luahandler"
>  
>  S = "${WORKDIR}/git"
> @@ -46,5 +47,11 @@ do_prepare_build() {
>          echo "configs/${DEFCONFIG}" >> ${S}/.gitignore
>      fi
>      # luahandler
> -    install -m 0644 ${WORKDIR}/${SWUPDATE_LUASCRIPT} ${S}
> +    if [ -e ${WORKDIR}/${SWUPDATE_LUASCRIPT} ]; then
> +        install -m 0644 ${WORKDIR}/${SWUPDATE_LUASCRIPT} ${S}/swupdate_handlers.lua
> +    fi
> +    if [ -e "${WORKDIR}/swupdate.handler.${BOOTLOADER}.ini" ]; then
> +       install -m 0644 ${WORKDIR}/swupdate.handler.${BOOTLOADER}.ini ${S}/swupdate.handler.ini
> +       echo "swupdate.handler.ini etc/" >> ${S}/debian/swupdate.install
> +    fi
>  }
>
diff mbox series

Patch

diff --git a/classes/swupdate-config.bbclass b/classes/swupdate-config.bbclass
index 8ec1104..e425aa2 100644
--- a/classes/swupdate-config.bbclass
+++ b/classes/swupdate-config.bbclass
@@ -21,9 +21,17 @@  KFEATURE_lua = ""
 KFEATURE_lua[BUILD_DEB_DEPENDS] = "liblua5.3-dev"
 KFEATURE_lua[KCONFIG_SNIPPETS] = "file://swupdate_defconfig_lua.snippet"
 
+SWUPDATE_USE_ROUND_ROBIN_HANDLER_REPO ?= "1"
+
+SRC_URI_append = " ${@ 'git://gitlab.com/cip-playground/swupdate-handler-roundrobin.git;protocol=https;destsuffix=swupdate-handler-roundrobin;name=swupdate-handler-roundrobin' \
+    if d.getVar('SWUPDATE_USE_ROUND_ROBIN_HANDLER_REPO') == '1' else '' \
+    }"
+SRCREV_swupdate-handler-roundrobin ?= "6ac9e49eaa4e866a3eda12eee3a223820ba8e0bf"
+SWUPDATE_LUASCRIPT ?= "swupdate-handler-roundrobin/swupdate_handlers_roundrobin.lua"
 KFEATURE_luahandler = ""
 KFEATURE_luahandler[KCONFIG_SNIPPETS] = "file://swupdate_defconfig_luahandler.snippet"
-KFEATURE_luahandler[SRC_URI] = "file://${SWUPDATE_LUASCRIPT}"
+KFEATURE_luahandler[SRC_URI] = "${@ 'file://${SWUPDATE_LUASCRIPT}' \
+                                  if d.getVar('SWUPDATE_USE_ROUND_ROBIN_HANDLER_REPO') == '0' else '' }"
 
 KFEATURE_DEPS = ""
 KFEATURE_DEPS[luahandler] = "lua"
@@ -58,8 +66,6 @@  KFEATURE_u-boot[DEBIAN_DEPENDS] = "${@ 'libubootenv0.1, u-boot-${MACHINE}-config
 KFEATURE_u-boot[DEPENDS] = "${SWUPDATE_U_BOOT} libubootenv"
 KFEATURE_u-boot[KCONFIG_SNIPPETS] = "file://swupdate_defconfig_u-boot.snippet"
 
-SWUPDATE_LUASCRIPT ?= "swupdate_handlers.lua"
-
 def get_bootloader_featureset(d):
     bootloader = d.getVar("SWUPDATE_BOOTLOADER", True) or ""
     if bootloader == "efibootguard":
diff --git a/kas/opt/ebg-secure-boot-base.yml b/kas/opt/ebg-secure-boot-base.yml
index 30ca35a..484d0e5 100644
--- a/kas/opt/ebg-secure-boot-base.yml
+++ b/kas/opt/ebg-secure-boot-base.yml
@@ -16,3 +16,6 @@  local_conf_header:
   initramfs: |
     IMAGE_INSTALL += "initramfs-abrootfs-secureboot"
     SWU_DESCRIPTION = "secureboot"
+  swupdate-secureboot: |
+    SWUPDATE_USE_ROUND_ROBIN_HANDLER_REPO = "0"
+    SWUPDATE_LUASCRIPT = "swupdate_handler.efibootguard.secureboot.lua"
diff --git a/recipes-core/images/files/secure-boot/sw-description.tmpl b/recipes-core/images/files/secure-boot/sw-description.tmpl
index bce97d0..897d819 100644
--- a/recipes-core/images/files/secure-boot/sw-description.tmpl
+++ b/recipes-core/images/files/secure-boot/sw-description.tmpl
@@ -16,7 +16,7 @@  software =
             filename = "${ROOTFS_PARTITION_NAME}";
             device = "fedcba98-7654-3210-cafe-5e0710000001,fedcba98-7654-3210-cafe-5e0710000002";
             type = "roundrobin";
-            compressed = "true";
+            compressed = "zlib";
             filesystem = "ext4";
     });
     files: ({
diff --git a/recipes-core/images/files/sw-description.tmpl b/recipes-core/images/files/sw-description.tmpl
index bb34088..3309271 100644
--- a/recipes-core/images/files/sw-description.tmpl
+++ b/recipes-core/images/files/sw-description.tmpl
@@ -16,21 +16,30 @@  software =
             filename = "${ROOTFS_PARTITION_NAME}";
             device = "fedcba98-7654-3210-cafe-5e0710000001,fedcba98-7654-3210-cafe-5e0710000002";
             type = "roundrobin";
-            compressed = "true";
+            compressed = "zlib";
             filesystem = "ext4";
+            properties: {
+                        subtype = "image";
+            };
     });
     files: ({
             filename = "${KERNEL_IMAGE}";
             path = "vmlinuz";
-            type = "kernelfile";
-            device = "sda2,sda3";
+            type = "roundrobin";
+            device = "fedcba98-7654-3210-cafe-5e0710000001->sda2,fedcba98-7654-3210-cafe-5e0710000002->sda3";
             filesystem = "vfat";
+            properties: {
+                        subtype = "kernel";
+            };
     },
     {
             filename = "${INITRD_IMAGE}";
-            path = "initrd.img";
-            type = "kernelfile";
-            device = "sda2,sda3";
+            path = "${INITRD_IMAGE}";
+            type = "roundrobin";
+            device = "fedcba98-7654-3210-cafe-5e0710000001->sda2,fedcba98-7654-3210-cafe-5e0710000002->sda3";
             filesystem = "vfat";
+            properties: {
+                        subtype = "initrd";
+            };
     });
 }
diff --git a/recipes-core/swupdate/files/swupdate.handler.efibootguard.ini b/recipes-core/swupdate/files/swupdate.handler.efibootguard.ini
new file mode 100644
index 0000000..3aee76c
--- /dev/null
+++ b/recipes-core/swupdate/files/swupdate.handler.efibootguard.ini
@@ -0,0 +1,26 @@ 
+[image]
+chainhandler=raw
+
+[image.selector]
+method=cmdline_rr
+key=root
+
+[image.bootenv]
+kernelparams=root=PARTUUID=${rrtarget} ${cmdline_root}
+
+[kernel]
+chainhandler=rawfile
+
+[kernel.selector]
+method=cmdline_rrmap
+key=root
+
+[kernel.bootenv]
+kernelfile=C:BOOT${rrindex}:vmlinuz
+
+[initrd]
+chainhandler=rawfile
+
+[initrd.selector]
+method=cmdline_rrmap
+key=root
diff --git a/recipes-core/swupdate/swupdate.bb b/recipes-core/swupdate/swupdate.bb
index 526c72f..c03c70b 100644
--- a/recipes-core/swupdate/swupdate.bb
+++ b/recipes-core/swupdate/swupdate.bb
@@ -29,6 +29,7 @@  DEBIAN_DEPENDS = "${shlibs:Depends}, ${misc:Depends}"
 inherit dpkg
 inherit swupdate-config
 
+SRC_URI += "file://swupdate.handler.${BOOTLOADER}.ini"
 KFEATURES += "luahandler"
 
 S = "${WORKDIR}/git"
@@ -46,5 +47,11 @@  do_prepare_build() {
         echo "configs/${DEFCONFIG}" >> ${S}/.gitignore
     fi
     # luahandler
-    install -m 0644 ${WORKDIR}/${SWUPDATE_LUASCRIPT} ${S}
+    if [ -e ${WORKDIR}/${SWUPDATE_LUASCRIPT} ]; then
+        install -m 0644 ${WORKDIR}/${SWUPDATE_LUASCRIPT} ${S}/swupdate_handlers.lua
+    fi
+    if [ -e "${WORKDIR}/swupdate.handler.${BOOTLOADER}.ini" ]; then
+       install -m 0644 ${WORKDIR}/swupdate.handler.${BOOTLOADER}.ini ${S}/swupdate.handler.ini
+       echo "swupdate.handler.ini etc/" >> ${S}/debian/swupdate.install
+    fi
 }