From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 7016230395466219520 X-Received: by 2002:a5d:648b:: with SMTP id o11mr31632022wri.56.1635251300542; Tue, 26 Oct 2021 05:28:20 -0700 (PDT) X-BeenThere: isar-users@googlegroups.com Received: by 2002:adf:ef8b:: with SMTP id d11ls5539795wro.2.gmail; Tue, 26 Oct 2021 05:28:19 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzddKGx3GrYzsGIvloZU1GNFwSYyaviSQR13ZaqC9B8gscmdbqxHuPOTPI2DAcx9L8YknDS X-Received: by 2002:a5d:448b:: with SMTP id j11mr12527410wrq.385.1635251299796; Tue, 26 Oct 2021 05:28:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1635251299; cv=none; d=google.com; s=arc-20160816; b=i0mMd2EjkT6pA6Z+4Hi6tkwk73yXiZt4OhnuoL+rg63QpPd0Woexl6Jt4nVfCazntx jT49A8oZo+0pe5FKDkMhIKHUVbf4kcJ9rj/Z+MBX+IXC2jYwngPYGx2td/2au1eKHZ2C EXdy2TBbl5TDwDSb6kDxBkCNRJkHt4ojqIvGLoeTHtOdO6s9EFlobdJC/S4UST652Eo8 1MDYtEqYglEjN78IfmMQW7mp+ieUpc/o/5ZrANV41t3W6WJ3n158/Esc2Cz2qwfXySxn qqsveGTJ3uLzCq8ylNnyK5JIBjlktqD6936IHCz2it/CHjRwIyW7FvOfX6GekOlNPPY0 sFPA== 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=s5upzTnD+bcZ8pXg0WKgeQN6xMcskzp03rKUi+fmAvxrG7AD0ypq406qE8rhdf2WeC FMWVAdphIqumrubZm/ms7E6n4EHVM4mJubRU5ebi9Xqt+w4PMFCv4RhdmGR496Qiwoeq sgGausH9ryumuTvLCFJBzaSnOEot+BFBgHnLE91rWFIEA/kvKePIl33AB5X8ZT4F7Urh r9qSpaBlk6U31CjCitYJMsybV4CGIZm1zl8v0kMdw9JNTZsofq9QiLkT5HqFDqtVLFOI FZDzggpquA/pWhFUtgtxTAFOsoXclMjDQMW192A2VxEfRR9ujdzJZydVcZUzYwgFFVqq ABiA== ARC-Authentication-Results: i=1; gmr-mx.google.com; spf=pass (google.com: domain of adriaan.schmidt@siemens.com designates 194.138.37.39 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 lizzard.sbs.de (lizzard.sbs.de. [194.138.37.39]) by gmr-mx.google.com with ESMTPS id h3si149373wml.1.2021.10.26.05.28.19 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 26 Oct 2021 05:28:19 -0700 (PDT) Received-SPF: pass (google.com: domain of adriaan.schmidt@siemens.com designates 194.138.37.39 as permitted sender) client-ip=194.138.37.39; Authentication-Results: gmr-mx.google.com; spf=pass (google.com: domain of adriaan.schmidt@siemens.com designates 194.138.37.39 as permitted sender) smtp.mailfrom=adriaan.schmidt@siemens.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=siemens.com Received: from mail1.sbs.de (mail1.sbs.de [192.129.41.35]) by lizzard.sbs.de (8.15.2/8.15.2) with ESMTPS id 19QCSJVf009047 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 26 Oct 2021 14:28:19 +0200 Received: from random.ppmd.siemens.net (random.ppmd.siemens.net [139.25.68.25]) by mail1.sbs.de (8.15.2/8.15.2) with ESMTP id 19QCSIPR013081; Tue, 26 Oct 2021 14:28:19 +0200 From: Adriaan Schmidt To: isar-users@googlegroups.com Cc: Adriaan Schmidt Subject: [PATCH v4 09/10] sstate: add caching to rootfs Date: Tue, 26 Oct 2021 14:28:10 +0200 Message-Id: <20211026122811.2654125-10-adriaan.schmidt@siemens.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20211026122811.2654125-1-adriaan.schmidt@siemens.com> References: <20211026122811.2654125-1-adriaan.schmidt@siemens.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-TUID: 4vHRxCQzF8Wy 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