[2/3] image: download deb-src packages after imager creation

Message ID 20250305142513.1841415-2-srinuvasan.a@siemens.com
State Superseded, archived
Headers show
Series [1/3] mmdebstrap: add "skip=cleanup/reproducible" option to mmdebstrap | expand

Commit Message

srinuvasan.a March 5, 2025, 2:25 p.m. UTC
From: srinuvasan <srinuvasan.a@siemens.com>

With the present implementation, deb-src packages are missing for imager related
deb packages (packages listed in IMAGER_INSTALL).
Copy the /var/log/dpkg.log file from the sbuild environment to outside
With that, use the list to download deb-src packages for IMAGER_INSTALL
related deb packages.

Presently, cache_deb_src function running as part of ROOTFS_POSTPROCESS_COMMAND,
this will not be helpful to get the imager related deb-src packages, hence
make cache_deb_src as a separate task and running
always after do_image to get the imager deps related deb-src packages.

Signed-off-by: srinuvasan <srinuvasan.a@siemens.com>
---
 meta/classes/image-tools-extension.bbclass | 8 +++++++-
 meta/classes/image.bbclass                 | 8 +++++++-
 meta/classes/rootfs.bbclass                | 3 ++-
 3 files changed, 16 insertions(+), 3 deletions(-)

Comments

Uladzimir Bely March 6, 2025, 6:05 a.m. UTC | #1
On Wed, 2025-03-05 at 19:55 +0530, srinuvasan.a@siemens.com wrote:
> From: srinuvasan <srinuvasan.a@siemens.com>
> 
> With the present implementation, deb-src packages are missing for
> imager related
> deb packages (packages listed in IMAGER_INSTALL).
> Copy the /var/log/dpkg.log file from the sbuild environment to
> outside
> With that, use the list to download deb-src packages for
> IMAGER_INSTALL
> related deb packages.
> 
> Presently, cache_deb_src function running as part of
> ROOTFS_POSTPROCESS_COMMAND,
> this will not be helpful to get the imager related deb-src packages,
> hence
> make cache_deb_src as a separate task and running
> always after do_image to get the imager deps related deb-src
> packages.
> 
> Signed-off-by: srinuvasan <srinuvasan.a@siemens.com>
> ---
>  meta/classes/image-tools-extension.bbclass | 8 +++++++-
>  meta/classes/image.bbclass                 | 8 +++++++-
>  meta/classes/rootfs.bbclass                | 3 ++-
>  3 files changed, 16 insertions(+), 3 deletions(-)
> 
> diff --git a/meta/classes/image-tools-extension.bbclass
> b/meta/classes/image-tools-extension.bbclass
> index e8ace8f5..156dfcb3 100644
> --- a/meta/classes/image-tools-extension.bbclass
> +++ b/meta/classes/image-tools-extension.bbclass
> @@ -7,6 +7,9 @@
>  
>  inherit sbuild
>  
> +PP = "/home/builder/${PN}-${MACHINE}"
> +ext_root="${PP}/rootfs"
> +
>  IMAGER_INSTALL ??= ""
>  IMAGER_BUILD_DEPS ??= ""
>  DEPENDS += "${IMAGER_BUILD_DEPS}"
> @@ -59,9 +62,11 @@ EOAPT
>  
>          deb_dl_dir_export ${schroot_dir} ${distro}
>          schroot -r -c ${session_id} -d / -u root -- sh -c " \
> +            rm -f /var/log/dpkg.log
>              apt-get -o Debug::pkgProblemResolver=yes --no-install-
> recommends -y \
>                  --allow-unauthenticated --allow-downgrades install \
> -                ${local_install}"
> +                ${local_install}
> +            cp /var/log/dpkg.log ${ext_root}/dpkg_partial.log"

This fails on any build with FSTYPES including (at least) "ext4":

```
[stdlog] 2025-03-05 19:12:45,460 avocado.app ERROR| ERROR: Logfile of
failure stored in:
/workspace/build/isar_ub_devel_fast/210/build/tmp/work/debian-bullseye-
armhf/isar-image-base-qemuarm/1.0-r0/temp/log.do_image_ext4.3684960
...
[stdlog] 2025-03-05 19:12:54,914 avocado.test INFO | | cp: cannot stat
'/var/log/dpkg.log': No such file or directory
```

Can be easy reproduced with kas menu, if "ext4" is added to additional
image fstypes.

>      fi
>  
>      schroot -r -c ${session_id} "$@"
> @@ -70,4 +75,5 @@ EOAPT
>  
>      remove_mounts
>      schroot_delete_configs
> +    sbuild_dpkg_log_export "${WORKDIR}/rootfs/dpkg_partial.log"
>  }
> diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass
> index 56eca202..66b4d313 100644
> --- a/meta/classes/image.bbclass
> +++ b/meta/classes/image.bbclass
> @@ -72,7 +72,13 @@ ROOTFS_MANIFEST_DEPLOY_DIR ?=
> "${DEPLOY_DIR_IMAGE}"
>  ROOTFS_DPKGSTATUS_DEPLOY_DIR ?= "${DEPLOY_DIR_IMAGE}"
>  ROOTFS_PACKAGE_SUFFIX ?= "${PN}-${DISTRO}-${MACHINE}"
>  
> -ROOTFS_POSTPROCESS_COMMAND:prepend =
> "${@bb.utils.contains('BASE_REPO_FEATURES', 'cache-deb-src',
> 'cache_deb_src', '', d)} "
> +CACHE_DEB_SRC = "${@bb.utils.contains('BASE_REPO_FEATURES', 'cache-
> deb-src', '1', '0', d)}"
> +
> +python () {
> +    if bb.utils.to_boolean(d.getVar('CACHE_DEB_SRC')):
> +        bb.build.addtask('do_cache_deb_src', 'do_deploy',
> 'do_image', d)
> +}
> +
>  
>  inherit rootfs
>  inherit sdk
> diff --git a/meta/classes/rootfs.bbclass
> b/meta/classes/rootfs.bbclass
> index 205da640..b9d360e7 100644
> --- a/meta/classes/rootfs.bbclass
> +++ b/meta/classes/rootfs.bbclass
> @@ -272,7 +272,8 @@ python do_rootfs_install() {
>  }
>  addtask rootfs_install before do_rootfs_postprocess after do_unpack
>  
> -cache_deb_src() {
> +do_cache_deb_src[network] = "${TASK_USE_SUDO}"
> +do_cache_deb_src() {
>      if [ -e "${ROOTFSDIR}"/etc/resolv.conf ] ||
>         [ -h "${ROOTFSDIR}"/etc/resolv.conf ]; then
>          sudo mv "${ROOTFSDIR}"/etc/resolv.conf
> "${ROOTFSDIR}"/etc/resolv.conf.isar
srinuvasan.a March 6, 2025, 6:10 a.m. UTC | #2
Thanks Uladzimir for the findings, will try to reproduce and fix the issue.

Thanks,
Srinu

-----Original Message-----
From: Uladzimir Bely <ubely@ilbers.de> 
Sent: 06 March 2025 11:35
To: Arjunan, Srinu (FT FDS CES LX PBU 2) <srinuvasan.a@siemens.com>; isar-users@googlegroups.com
Subject: Re: [PATCH 2/3] image: download deb-src packages after imager creation

On Wed, 2025-03-05 at 19:55 +0530, srinuvasan.a@siemens.com wrote:
> From: srinuvasan <srinuvasan.a@siemens.com>
> 
> With the present implementation, deb-src packages are missing for 
> imager related deb packages (packages listed in IMAGER_INSTALL).
> Copy the /var/log/dpkg.log file from the sbuild environment to outside 
> With that, use the list to download deb-src packages for 
> IMAGER_INSTALL related deb packages.
> 
> Presently, cache_deb_src function running as part of 
> ROOTFS_POSTPROCESS_COMMAND, this will not be helpful to get the imager 
> related deb-src packages, hence make cache_deb_src as a separate task 
> and running always after do_image to get the imager deps related 
> deb-src packages.
> 
> Signed-off-by: srinuvasan <srinuvasan.a@siemens.com>
> ---
>  meta/classes/image-tools-extension.bbclass | 8 +++++++-
>  meta/classes/image.bbclass                 | 8 +++++++-
>  meta/classes/rootfs.bbclass                | 3 ++-
>  3 files changed, 16 insertions(+), 3 deletions(-)
> 
> diff --git a/meta/classes/image-tools-extension.bbclass
> b/meta/classes/image-tools-extension.bbclass
> index e8ace8f5..156dfcb3 100644
> --- a/meta/classes/image-tools-extension.bbclass
> +++ b/meta/classes/image-tools-extension.bbclass
> @@ -7,6 +7,9 @@
>  
>  inherit sbuild
>  
> +PP = "/home/builder/${PN}-${MACHINE}"
> +ext_root="${PP}/rootfs"
> +
>  IMAGER_INSTALL ??= ""
>  IMAGER_BUILD_DEPS ??= ""
>  DEPENDS += "${IMAGER_BUILD_DEPS}"
> @@ -59,9 +62,11 @@ EOAPT
>  
>          deb_dl_dir_export ${schroot_dir} ${distro}
>          schroot -r -c ${session_id} -d / -u root -- sh -c " \
> +            rm -f /var/log/dpkg.log
>              apt-get -o Debug::pkgProblemResolver=yes --no-install- 
> recommends -y \
>                  --allow-unauthenticated --allow-downgrades install \
> -                ${local_install}"
> +                ${local_install}
> +            cp /var/log/dpkg.log ${ext_root}/dpkg_partial.log"

This fails on any build with FSTYPES including (at least) "ext4":

```
[stdlog] 2025-03-05 19:12:45,460 avocado.app ERROR| ERROR: Logfile of failure stored in:
/workspace/build/isar_ub_devel_fast/210/build/tmp/work/debian-bullseye-
armhf/isar-image-base-qemuarm/1.0-r0/temp/log.do_image_ext4.3684960
...
[stdlog] 2025-03-05 19:12:54,914 avocado.test INFO | | cp: cannot stat
'/var/log/dpkg.log': No such file or directory ```

Can be easy reproduced with kas menu, if "ext4" is added to additional image fstypes.

>      fi
>  
>      schroot -r -c ${session_id} "$@"
> @@ -70,4 +75,5 @@ EOAPT
>  
>      remove_mounts
>      schroot_delete_configs
> +    sbuild_dpkg_log_export "${WORKDIR}/rootfs/dpkg_partial.log"
>  }
> diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass 
> index 56eca202..66b4d313 100644
> --- a/meta/classes/image.bbclass
> +++ b/meta/classes/image.bbclass
> @@ -72,7 +72,13 @@ ROOTFS_MANIFEST_DEPLOY_DIR ?= "${DEPLOY_DIR_IMAGE}"
>  ROOTFS_DPKGSTATUS_DEPLOY_DIR ?= "${DEPLOY_DIR_IMAGE}"
>  ROOTFS_PACKAGE_SUFFIX ?= "${PN}-${DISTRO}-${MACHINE}"
>  
> -ROOTFS_POSTPROCESS_COMMAND:prepend =
> "${@bb.utils.contains('BASE_REPO_FEATURES', 'cache-deb-src', 
> 'cache_deb_src', '', d)} "
> +CACHE_DEB_SRC = "${@bb.utils.contains('BASE_REPO_FEATURES', 'cache-
> deb-src', '1', '0', d)}"
> +
> +python () {
> +    if bb.utils.to_boolean(d.getVar('CACHE_DEB_SRC')):
> +        bb.build.addtask('do_cache_deb_src', 'do_deploy',
> 'do_image', d)
> +}
> +
>  
>  inherit rootfs
>  inherit sdk
> diff --git a/meta/classes/rootfs.bbclass b/meta/classes/rootfs.bbclass 
> index 205da640..b9d360e7 100644
> --- a/meta/classes/rootfs.bbclass
> +++ b/meta/classes/rootfs.bbclass
> @@ -272,7 +272,8 @@ python do_rootfs_install() {
>  }
>  addtask rootfs_install before do_rootfs_postprocess after do_unpack
>  
> -cache_deb_src() {
> +do_cache_deb_src[network] = "${TASK_USE_SUDO}"
> +do_cache_deb_src() {
>      if [ -e "${ROOTFSDIR}"/etc/resolv.conf ] ||
>         [ -h "${ROOTFSDIR}"/etc/resolv.conf ]; then
>          sudo mv "${ROOTFSDIR}"/etc/resolv.conf 
> "${ROOTFSDIR}"/etc/resolv.conf.isar

--
Best regards,
Uladzimir.

Patch

diff --git a/meta/classes/image-tools-extension.bbclass b/meta/classes/image-tools-extension.bbclass
index e8ace8f5..156dfcb3 100644
--- a/meta/classes/image-tools-extension.bbclass
+++ b/meta/classes/image-tools-extension.bbclass
@@ -7,6 +7,9 @@ 
 
 inherit sbuild
 
+PP = "/home/builder/${PN}-${MACHINE}"
+ext_root="${PP}/rootfs"
+
 IMAGER_INSTALL ??= ""
 IMAGER_BUILD_DEPS ??= ""
 DEPENDS += "${IMAGER_BUILD_DEPS}"
@@ -59,9 +62,11 @@  EOAPT
 
         deb_dl_dir_export ${schroot_dir} ${distro}
         schroot -r -c ${session_id} -d / -u root -- sh -c " \
+            rm -f /var/log/dpkg.log
             apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends -y \
                 --allow-unauthenticated --allow-downgrades install \
-                ${local_install}"
+                ${local_install}
+            cp /var/log/dpkg.log ${ext_root}/dpkg_partial.log"
     fi
 
     schroot -r -c ${session_id} "$@"
@@ -70,4 +75,5 @@  EOAPT
 
     remove_mounts
     schroot_delete_configs
+    sbuild_dpkg_log_export "${WORKDIR}/rootfs/dpkg_partial.log"
 }
diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass
index 56eca202..66b4d313 100644
--- a/meta/classes/image.bbclass
+++ b/meta/classes/image.bbclass
@@ -72,7 +72,13 @@  ROOTFS_MANIFEST_DEPLOY_DIR ?= "${DEPLOY_DIR_IMAGE}"
 ROOTFS_DPKGSTATUS_DEPLOY_DIR ?= "${DEPLOY_DIR_IMAGE}"
 ROOTFS_PACKAGE_SUFFIX ?= "${PN}-${DISTRO}-${MACHINE}"
 
-ROOTFS_POSTPROCESS_COMMAND:prepend = "${@bb.utils.contains('BASE_REPO_FEATURES', 'cache-deb-src', 'cache_deb_src', '', d)} "
+CACHE_DEB_SRC = "${@bb.utils.contains('BASE_REPO_FEATURES', 'cache-deb-src', '1', '0', d)}"
+
+python () {
+    if bb.utils.to_boolean(d.getVar('CACHE_DEB_SRC')):
+        bb.build.addtask('do_cache_deb_src', 'do_deploy', 'do_image', d)
+}
+
 
 inherit rootfs
 inherit sdk
diff --git a/meta/classes/rootfs.bbclass b/meta/classes/rootfs.bbclass
index 205da640..b9d360e7 100644
--- a/meta/classes/rootfs.bbclass
+++ b/meta/classes/rootfs.bbclass
@@ -272,7 +272,8 @@  python do_rootfs_install() {
 }
 addtask rootfs_install before do_rootfs_postprocess after do_unpack
 
-cache_deb_src() {
+do_cache_deb_src[network] = "${TASK_USE_SUDO}"
+do_cache_deb_src() {
     if [ -e "${ROOTFSDIR}"/etc/resolv.conf ] ||
        [ -h "${ROOTFSDIR}"/etc/resolv.conf ]; then
         sudo mv "${ROOTFSDIR}"/etc/resolv.conf "${ROOTFSDIR}"/etc/resolv.conf.isar