* [PATCH v4 0/5] Restore downstream mounts compatibility @ 2021-08-16 15:37 Anton Mikanovich 2021-08-16 15:37 ` [PATCH v4 1/5] Revert "dpkg: Make mount buildroot reliable" Anton Mikanovich ` (4 more replies) 0 siblings, 5 replies; 10+ messages in thread From: Anton Mikanovich @ 2021-08-16 15:37 UTC (permalink / raw) To: isar-users; +Cc: Anton Mikanovich Revert commit d21d49578e5a3b0019075d1946bd93a95914fcca which has broken compatibility with downstream projects. Move try-finally from dpkg_runbuild(), etc. to the caller, do_dpkg_build(). Also enable reference counting for image mounts for several image tasks running in parallel (like e.g. ubi-ubifs-img). Tested with kas-iot2050-example project from: https://github.com/siemens/meta-iot2050 --- Changes since v3: - Warn on first entering in umount while loop. - Do not warn on left mounts by default. - Remote incorrect dpkg unmount usage protection. - Rebase on next. - Improve commit messages. Changes since v2: - Remove incorrect buildchroot/rootfs mount/unmount usage protection. - Remove task fail handler. - Implement double mount protection by try-finally. Changes since v1: - Get back while loop in dpkg_undo_mounts. - Exit dpkg_undo_mounts if already mounted. - Do not ignore exceptions in safe_exec. Anton Mikanovich (5): Revert "dpkg: Make mount buildroot reliable" dpkg: Limit unmount loop image: Add reference counter dpkg-base: Clean up unmounting in do_dpkg_build() events: Do not warn on left mounts by default meta-isar/conf/local.conf.sample | 3 + meta/classes/dpkg-base.bbclass | 125 +++++++++++++------------------ meta/classes/dpkg-gbp.bbclass | 8 +- meta/classes/dpkg.bbclass | 14 +--- meta/classes/image.bbclass | 39 +++++++++- meta/classes/isar-events.bbclass | 3 +- 6 files changed, 101 insertions(+), 91 deletions(-) -- 2.25.1 ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v4 1/5] Revert "dpkg: Make mount buildroot reliable" 2021-08-16 15:37 [PATCH v4 0/5] Restore downstream mounts compatibility Anton Mikanovich @ 2021-08-16 15:37 ` Anton Mikanovich 2021-08-16 15:37 ` [PATCH v4 2/5] dpkg: Limit unmount loop Anton Mikanovich ` (3 subsequent siblings) 4 siblings, 0 replies; 10+ messages in thread From: Anton Mikanovich @ 2021-08-16 15:37 UTC (permalink / raw) To: isar-users; +Cc: Anton Mikanovich d21d49578e5a "dpkg: Make mount buildroot reliable" has broken API compatibility with downstream layers: all functions using dpkg_do_mounts and dpkg_undo_mounts had to be rewritten in Python. This reverts commit d21d49578e5a3b0019075d1946bd93a95914fcca to retain the possibility to call dpkg_do_mounts and dpkg_undo_mounts from shell functions. Signed-off-by: Anton Mikanovich <amikan@ilbers.de> --- meta/classes/dpkg-base.bbclass | 127 +++++++++++++-------------------- meta/classes/dpkg-gbp.bbclass | 8 ++- meta/classes/dpkg.bbclass | 14 ++-- 3 files changed, 59 insertions(+), 90 deletions(-) diff --git a/meta/classes/dpkg-base.bbclass b/meta/classes/dpkg-base.bbclass index ec8fbc1..4b189f1 100644 --- a/meta/classes/dpkg-base.bbclass +++ b/meta/classes/dpkg-base.bbclass @@ -61,7 +61,12 @@ addtask patch before do_adjust_git SRC_APT ?= "" -fetch_apt() { +do_apt_fetch() { + if [ -z "${@d.getVar("SRC_APT", True).strip()}" ]; then + return 0 + fi + dpkg_do_mounts + E="${@ isar_export_proxies(d)}" sudo -E chroot ${BUILDCHROOT_DIR} /usr/bin/apt-get update \ -o Dir::Etc::SourceList="sources.list.d/isar-apt.list" \ -o Dir::Etc::SourceParts="-" \ @@ -71,19 +76,8 @@ fetch_apt() { sudo -E chroot --userspec=$( id -u ):$( id -g ) ${BUILDCHROOT_DIR} \ sh -c 'mkdir -p /downloads/deb-src/"$1"/"$2" && cd /downloads/deb-src/"$1"/"$2" && apt-get -y --download-only --only-source source "$2"' my_script "${DISTRO}" "${uri}" done -} - -python do_apt_fetch() { - src_apt = d.getVar("SRC_APT", True) - if not src_apt: - return 0 - dpkg_do_mounts(d) - try: - isar_export_proxies(d) - bb.build.exec_func("fetch_apt", d) - finally: - dpkg_undo_mounts(d) + dpkg_undo_mounts } addtask apt_fetch after do_unpack before do_apt_unpack @@ -92,7 +86,14 @@ do_apt_fetch[lockfiles] += "${REPO_ISAR_DIR}/isar.lock" # Add dependency from the correct buildchroot: host or target do_apt_fetch[depends] = "${BUILDCHROOT_DEP}" -unpack_apt() { +do_apt_unpack() { + if [ -z "${@d.getVar("SRC_APT", True).strip()}" ]; then + return 0 + fi + rm -rf ${S} + dpkg_do_mounts + E="${@ isar_export_proxies(d)}" + for uri in "${SRC_APT}"; do sudo -E chroot --userspec=$( id -u ):$( id -g ) ${BUILDCHROOT_DIR} \ sh -c ' \ @@ -103,25 +104,8 @@ unpack_apt() { dpkg-source -x "${dscfile}" "${PPS}"' \ my_script "${DISTRO}" "${uri}" done -} -python do_apt_unpack() { - import shutil - - src_apt = d.getVar("SRC_APT", True) - if not src_apt: - return 0 - - srcsubdir = d.getVar('S', True) - if os.path.exists(srcsubdir): - shutil.rmtree(srcsubdir) - - dpkg_do_mounts(d) - try: - isar_export_proxies(d) - bb.build.exec_func("unpack_apt", d) - finally: - dpkg_undo_mounts(d) + dpkg_undo_mounts } addtask apt_unpack after do_apt_fetch before do_patch @@ -165,38 +149,25 @@ do_prepare_build[deptask] = "do_deploy_deb" BUILDROOT = "${BUILDCHROOT_DIR}/${PP}" -def ismount(path): - real = os.path.realpath(path) - with open('/proc/mounts') as f: - for line in f.readlines(): - if len(line.split()) > 2 and real == line.split()[1]: - return True - return False - -def dpkg_do_mounts(d): - buildroot = d.getVar('BUILDROOT', True) - if ismount(buildroot): - bb.warn('Path %s already mounted!' % buildroot) - return - workdir = d.getVar('WORKDIR', True) - os.makedirs(buildroot, exist_ok=True) - os.system('sudo mount --bind %s %s' % (workdir, buildroot)) - bb.build.exec_func("buildchroot_do_mounts", d) - -def dpkg_undo_mounts(d): - bb.build.exec_func("buildchroot_undo_mounts", d) - buildroot = d.getVar('BUILDROOT', True) - if not ismount(buildroot): - bb.warn('Path %s not mounted!' % buildroot) - return - for i in range(200): - if not os.system('sudo umount %s' % buildroot): - os.rmdir(buildroot) - return - if i % 100 == 0: - bb.warn("%s: Couldn't unmount, retrying..." % buildroot) - time.sleep(0.1) - bb.fatal("Couldn't unmount, exiting...") +dpkg_do_mounts() { + mkdir -p ${BUILDROOT} + sudo mount --bind ${WORKDIR} ${BUILDROOT} + + buildchroot_do_mounts +} + +dpkg_undo_mounts() { + i=1 + while ! sudo umount ${BUILDROOT}; do + sleep 0.1 + i=`expr $i + 1` + if [ $i -gt 100 ]; then + bbwarn "${BUILDROOT}: Couldn't unmount, retrying..." + i=1 + fi + done + sudo rmdir ${BUILDROOT} +} # Placeholder for actual dpkg_runbuild() implementation dpkg_runbuild() { @@ -206,12 +177,10 @@ dpkg_runbuild() { python do_dpkg_build() { lock = bb.utils.lockfile(d.getVar("REPO_ISAR_DIR") + "/isar.lock", shared=True) - dpkg_do_mounts(d) - try: - bb.build.exec_func("dpkg_runbuild", d) - finally: - dpkg_undo_mounts(d) - bb.utils.unlockfile(lock) + bb.build.exec_func("dpkg_do_mounts", d) + bb.build.exec_func("dpkg_runbuild", d) + bb.build.exec_func("dpkg_undo_mounts", d) + bb.utils.unlockfile(lock) } addtask dpkg_build before do_build @@ -255,16 +224,16 @@ python do_devshell() { oe_lib_path = os.path.join(d.getVar('LAYERDIR_core'), 'lib') sys.path.insert(0, oe_lib_path) - dpkg_do_mounts(d) - try: - isar_export_proxies(d) + bb.build.exec_func('dpkg_do_mounts', d) + + isar_export_proxies(d) + + buildchroot = d.getVar('BUILDCHROOT_DIR') + pp_pps = os.path.join(d.getVar('PP'), d.getVar('PPS')) + termcmd = "sudo -E chroot {0} sh -c 'cd {1}; $SHELL -i'" + oe_terminal(termcmd.format(buildchroot, pp_pps), "Isar devshell", d) - buildchroot = d.getVar('BUILDCHROOT_DIR') - pp_pps = os.path.join(d.getVar('PP'), d.getVar('PPS')) - termcmd = "sudo -E chroot {0} sh -c 'cd {1}; $SHELL -i'" - oe_terminal(termcmd.format(buildchroot, pp_pps), "Isar devshell", d) - finally: - dpkg_undo_mounts(d) + bb.build.exec_func('dpkg_undo_mounts', d) } addtask devshell after do_prepare_build diff --git a/meta/classes/dpkg-gbp.bbclass b/meta/classes/dpkg-gbp.bbclass index 20d2d4c..d956e8c 100644 --- a/meta/classes/dpkg-gbp.bbclass +++ b/meta/classes/dpkg-gbp.bbclass @@ -12,7 +12,12 @@ PATCHTOOL ?= "git" GBP_DEPENDS ?= "git-buildpackage pristine-tar" GBP_EXTRA_OPTIONS ?= "--git-pristine-tar" -builddeps_install_append() { +do_install_builddeps_append() { + dpkg_do_mounts + distro="${DISTRO}" + if [ ${ISAR_CROSS_COMPILE} -eq 1 ]; then + distro="${HOST_DISTRO}" + fi deb_dl_dir_import "${BUILDCHROOT_DIR}" "${distro}" sudo -E chroot ${BUILDCHROOT_DIR} \ apt-get install -y -o Debug::pkgProblemResolver=yes \ @@ -21,6 +26,7 @@ builddeps_install_append() { sudo -E chroot ${BUILDCHROOT_DIR} \ apt-get install -y -o Debug::pkgProblemResolver=yes \ --no-install-recommends ${GBP_DEPENDS} + dpkg_undo_mounts } dpkg_runbuild_prepend() { diff --git a/meta/classes/dpkg.bbclass b/meta/classes/dpkg.bbclass index 29e2b89..4e7c2f7 100644 --- a/meta/classes/dpkg.bbclass +++ b/meta/classes/dpkg.bbclass @@ -6,7 +6,9 @@ inherit dpkg-base PACKAGE_ARCH ?= "${DISTRO_ARCH}" # Install build dependencies for package -builddeps_install() { +do_install_builddeps() { + dpkg_do_mounts + E="${@ isar_export_proxies(d)}" distro="${DISTRO}" if [ ${ISAR_CROSS_COMPILE} -eq 1 ]; then distro="${HOST_DISTRO}" @@ -17,15 +19,7 @@ builddeps_install() { deb_dl_dir_export "${BUILDCHROOT_DIR}" "${distro}" sudo -E chroot ${BUILDCHROOT_DIR} /isar/deps.sh \ ${PP}/${PPS} ${PACKAGE_ARCH} -} - -python do_install_builddeps() { - dpkg_do_mounts(d) - isar_export_proxies(d) - try: - bb.build.exec_func("builddeps_install", d) - finally: - dpkg_undo_mounts(d) + dpkg_undo_mounts } addtask install_builddeps after do_prepare_build before do_dpkg_build -- 2.25.1 ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v4 2/5] dpkg: Limit unmount loop 2021-08-16 15:37 [PATCH v4 0/5] Restore downstream mounts compatibility Anton Mikanovich 2021-08-16 15:37 ` [PATCH v4 1/5] Revert "dpkg: Make mount buildroot reliable" Anton Mikanovich @ 2021-08-16 15:37 ` Anton Mikanovich 2021-08-16 16:09 ` Henning Schild 2021-08-16 15:37 ` [PATCH v4 3/5] image: Add reference counter Anton Mikanovich ` (2 subsequent siblings) 4 siblings, 1 reply; 10+ messages in thread From: Anton Mikanovich @ 2021-08-16 15:37 UTC (permalink / raw) To: isar-users; +Cc: Anton Mikanovich In the past, unmounting WORKDIR caused infinite looping with the "Couldn't unmount, retrying..." warning if the first linux-mainline task failed and the second one succeeded (it is built for de0-nano-soc-buster and stm32mp15x-buster). This change limits the loop to 1000 s. Signed-off-by: Anton Mikanovich <amikan@ilbers.de> --- meta/classes/dpkg-base.bbclass | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/meta/classes/dpkg-base.bbclass b/meta/classes/dpkg-base.bbclass index 4b189f1..105a1e6 100644 --- a/meta/classes/dpkg-base.bbclass +++ b/meta/classes/dpkg-base.bbclass @@ -157,14 +157,16 @@ dpkg_do_mounts() { } dpkg_undo_mounts() { - i=1 + i=0 while ! sudo umount ${BUILDROOT}; do sleep 0.1 - i=`expr $i + 1` - if [ $i -gt 100 ]; then - bbwarn "${BUILDROOT}: Couldn't unmount, retrying..." - i=1 + if [ `expr $i % 100` -eq 0 ] ; then + bbwarn "${BUILDROOT}: Couldn't unmount ($i), retrying..." + fi + if [ $i -gt 10000 ]; then + bbfatal "${BUILDROOT}: Couldn't unmount after timeout" fi + i=`expr $i + 1` done sudo rmdir ${BUILDROOT} } -- 2.25.1 ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v4 2/5] dpkg: Limit unmount loop 2021-08-16 15:37 ` [PATCH v4 2/5] dpkg: Limit unmount loop Anton Mikanovich @ 2021-08-16 16:09 ` Henning Schild 0 siblings, 0 replies; 10+ messages in thread From: Henning Schild @ 2021-08-16 16:09 UTC (permalink / raw) To: Anton Mikanovich; +Cc: isar-users Am Mon, 16 Aug 2021 18:37:53 +0300 schrieb Anton Mikanovich <amikan@ilbers.de>: > In the past, unmounting WORKDIR caused infinite looping with the > "Couldn't unmount, retrying..." warning if the first linux-mainline > task failed and the second one succeeded (it is built for > de0-nano-soc-buster and stm32mp15x-buster). > > This change limits the loop to 1000 s. > > Signed-off-by: Anton Mikanovich <amikan@ilbers.de> > --- > meta/classes/dpkg-base.bbclass | 12 +++++++----- > 1 file changed, 7 insertions(+), 5 deletions(-) > > diff --git a/meta/classes/dpkg-base.bbclass > b/meta/classes/dpkg-base.bbclass index 4b189f1..105a1e6 100644 > --- a/meta/classes/dpkg-base.bbclass > +++ b/meta/classes/dpkg-base.bbclass > @@ -157,14 +157,16 @@ dpkg_do_mounts() { > } > > dpkg_undo_mounts() { > - i=1 > + i=0 > while ! sudo umount ${BUILDROOT}; do > sleep 0.1 > - i=`expr $i + 1` > - if [ $i -gt 100 ]; then > - bbwarn "${BUILDROOT}: Couldn't unmount, retrying..." > - i=1 > + if [ `expr $i % 100` -eq 0 ] ; then > + bbwarn "${BUILDROOT}: Couldn't unmount ($i), retrying..." > + fi > + if [ $i -gt 10000 ]; then > + bbfatal "${BUILDROOT}: Couldn't unmount after timeout" > fi > + i=`expr $i + 1` IMHO it would be easier to read how long that will take in total ... if it was "sleep 1" ... "% 10" and "-gt 1000" ... in fact i think it should be "-ge 1000" now that you start with 0. But on off-by-one in a timeout it not the biggest problem. Henning > done > sudo rmdir ${BUILDROOT} > } ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v4 3/5] image: Add reference counter 2021-08-16 15:37 [PATCH v4 0/5] Restore downstream mounts compatibility Anton Mikanovich 2021-08-16 15:37 ` [PATCH v4 1/5] Revert "dpkg: Make mount buildroot reliable" Anton Mikanovich 2021-08-16 15:37 ` [PATCH v4 2/5] dpkg: Limit unmount loop Anton Mikanovich @ 2021-08-16 15:37 ` Anton Mikanovich 2021-08-16 15:37 ` [PATCH v4 4/5] dpkg-base: Clean up unmounting in do_dpkg_build() Anton Mikanovich 2021-08-16 15:37 ` [PATCH v4 5/5] events: Do not warn on left mounts by default Anton Mikanovich 4 siblings, 0 replies; 10+ messages in thread From: Anton Mikanovich @ 2021-08-16 15:37 UTC (permalink / raw) To: isar-users; +Cc: Anton Mikanovich Image generation can be also executed in parallel, so we need to control the usage of image_do_mounts / image_undo_mounts. Signed-off-by: Anton Mikanovich <amikan@ilbers.de> --- meta/classes/image.bbclass | 39 ++++++++++++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass index 12d1616..b2a828c 100644 --- a/meta/classes/image.bbclass +++ b/meta/classes/image.bbclass @@ -52,23 +52,54 @@ DEPENDS += "${IMAGE_INSTALL}" ISAR_RELEASE_CMD_DEFAULT = "git -C ${LAYERDIR_core} describe --tags --dirty --match 'v[0-9].[0-9]*'" ISAR_RELEASE_CMD ?= "${ISAR_RELEASE_CMD_DEFAULT}" +IMG_MOUNT_CNT = "${BUILDCHROOT_DIR}_image.mount" + image_do_mounts() { - sudo flock ${MOUNT_LOCKFILE} -c ' \ + sudo -s <<'EOSUDO' + ( flock 9 + set -e + + count="1" + if [ -f "${IMG_MOUNT_CNT}" ]; then + count=$(($(cat "${IMG_MOUNT_CNT}") + 1)) + fi + echo $count > "${IMG_MOUNT_CNT}" + if [ $count -gt 1 ]; then + exit 0 + fi + mkdir -p "${BUILDROOT_DEPLOY}" "${BUILDROOT_ROOTFS}" "${BUILDROOT_WORK}" mount --bind "${DEPLOY_DIR_IMAGE}" "${BUILDROOT_DEPLOY}" mount --bind "${IMAGE_ROOTFS}" "${BUILDROOT_ROOTFS}" mount --bind "${WORKDIR}" "${BUILDROOT_WORK}" - ' + + ) 9>'${MOUNT_LOCKFILE}' +EOSUDO buildchroot_do_mounts } image_undo_mounts() { buildchroot_undo_mounts - sudo flock ${MOUNT_LOCKFILE} -c ' \ + sudo -s <<'EOSUDO' + ( flock 9 + set -e + + count="0" + if [ -f "${IMG_MOUNT_CNT}" ]; then + count=$(($(cat "${IMG_MOUNT_CNT}") - 1)) + echo $count > "${IMG_MOUNT_CNT}" + fi + if [ $count -gt 0 ]; then + exit 0 + fi + rm -f "${IMG_MOUNT_CNT}" + umount "${BUILDROOT_DEPLOY}" umount "${BUILDROOT_ROOTFS}" umount "${BUILDROOT_WORK}" - ' + + ) 9>'${MOUNT_LOCKFILE}' +EOSUDO } ROOTFSDIR = "${IMAGE_ROOTFS}" -- 2.25.1 ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v4 4/5] dpkg-base: Clean up unmounting in do_dpkg_build() 2021-08-16 15:37 [PATCH v4 0/5] Restore downstream mounts compatibility Anton Mikanovich ` (2 preceding siblings ...) 2021-08-16 15:37 ` [PATCH v4 3/5] image: Add reference counter Anton Mikanovich @ 2021-08-16 15:37 ` Anton Mikanovich 2021-08-16 15:37 ` [PATCH v4 5/5] events: Do not warn on left mounts by default Anton Mikanovich 4 siblings, 0 replies; 10+ messages in thread From: Anton Mikanovich @ 2021-08-16 15:37 UTC (permalink / raw) To: isar-users; +Cc: Anton Mikanovich Reverting d21d49578e5a "dpkg: Make mount buildroot reliable" brings back two problems: * The filesystems mounted under buildchroot (dev, proc, sys, etc.) are left mounted. * If dpkg_runbuild() fails, WORKDIR and the filesystems under buildchroot are left mounted. Request unmounting the filesystems under buildchroot after every package build. The actual unmounting will be done after the last job due to the reference counting. Also request unmounting in any case, even if building fails. Signed-off-by: Anton Mikanovich <amikan@ilbers.de> --- meta/classes/dpkg-base.bbclass | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/meta/classes/dpkg-base.bbclass b/meta/classes/dpkg-base.bbclass index 105a1e6..fe814e0 100644 --- a/meta/classes/dpkg-base.bbclass +++ b/meta/classes/dpkg-base.bbclass @@ -169,6 +169,8 @@ dpkg_undo_mounts() { i=`expr $i + 1` done sudo rmdir ${BUILDROOT} + + buildchroot_undo_mounts } # Placeholder for actual dpkg_runbuild() implementation @@ -180,9 +182,11 @@ python do_dpkg_build() { lock = bb.utils.lockfile(d.getVar("REPO_ISAR_DIR") + "/isar.lock", shared=True) bb.build.exec_func("dpkg_do_mounts", d) - bb.build.exec_func("dpkg_runbuild", d) - bb.build.exec_func("dpkg_undo_mounts", d) - bb.utils.unlockfile(lock) + try: + bb.build.exec_func("dpkg_runbuild", d) + finally: + bb.build.exec_func("dpkg_undo_mounts", d) + bb.utils.unlockfile(lock) } addtask dpkg_build before do_build -- 2.25.1 ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH v4 5/5] events: Do not warn on left mounts by default 2021-08-16 15:37 [PATCH v4 0/5] Restore downstream mounts compatibility Anton Mikanovich ` (3 preceding siblings ...) 2021-08-16 15:37 ` [PATCH v4 4/5] dpkg-base: Clean up unmounting in do_dpkg_build() Anton Mikanovich @ 2021-08-16 15:37 ` Anton Mikanovich 2021-08-16 15:53 ` Henning Schild 4 siblings, 1 reply; 10+ messages in thread From: Anton Mikanovich @ 2021-08-16 15:37 UTC (permalink / raw) To: isar-users; +Cc: Anton Mikanovich Disable warnings printing for all the mount points left after build completed to do not flood build logs too much in case build fail. Logging can be enabled by setting ISAR_MOUNTS_CLEANUP_DEBUG to 1. Signed-off-by: Anton Mikanovich <amikan@ilbers.de> --- meta-isar/conf/local.conf.sample | 3 +++ meta/classes/isar-events.bbclass | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/meta-isar/conf/local.conf.sample b/meta-isar/conf/local.conf.sample index 6cf1656..ca43261 100644 --- a/meta-isar/conf/local.conf.sample +++ b/meta-isar/conf/local.conf.sample @@ -219,3 +219,6 @@ USER_isar[flags] = "system create-home" # Uncomment the below line to debug WIC. # WIC_CREATE_EXTRA_ARGS += "-D" + +# Uncomment this to enable warn on all left mounts after build complete +#ISAR_MOUNTS_CLEANUP_DEBUG ?= "1" diff --git a/meta/classes/isar-events.bbclass b/meta/classes/isar-events.bbclass index 2f8bf6e..60bb1a9 100644 --- a/meta/classes/isar-events.bbclass +++ b/meta/classes/isar-events.bbclass @@ -54,7 +54,8 @@ python build_completed() { with open('/proc/mounts') as f: for line in f.readlines(): if basepath in line: - bb.warn('%s left mounted, unmounting...' % line.split()[1]) + if d.getVar('ISAR_MOUNTS_CLEANUP_DEBUG', True) == '1': + bb.warn('%s left mounted, unmounting...' % line.split()[1]) subprocess.call( ["sudo", "umount", "-l", line.split()[1]], stdout=subprocess.DEVNULL, -- 2.25.1 ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v4 5/5] events: Do not warn on left mounts by default 2021-08-16 15:37 ` [PATCH v4 5/5] events: Do not warn on left mounts by default Anton Mikanovich @ 2021-08-16 15:53 ` Henning Schild 2021-08-16 16:53 ` Jan Kiszka 2021-08-17 12:36 ` Anton Mikanovich 0 siblings, 2 replies; 10+ messages in thread From: Henning Schild @ 2021-08-16 15:53 UTC (permalink / raw) To: Anton Mikanovich; +Cc: isar-users Am Mon, 16 Aug 2021 18:37:56 +0300 schrieb Anton Mikanovich <amikan@ilbers.de>: > Disable warnings printing for all the mount points left after build > completed to do not flood build logs too much in case build fail. > > Logging can be enabled by setting ISAR_MOUNTS_CLEANUP_DEBUG to 1. Can we find something more generic to attach to? Something that represents verbose logging / debug tracing in general? We can not invent a new variable for every aspect we want to debug. Could also just comment that out ... to have it back handy for someone having to debug. Henning > Signed-off-by: Anton Mikanovich <amikan@ilbers.de> > --- > meta-isar/conf/local.conf.sample | 3 +++ > meta/classes/isar-events.bbclass | 3 ++- > 2 files changed, 5 insertions(+), 1 deletion(-) > > diff --git a/meta-isar/conf/local.conf.sample > b/meta-isar/conf/local.conf.sample index 6cf1656..ca43261 100644 > --- a/meta-isar/conf/local.conf.sample > +++ b/meta-isar/conf/local.conf.sample > @@ -219,3 +219,6 @@ USER_isar[flags] = "system create-home" > > # Uncomment the below line to debug WIC. > # WIC_CREATE_EXTRA_ARGS += "-D" > + > +# Uncomment this to enable warn on all left mounts after build > complete +#ISAR_MOUNTS_CLEANUP_DEBUG ?= "1" > diff --git a/meta/classes/isar-events.bbclass > b/meta/classes/isar-events.bbclass index 2f8bf6e..60bb1a9 100644 > --- a/meta/classes/isar-events.bbclass > +++ b/meta/classes/isar-events.bbclass > @@ -54,7 +54,8 @@ python build_completed() { > with open('/proc/mounts') as f: > for line in f.readlines(): > if basepath in line: > - bb.warn('%s left mounted, unmounting...' % > line.split()[1]) > + if d.getVar('ISAR_MOUNTS_CLEANUP_DEBUG', True) == > '1': > + bb.warn('%s left mounted, unmounting...' % > line.split()[1]) subprocess.call( > ["sudo", "umount", "-l", line.split()[1]], > stdout=subprocess.DEVNULL, ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v4 5/5] events: Do not warn on left mounts by default 2021-08-16 15:53 ` Henning Schild @ 2021-08-16 16:53 ` Jan Kiszka 2021-08-17 12:36 ` Anton Mikanovich 1 sibling, 0 replies; 10+ messages in thread From: Jan Kiszka @ 2021-08-16 16:53 UTC (permalink / raw) To: Henning Schild, Anton Mikanovich; +Cc: isar-users On 16.08.21 17:53, Henning Schild wrote: > Am Mon, 16 Aug 2021 18:37:56 +0300 > schrieb Anton Mikanovich <amikan@ilbers.de>: > >> Disable warnings printing for all the mount points left after build >> completed to do not flood build logs too much in case build fail. >> >> Logging can be enabled by setting ISAR_MOUNTS_CLEANUP_DEBUG to 1. > > Can we find something more generic to attach to? Something that > represents verbose logging / debug tracing in general? We can not > invent a new variable for every aspect we want to debug. Could also > just comment that out ... to have it back handy for someone having to > debug. The goal should be that this warning can remain always on. But that implies having resolved all issues where it is not pointing to a separate problem but rather only prolongs the dump of the actual issue. Where are we in that journey? Jan -- Siemens AG, T RDA IOT Corporate Competence Center Embedded Linux ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v4 5/5] events: Do not warn on left mounts by default 2021-08-16 15:53 ` Henning Schild 2021-08-16 16:53 ` Jan Kiszka @ 2021-08-17 12:36 ` Anton Mikanovich 1 sibling, 0 replies; 10+ messages in thread From: Anton Mikanovich @ 2021-08-17 12:36 UTC (permalink / raw) To: Henning Schild; +Cc: isar-users, Jan Kiszka 16.08.2021 18:53, Henning Schild wrote: > Can we find something more generic to attach to? Something that > represents verbose logging / debug tracing in general? We can not > invent a new variable for every aspect we want to debug. Could also > just comment that out ... to have it back handy for someone having to > debug. > > Henning As Jan already mentioned, originally this supposed to be something to be always on to take care about the right mount API usage. But currently we have other places where covering mounts with try-finally require huge rewriting all that tasks in Python which will break the compatibility. That's why additional debug messages will appear for all the failures outside do_dpkg_build but inside mount sections. Commenting this code out is not a good way if we need to have it configured from outside (f.e. by CI). I've moved those printouts from warning to debug in v5, so it will be available with all other debug information (enabled by -D). -- Anton Mikanovich Promwad Ltd. External service provider of ilbers GmbH Maria-Merian-Str. 8 85521 Ottobrunn, Germany +49 (89) 122 67 24-0 Commercial register Munich, HRB 214197 General Manager: Baurzhan Ismagulov ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2021-08-17 12:36 UTC | newest] Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2021-08-16 15:37 [PATCH v4 0/5] Restore downstream mounts compatibility Anton Mikanovich 2021-08-16 15:37 ` [PATCH v4 1/5] Revert "dpkg: Make mount buildroot reliable" Anton Mikanovich 2021-08-16 15:37 ` [PATCH v4 2/5] dpkg: Limit unmount loop Anton Mikanovich 2021-08-16 16:09 ` Henning Schild 2021-08-16 15:37 ` [PATCH v4 3/5] image: Add reference counter Anton Mikanovich 2021-08-16 15:37 ` [PATCH v4 4/5] dpkg-base: Clean up unmounting in do_dpkg_build() Anton Mikanovich 2021-08-16 15:37 ` [PATCH v4 5/5] events: Do not warn on left mounts by default Anton Mikanovich 2021-08-16 15:53 ` Henning Schild 2021-08-16 16:53 ` Jan Kiszka 2021-08-17 12:36 ` Anton Mikanovich
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox