From mboxrd@z Thu Jan 1 00:00:00 1970 From: Vicente Olivert Riera Date: Wed, 9 Sep 2015 14:11:08 +0100 Subject: [Buildroot] [PATCHv5 1/4] pkg-generic: add step_pkg_size global instrumentation hook In-Reply-To: <1441228505-23235-2-git-send-email-thomas.petazzoni@free-electrons.com> References: <1441228505-23235-1-git-send-email-thomas.petazzoni@free-electrons.com> <1441228505-23235-2-git-send-email-thomas.petazzoni@free-electrons.com> Message-ID: <55F02FEC.7080703@imgtec.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: buildroot@busybox.net Dear Thomas Petazzoni, On 09/02/2015 10:15 PM, Thomas Petazzoni wrote: > This patch adds a global instrumentation hook that collects the list > of files installed in $(TARGET_DIR) by each package, and stores this > list into a file called $(BUILD_DIR)/packages-file-list.txt. It can > later be used to determine the size contribution of each package to > the target root filesystem. > > Note that in order to detect if a file installed by one package is > later overriden by another package, we calculate the md5 of installed > files and compare them at each installation of a new package. > > Collecting the list of files installed by each package is done > unconditionally, as tests have shown that the performance impact of > doing this is negligible. > > Signed-off-by: Thomas Petazzoni > Reviewed-by: Ryan Barnett > Tested-by: Ryan Barnett > --- > package/pkg-generic.mk | 32 ++++++++++++++++++++++++++++++++ > 1 file changed, 32 insertions(+) > > diff --git a/package/pkg-generic.mk b/package/pkg-generic.mk > index 6a7d97e..2c8fe29 100644 > --- a/package/pkg-generic.mk > +++ b/package/pkg-generic.mk > @@ -55,6 +55,38 @@ define step_time > endef > GLOBAL_INSTRUMENTATION_HOOKS += step_time > > +# Hooks to collect statistics about installed files > + > +# This hook will be called before the target installation of a > +# package. We store in a file named .br_filelist_before the list of > +# files currently installed in the target. Note that the MD5 is also > +# stored, in order to identify if the files are overwritten. > +define step_pkg_size_start > + (cd $(TARGET_DIR) ; find . -type f -print0 | xargs -0 md5sum) | sort > \ why only "-type f"? Packages can also install other type of files such as links, for instance. Don't you want to track them as well? > + $($(PKG)_DIR)/.br_filelist_before > +endef > + > +# This hook will be called after the target installation of a > +# package. We store in a file named .br_filelist_after the list of > +# files (and their MD5) currently installed in the target. We then do > +# a diff with the .br_filelist_before to compute the list of files > +# installed by this package. > +define step_pkg_size_end > + (cd $(TARGET_DIR); find . -type f -print0 | xargs -0 md5sum) | sort > \ Same here. Regards, Vincent. > + $($(PKG)_DIR)/.br_filelist_after > + comm -13 $($(PKG)_DIR)/.br_filelist_before $($(PKG)_DIR)/.br_filelist_after | \ > + while read hash file ; do \ > + echo "$(1),$${file}" >> $(BUILD_DIR)/packages-file-list.txt ; \ > + done > +endef > + > +define step_pkg_size > + $(if $(filter install-target,$(2)),\ > + $(if $(filter start,$(1)),$(call step_pkg_size_start,$(3))) \ > + $(if $(filter end,$(1)),$(call step_pkg_size_end,$(3)))) > +endef > +GLOBAL_INSTRUMENTATION_HOOKS += step_pkg_size > + > # User-supplied script > ifneq ($(BR2_INSTRUMENTATION_SCRIPTS),) > define step_user >