mirror of
https://git.yoctoproject.org/poky
synced 2026-02-25 10:59:41 +01:00
image.bbclass: Add a method for creating a companion debug filesystem
The companion debug filesystem contains only the package database and the complementary *-dbg packages for the main filesystem component. This is useful in a production environment to produce a companion filesystem capable of remote system debugging, without requiring corresponding debug symbols or source code on the device. (From OE-Core rev: 1a6ed48c65f922c66b005aa966d7ee4878ee95e3) Signed-off-by: Mark Hatle <mark.hatle@windriver.com> Signed-off-by: Robert Yang <liezhi.yang@windriver.com> If dbg pkgs have already been installed to the rootfs image, the installation to companion debug filesystem will fail, because both of image creation make use of the same pm database. In this situation, try to copy installed dbg files from rootfs image to companion debug filesystem. Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com> Signed-off-by: Robert Yang <liezhi.yang@windriver.com> Signed-off-by: Mark Hatle <mark.hatle@windriver.com> Acked-by: Christopher Larson <chris_larson@mentor.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
fa00c9a930
commit
7a7c6b021f
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user