From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 6959801776553852928 X-Received: by 2002:aa7:cb48:: with SMTP id w8mr16271455edt.55.1620455132648; Fri, 07 May 2021 23:25:32 -0700 (PDT) X-BeenThere: isar-users@googlegroups.com Received: by 2002:a50:fa90:: with SMTP id w16ls555436edr.1.gmail; Fri, 07 May 2021 23:25:31 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwhrYsDCw+cFUAvZC+HPfVgoJB7ZQDXqhhC8wtlDrF8ji0sgrUWuJZqw5dsTl4Vg/lT6kf2 X-Received: by 2002:aa7:d917:: with SMTP id a23mr15906000edr.260.1620455131852; Fri, 07 May 2021 23:25:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620455131; cv=none; d=google.com; s=arc-20160816; b=woJSJfAC+Goh/XgRS/270V3ySHvKSlAODw6QAG5Z+ibJfhR6GcO6tzjLVQeovG6ljm n6d8iA6kkk9fgLaepZO+aGoISPbbnCvzKuvjdi7/5hXL3mzYzgYt+sj5/KlYl76xK72d /P/PkDBbvwXyE5YXaWtc9Z3apGNhO+h9bttMkYEiu8/So8eCMhoxR5n7b23Cin3lhrix yOI9GLs8DbdrooScv9QhaD640yKHsc8ji1b42EXKujceolhOLyq+KWy2LPIArbduAxHd MqWScIDkpe30eGMaaChdb+oVnKGVvP14t8UlH0J2wabeN+13y4WsvVzEwEaaBcumrOZb 5tWg== 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=U/e2j5fhC93wUgK0Zh/QNIjFhx9zSQTcHiAExvzmfUg=; b=0iZEGqkkaHCsrYVlMpKPhUtqOXW2RkAUSPTQLFL+QJCEvph3gr/wDmm0mnFdXjD1M4 cjKHnb5k16MU0pxPgHyhqZpUh7Oi4Tbq+CgqhIdj7GRB46Dhl4HgCx7xtbMp8zn8BnUz qtQjd0A5I0MQYOay3UXut50PxymjZ1Q8dEeS/5LLMmo14gGH9vkK4KD9NCsi4S4jDlv2 22k1KqudJz2BPr1FLnYG9DO45hGbe8MgUBTsg3hpJl2YE0HCpK5N3p2lhqAYqt8tmK0o jzGRPdg34UkaGAdGA8IlBVhbcid36+w/UZE5+4qGZRhLv0LGsMq2n2xRw8craII0Ik/z i4/w== 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 di23si198154edb.0.2021.05.07.23.25.31 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Fri, 07 May 2021 23:25:31 -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-99-50-214-37.mgts.dynamic.pppoe.byfly.by [37.214.50.99] (may be forged)) (authenticated bits=0) by shymkent.ilbers.de (8.15.2/8.15.2/Debian-8) with ESMTPSA id 1486PPYj003793 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Sat, 8 May 2021 08:25:31 +0200 From: Anton Mikanovich To: isar-users@googlegroups.com Cc: Anton Mikanovich Subject: [PATCH v3 2/5] buildchroot: Unmount buildchroot mounts if not needed Date: Sat, 8 May 2021 09:25:15 +0300 Message-Id: <20210508062518.83852-3-amikan@ilbers.de> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210508062518.83852-1-amikan@ilbers.de> References: <20210508062518.83852-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: 7z8Uetf1oPTT Count the usage of BUILDCHROOT_DIR mounts and trigger unmount of them after all tasks using chroot are finished. Signed-off-by: Anton Mikanovich --- meta/classes/buildchroot.bbclass | 47 +++++++++++++++++++ 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/ubi-img.bbclass | 2 + meta/classes/ubifs-img.bbclass | 2 + meta/classes/wic-img.bbclass | 1 + .../buildchroot/buildchroot.inc | 8 ++++ 10 files changed, 76 insertions(+) diff --git a/meta/classes/buildchroot.bbclass b/meta/classes/buildchroot.bbclass index 1a8ee13..97d5301 100644 --- a/meta/classes/buildchroot.bbclass +++ b/meta/classes/buildchroot.bbclass @@ -27,8 +27,20 @@ buildchroot_do_mounts() { sudo -s <<'EOSUDO' ( flock 9 set -e + + count="1" + if [ -f '${BUILDCHROOT_DIR}.mount' ]; then + count=$(($(< '${BUILDCHROOT_DIR}.mount') + 1)) + fi + echo $count > '${BUILDCHROOT_DIR}.mount' + if [ $count -gt 1 ]; then + exit 0 + fi + + mkdir -p '${BUILDCHROOT_DIR}/isar-apt' mountpoint -q '${BUILDCHROOT_DIR}/isar-apt' || mount --bind '${REPO_ISAR_DIR}/${DISTRO}' '${BUILDCHROOT_DIR}/isar-apt' + mkdir -p '${BUILDCHROOT_DIR}/downloads' mountpoint -q '${BUILDCHROOT_DIR}/downloads' || mount --bind '${DL_DIR}' '${BUILDCHROOT_DIR}/downloads' mountpoint -q '${BUILDCHROOT_DIR}/dev' || @@ -59,3 +71,38 @@ buildchroot_do_mounts() { ) 9>'${MOUNT_LOCKFILE}' EOSUDO } + +buildchroot_undo_mounts() { + sudo -s <<'EOSUDO' + ( flock 9 + set -e + + if [ -f '${BUILDCHROOT_DIR}.mount' ]; then + count=$(($(< '${BUILDCHROOT_DIR}.mount') - 1)) + echo $count > '${BUILDCHROOT_DIR}.mount' + else + exit 1 + fi + if [ $count -gt 0 ]; then + exit 0 + fi + rm ${BUILDCHROOT_DIR}.mount + + 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 -R ${BUILDCHROOT_DIR}/proc + mountpoint -q '${BUILDCHROOT_DIR}/dev' && \ + umount -R ${BUILDCHROOT_DIR}/dev + mountpoint -q '${BUILDCHROOT_DIR}/downloads' && \ + umount ${BUILDCHROOT_DIR}/downloads && \ + rmdir --ignore-fail-on-non-empty ${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/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 042a546..bb3a3ee 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 } diff --git a/meta/recipes-devtools/buildchroot/buildchroot.inc b/meta/recipes-devtools/buildchroot/buildchroot.inc index 5a2befb..0c1fb7f 100644 --- a/meta/recipes-devtools/buildchroot/buildchroot.inc +++ b/meta/recipes-devtools/buildchroot/buildchroot.inc @@ -49,6 +49,14 @@ rootfs_do_mounts_append() { EOSUDO } +rootfs_undo_mounts_append() { + sudo -s <<'EOSUDO' + mountpoint -q '${BUILDCHROOT_DIR}/downloads' && \ + umount ${BUILDCHROOT_DIR}/downloads && \ + rmdir --ignore-fail-on-non-empty ${BUILDCHROOT_DIR}/downloads +EOSUDO +} + ROOTFS_POSTPROCESS_COMMAND =+ "buildchroot_install_files" buildchroot_install_files() { sudo mkdir -p "${BUILDCHROOT_DIR}/home/builder" -- 2.25.1