From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 6953625691033174016 X-Received: by 2002:a2e:b4ac:: with SMTP id q12mr18788545ljm.221.1619017151178; Wed, 21 Apr 2021 07:59:11 -0700 (PDT) X-BeenThere: isar-users@googlegroups.com Received: by 2002:a19:f815:: with SMTP id a21ls1918404lff.1.gmail; Wed, 21 Apr 2021 07:59:10 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyxf68vUWMcUx4JAvQXdMrpXzAXuzG04eD0UhUowLoczN9+h2XAvhR/qpnKddp1NRH4CrMV X-Received: by 2002:a05:6512:689:: with SMTP id t9mr2863384lfe.460.1619017150226; Wed, 21 Apr 2021 07:59:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1619017150; cv=none; d=google.com; s=arc-20160816; b=e16/PgbEUbyMIYPsVBZ3iITtUy222V7J5Uw3Nt4TgsZ1v1IQkqzA8ezoO/ZfPmTTNO 3uNeejgtZyiyD40AQaw/SEaO9FMcGrsaLX+ZlqgUjtFiPv+9LPVnd9iG2IBg21L37GSJ qXUBtxjof/+VnZ5H3B1i6yiHgCL+QqLP1teG+DsXqO3h0E9eJZZM6Hr9oHHmjfiBnJ5p /ci2Y3bpTycfqitViWs40J1FBSAhHwFpfvs50VyVNiieQv7aqR276zBxFmqrY+cwspY5 YpcL8YphIFjkby/u4I4TyWj5fLBOOR92gHH6RkFw2Icv7I6F48Ej8b8Qm/N4xl96Sybh T+JQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=cihboQTLK9WHy/EwvZgDRG4jsWSTyEC0P9JYW5YfQ70=; b=qRpZqGOe7AzbQ9oEdAH/Pmqnnmg4UMRhQppWzOMF+8OxhlWII7WBVbIwscWtEI/Rvn vgblbauDrDIs5f8SKknjHg6NTZ8OcUWHrTJAe0kLGLle9tcvr+vhvpIW5DbmD0qiW/zN kH9uIFR3piwtZ045xdYkdzsp2PfznsV1oHt5mO9JVEgY3UstmF2E/9ZmUUXhtVemCb+i OZ0/ScrVWP/oX2ZIyUBF3c0l1NM1vbvI97rgw/Zu92vYnO7Zfl+uif3QmnzVczfuPO4Z a2ehVl5gdHAwiBcZovxHP6apXcwNii3PnlVtz7fcBy9twf3MUMowGkwgNXwF0zTGJHnC iIFg== ARC-Authentication-Results: i=1; gmr-mx.google.com; spf=pass (google.com: domain of amikan@ilbers.de designates 85.214.156.166 as permitted sender) smtp.mailfrom=amikan@ilbers.de Return-Path: Received: from shymkent.ilbers.de (shymkent.ilbers.de. [85.214.156.166]) by gmr-mx.google.com with ESMTPS id n10si174208lft.1.2021.04.21.07.59.10 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Wed, 21 Apr 2021 07:59:10 -0700 (PDT) Received-SPF: pass (google.com: domain of amikan@ilbers.de designates 85.214.156.166 as permitted sender) client-ip=85.214.156.166; Authentication-Results: gmr-mx.google.com; spf=pass (google.com: domain of amikan@ilbers.de designates 85.214.156.166 as permitted sender) smtp.mailfrom=amikan@ilbers.de Received: from localhost.localdomain (mm-153-39-214-37.mgts.dynamic.pppoe.byfly.by [37.214.39.153] (may be forged)) (authenticated bits=0) by shymkent.ilbers.de (8.15.2/8.15.2/Debian-8) with ESMTPSA id 13LEx27d027015 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 21 Apr 2021 16:59:09 +0200 From: Anton Mikanovich To: isar-users@googlegroups.com Cc: Anton Mikanovich Subject: [PATCH v2 2/5] buildchroot: Unmount buildchroot if not needed Date: Wed, 21 Apr 2021 17:58:52 +0300 Message-Id: <20210421145855.66257-3-amikan@ilbers.de> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210421145855.66257-1-amikan@ilbers.de> References: <20210421145855.66257-1-amikan@ilbers.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED autolearn=unavailable autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on shymkent.ilbers.de X-TUID: kNTHrfxsxKZL Count the usage of BUILDCHROOT_DIR mount and trigger unmount of it after all tasks using chroot are finished. Signed-off-by: Anton Mikanovich --- meta/classes/buildchroot.bbclass | 58 ++++++++++++++++++++++ meta/classes/dpkg-base.bbclass | 1 + meta/classes/ext4-img.bbclass | 2 + meta/classes/fit-img.bbclass | 2 + meta/classes/image-tools-extension.bbclass | 2 + meta/classes/image.bbclass | 9 ++++ meta/classes/isar-events.bbclass | 1 + meta/classes/ubi-img.bbclass | 2 + meta/classes/ubifs-img.bbclass | 2 + meta/classes/wic-img.bbclass | 1 + 10 files changed, 80 insertions(+) diff --git a/meta/classes/buildchroot.bbclass b/meta/classes/buildchroot.bbclass index 1a8ee13..1d50025 100644 --- a/meta/classes/buildchroot.bbclass +++ b/meta/classes/buildchroot.bbclass @@ -21,12 +21,45 @@ python __anonymous() { d.setVar('BUILDCHROOT_DIR', rootfs) } +BUILDCHROOT_CNT_LOCKFILE = "${BUILDCHROOT_DIR}.mount_lock" + +buildchroot_mount_cnt_inc() { + sudo -s <<'EOSUDO' + ( flock 9 + set -e + count="1" + if [ -f '${BUILDCHROOT_DIR}/.mount' ]; then + count=$(($(< '${BUILDCHROOT_DIR}/.mount') + 1)) + fi + echo $count | tee '${BUILDCHROOT_DIR}/.mount' + ) 9>'${BUILDCHROOT_CNT_LOCKFILE}' +EOSUDO +} + +buildchroot_mount_cnt_dec() { + sudo -s <<'EOSUDO' + ( flock 9 + set -e + if [ -f '${BUILDCHROOT_DIR}/.mount' ]; then + count=$(($(< '${BUILDCHROOT_DIR}/.mount') - 1)) + echo $count | tee '${BUILDCHROOT_DIR}/.mount' + else + exit 1 + fi + ) 9>'${BUILDCHROOT_CNT_LOCKFILE}' +EOSUDO +} + MOUNT_LOCKFILE = "${BUILDCHROOT_DIR}.lock" buildchroot_do_mounts() { + if [ $(buildchroot_mount_cnt_inc) -gt 1 ]; then + return + fi sudo -s <<'EOSUDO' ( flock 9 set -e + mkdir -p '${BUILDCHROOT_DIR}/isar-apt' mountpoint -q '${BUILDCHROOT_DIR}/isar-apt' || mount --bind '${REPO_ISAR_DIR}/${DISTRO}' '${BUILDCHROOT_DIR}/isar-apt' mountpoint -q '${BUILDCHROOT_DIR}/downloads' || @@ -59,3 +92,28 @@ buildchroot_do_mounts() { ) 9>'${MOUNT_LOCKFILE}' EOSUDO } + +buildchroot_undo_mounts() { + if [ $(buildchroot_mount_cnt_dec) -gt 0 ]; then + return + fi + sudo -s <<'EOSUDO' + ( flock 9 + set -e + mountpoint -q '${BUILDCHROOT_DIR}/base-apt' && \ + umount ${BUILDCHROOT_DIR}/base-apt && \ + rmdir --ignore-fail-on-non-empty ${BUILDCHROOT_DIR}/base-apt + mountpoint -q '${BUILDCHROOT_DIR}/sys' && \ + umount -R ${BUILDCHROOT_DIR}/sys + mountpoint -q '${BUILDCHROOT_DIR}/proc' && \ + umount ${BUILDCHROOT_DIR}/proc + mountpoint -q '${BUILDCHROOT_DIR}/dev' && \ + umount -R ${BUILDCHROOT_DIR}/dev + mountpoint -q '${BUILDCHROOT_DIR}/downloads' && \ + umount ${BUILDCHROOT_DIR}/downloads + mountpoint -q '${BUILDCHROOT_DIR}/isar-apt' && \ + umount ${BUILDCHROOT_DIR}/isar-apt && \ + rmdir --ignore-fail-on-non-empty ${BUILDCHROOT_DIR}/isar-apt + ) 9>'${MOUNT_LOCKFILE}' +EOSUDO +} diff --git a/meta/classes/dpkg-base.bbclass b/meta/classes/dpkg-base.bbclass index d5e70f1..ed162b3 100644 --- a/meta/classes/dpkg-base.bbclass +++ b/meta/classes/dpkg-base.bbclass @@ -181,6 +181,7 @@ def dpkg_do_mounts(d): 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) diff --git a/meta/classes/ext4-img.bbclass b/meta/classes/ext4-img.bbclass index 334dc64..26e0137 100644 --- a/meta/classes/ext4-img.bbclass +++ b/meta/classes/ext4-img.bbclass @@ -17,6 +17,8 @@ do_ext4_image() { sudo chroot ${BUILDCHROOT_DIR} /sbin/mke2fs ${MKE2FS_ARGS} \ -F -d '${PP_ROOTFS}' '${PP_DEPLOY}/${EXT4_IMAGE_FILE}' + + image_undo_mounts } addtask ext4_image before do_image after do_image_tools diff --git a/meta/classes/fit-img.bbclass b/meta/classes/fit-img.bbclass index 221ac3f..da8e1da 100644 --- a/meta/classes/fit-img.bbclass +++ b/meta/classes/fit-img.bbclass @@ -23,5 +23,7 @@ do_fit_image() { # Create fit image using buildchroot tools sudo chroot ${BUILDCHROOT_DIR} /usr/bin/mkimage ${MKIMAGE_ARGS} \ -f '${PP_WORK}/${FIT_IMAGE_SOURCE}' '${PP_DEPLOY}/${FIT_IMAGE_FILE}' + + image_undo_mounts } addtask fit_image before do_image after do_image_tools do_transform_template diff --git a/meta/classes/image-tools-extension.bbclass b/meta/classes/image-tools-extension.bbclass index 0b067ff..4738479 100644 --- a/meta/classes/image-tools-extension.bbclass +++ b/meta/classes/image-tools-extension.bbclass @@ -40,5 +40,7 @@ do_install_imager_deps() { apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends -y \ --allow-unauthenticated --allow-downgrades install \ ${IMAGER_INSTALL}' + + buildchroot_undo_mounts } addtask install_imager_deps before do_image_tools diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass index ec93cab..9f9b3f8 100644 --- a/meta/classes/image.bbclass +++ b/meta/classes/image.bbclass @@ -62,6 +62,15 @@ image_do_mounts() { buildchroot_do_mounts } +image_undo_mounts() { + buildchroot_undo_mounts + sudo flock ${MOUNT_LOCKFILE} -c ' \ + umount "${BUILDROOT_DEPLOY}" + umount "${BUILDROOT_ROOTFS}" + umount "${BUILDROOT_WORK}" + ' +} + ROOTFSDIR = "${IMAGE_ROOTFS}" ROOTFS_FEATURES += "clean-package-cache generate-manifest export-dpkg-status" ROOTFS_PACKAGES += "${IMAGE_PREINSTALL} ${IMAGE_INSTALL}" diff --git a/meta/classes/isar-events.bbclass b/meta/classes/isar-events.bbclass index 4c49635..1deedb9 100644 --- a/meta/classes/isar-events.bbclass +++ b/meta/classes/isar-events.bbclass @@ -8,6 +8,7 @@ addhandler build_started python build_started() { bb.utils.remove(d.getVar('TMPDIR') + "/work/*/*/*/temp/once.*") + os.system('sudo rm %s/work/*/*/*/rootfs/.mount' % d.getVar('TMPDIR')) } build_started[eventmask] = "bb.event.BuildStarted" diff --git a/meta/classes/ubi-img.bbclass b/meta/classes/ubi-img.bbclass index 2178b50..0f4c4cb 100644 --- a/meta/classes/ubi-img.bbclass +++ b/meta/classes/ubi-img.bbclass @@ -26,5 +26,7 @@ do_ubi_image() { # Create ubi image using buildchroot tools sudo chroot ${BUILDCHROOT_DIR} /usr/sbin/ubinize ${UBINIZE_ARGS} \ -o '${PP_DEPLOY}/${UBI_IMAGE_FILE}' '${PP_WORK}/${UBINIZE_CFG}' + + image_undo_mounts } addtask ubi_image before do_image after do_image_tools do_transform_template diff --git a/meta/classes/ubifs-img.bbclass b/meta/classes/ubifs-img.bbclass index 78926f6..e422b46 100644 --- a/meta/classes/ubifs-img.bbclass +++ b/meta/classes/ubifs-img.bbclass @@ -21,6 +21,8 @@ do_ubifs_image() { # Create ubifs image using buildchroot tools sudo chroot ${BUILDCHROOT_DIR} /usr/sbin/mkfs.ubifs ${MKUBIFS_ARGS} \ -r '${PP_ROOTFS}' '${PP_DEPLOY}/${UBIFS_IMAGE_FILE}' + + image_undo_mounts } addtask ubifs_image before do_image after do_image_tools diff --git a/meta/classes/wic-img.bbclass b/meta/classes/wic-img.bbclass index 76606f8..01baf89 100644 --- a/meta/classes/wic-img.bbclass +++ b/meta/classes/wic-img.bbclass @@ -200,4 +200,5 @@ EOSUDO done rm -rf ${BUILDCHROOT_DIR}/${WICTMP} rm -rf ${IMAGE_ROOTFS}/../pseudo + buildchroot_undo_mounts } -- 2.25.1