From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 6521574339082452992 X-Received: by 10.28.239.20 with SMTP id n20mr426877wmh.23.1518598355754; Wed, 14 Feb 2018 00:52:35 -0800 (PST) X-BeenThere: isar-users@googlegroups.com Received: by 10.28.165.130 with SMTP id o124ls2035841wme.9.canary-gmail; Wed, 14 Feb 2018 00:52:35 -0800 (PST) X-Google-Smtp-Source: AH8x225sOwiDf+VCvZ20OR+yfYc1YBdYXMzFJGHoRIs0XHG/68m2vXjYGdXO+cr1bJRlrX/uOH/F X-Received: by 10.28.91.147 with SMTP id p141mr435186wmb.31.1518598355171; Wed, 14 Feb 2018 00:52:35 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1518598355; cv=none; d=google.com; s=arc-20160816; b=szK4Q+I+alYeGnqPu1ZVsBaqVFHktzvdAr4XcwbRxW3E0P56jq88/JRni5olTB5sRN nkt89G5hTvwqBe38FWx90dw2yt5b5T8FLdgwRaX4OPLH6XH3ZExmbz7fAfGyJ6CIjS22 0MZBGZPJk9pIOSgHpryWnFOUuOB8Ut0xmj5ZT/JvqDxliyho9HYxjPgd8iImhRhaXkW0 WpC3g0H6y6WmqMQa4dXBBbIfso1KJ3B+qGY58RKCX9ldESAMS4B4KplpWI7J4xpxsBQP MfyxTJNFe4eTpJEx932DpRRe416eG6V/av9DAt1o2mYK7fdpHpe8QtsK7SyTZ7PZyLhk SMtQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:content-language:in-reply-to:mime-version :user-agent:date:message-id:references:to:from:subject :arc-authentication-results; bh=En5Pseep2mjVuypwdDKMG8TZwmFQjt5Kokhz5M/0z5c=; b=bbBETlUWWvTmdWSHQD/zji/m7L3R/htyyuUK+XWaSHCTmK/v+VuZkxfCyygcj5rBA7 gFFrQP6lQMew6Tr8z4XZtGgfwWt/XOFn/c1UH+XnuJO6JaZ22oSG7fldUPFNGAr9MzhW mV3iSeJUIjRDdiJa7CHQMG5hLQEvhOyMrSB8B076mZtSxkh7R/UxtSIgRUFipubJYngs fIU+2AOEB4/EdMYq+606RgSp1w4308zG1W3HPT7vg8H5IMSeCpGUPStcaXd0nSWJYEvL h9uoqB2NzevZb9pRlf05JIOrvKpBzxnLoqVcs2VPSFEZ50vJ6y+l4rqdYgieVFz8Up4H +CkA== ARC-Authentication-Results: i=1; gmr-mx.google.com; spf=pass (google.com: domain of jan.kiszka@siemens.com designates 192.35.17.2 as permitted sender) smtp.mailfrom=jan.kiszka@siemens.com Return-Path: Received: from thoth.sbs.de (thoth.sbs.de. [192.35.17.2]) by gmr-mx.google.com with ESMTPS id s5si784264wra.3.2018.02.14.00.52.35 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 14 Feb 2018 00:52:35 -0800 (PST) Received-SPF: pass (google.com: domain of jan.kiszka@siemens.com designates 192.35.17.2 as permitted sender) client-ip=192.35.17.2; Authentication-Results: gmr-mx.google.com; spf=pass (google.com: domain of jan.kiszka@siemens.com designates 192.35.17.2 as permitted sender) smtp.mailfrom=jan.kiszka@siemens.com Received: from mail2.siemens.de (mail2.siemens.de [139.25.208.11]) by thoth.sbs.de (8.15.2/8.15.2) with ESMTPS id w1E8qYgi027966 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Wed, 14 Feb 2018 09:52:34 +0100 Received: from [167.87.7.84] ([167.87.7.84]) by mail2.siemens.de (8.15.2/8.15.2) with ESMTP id w1E8qYpX011514 for ; Wed, 14 Feb 2018 09:52:34 +0100 Subject: [PATCH v3 5/9] Move buildchroot mounts into dpkg-base class From: Jan Kiszka To: isar-users References: <697b09bb60a515430f655989e859263922148264.1518552327.git.jan.kiszka@siemens.com> Message-ID: <0ce19aaa-263d-7d13-18ea-5a665f59852d@siemens.com> Date: Wed, 14 Feb 2018 09:52:34 +0100 User-Agent: Mozilla/5.0 (X11; U; Linux i686 (x86_64); de; rv:1.8.1.12) Gecko/20080226 SUSE/2.0.0.12-1.1 Thunderbird/2.0.0.12 Mnenhy/0.7.5.666 MIME-Version: 1.0 In-Reply-To: <697b09bb60a515430f655989e859263922148264.1518552327.git.jan.kiszka@siemens.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-TUID: FuBnbM08G0GG From: Jan Kiszka This avoids the unfortunate setup_mounts task which is either not executed on rebuilds or causes excessive package rebuilds. We just need ensure prior to switching into the buildchroot that all mount points are populated. The mounts may race with parallel build, so lock-protect the check if they are needed and their execution. Note that the more beautiful syntax using ( flock -n 9; ... ) 9>lockfile as described in the flock man page does not work in bitbake shell functions. Signed-off-by: Jan Kiszka --- Changes in v3: - use flock instead of unreliable check pattern meta/classes/dpkg-base.bbclass | 11 ++++++++- meta/recipes-devtools/buildchroot/buildchroot.bb | 30 +++--------------------- 2 files changed, 13 insertions(+), 28 deletions(-) diff --git a/meta/classes/dpkg-base.bbclass b/meta/classes/dpkg-base.bbclass index a45fbce..895ff26 100644 --- a/meta/classes/dpkg-base.bbclass +++ b/meta/classes/dpkg-base.bbclass @@ -2,7 +2,7 @@ # Copyright (C) 2017 Siemens AG # Add dependency from buildchroot creation -do_build[depends] = "buildchroot:do_setup_mounts" +do_build[depends] = "buildchroot:do_build" # Add dependency between Isar recipes DEPENDS ?= "" @@ -20,11 +20,20 @@ dpkg_runbuild() { die "This should never be called, overwrite it in your derived class" } +MOUNT_LOCKFILE = "${TMPDIR}/buildchroot-mount.lock" + # Wrap the function dpkg_runbuild with the bind mount for buildroot do_build() { mkdir -p ${BUILDROOT} sudo mount --bind ${WORKDIR} ${BUILDROOT} + sudo flock ${MOUNT_LOCKFILE} -c ' \ + if ! grep -q ${BUILDCHROOT_DIR}/isar-apt /proc/mounts; then \ + mount --bind ${DEPLOY_DIR_APT}/${DISTRO} ${BUILDCHROOT_DIR}/isar-apt; \ + mount -t devtmpfs -o mode=0755,nosuid devtmpfs ${BUILDCHROOT_DIR}/dev; \ + mount -t proc none ${BUILDCHROOT_DIR}/proc; \ + fi' + dpkg_runbuild sudo umount ${BUILDROOT} 2>/dev/null || true diff --git a/meta/recipes-devtools/buildchroot/buildchroot.bb b/meta/recipes-devtools/buildchroot/buildchroot.bb index 570c0ad..cd91228 100644 --- a/meta/recipes-devtools/buildchroot/buildchroot.bb +++ b/meta/recipes-devtools/buildchroot/buildchroot.bb @@ -60,7 +60,9 @@ do_build() { -e 's|##DIR_HOOKS##|./'"$WORKDIR_REL"'/hooks_multistrap|g' \ "${WORKDIR}/multistrap.conf.in" > "${WORKDIR}/multistrap.conf" - do_setup_mounts + sudo mount --bind ${DEPLOY_DIR_APT}/${DISTRO} ${BUILDCHROOT_DIR}/isar-apt + sudo mount -t devtmpfs -o mode=0755,nosuid devtmpfs ${BUILDCHROOT_DIR}/dev + sudo mount -t proc none ${BUILDCHROOT_DIR}/proc # Create root filesystem sudo -E multistrap -a ${DISTRO_ARCH} -d "${BUILDCHROOT_DIR}" -f "${WORKDIR}/multistrap.conf" @@ -70,30 +72,4 @@ do_build() { # Configure root filesystem sudo chroot ${BUILDCHROOT_DIR} /configscript.sh - - do_cleanup_mounts -} - -# Invalidate stamp for do_setup_mounts before each build start. -# This will guarantee that this function will be executed once -# per build. -python __anonymous() { - stamp = d.getVar("STAMP") + ".do_setup_mounts." + d.getVarFlag("do_setup_mounts", 'stamp-extra-info') - os.remove(stamp) if os.path.exists(stamp) else None -} - -do_setup_mounts[stamp-extra-info] = "${DISTRO}-${DISTRO_ARCH}" - -do_setup_mounts() { - sudo mount --bind ${DEPLOY_DIR_APT}/${DISTRO} ${BUILDCHROOT_DIR}/isar-apt - sudo mount -t devtmpfs -o mode=0755,nosuid devtmpfs ${BUILDCHROOT_DIR}/dev - sudo mount -t proc none ${BUILDCHROOT_DIR}/proc -} - -addtask setup_mounts after do_build - -do_cleanup_mounts() { - sudo umount ${BUILDCHROOT_DIR}/isar-apt 2>/dev/null || true - sudo umount ${BUILDCHROOT_DIR}/dev 2>/dev/null || true - sudo umount ${BUILDCHROOT_DIR}/proc 2>/dev/null || true } -- 2.13.6