diff mbox series

[meta-swupdate] styhead migration fixes

Message ID 20240731161544.4175303-1-danwalkes@trellis-logic.com
State Changes Requested
Delegated to: Stefano Babic
Headers show
Series [meta-swupdate] styhead migration fixes | expand

Commit Message

Dan Walkes July 31, 2024, 4:15 p.m. UTC
Based on the guidance from [1], resolve build errors on styhead.

This resolves 3 issues with styhead as found with the integration at [2]
and testing of branch at [3], as referenced at [4]:

````
DEBUG: Executing shell function do_configure
cat: /home/dan/trellis/oe4t/tegra-demo-distro/build-master/tmp/work/armv8a-oe4t-linux/swupdate/2024.05/defconfig: No such file or directory
WARNING: exit code 1 from a shell command.
```
This error occurs due to the swupdate.inc recipe usage of WORKDIR
instead of UNPACKDIR. Resolved by replacing most references of WORKDIR
to UNPACKDIR as suggested in [1] for swupdate.inc

```
WARNING: swupdate-image-tegra-1.0-r0 do_unpack: swupdate-image-tegra: the directory ${WORKDIR}/${PN} (/home/dan/trellis/oe4t/tegra-demo-distro/build-master/tmp/work/jetson_orin_nano_devkit_nvme-oe4t-linux/swupdate-image-tegra/1.0/swupdate-image-tegra) pointed to by the S variable doesn't exist - please set S within the recipe to point to where the source has been unpacked to
```
This warning is printed due to the setting of S based on WORKDIR
in swupdate.bbclass and the fact that the S directory is no longer
automatically created as discussed in [1].  To resolve, use the guidance
in [1] to set S and UNPACKDIR for recipes which only use file:// sources.

```
ERROR: swupdate-image-tegra-1.0-r0 do_swuimage: Error executing a python function in exec_func_python() autogenerated:

The stack trace of python calls that resulted in this exception/failure was:
File: 'exec_func_python() autogenerated', lineno: 2, function: <module>
     0001:
 *** 0002:do_swuimage(d)
     0003:
File: '/home/dan/trellis/oe4t/tegra-demo-distro/build-master/../layers/meta-swupdate/classes-recipe/swupdate-common.bbclass', lineno: 325, function: do_swuimage
     0321:    list_for_cpio = ["sw-description"]
     0322:    workdir = d.getVar('WORKDIR')
     0323:    s = d.getVar('S')
     0324:    imgdeploydir = d.getVar('SWUDEPLOYDIR')
 *** 0325:    shutil.copyfile(os.path.join(workdir, "sw-description"), os.path.join(s, "sw-description"))
     0326:
...
File: '/usr/lib/python3.10/shutil.py', lineno: 254, function: copyfile
     0250:
     0253:    else:
 *** 0254:        with open(src, 'rb') as fsrc:
```

This error occurs due to the use of WORKDIR as the location of files instead
of UNPACKDIR.  When using the guidance in [1] to set UNPACKDIR there is no
longer a need to copy from WORKDIR to UNPACKDIR since S is UNPACKDIR, so both
the workdir reference and shutil copy can be removed.

1: https://docs.yoctoproject.org/next/migration-guides/migration-5.1.html
2: https://github.com/OE4T/tegra-demo-distro/blob/master/layers/meta-tegrademo/dynamic-layers/meta-swupdate/README.md
3: https://github.com/Trellis-Logic/tegra-demo-distro/blob/scarthgap%2Bkas/layers/meta-tegrademo/dynamic-layers/meta-swupdate/README.md
4: https://groups.google.com/g/swupdate/c/E2h_qgHvJuk

Signed-off-by: Dan Walkes <danwalkes@trellis-logic.com>
---
 classes-recipe/swupdate-common.bbclass |  2 --
 classes-recipe/swupdate-image.bbclass  |  3 ++-
 classes-recipe/swupdate.bbclass        |  3 ++-
 recipes-support/swupdate/swupdate.inc  | 26 +++++++++++++-------------
 4 files changed, 17 insertions(+), 17 deletions(-)

Comments

Stefano Babic Aug. 1, 2024, 7:37 a.m. UTC | #1
On 31.07.24 18:15, Dan Walkes wrote:
> Based on the guidance from [1], resolve build errors on styhead.
>
> This resolves 3 issues with styhead as found with the integration at [2]
> and testing of branch at [3], as referenced at [4]:
>
> ````
> DEBUG: Executing shell function do_configure
> cat: /home/dan/trellis/oe4t/tegra-demo-distro/build-master/tmp/work/armv8a-oe4t-linux/swupdate/2024.05/defconfig: No such file or directory
> WARNING: exit code 1 from a shell command.
> ```
> This error occurs due to the swupdate.inc recipe usage of WORKDIR
> instead of UNPACKDIR. Resolved by replacing most references of WORKDIR
> to UNPACKDIR as suggested in [1] for swupdate.inc
>
> ```
> WARNING: swupdate-image-tegra-1.0-r0 do_unpack: swupdate-image-tegra: the directory ${WORKDIR}/${PN} (/home/dan/trellis/oe4t/tegra-demo-distro/build-master/tmp/work/jetson_orin_nano_devkit_nvme-oe4t-linux/swupdate-image-tegra/1.0/swupdate-image-tegra) pointed to by the S variable doesn't exist - please set S within the recipe to point to where the source has been unpacked to
> ```
> This warning is printed due to the setting of S based on WORKDIR
> in swupdate.bbclass and the fact that the S directory is no longer
> automatically created as discussed in [1].  To resolve, use the guidance
> in [1] to set S and UNPACKDIR for recipes which only use file:// sources.
>
> ```
> ERROR: swupdate-image-tegra-1.0-r0 do_swuimage: Error executing a python function in exec_func_python() autogenerated:
>
> The stack trace of python calls that resulted in this exception/failure was:
> File: 'exec_func_python() autogenerated', lineno: 2, function: <module>
>       0001:
>   *** 0002:do_swuimage(d)
>       0003:
> File: '/home/dan/trellis/oe4t/tegra-demo-distro/build-master/../layers/meta-swupdate/classes-recipe/swupdate-common.bbclass', lineno: 325, function: do_swuimage
>       0321:    list_for_cpio = ["sw-description"]
>       0322:    workdir = d.getVar('WORKDIR')
>       0323:    s = d.getVar('S')
>       0324:    imgdeploydir = d.getVar('SWUDEPLOYDIR')
>   *** 0325:    shutil.copyfile(os.path.join(workdir, "sw-description"), os.path.join(s, "sw-description"))
>       0326:
> ...
> File: '/usr/lib/python3.10/shutil.py', lineno: 254, function: copyfile
>       0250:
>       0253:    else:
>   *** 0254:        with open(src, 'rb') as fsrc:
> ```
>
> This error occurs due to the use of WORKDIR as the location of files instead
> of UNPACKDIR.  When using the guidance in [1] to set UNPACKDIR there is no
> longer a need to copy from WORKDIR to UNPACKDIR since S is UNPACKDIR, so both
> the workdir reference and shutil copy can be removed.
>
> 1: https://docs.yoctoproject.org/next/migration-guides/migration-5.1.html
> 2: https://github.com/OE4T/tegra-demo-distro/blob/master/layers/meta-tegrademo/dynamic-layers/meta-swupdate/README.md
> 3: https://github.com/Trellis-Logic/tegra-demo-distro/blob/scarthgap%2Bkas/layers/meta-tegrademo/dynamic-layers/meta-swupdate/README.md
> 4: https://groups.google.com/g/swupdate/c/E2h_qgHvJuk
>
> Signed-off-by: Dan Walkes <danwalkes@trellis-logic.com>
> ---
>   classes-recipe/swupdate-common.bbclass |  2 --
>   classes-recipe/swupdate-image.bbclass  |  3 ++-
>   classes-recipe/swupdate.bbclass        |  3 ++-
>   recipes-support/swupdate/swupdate.inc  | 26 +++++++++++++-------------
>   4 files changed, 17 insertions(+), 17 deletions(-)
>
> diff --git a/classes-recipe/swupdate-common.bbclass b/classes-recipe/swupdate-common.bbclass
> index 0367f81..647222d 100644
> --- a/classes-recipe/swupdate-common.bbclass
> +++ b/classes-recipe/swupdate-common.bbclass
> @@ -319,10 +319,8 @@ python do_swuimage () {
>       import shutil
>
>       list_for_cpio = ["sw-description"]
> -    workdir = d.getVar('WORKDIR')
>       s = d.getVar('S')
>       imgdeploydir = d.getVar('SWUDEPLOYDIR')
> -    shutil.copyfile(os.path.join(workdir, "sw-description"), os.path.join(s, "sw-description"))
>
>       if d.getVar('SWUPDATE_SIGNING'):
>           list_for_cpio.append('sw-description.sig')
> diff --git a/classes-recipe/swupdate-image.bbclass b/classes-recipe/swupdate-image.bbclass
> index 175fc4e..62ef19d 100644
> --- a/classes-recipe/swupdate-image.bbclass
> +++ b/classes-recipe/swupdate-image.bbclass
> @@ -13,7 +13,8 @@
>   inherit swupdate-common
>   inherit image-artifact-names
>
> -S = "${WORKDIR}/${PN}"
> +S = "${WORKDIR}/sources"
> +UNPACKDIR = "${S}"
>
>   SRC_URI += "file://sw-description"
>   SWUPDATE_IMAGES += "${IMAGE_LINK_NAME}"
> diff --git a/classes-recipe/swupdate.bbclass b/classes-recipe/swupdate.bbclass
> index 3656b1c..ae00085 100644
> --- a/classes-recipe/swupdate.bbclass
> +++ b/classes-recipe/swupdate.bbclass
> @@ -36,7 +36,8 @@
>   inherit swupdate-common
>   inherit image-artifact-names
>
> -S = "${WORKDIR}/${PN}"
> +S = "${WORKDIR}/sources"
> +UNPACKDIR = "${S}"
>
>   IMAGE_DEPENDS ?= ""
>
> diff --git a/recipes-support/swupdate/swupdate.inc b/recipes-support/swupdate/swupdate.inc
> index 188c25c..1b14f66 100644
> --- a/recipes-support/swupdate/swupdate.inc
> +++ b/recipes-support/swupdate/swupdate.inc
> @@ -245,13 +245,13 @@ python () {
>   }
>
>   do_configure () {
> -    cat > ${WORKDIR}/.config <<HEREDOC
> +    cat > ${UNPACKDIR}/.config <<HEREDOC
>   CONFIG_EXTRA_CFLAGS="${CFLAGS}"
>   CONFIG_EXTRA_LDFLAGS="${LDFLAGS}"
>   HEREDOC
> -    cat ${WORKDIR}/defconfig >> ${WORKDIR}/.config
> +    cat ${UNPACKDIR}/defconfig >> ${UNPACKDIR}/.config
>
> -    merge_config.sh -O ${B} -m ${WORKDIR}/.config ${@" ".join(find_cfgs(d))}
> +    merge_config.sh -O ${B} -m ${UNPACKDIR}/.config ${@" ".join(find_cfgs(d))}
>       (cd ${S} && cml1_do_configure)
>   }
>
> @@ -271,34 +271,34 @@ do_install () {
>       fi
>
>       install -d ${D}${sysconfdir}/init.d
> -    install -m 755 ${WORKDIR}/swupdate ${D}${sysconfdir}/init.d
> +    install -m 755 ${UNPACKDIR}/swupdate ${D}${sysconfdir}/init.d
>       sed -i -e "s|/usr/lib/|${libdir}/|" ${D}${sysconfdir}/init.d/swupdate
>
>       # shell based configuration loader allows to place code snippets into this folder
>       install -d ${D}${libdir}/swupdate/conf.d
> -    install -m 755 ${WORKDIR}/swupdate.sh ${D}${libdir}/swupdate
> +    install -m 755 ${UNPACKDIR}/swupdate.sh ${D}${libdir}/swupdate
>       sed -i 's#@LIBDIR@#${libdir}#g' ${D}${libdir}/swupdate/swupdate.sh
>       if ${SWUPDATE_MONGOOSE}; then
> -        install -m 644 ${WORKDIR}/10-mongoose-args ${D}${libdir}/swupdate/conf.d/
> +        install -m 644 ${UNPACKDIR}/10-mongoose-args ${D}${libdir}/swupdate/conf.d/
>       fi
>       install -d ${D}${systemd_unitdir}/system
> -    install -m 644 ${WORKDIR}/swupdate.service ${D}${systemd_system_unitdir}
> +    install -m 644 ${UNPACKDIR}/swupdate.service ${D}${systemd_system_unitdir}
>       sed -i 's#@LIBDIR@#${libdir}#' ${D}${systemd_system_unitdir}/swupdate.service
> -    install -m 644 ${WORKDIR}/swupdate.socket.tmpl ${D}${systemd_system_unitdir}/swupdate.socket
> +    install -m 644 ${UNPACKDIR}/swupdate.socket.tmpl ${D}${systemd_system_unitdir}/swupdate.socket
>       sed -e "s,@@SWUPDATE_SOCKET_CTRL_PATH@@,${SWUPDATE_SOCKET_CTRL_PATH},g" \
>           -e "s,@@SWUPDATE_SOCKET_PROGRESS_PATH@@,${SWUPDATE_SOCKET_PROGRESS_PATH},g" \
>           -i ${D}${systemd_system_unitdir}/swupdate.socket
> -    install -m 644 ${WORKDIR}/swupdate-usb@.service ${D}${systemd_system_unitdir}
> -    install -m 644 ${WORKDIR}/swupdate-progress.service ${D}${systemd_system_unitdir}
> +    install -m 644 ${UNPACKDIR}/swupdate-usb@.service ${D}${systemd_system_unitdir}
> +    install -m 644 ${UNPACKDIR}/swupdate-progress.service ${D}${systemd_system_unitdir}
>
>       if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
>           install -d ${D}${nonarch_libdir}/tmpfiles.d
> -        install -m 0644 ${WORKDIR}/tmpfiles-swupdate.conf ${D}${nonarch_libdir}/tmpfiles.d/swupdate.conf
> +        install -m 0644 ${UNPACKDIR}/tmpfiles-swupdate.conf ${D}${nonarch_libdir}/tmpfiles.d/swupdate.conf
>           install -d ${D}${sysconfdir}/udev/rules.d
> -        install -m 0644 ${WORKDIR}/swupdate-usb.rules ${D}${sysconfdir}/udev/rules.d/
> +        install -m 0644 ${UNPACKDIR}/swupdate-usb.rules ${D}${sysconfdir}/udev/rules.d/
>       else
>           # in case of systemd there is a service file, for sysv init we need to start it as well
> -        install -m 0644 ${WORKDIR}/90-start-progress ${D}${libdir}/swupdate/conf.d/
> +        install -m 0644 ${UNPACKDIR}/90-start-progress ${D}${libdir}/swupdate/conf.d/
>       fi
>   }
>

Reviewed-by: Stefano Babic <stefano.babic@swupdate.org>
diff mbox series

Patch

diff --git a/classes-recipe/swupdate-common.bbclass b/classes-recipe/swupdate-common.bbclass
index 0367f81..647222d 100644
--- a/classes-recipe/swupdate-common.bbclass
+++ b/classes-recipe/swupdate-common.bbclass
@@ -319,10 +319,8 @@  python do_swuimage () {
     import shutil
 
     list_for_cpio = ["sw-description"]
-    workdir = d.getVar('WORKDIR')
     s = d.getVar('S')
     imgdeploydir = d.getVar('SWUDEPLOYDIR')
-    shutil.copyfile(os.path.join(workdir, "sw-description"), os.path.join(s, "sw-description"))
 
     if d.getVar('SWUPDATE_SIGNING'):
         list_for_cpio.append('sw-description.sig')
diff --git a/classes-recipe/swupdate-image.bbclass b/classes-recipe/swupdate-image.bbclass
index 175fc4e..62ef19d 100644
--- a/classes-recipe/swupdate-image.bbclass
+++ b/classes-recipe/swupdate-image.bbclass
@@ -13,7 +13,8 @@ 
 inherit swupdate-common
 inherit image-artifact-names
 
-S = "${WORKDIR}/${PN}"
+S = "${WORKDIR}/sources"
+UNPACKDIR = "${S}"
 
 SRC_URI += "file://sw-description"
 SWUPDATE_IMAGES += "${IMAGE_LINK_NAME}"
diff --git a/classes-recipe/swupdate.bbclass b/classes-recipe/swupdate.bbclass
index 3656b1c..ae00085 100644
--- a/classes-recipe/swupdate.bbclass
+++ b/classes-recipe/swupdate.bbclass
@@ -36,7 +36,8 @@ 
 inherit swupdate-common
 inherit image-artifact-names
 
-S = "${WORKDIR}/${PN}"
+S = "${WORKDIR}/sources"
+UNPACKDIR = "${S}"
 
 IMAGE_DEPENDS ?= ""
 
diff --git a/recipes-support/swupdate/swupdate.inc b/recipes-support/swupdate/swupdate.inc
index 188c25c..1b14f66 100644
--- a/recipes-support/swupdate/swupdate.inc
+++ b/recipes-support/swupdate/swupdate.inc
@@ -245,13 +245,13 @@  python () {
 }
 
 do_configure () {
-    cat > ${WORKDIR}/.config <<HEREDOC
+    cat > ${UNPACKDIR}/.config <<HEREDOC
 CONFIG_EXTRA_CFLAGS="${CFLAGS}"
 CONFIG_EXTRA_LDFLAGS="${LDFLAGS}"
 HEREDOC
-    cat ${WORKDIR}/defconfig >> ${WORKDIR}/.config
+    cat ${UNPACKDIR}/defconfig >> ${UNPACKDIR}/.config
 
-    merge_config.sh -O ${B} -m ${WORKDIR}/.config ${@" ".join(find_cfgs(d))}
+    merge_config.sh -O ${B} -m ${UNPACKDIR}/.config ${@" ".join(find_cfgs(d))}
     (cd ${S} && cml1_do_configure)
 }
 
@@ -271,34 +271,34 @@  do_install () {
     fi
 
     install -d ${D}${sysconfdir}/init.d
-    install -m 755 ${WORKDIR}/swupdate ${D}${sysconfdir}/init.d
+    install -m 755 ${UNPACKDIR}/swupdate ${D}${sysconfdir}/init.d
     sed -i -e "s|/usr/lib/|${libdir}/|" ${D}${sysconfdir}/init.d/swupdate
 
     # shell based configuration loader allows to place code snippets into this folder
     install -d ${D}${libdir}/swupdate/conf.d
-    install -m 755 ${WORKDIR}/swupdate.sh ${D}${libdir}/swupdate
+    install -m 755 ${UNPACKDIR}/swupdate.sh ${D}${libdir}/swupdate
     sed -i 's#@LIBDIR@#${libdir}#g' ${D}${libdir}/swupdate/swupdate.sh
     if ${SWUPDATE_MONGOOSE}; then
-        install -m 644 ${WORKDIR}/10-mongoose-args ${D}${libdir}/swupdate/conf.d/
+        install -m 644 ${UNPACKDIR}/10-mongoose-args ${D}${libdir}/swupdate/conf.d/
     fi
     install -d ${D}${systemd_unitdir}/system
-    install -m 644 ${WORKDIR}/swupdate.service ${D}${systemd_system_unitdir}
+    install -m 644 ${UNPACKDIR}/swupdate.service ${D}${systemd_system_unitdir}
     sed -i 's#@LIBDIR@#${libdir}#' ${D}${systemd_system_unitdir}/swupdate.service
-    install -m 644 ${WORKDIR}/swupdate.socket.tmpl ${D}${systemd_system_unitdir}/swupdate.socket
+    install -m 644 ${UNPACKDIR}/swupdate.socket.tmpl ${D}${systemd_system_unitdir}/swupdate.socket
     sed -e "s,@@SWUPDATE_SOCKET_CTRL_PATH@@,${SWUPDATE_SOCKET_CTRL_PATH},g" \
         -e "s,@@SWUPDATE_SOCKET_PROGRESS_PATH@@,${SWUPDATE_SOCKET_PROGRESS_PATH},g" \
         -i ${D}${systemd_system_unitdir}/swupdate.socket
-    install -m 644 ${WORKDIR}/swupdate-usb@.service ${D}${systemd_system_unitdir}
-    install -m 644 ${WORKDIR}/swupdate-progress.service ${D}${systemd_system_unitdir}
+    install -m 644 ${UNPACKDIR}/swupdate-usb@.service ${D}${systemd_system_unitdir}
+    install -m 644 ${UNPACKDIR}/swupdate-progress.service ${D}${systemd_system_unitdir}
 
     if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then
         install -d ${D}${nonarch_libdir}/tmpfiles.d
-        install -m 0644 ${WORKDIR}/tmpfiles-swupdate.conf ${D}${nonarch_libdir}/tmpfiles.d/swupdate.conf
+        install -m 0644 ${UNPACKDIR}/tmpfiles-swupdate.conf ${D}${nonarch_libdir}/tmpfiles.d/swupdate.conf
         install -d ${D}${sysconfdir}/udev/rules.d
-        install -m 0644 ${WORKDIR}/swupdate-usb.rules ${D}${sysconfdir}/udev/rules.d/
+        install -m 0644 ${UNPACKDIR}/swupdate-usb.rules ${D}${sysconfdir}/udev/rules.d/
     else
         # in case of systemd there is a service file, for sysv init we need to start it as well
-        install -m 0644 ${WORKDIR}/90-start-progress ${D}${libdir}/swupdate/conf.d/
+        install -m 0644 ${UNPACKDIR}/90-start-progress ${D}${libdir}/swupdate/conf.d/
     fi
 }