All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yann E. MORIN <yann.morin.1998@free.fr>
To: buildroot@busybox.net
Subject: [Buildroot] [PATCH 12/15] package/pkg-generic.mk: Generate final rsync exclude file list
Date: Tue, 22 Jun 2021 23:15:10 +0200	[thread overview]
Message-ID: <20210622211510.GP44262@scaer> (raw)
In-Reply-To: <20210621141130.48654-13-herve.codina@bootlin.com>

Herv?, All,

On 2021-06-21 16:11 +0200, Herve Codina spake thusly:
> The final rsync performed at {host,target}-finalize steps
> need to be done by rsyncing files generated by each packages
> without looking at files generated by other packages the current
> package depends on. This is needed to avoid overwrites in final
> {HOST,TARGET}_DIR.
> 
> In order to prepare the final rsync, an exclusion list is generated.
> This list lists files that are not generated by the current package and
> so files that need to be excluded from the final rsync.
> 
> Note also that the files list was not based on .files-list.{before,after}.
> During .file-list.{before,after} built for host directory, staging
> sub-directory (ie <toolchain>/sysroot) is filtered out.
> The final rsync exclusion list needs to take into account the full
> {host,target} directory to avoid final overwrites.

Ideally, we would in fact redirect the package installation to an emoty
directory, so that we can actually find what it installs.

However, as has been discussed in the past, this is fraught with
unworkable issues. For example, some paths may be hard-coded at
configure time and/or build time, and thus the package would still
install in the original stagin we presented it with (for target/, this
is not an isue, because target/ is never looked at during configure or
build, only at install time). Or a package may try to modify an existing
file (bad, but still). Or a file just assumes that tdirectory structure
exists (bad, but eh...)

So, yes, the rsync exclusion list is a good workaround.

I see you have provided detailed comit logs, that is great. Still, for
such core stuff, I think they still miss the bigger picture, like I
explained above for example, and which should have been part of the
commit log to explain why we resort to an exclusion list rather than the
more obvious and simple empty-DESTDIR.

> Signed-off-by: Herve Codina <herve.codina@bootlin.com>
> ---
>  package/pkg-generic.mk | 28 ++++++++++++++++++++++++++++
>  1 file changed, 28 insertions(+)
> 
> diff --git a/package/pkg-generic.mk b/package/pkg-generic.mk
> index 918e2381af..546370af7a 100644
> --- a/package/pkg-generic.mk
> +++ b/package/pkg-generic.mk
> @@ -162,6 +162,30 @@ define pkg_size_after
>  	rm -f $($(PKG)_DIR)/.files-list$(2).after
>  endef
>  
> +# Functions to collect final rsync exclusion files
> +
> +# $(1): base directory to search in
> +# $(2): suffix of file (optional)
> +define pkg_final_rsync_before
> +	cd $(1); \
> +	LC_ALL=C find . \( -type f -o -type l \) -printf '%T@:%i:%#m:%y:%s,%p\n' \
> +		| LC_ALL=C sort > $($(PKG)_DIR)/.files-final-rsync$(2).before
> +endef
> +
> +# $(1): base directory to search in
> +# $(2): suffix of file (optional)
> +define pkg_final_rsync_after
> +	cd $(1); \
> +	LC_ALL=C find . \( -type f -o -type l \) -printf '%T@:%i:%#m:%y:%s,%p\n' \
> +		| LC_ALL=C sort > $($(PKG)_DIR)/.files-final-rsync$(2).after
> +	LC_ALL=C comm -2 \
> +		$($(PKG)_DIR)/.files-final-rsync$(2).before \
> +		$($(PKG)_DIR)/.files-final-rsync$(2).after \
> +		| sed -r -e 's/^[^,]+,./- /' \
> +		> $($(PKG)_DIR)/.files-final-rsync$(2).exclude_rsync
> +	rm -f $($(PKG)_DIR)/.files-final-rsync$(2).after

You forgot to remove .files-final-rsync$(2).before

> +endef
> +
>  define check_bin_arch
>  	support/scripts/check-bin-arch -p $($(PKG)_NAME) \
>  		-l $($(PKG)_DIR)/.files-list.txt \
> @@ -267,6 +291,8 @@ $(BUILD_DIR)/%/.stamp_configured:
>  	@$(call MESSAGE,"Configuring")
>  	$(Q)mkdir -p $(HOST_DIR) $(TARGET_DIR) $(STAGING_DIR) $(BINARIES_DIR)
>  	$(call prepare-per-package-directory,$($(PKG)_FINAL_DEPENDENCIES))
> +	@$(call pkg_final_rsync_before,$(TARGET_DIR))
> +	@$(call pkg_final_rsync_before,$(HOST_DIR),-host)

The more I look at this, the more I believe we should resurrect the idea
of a 'prepare' step that goes in-between 'patch' and 'configure'...

Regards,
Yann E. MORIN.

>  	@$(call pkg_size_before,$(TARGET_DIR))
>  	@$(call pkg_size_before,$(STAGING_DIR),-staging)
>  	@$(call pkg_size_before,$(HOST_DIR),-host)
> @@ -404,6 +430,8 @@ $(BUILD_DIR)/%/.stamp_installed:
>  	@$(call pkg_size_after,$(STAGING_DIR),-staging)
>  	@$(call pkg_size_after,$(HOST_DIR),-host)
>  	@$(call check_bin_arch)
> +	@$(call pkg_final_rsync_after,$(TARGET_DIR))
> +	@$(call pkg_final_rsync_after,$(HOST_DIR),-host)
>  	@$(call pkg_detect_overwrite_after,$(TARGET_DIR))
>  	@$(call pkg_detect_overwrite_after,$(HOST_DIR),-host)
>  	$(Q)touch $@
> -- 
> 2.31.1
> 
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 561 099 427 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

  reply	other threads:[~2021-06-22 21:15 UTC|newest]

Thread overview: 83+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-21 14:11 [Buildroot] [PATCH 00/15] Overwritten file detection and fixes, one more step to TLP build Herve Codina
2021-06-21 14:11 ` [Buildroot] [PATCH 01/15] package/pkg-generic.mk: detect files overwritten in TARGET_DIR and HOST_DIR Herve Codina
2021-06-21 21:31   ` Yann E. MORIN
2021-06-22  7:40     ` Herve Codina
2021-06-22  9:30       ` Thomas Petazzoni
2021-06-22  9:57         ` Nicolas Cavallari
2021-06-22 10:24           ` Yann E. MORIN
2021-06-24 14:09             ` Herve Codina
2021-06-24 16:18               ` Yann E. MORIN
2021-06-21 14:11 ` [Buildroot] [PATCH 02/15] package/e2fsprogs: fix fsck overwrite in HOST_DIR Herve Codina
2021-06-21 20:52   ` Thomas Petazzoni
2021-06-22 16:26     ` Herve Codina
2021-06-22 19:40   ` Yann E. MORIN
2021-06-24 14:13     ` Herve Codina
2021-06-21 14:11 ` [Buildroot] [PATCH 03/15] package/pkg-generic.mk: Remove Info documents dir entry Herve Codina
2021-06-21 20:51   ` Thomas Petazzoni
2021-06-22  8:43     ` Herve Codina
2021-06-22  9:34       ` Thomas Petazzoni
2021-06-22 20:18         ` Yann E. MORIN
2021-06-24 15:03           ` Herve Codina
2021-06-21 14:11 ` [Buildroot] [PATCH 04/15] package/pkg-generic.mk: Fix .la files overwrite detection Herve Codina
2021-06-21 20:54   ` Thomas Petazzoni
2021-06-22 18:01     ` Herve Codina
2021-06-21 21:42   ` Yann E. MORIN
2021-06-22  9:31     ` Herve Codina
2021-06-22  9:56       ` Yann E. MORIN
2021-06-22 10:12         ` Thomas Petazzoni
2021-06-22 10:30           ` Yann E. MORIN
2021-06-24 15:44             ` Herve Codina
2021-06-24 16:22               ` Yann E. MORIN
2021-06-21 14:11 ` [Buildroot] [PATCH 05/15] package/pkg-generic.mk: Perform .la files fixup in per-package HOST_DIR Herve Codina
2021-06-21 20:48   ` Thomas Petazzoni
2021-06-22  9:38     ` Herve Codina
2021-06-22 10:12   ` Yann E. MORIN
2021-06-24 16:20     ` Herve Codina
2021-06-21 14:11 ` [Buildroot] [PATCH 06/15] package/pkg-generic.mk: Introduce <PKG>_PER_PACKAGE_TWEAK_HOOKS Herve Codina
2021-06-21 15:10   ` Thomas Petazzoni
2021-06-22 20:39   ` Yann E. MORIN
2021-06-23 12:40     ` Thomas Petazzoni
2021-06-25  7:15       ` Herve Codina
2021-06-25  7:21     ` Herve Codina
2021-07-02  7:18       ` Herve Codina
2021-07-03  6:21         ` Yann E. MORIN
2021-06-21 14:11 ` [Buildroot] [PATCH 07/15] package/apr-util: Use <PKG>_PER_PACKAGE_TWEAK_HOOKS Herve Codina
2021-06-21 20:56   ` Thomas Petazzoni
2021-06-22  9:47     ` Herve Codina
2021-06-22 20:42       ` Yann E. MORIN
2021-06-25  7:30         ` Herve Codina
2021-06-21 14:11 ` [Buildroot] [PATCH 08/15] package/apache: Move APACHE_FIXUP_APR_LIBTOOL to <PKG>_PER_PACKAGE_TWEAK_HOOKS Herve Codina
2021-06-22 20:43   ` Yann E. MORIN
2021-06-21 14:11 ` [Buildroot] [PATCH 09/15] package/pkg-python: Remove _sysconfigdata*.pyc files when _sysconfigdata*.py are changed Herve Codina
2021-06-21 15:12   ` Thomas Petazzoni
2021-06-22 17:52     ` Herve Codina
2021-06-22 20:50       ` Yann E. MORIN
2021-06-25  8:04         ` Herve Codina
2021-06-21 14:11 ` [Buildroot] [PATCH 10/15] package/pkg-generic.mk: Move python fixup to generic package infrastructure Herve Codina
2021-06-22 21:01   ` Yann E. MORIN
2021-06-25  8:22     ` Herve Codina
2021-06-25  9:27       ` Yann E. MORIN
2021-06-21 14:11 ` [Buildroot] [PATCH 11/15] package/owfs: Remove Python sysconfigdata fixup Herve Codina
2021-06-22 21:02   ` Yann E. MORIN
2021-06-25  8:25     ` Herve Codina
2021-06-21 14:11 ` [Buildroot] [PATCH 12/15] package/pkg-generic.mk: Generate final rsync exclude file list Herve Codina
2021-06-22 21:15   ` Yann E. MORIN [this message]
2021-06-25  9:05     ` Herve Codina
2021-06-25  9:32       ` Yann E. MORIN
2021-06-21 14:11 ` [Buildroot] [PATCH 13/15] Makefile: Rsync global {TARGET, HOST}_DIR using exclusion " Herve Codina
2021-06-24 20:20   ` Yann E. MORIN
2021-06-24 20:34     ` Yann E. MORIN
2021-06-25 11:59       ` Herve Codina
2021-06-25 12:50         ` Yann E. MORIN
2021-06-25 12:00     ` Herve Codina
2021-06-21 14:11 ` [Buildroot] [PATCH 14/15] Makefile: Breaks hardlinks in global {TARGET, HOST}_DIR on per-package build Herve Codina
2021-06-24 20:22   ` Yann E. MORIN
2021-06-21 14:11 ` [Buildroot] [PATCH 15/15] package/pkg-generic.mk: Fix per-package <pkg>-{reconfigure, rebuild, reinstall} Herve Codina
2021-06-24 20:44   ` Yann E. MORIN
2021-06-25 14:00     ` Herve Codina
2021-06-21 20:42 ` [Buildroot] [PATCH 00/15] Overwritten file detection and fixes, one more step to TLP build Arnout Vandecappelle
2021-07-06 14:15   ` Herve Codina
2021-06-24 20:53 ` Yann E. MORIN
2021-06-25  9:08 ` Andreas Naumann
2021-06-25 13:13   ` Herve Codina
2021-06-25 14:55     ` Andreas Naumann

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210622211510.GP44262@scaer \
    --to=yann.morin.1998@free.fr \
    --cc=buildroot@busybox.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.