diff options
Diffstat (limited to 'meta')
| -rw-r--r-- | meta/classes/image.bbclass | 5 | ||||
| -rw-r--r-- | meta/lib/oe/rootfs.py | 57 | 
2 files changed, 61 insertions, 1 deletions
| diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass index 01f8b3fc19..58b4add8fa 100644 --- a/meta/classes/image.bbclass +++ b/meta/classes/image.bbclass @@ -24,6 +24,9 @@ IMAGE_FEATURES ?= ""  IMAGE_FEATURES[type] = "list"  IMAGE_FEATURES[validitems] += "debug-tweaks read-only-rootfs empty-root-password allow-empty-password post-install-logging" +# Generate companion debugfs? +IMAGE_GEN_DEBUGFS ?= "0" +  # rootfs bootstrap install  ROOTFS_BOOTSTRAP_INSTALL = "${@bb.utils.contains("IMAGE_FEATURES", "package-management", "", "${ROOTFS_PKGMANAGE_BOOTSTRAP}",d)}" @@ -108,7 +111,7 @@ def rootfs_variables(d):                   'SDK_OUTPUT','SDKPATHNATIVE','SDKTARGETSYSROOT','SDK_DIR','SDK_VENDOR','SDKIMAGE_INSTALL_COMPLEMENTARY','SDK_PACKAGE_ARCHS','SDK_OUTPUT','SDKTARGETSYSROOT','MULTILIBRE_ALLOW_REP',                   'MULTILIB_TEMP_ROOTFS','MULTILIB_VARIANTS','MULTILIBS','ALL_MULTILIB_PACKAGE_ARCHS','MULTILIB_GLOBAL_VARIANTS','BAD_RECOMMENDATIONS','NO_RECOMMENDATIONS','PACKAGE_ARCHS',                   'PACKAGE_CLASSES','TARGET_VENDOR','TARGET_VENDOR','TARGET_ARCH','TARGET_OS','OVERRIDES','BBEXTENDVARIANT','FEED_DEPLOYDIR_BASE_URI','INTERCEPT_DIR','USE_DEVFS', -                 'COMPRESSIONTYPES'] +                 'COMPRESSIONTYPES', 'IMAGE_GEN_DEBUGFS']      variables.extend(command_variables(d))      variables.extend(variable_depends(d))      return " ".join(variables) diff --git a/meta/lib/oe/rootfs.py b/meta/lib/oe/rootfs.py index a9a6c85a2c..5f1f7b3e5d 100644 --- a/meta/lib/oe/rootfs.py +++ b/meta/lib/oe/rootfs.py @@ -95,6 +95,57 @@ class Rootfs(object):      def _cleanup(self):          pass +    def _setup_dbg_rootfs(self, dirs): +        gen_debugfs = self.d.getVar('IMAGE_GEN_DEBUGFS', True) or '0' +        if gen_debugfs != '1': +           return + +        bb.note("  Renaming the original rootfs...") +        try: +            shutil.rmtree(self.image_rootfs + '-orig') +        except: +            pass +        os.rename(self.image_rootfs, self.image_rootfs + '-orig') + +        bb.note("  Creating debug rootfs...") +        bb.utils.mkdirhier(self.image_rootfs) + +        bb.note("  Copying back package database...") +        for dir in dirs: +            bb.utils.mkdirhier(self.image_rootfs + os.path.dirname(dir)) +            shutil.copytree(self.image_rootfs + '-orig' + dir, self.image_rootfs + dir) + +        cpath = oe.cachedpath.CachedPath() +        # Copy files located in /usr/lib/debug or /usr/src/debug +        for dir in ["/usr/lib/debug", "/usr/src/debug"]: +            src = self.image_rootfs + '-orig' + dir +            if cpath.exists(src): +                dst = self.image_rootfs + dir +                bb.utils.mkdirhier(os.path.dirname(dst)) +                shutil.copytree(src, dst) + +        # Copy files with suffix '.debug' or located in '.debug' dir. +        for root, dirs, files in cpath.walk(self.image_rootfs + '-orig'): +            relative_dir = root[len(self.image_rootfs + '-orig'):] +            for f in files: +                if f.endswith('.debug') or '/.debug' in relative_dir: +                    bb.utils.mkdirhier(self.image_rootfs + relative_dir) +                    shutil.copy(os.path.join(root, f), +                                self.image_rootfs + relative_dir) + +        bb.note("  Install complementary '*-dbg' packages...") +        self.pm.install_complementary('*-dbg') + +        bb.note("  Rename debug rootfs...") +        try: +            shutil.rmtree(self.image_rootfs + '-dbg') +        except: +            pass +        os.rename(self.image_rootfs, self.image_rootfs + '-dbg') + +        bb.note("  Restoreing original rootfs...") +        os.rename(self.image_rootfs + '-orig', self.image_rootfs) +      def _exec_shell_cmd(self, cmd):          fakerootcmd = self.d.getVar('FAKEROOT', True)          if fakerootcmd is not None: @@ -369,6 +420,8 @@ class RpmRootfs(Rootfs):          self.pm.install_complementary() +        self._setup_dbg_rootfs(['/etc/rpm', '/var/lib/rpm', '/var/lib/smart']) +          if self.inc_rpm_image_gen == "1":              self.pm.backup_packaging_data() @@ -475,6 +528,8 @@ class DpkgRootfs(Rootfs):          self.pm.install_complementary() +        self._setup_dbg_rootfs(['/var/lib/dpkg']) +          self.pm.fix_broken_dependencies()          self.pm.mark_packages("installed") @@ -743,6 +798,8 @@ class OpkgRootfs(Rootfs):          self.pm.install_complementary() +        self._setup_dbg_rootfs(['/var/lib/opkg']) +          execute_pre_post_process(self.d, opkg_post_process_cmds)          execute_pre_post_process(self.d, rootfs_post_install_cmds) | 
