From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 7016230395466219520 X-Received: by 2002:a2e:a22e:: with SMTP id i14mr2567937ljm.482.1636026687683; Thu, 04 Nov 2021 04:51:27 -0700 (PDT) X-BeenThere: isar-users@googlegroups.com Received: by 2002:a05:6512:1314:: with SMTP id x20ls140461lfu.1.gmail; Thu, 04 Nov 2021 04:51:26 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx5bJoiaHqt0aD6IvykaOfhsyAeWupeYgJRMlFwZDwJzn4DtPoAiExvTsW50/D/66yY6yZM X-Received: by 2002:a05:6512:3a82:: with SMTP id q2mr20056542lfu.17.1636026686660; Thu, 04 Nov 2021 04:51:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1636026686; cv=none; d=google.com; s=arc-20160816; b=nWvlCx0rofUAdALSGNNFk3zuYfGZaUsRlsh9yZ58EsxP94y4EWzOXlRmOGdnAZ8kaY wuipSfRV9Jki2RQJ/H/2u1F7KOCLh0THfWJzgaSaU8jX1jjahjFJkrf2g2eiGKf8oRF1 m9HLXDEeWh1wRYr5yNEEe/BzMQ0FokwgT7NaXASezllL8P1lA/6BAE8lkNQeZBA80YXx QZKxKoSFe3vJ56RKXXS3Z738uOWCQ3bmR85QQwKNhmhv1xxEFzNrBi3qLwF0hvDiAOUz ySYe09DnNgKEhKEf9hppWX8W8sYN2rZ6S4qVH+L4twRdyVQQw68clXV+hUEkuqJJEOdt GMcg== 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=vOv+zFx9DwFEafbZxVVkMCQHCxEcx71x3U0SejgrwRiA0Mopco51O76e8GDk8B5b2t wuezUDQSmwKch8yfOdh/UZBHu7NO6PBtfYyEgtyy9OeRNCgHUnnSFCxzztkhxYAl3UO6 tDcMA5LTOSCKKjqcF8wAnRoZHVtezsbYyL1Hmf3rnJvaE07nbCzsw3e3uP4j6J55jHS6 GtI3KmabBzpfkN7Q9dH2vaNoNU3Q8LAPf62Sbb2VisJJ711b7VYVeu1wy444AwRE4v8O VddbxVX1ORLyvrJRSmOzQrrzGr0GUuybenmzHcLrW3cQERwC/CzB2+fGHPea9Z18qZLC F9Bw== ARC-Authentication-Results: i=1; gmr-mx.google.com; spf=pass (google.com: domain of adriaan.schmidt@siemens.com designates 192.35.17.2 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 thoth.sbs.de (thoth.sbs.de. [192.35.17.2]) by gmr-mx.google.com with ESMTPS id f9si271686ljj.4.2021.11.04.04.51.26 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 04 Nov 2021 04:51:26 -0700 (PDT) Received-SPF: pass (google.com: domain of adriaan.schmidt@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 adriaan.schmidt@siemens.com designates 192.35.17.2 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 thoth.sbs.de (8.15.2/8.15.2) with ESMTPS id 1A4BpPbP025219 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 4 Nov 2021 12:51:26 +0100 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 1A4BpPbN026036; Thu, 4 Nov 2021 12:51:25 +0100 From: Adriaan Schmidt To: isar-users@googlegroups.com Cc: Adriaan Schmidt Subject: [PATCH v5 09/13] sstate: add caching to rootfs Date: Thu, 4 Nov 2021 12:51:19 +0100 Message-Id: <20211104115123.2519356-10-adriaan.schmidt@siemens.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20211104115123.2519356-1-adriaan.schmidt@siemens.com> References: <20211104115123.2519356-1-adriaan.schmidt@siemens.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-TUID: hXAfQ0yQtGUB 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