sbuild: Declare using random build path

Message ID 20250318155058.263431-1-amikan@ilbers.de
State Accepted, archived
Headers show
Series sbuild: Declare using random build path | expand

Commit Message

Anton Mikanovich March 18, 2025, 3:50 p.m. UTC
After 0.87.1 version of sbuild BUILD_PATH value is no more random by
default. It is better for reproducibility but breaks concurrent builds
because this path got removed during cleanup stage.
To keep sbuild choose a random build location (just like it is in older
package versions) set the empty string to build-path option.

More details can be found in sbuild commit:
14cc3a41f7eed7d9bd62e3c443d077b0f345cb24

This fixes Isar building on Trixie hosts.

Signed-off-by: Anton Mikanovich <amikan@ilbers.de>
---
 meta/classes/dpkg.bbclass | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Jan Kiszka March 18, 2025, 9:20 p.m. UTC | #1
On 18.03.25 16:50, Anton Mikanovich wrote:
> After 0.87.1 version of sbuild BUILD_PATH value is no more random by
> default. It is better for reproducibility but breaks concurrent builds
> because this path got removed during cleanup stage.

Can you elaborate?

> To keep sbuild choose a random build location (just like it is in older
> package versions) set the empty string to build-path option.

Err, no. We clearly need reproducibility as well.

Jan

> 
> More details can be found in sbuild commit:
> 14cc3a41f7eed7d9bd62e3c443d077b0f345cb24
> 
> This fixes Isar building on Trixie hosts.
> 
> Signed-off-by: Anton Mikanovich <amikan@ilbers.de>
> ---
>  meta/classes/dpkg.bbclass | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/meta/classes/dpkg.bbclass b/meta/classes/dpkg.bbclass
> index 64404103..0e5a495d 100644
> --- a/meta/classes/dpkg.bbclass
> +++ b/meta/classes/dpkg.bbclass
> @@ -124,7 +124,7 @@ dpkg_runbuild() {
>          --finished-build-commands="rm -f ${deb_dir}/sbuild-build-depends-main-dummy_*.deb" \
>          --finished-build-commands="find ${deb_dir} -maxdepth 1 -type f -name '*.deb' -print -exec cp ${CP_FLAGS} -t ${ext_deb_dir}/ {} +" \
>          --finished-build-commands="cp /var/log/dpkg.log ${ext_root}/dpkg_partial.log" \
> -        --build-dir=${WORKDIR} --dist="${DEBDISTRONAME}" ${DSC_FILE}
> +        --build-path="" --build-dir=${WORKDIR} --dist="${DEBDISTRONAME}" ${DSC_FILE}
>  
>      sbuild_dpkg_log_export "${WORKDIR}/rootfs/dpkg_partial.log"
>      deb_dl_dir_export "${WORKDIR}/rootfs" "${distro}"
Felix Moessbauer March 19, 2025, 6:59 a.m. UTC | #2
On Tue, 2025-03-18 at 22:20 +0100, 'Jan Kiszka' via isar-users wrote:
> On 18.03.25 16:50, Anton Mikanovich wrote:
> > After 0.87.1 version of sbuild BUILD_PATH value is no more random
> > by
> > default. It is better for reproducibility but breaks concurrent
> > builds
> > because this path got removed during cleanup stage.
> 
> Can you elaborate?
> 
> > To keep sbuild choose a random build location (just like it is in
> > older
> > package versions) set the empty string to build-path option.
> 
> Err, no. We clearly need reproducibility as well.

According to the "reproducible" definition of Debian, this change
should not matter, as long as we apply the -fdebug-prefix-map switch on
compilation (which we do).

If this change really does not break reproducibility needs to be
verified, though.

Felix

> 
> Jan
> 
> > 
> > More details can be found in sbuild commit:
> > 14cc3a41f7eed7d9bd62e3c443d077b0f345cb24
> > 
> > This fixes Isar building on Trixie hosts.
> > 
> > Signed-off-by: Anton Mikanovich <amikan@ilbers.de>
> > ---
> >  meta/classes/dpkg.bbclass | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/meta/classes/dpkg.bbclass b/meta/classes/dpkg.bbclass
> > index 64404103..0e5a495d 100644
> > --- a/meta/classes/dpkg.bbclass
> > +++ b/meta/classes/dpkg.bbclass
> > @@ -124,7 +124,7 @@ dpkg_runbuild() {
> >          --finished-build-commands="rm -f ${deb_dir}/sbuild-build-
> > depends-main-dummy_*.deb" \
> >          --finished-build-commands="find ${deb_dir} -maxdepth 1 -
> > type f -name '*.deb' -print -exec cp ${CP_FLAGS} -t ${ext_deb_dir}/
> > {} +" \
> >          --finished-build-commands="cp /var/log/dpkg.log
> > ${ext_root}/dpkg_partial.log" \
> > -        --build-dir=${WORKDIR} --dist="${DEBDISTRONAME}"
> > ${DSC_FILE}
> > +        --build-path="" --build-dir=${WORKDIR} --
> > dist="${DEBDISTRONAME}" ${DSC_FILE}
> >  
> >      sbuild_dpkg_log_export "${WORKDIR}/rootfs/dpkg_partial.log"
> >      deb_dl_dir_export "${WORKDIR}/rootfs" "${distro}"
> 
> -- 
> Siemens AG, Foundational Technologies
> Linux Expert Center
Anton Mikanovich March 19, 2025, 7:32 a.m. UTC | #3
18/03/2025 23:20, Jan Kiszka wrote:
> On 18.03.25 16:50, Anton Mikanovich wrote:
>> After 0.87.1 version of sbuild BUILD_PATH value is no more random by
>> default. It is better for reproducibility but breaks concurrent builds
>> because this path got removed during cleanup stage.
> Can you elaborate?
>
In this case new default BUILD_PATH=/build/reproducible-path got shared 
between
multiple sbuild instances for all the packages. When the first package 
finish
the built it removes /build/reproducible-path, which results in other sbuild
processes fails with errors like:

| E: Failed to change to directory �/build/reproducible-path�: No such 
file or directory

So we just won't use static BUILD_PATH on trixie for now.
>> To keep sbuild choose a random build location (just like it is in older
>> package versions) set the empty string to build-path option.
> Err, no. We clearly need reproducibility as well.

As Felix already mentioned, this change do not brake anything, but just 
do not
apply additional reproducibility improvement on trixie hosts.
Actually there will be no any changes in paths on bookworm and lower, but
trixie will behave in the same way as bookworm currently does.
Uladzimir Bely March 25, 2025, 4:57 p.m. UTC | #4
On Tue, 2025-03-18 at 17:50 +0200, Anton Mikanovich wrote:
> After 0.87.1 version of sbuild BUILD_PATH value is no more random by
> default. It is better for reproducibility but breaks concurrent
> builds
> because this path got removed during cleanup stage.
> To keep sbuild choose a random build location (just like it is in
> older
> package versions) set the empty string to build-path option.
> 
> More details can be found in sbuild commit:
> 14cc3a41f7eed7d9bd62e3c443d077b0f345cb24
> 
> This fixes Isar building on Trixie hosts.
> 
> Signed-off-by: Anton Mikanovich <amikan@ilbers.de>
> ---
>  meta/classes/dpkg.bbclass | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/meta/classes/dpkg.bbclass b/meta/classes/dpkg.bbclass
> index 64404103..0e5a495d 100644
> --- a/meta/classes/dpkg.bbclass
> +++ b/meta/classes/dpkg.bbclass
> @@ -124,7 +124,7 @@ dpkg_runbuild() {
>          --finished-build-commands="rm -f ${deb_dir}/sbuild-build-
> depends-main-dummy_*.deb" \
>          --finished-build-commands="find ${deb_dir} -maxdepth 1 -type
> f -name '*.deb' -print -exec cp ${CP_FLAGS} -t ${ext_deb_dir}/ {} +"
> \
>          --finished-build-commands="cp /var/log/dpkg.log
> ${ext_root}/dpkg_partial.log" \
> -        --build-dir=${WORKDIR} --dist="${DEBDISTRONAME}" ${DSC_FILE}
> +        --build-path="" --build-dir=${WORKDIR} --
> dist="${DEBDISTRONAME}" ${DSC_FILE}
>  
>      sbuild_dpkg_log_export "${WORKDIR}/rootfs/dpkg_partial.log"
>      deb_dl_dir_export "${WORKDIR}/rootfs" "${distro}"
> -- 
> 2.34.1

Applied to next.

Patch

diff --git a/meta/classes/dpkg.bbclass b/meta/classes/dpkg.bbclass
index 64404103..0e5a495d 100644
--- a/meta/classes/dpkg.bbclass
+++ b/meta/classes/dpkg.bbclass
@@ -124,7 +124,7 @@  dpkg_runbuild() {
         --finished-build-commands="rm -f ${deb_dir}/sbuild-build-depends-main-dummy_*.deb" \
         --finished-build-commands="find ${deb_dir} -maxdepth 1 -type f -name '*.deb' -print -exec cp ${CP_FLAGS} -t ${ext_deb_dir}/ {} +" \
         --finished-build-commands="cp /var/log/dpkg.log ${ext_root}/dpkg_partial.log" \
-        --build-dir=${WORKDIR} --dist="${DEBDISTRONAME}" ${DSC_FILE}
+        --build-path="" --build-dir=${WORKDIR} --dist="${DEBDISTRONAME}" ${DSC_FILE}
 
     sbuild_dpkg_log_export "${WORKDIR}/rootfs/dpkg_partial.log"
     deb_dl_dir_export "${WORKDIR}/rootfs" "${distro}"