dpkg: make sbuild timeout configurable

Message ID 20231114173900.269290-1-cedric.hombourger@siemens.com
State Superseded, archived
Headers show
Series dpkg: make sbuild timeout configurable | expand

Commit Message

Cedric Hombourger Nov. 14, 2023, 5:39 p.m. UTC
Some builds (especially those under qemu) can take a very long time
and fail only because they did not complete within 2.5 hours. Let
recipes budget some more time by setting DPKG_BUILD_TIMEOUT to a
larger value (defaults to 150 minutes like sbuild).

Signed-off-by: Cedric Hombourger <cedric.hombourger@siemens.com>
---
 meta/classes/dpkg.bbclass | 6 ++++++
 1 file changed, 6 insertions(+)

Comments

MOESSBAUER, Felix Nov. 14, 2023, 7:47 p.m. UTC | #1
On Tue, 2023-11-14 at 18:39 +0100, 'Cedric Hombourger' via isar-users
wrote:
> Some builds (especially those under qemu) can take a very long time
> and fail only because they did not complete within 2.5 hours. Let
> recipes budget some more time by setting DPKG_BUILD_TIMEOUT to a
> larger value (defaults to 150 minutes like sbuild).
> 
> Signed-off-by: Cedric Hombourger <cedric.hombourger@siemens.com>
> ---
>  meta/classes/dpkg.bbclass | 6 ++++++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/meta/classes/dpkg.bbclass b/meta/classes/dpkg.bbclass
> index d61e9377..4accb076 100644
> --- a/meta/classes/dpkg.bbclass
> +++ b/meta/classes/dpkg.bbclass
> @@ -4,6 +4,11 @@
>  inherit dpkg-base
>  inherit dpkg-source
>  
> +# maximum time (in minutes for the build), override for packages
> requiring
> +# much more time (e.g. when cross-compiling isn't an option /
> supported and
> +# the package large)
> +DPKG_BUILD_TIMEOUT ?= "150"
> +
>  DPKG_PREBUILD_ENV_FILE="${WORKDIR}/dpkg_prebuild.env"
>  
>  # bitbake variables that should be passed into sbuild env
> @@ -94,6 +99,7 @@ dpkg_runbuild() {
>      ${@ expand_sbuild_pt_additions(d)}
>  
>      echo '$apt_keep_downloaded_packages = 1;' >> ${SBUILD_CONFIG}
> +    echo '$stalled_pkg_timeout = ${DPKG_BUILD_TIMEOUT};' >>

Hi Cedric,

please add this variable to the dpkg_runbuild[vardepsexclude] as well.
Also I'm wondering if we should document this variable in the docs.

Felix


> ${SBUILD_CONFIG}
>  
>      DEB_SOURCE_NAME=$(dpkg-parsechangelog --show-field Source --file
> ${WORKDIR}/${PPS}/debian/changelog)
>      DSC_FILE=$(find ${WORKDIR} -name "${DEB_SOURCE_NAME}*.dsc" -
> maxdepth 1 -print)
> -- 
> 2.39.2
>
Uladzimir Bely Nov. 29, 2023, 9:22 a.m. UTC | #2
On Wed, 2023-11-15 at 09:41 +0100, 'Cedric Hombourger' via isar-users
wrote:
> Some builds (especially those under qemu) can take a very long time
> and fail only because they did not complete within 2.5 hours. Let
> recipes budget some more time by setting DPKG_BUILD_TIMEOUT to a
> larger value (defaults to 150 minutes like sbuild).
> 
> Signed-off-by: Cedric Hombourger <cedric.hombourger@siemens.com>
> 
> Changes since v1:
>   - add DPKG_BUILD_TIMEOUT to the user manual
>   - add DPKG_BUILD_TIMEOUT to vardepsexclude for dpkg_runbuild
> 
> Cedric Hombourger (1):
>   dpkg: make sbuild timeout configurable
> 
>  doc/user_manual.md        | 2 ++
>  meta/classes/dpkg.bbclass | 7 +++++++
>  2 files changed, 9 insertions(+)
> 
> -- 
> 2.39.2
> 

Applied to next, thanks.

Patch

diff --git a/meta/classes/dpkg.bbclass b/meta/classes/dpkg.bbclass
index d61e9377..4accb076 100644
--- a/meta/classes/dpkg.bbclass
+++ b/meta/classes/dpkg.bbclass
@@ -4,6 +4,11 @@ 
 inherit dpkg-base
 inherit dpkg-source
 
+# maximum time (in minutes for the build), override for packages requiring
+# much more time (e.g. when cross-compiling isn't an option / supported and
+# the package large)
+DPKG_BUILD_TIMEOUT ?= "150"
+
 DPKG_PREBUILD_ENV_FILE="${WORKDIR}/dpkg_prebuild.env"
 
 # bitbake variables that should be passed into sbuild env
@@ -94,6 +99,7 @@  dpkg_runbuild() {
     ${@ expand_sbuild_pt_additions(d)}
 
     echo '$apt_keep_downloaded_packages = 1;' >> ${SBUILD_CONFIG}
+    echo '$stalled_pkg_timeout = ${DPKG_BUILD_TIMEOUT};' >> ${SBUILD_CONFIG}
 
     DEB_SOURCE_NAME=$(dpkg-parsechangelog --show-field Source --file ${WORKDIR}/${PPS}/debian/changelog)
     DSC_FILE=$(find ${WORKDIR} -name "${DEB_SOURCE_NAME}*.dsc" -maxdepth 1 -print)