[v2,1/1] dpkg: make sbuild timeout configurable

Message ID 20231115084152.363950-2-cedric.hombourger@siemens.com
State Accepted, archived
Headers show
Series dpkg: make sbuild timeout configurable | expand

Commit Message

Cedric Hombourger Nov. 15, 2023, 8:41 a.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>
---
 doc/user_manual.md        | 2 ++
 meta/classes/dpkg.bbclass | 7 +++++++
 2 files changed, 9 insertions(+)

Patch

diff --git a/doc/user_manual.md b/doc/user_manual.md
index ecb987f4..3744c753 100644
--- a/doc/user_manual.md
+++ b/doc/user_manual.md
@@ -808,6 +808,8 @@  Below are some of the packages with this scenario at the time of writing this.
 
 The `deb` packages are built using `dpkg-buildpackage`, so the sources should contain the `debian` directory with necessary meta information. This way is the default way of adding software that needs to be compiled from source. The bbclass for this approach is called `dpkg`.
 
+For large applications that are not cross-compiled, it may be needed to extend the default build timeout of 150 minutes to a greater value: set `DPKG_BUILD_TIMEOUT` in your recipe to that effect.
+
 **NOTE:** If the sources do not contain a `debian` directory your recipe can fetch, create, or ship that. You might want to read the the next section before returning here.
 
 #### Example
diff --git a/meta/classes/dpkg.bbclass b/meta/classes/dpkg.bbclass
index d61e9377..b69fa254 100644
--- a/meta/classes/dpkg.bbclass
+++ b/meta/classes/dpkg.bbclass
@@ -4,6 +4,12 @@ 
 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_runbuild[vardepsexclude] += "${DPKG_BUILD_TIMEOUT}"
+
 DPKG_PREBUILD_ENV_FILE="${WORKDIR}/dpkg_prebuild.env"
 
 # bitbake variables that should be passed into sbuild env
@@ -94,6 +100,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)