From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 7016230395466219520 X-Received: by 2002:a17:90a:ea09:: with SMTP id w9mr5896114pjy.46.1636613261130; Wed, 10 Nov 2021 22:47:41 -0800 (PST) X-BeenThere: isar-users@googlegroups.com Received: by 2002:a05:6a00:24cc:: with SMTP id d12ls918923pfv.1.gmail; Wed, 10 Nov 2021 22:47:40 -0800 (PST) X-Google-Smtp-Source: ABdhPJxmRiPq+f+OO2+lk2ALy7EhChrxWkBJAKQdtQXz2GBBtD7XZgW+0JiFym/t4AXawRkSLkmY X-Received: by 2002:a05:6a00:2311:b0:431:c19f:2a93 with SMTP id h17-20020a056a00231100b00431c19f2a93mr4713008pfh.11.1636613260423; Wed, 10 Nov 2021 22:47:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1636613260; cv=none; d=google.com; s=arc-20160816; b=J4q6J+7BPQfo3q4bq0Ph0nKfGFcq+ZgURxhjuCs7p9cyS2ccQyCnx+xTJV7JF8MVSI dCRdsj+5kKGt03Rh4XI0KprxZyMcZpMKY7Hkitwx/TLuddR/yiKyZX7b8qKKPGZNiQmj IaFVLgas6W/IfAF7HSVrOOqC4I+A30sgFhWVuitukNYDFdRjzq1/xO/12Cw14QFqQsRG xUy0KS2KR00p50RmnzfKsHGlI6udrAo2e8W8YmGLk+sTyXuYXV8K5oKLUgA6XyoUb7Ca jjcuNZwhc1AvTlOUoyTXOWan5JEdj66IHMPPWgUN5oCdIYKb7ZTCYlyE+ASPvCKws4Lj iqFg== 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=thPZ3NTjCXz0pV9sSx9vDOMM2V6biFBeHcezZkWwrOQ=; b=mR21aDMVaJPNKpebRv+tQzE5HSOYZ/DVUXQMyDKd4tt0da1bfwYDUQzg6nOfRUqE6R tQmqG4OUM/Oyspa3lxr4P3V7kcqyJCRaHilPw1bNJTt2Rb21cKXFLHR2yw0M0p2R/nVr uInp+inivBpSXqNDu7mctPqHZYqiD3xC4Zwa6zwh+IEJMqVTKRaCMpZv18YNObK6OQ8h dPc0rdUpgIpKArHMqjZ3/abAOkvJxFRo6g1i4DCUc+LvPfV572vw5TWN1A7odHp3kner il8nWphvuUS4S4WDNEgr/IzLzQ3SgFqq/hG+WPCHkGKxQC47eGzPiooOo0m0+aYY3b71 Sx8A== ARC-Authentication-Results: i=1; gmr-mx.google.com; spf=pass (google.com: domain of adriaan.schmidt@siemens.com designates 194.138.37.40 as permitted sender) smtp.mailfrom=adriaan.schmidt@siemens.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=siemens.com Return-Path: Received: from gecko.sbs.de (gecko.sbs.de. [194.138.37.40]) by gmr-mx.google.com with ESMTPS id q20si213200pgt.1.2021.11.10.22.47.39 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 10 Nov 2021 22:47:40 -0800 (PST) Received-SPF: pass (google.com: domain of adriaan.schmidt@siemens.com designates 194.138.37.40 as permitted sender) client-ip=194.138.37.40; Authentication-Results: gmr-mx.google.com; spf=pass (google.com: domain of adriaan.schmidt@siemens.com designates 194.138.37.40 as permitted sender) smtp.mailfrom=adriaan.schmidt@siemens.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=siemens.com Received: from mail2.sbs.de (mail2.sbs.de [192.129.41.66]) by gecko.sbs.de (8.15.2/8.15.2) with ESMTPS id 1AB6lcX2020151 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 11 Nov 2021 07:47:38 +0100 Received: from random.ppmd.siemens.net (random.ppmd.siemens.net [139.25.68.25]) by mail2.sbs.de (8.15.2/8.15.2) with ESMTP id 1AB6lbcc012388; Thu, 11 Nov 2021 07:47:38 +0100 From: Adriaan Schmidt To: isar-users@googlegroups.com Cc: Adriaan Schmidt Subject: [PATCH v6 09/13] sstate: add caching to rootfs Date: Thu, 11 Nov 2021 07:47:24 +0100 Message-Id: <20211111064728.2375760-10-adriaan.schmidt@siemens.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20211111064728.2375760-1-adriaan.schmidt@siemens.com> References: <20211111064728.2375760-1-adriaan.schmidt@siemens.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-TUID: QnIRv3JlNdkI We cache the output of do_rootfs. Again "sudo tar" to preserve ownerships and permissions. In addition, it can happen that there are active mounts while tar'ing the rootfs (there shouldn't be, but I've seen cases where deb-src is mounted). Unfortunately --one-file-system does not stop at bind mounts, so we use a trick with a temporary mount to ensure that we don't package more than we want. Special care needs to be taken with image and initramfs, which are MACHINE specific. So they adapt sstate manifest location to ensure that there is no false sharing. Signed-off-by: Adriaan Schmidt --- meta/classes/image.bbclass | 3 +++ meta/classes/initramfs.bbclass | 3 +++ meta/classes/rootfs.bbclass | 27 +++++++++++++++++++++++++++ 3 files changed, 33 insertions(+) diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass index 5a0f32e..eedc160 100644 --- a/meta/classes/image.bbclass +++ b/meta/classes/image.bbclass @@ -6,6 +6,9 @@ WORKDIR = "${TMPDIR}/work/${DISTRO}-${DISTRO_ARCH}/${PN}-${MACHINE}-${IMAGE_TYPE STAMP = "${STAMPS_DIR}/${DISTRO}-${DISTRO_ARCH}/${PN}-${MACHINE}-${IMAGE_TYPE}/${PV}-${PR}" STAMPCLEAN = "${STAMPS_DIR}/${DISTRO}-${DISTRO_ARCH}/${PN}-${MACHINE}-${IMAGE_TYPE}/*-*" +# Sstate also needs to be machine-specific +SSTATE_MANIFESTS = "${TMPDIR}/sstate-control/${MACHINE}-${DISTRO}-${DISTRO_ARCH}" + IMAGE_INSTALL ?= "" IMAGE_TYPE ?= "ext4-img" IMAGE_ROOTFS ?= "${WORKDIR}/rootfs" diff --git a/meta/classes/initramfs.bbclass b/meta/classes/initramfs.bbclass index 10a642b..2cec85d 100644 --- a/meta/classes/initramfs.bbclass +++ b/meta/classes/initramfs.bbclass @@ -5,6 +5,9 @@ WORKDIR = "${TMPDIR}/work/${DISTRO}-${DISTRO_ARCH}/${PN}-${MACHINE}/${PV}-${PR}" STAMP = "${STAMPS_DIR}/${DISTRO}-${DISTRO_ARCH}/${PN}-${MACHINE}/${PV}-${PR}" STAMPCLEAN = "${STAMPS_DIR}/${DISTRO}-${DISTRO_ARCH}/${PN}-${MACHINE}/*-*" +# Sstate also needs to be machine-specific +SSTATE_MANIFESTS = "${TMPDIR}/sstate-control/${MACHINE}-${DISTRO}-${DISTRO_ARCH}" + INITRAMFS_INSTALL ?= "" INITRAMFS_PREINSTALL ?= "" INITRAMFS_ROOTFS ?= "${WORKDIR}/rootfs" diff --git a/meta/classes/rootfs.bbclass b/meta/classes/rootfs.bbclass index b38de66..e0604e0 100644 --- a/meta/classes/rootfs.bbclass +++ b/meta/classes/rootfs.bbclass @@ -265,3 +265,30 @@ python do_rootfs() { pass } addtask rootfs before do_build + +do_rootfs[depends] = "base-apt:do_cache isar-apt:do_cache_config" + +SSTATETASKS += "do_rootfs" +ROOTFS_SSTATE = "${WORKDIR}/rootfs-sstate" +do_rootfs[dirs] += "${ROOTFS_SSTATE} ${WORKDIR}/mnt/rootfs" +do_rootfs[cleandirs] += "${ROOTFS_SSTATE}" +do_rootfs[sstate-plaindirs] = "${ROOTFS_SSTATE}" +do_rootfs[sstate-interceptfuncs] = "rootfs_sstate_prepare" + +# the buildchroot is owned by root, so we need some sudoing to pack and unpack +rootfs_sstate_prepare() { + sudo mount --bind ${WORKDIR}/rootfs ${WORKDIR}/mnt/rootfs -o ro + sudo tar -C ${WORKDIR}/mnt -cpf ${ROOTFS_SSTATE}/rootfs.tar --one-file-system rootfs + sudo umount ${WORKDIR}/mnt/rootfs +} +do_rootfs_sstate_prepare[lockfiles] = "${REPO_ISAR_DIR}/isar.lock" + +rootfs_sstate_finalize() { + sudo tar -C ${WORKDIR} -xpf ${ROOTFS_SSTATE}/rootfs.tar +} + +python do_rootfs_setscene() { + sstate_setscene(d) + bb.build.exec_func('rootfs_sstate_finalize', d) +} +addtask do_rootfs_setscene -- 2.30.2