> -----Original Message-----
> From: openembedded-core@lists.openembedded.org 
> <openembedded-core@lists.openembedded.org> On Behalf Of Seungkyun Kim
> Sent: den 16 maj 2024 02:12
> To: openembedded-core@lists.openembedded.org
> Cc: seungkyun.kim <seungkyun....@lge.com>
> Subject: [OE-core] [PATCH v4] ipk/rootfs: run sanity test of multilib in 
> parallel
> 
> From: "seungkyun.kim" <seungkyun....@lge.com>
> 
> For multilib type packages, there is an additional temporary
> installation before the actual installation. It makes almost doubles
> the do_rootfs time if having many multilib type packages.
> To avoid this overhead, run sanity test in parallel.
> Installing package groups through opkg takes much more time than
> copying directory.
> 
> - Changes in V2:
>     Fix FileNotFoundError exception when copying rootfs
> - Changes in V3:
>     Removed unnecessary test call
> - Changes in V4:
>     Fix invalid argument when create Process
>     Keep the temporary rootfs directory after sanity check

The above list of changes related to the review process should be moved to 
after the --- line below as they should not be part of the actual commit 
message.

> 
> Signed-off-by: seungkyun.kim <seungkyun....@lge.com>
> ---
>  meta/lib/oe/package_manager/ipk/rootfs.py | 34 +++++++++++++++++++++--
>  1 file changed, 32 insertions(+), 2 deletions(-)
> 
> diff --git a/meta/lib/oe/package_manager/ipk/rootfs.py 
> b/meta/lib/oe/package_manager/ipk/rootfs.py
> index ba93eb62ea..a3842a6264 100644
> --- a/meta/lib/oe/package_manager/ipk/rootfs.py
> +++ b/meta/lib/oe/package_manager/ipk/rootfs.py
> @@ -6,7 +6,9 @@
> 
>  import re
>  import filecmp
> +import multiprocessing
>  import shutil
> +import stat
>  from oe.rootfs import Rootfs
>  from oe.manifest import Manifest
>  from oe.utils import execute_pre_post_process
> @@ -197,11 +199,34 @@ class PkgRootfs(DpkgOpkgRootfs):
>                          files[key] = item
> 
>      def _multilib_test_install(self, pkgs):
> +        def _copy_rootfs(src, dst):
> +            if os.path.islink(src):
> +                linkto = os.readlink(src)
> +                if os.path.isabs(linkto):
> +                    linkto = 
> os.path.normpath(os.path.join(os.path.dirname(dst),
> +                                              os.path.relpath(linkto, src)))
> +                os.symlink(linkto, dst)
> +            elif os.path.isfile(src):
> +                shutil.copy2(src, dst)
> +            elif stat.S_ISFIFO(os.stat(src).st_mode):
> +                os.mkfifo(dst)
> +            else:
> +                bb.warn("Skip unsupported file type: %s" % src)
> +
>          ml_temp = self.d.getVar("MULTILIB_TEMP_ROOTFS")
> +        rootfs_temp = os.path.join(ml_temp, "rootfs")
>          bb.utils.mkdirhier(ml_temp)
> +        bb.utils.remove(rootfs_temp, True)
> 
> -        dirs = [self.image_rootfs]
> +        if os.path.exists(self.image_rootfs):
> +            shutil.copytree(self.image_rootfs, rootfs_temp, 
> copy_function=_copy_rootfs)
> +        else:
> +            bb.utils.mkdirhier(rootfs_temp)
> +        dirs = [rootfs_temp]
> +        return 
> multiprocessing.Process(target=self._multilib_test_pkg_install,
> +                                       args=(pkgs, ml_temp, dirs,))
> 
> +    def _multilib_test_pkg_install(self, pkgs, ml_temp, dirs):
>          for variant in self.d.getVar("MULTILIB_VARIANTS").split():
>              ml_target_rootfs = os.path.join(ml_temp, variant)
> 
> @@ -300,15 +325,20 @@ class PkgRootfs(DpkgOpkgRootfs):
> 
>          for pkg_type in self.install_order:
>              if pkg_type in pkgs_to_install:
> +                sanity_test = None
>                  # For multilib, we perform a sanity test before final install
>                  # If sanity test fails, it will automatically do a bb.fatal()
>                  # and the installation will stop
>                  if pkg_type == Manifest.PKG_TYPE_MULTILIB:
> -                    self._multilib_test_install(pkgs_to_install[pkg_type])
> +                    sanity_test= 
> self._multilib_test_install(pkgs_to_install[pkg_type])

Add a space before the equal sign.

> +                    sanity_test.start()
> 
>                  self.pm.install(pkgs_to_install[pkg_type],
>                                  [False, True][pkg_type == 
> Manifest.PKG_TYPE_ATTEMPT_ONLY])
> 
> +                if sanity_test is not None:
> +                    sanity_test.join()
> +
>          if self.progress_reporter:
>              self.progress_reporter.next_stage()
> 
> --
> 2.34.1

//Peter

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#199485): 
https://lists.openembedded.org/g/openembedded-core/message/199485
Mute This Topic: https://lists.openembedded.org/mt/106125799/21656
Group Owner: openembedded-core+ow...@lists.openembedded.org
Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to