From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 7003273629391650816 X-Received: by 2002:a05:6512:400b:: with SMTP id br11mr1929704lfb.512.1630576716956; Thu, 02 Sep 2021 02:58:36 -0700 (PDT) X-BeenThere: isar-users@googlegroups.com Received: by 2002:a05:6512:4016:: with SMTP id br22ls422793lfb.0.gmail; Thu, 02 Sep 2021 02:58:35 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyhyFAcdf6c040l/MoVw+xTVYC4ygfkuw+2wZd//qMZG2pVpZprmn5BI3p+QBybYZs+1312 X-Received: by 2002:a05:6512:318a:: with SMTP id i10mr1988600lfe.444.1630576715785; Thu, 02 Sep 2021 02:58:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1630576715; cv=none; d=google.com; s=arc-20160816; b=Lnd4HKZCAEwab39tDS9I2EglAfdDaA14H82D31h4ZCDfIqU7aILHipFx02e7nfYGvn 9j+K9jOxHNIEEinEjuGmOer3y5aqe5mpfgSMKYrQRQF1fJ2IfIW3X5FJX0MB9eCFhivZ pjNjhEqzw+hGIFIfmzHvewlC7nuio9qtNiu7hIVMXw9ppr3XORjmD/nJGCa6Bq9WBczF /lOekYiwXOjJbVJ5vsNw27ha0GEcU0XQHLG960pIcOwqKjQkPzt9ZCFRnQ5OEAuM3Bul ioI7dy6x3Vx5NpH2IRucNL2YnbH5ZRDZWPTjwpz6tUEwYAPyHy0NlKB4psHzEGvT7v9s u+GQ== 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:to:from; bh=Lojl3lMWqmKfCSMhzG2enti7KnqJGsNHPLZBcM3oN78=; b=OKTsv4AOPg6cvCK6ocy3e0iJB6G+WU4SLX+g8jIBYHzrfvKIuoFUdY9w21jG1n3WbO tzlaXdgBt6vEWtQ01JFJyxyNQqxqJSmYRDfsb8FTJSj6Wy/WYj6Ac8Sbs/LtK4sQL2jW hfs+/qFS5ydsMydUwlUSm1yKghr6leRgYPmUNkAimN2Jad1QFLy8DgLbyrInXNMGBf55 3VpTZ0JJzeKg399nD/wW6r0QvZatwN4Dfol+m2x1t2UhnTFQLnesxySoIyxlTOLg+c49 UeUGH8y+SQ/U8QMlrVgzgp4jp7CyEmJj8osxcgKdrTceSE4UMX46qXd73cYvMuRCt8rw pfgQ== ARC-Authentication-Results: i=1; gmr-mx.google.com; spf=pass (google.com: domain of ubely@ilbers.de designates 85.214.156.166 as permitted sender) smtp.mailfrom=ubely@ilbers.de Return-Path: Received: from shymkent.ilbers.de (shymkent.ilbers.de. [85.214.156.166]) by gmr-mx.google.com with ESMTPS id t7si46555ljc.4.2021.09.02.02.58.35 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 02 Sep 2021 02:58:35 -0700 (PDT) Received-SPF: pass (google.com: domain of ubely@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 ubely@ilbers.de designates 85.214.156.166 as permitted sender) smtp.mailfrom=ubely@ilbers.de Received: from baighyz.m.ilbers.de (host-80-81-17-52.static.customer.m-online.net [80.81.17.52]) (authenticated bits=0) by shymkent.ilbers.de (8.15.2/8.15.2/Debian-8) with ESMTPSA id 1829wIgp012267 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Thu, 2 Sep 2021 11:58:29 +0200 From: Uladzimir Bely To: isar-users@googlegroups.com Subject: [RFC 2/4] isar-apt: PoC of reusing isar-apt repo Date: Thu, 2 Sep 2021 11:58:15 +0200 Message-Id: <20210902095817.32165-3-ubely@ilbers.de> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210902095817.32165-1-ubely@ilbers.de> References: <20210902095817.32165-1-ubely@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: 1xu6j72MZRHj The idea of reusing isar-apt repo at second build is to early exit from build-related tasks if the package with the same version already exists in current isar-apt. Also, redefining default values of REPO_ISAR_DIR and REPO_ISAR_DB_DIR maybe useful to share isar-apt between different builds REPO_ISAR_DIR = "/path/to/isar-apt/${DISTRO}-${DISTRO_ARCH}/apt" REPO_ISAR_DB_DIR = "/path/to/isar-apt/${DISTRO}-${DISTRO_ARCH}/db" The variable ISAR_APT_ALWAYS_REBUILD_ON_CHANGE in local.conf allow to control the behvaiour: 0: Use the cache, rebuilt only if needed 1: Don't use cache, rebuilt packages always (old behaviour) Signed-off-by: Uladzimir Bely --- meta-isar/conf/local.conf.sample | 4 ++ meta/classes/dpkg-base.bbclass | 1 + meta/classes/isar-apt-cache.bbclass | 72 +++++++++++++++++++++++++++++ 3 files changed, 77 insertions(+) create mode 100644 meta/classes/isar-apt-cache.bbclass diff --git a/meta-isar/conf/local.conf.sample b/meta-isar/conf/local.conf.sample index 96a8beb..ae1ba45 100644 --- a/meta-isar/conf/local.conf.sample +++ b/meta-isar/conf/local.conf.sample @@ -201,6 +201,10 @@ ISAR_CROSS_COMPILE ?= "0" # does not access the network #BB_NO_NETWORK ?= "1" +# +# Comment or set to 0 to use previously built isar_apt repo if package version hasn't changed +ISAR_APT_ALWAYS_REBUILD_ON_CHANGE ?= "1" + # Set root password to 'root' # Password was encrypted using following command: # mkpasswd -m sha512crypt -R 10000 diff --git a/meta/classes/dpkg-base.bbclass b/meta/classes/dpkg-base.bbclass index aa529ca..59113b3 100644 --- a/meta/classes/dpkg-base.bbclass +++ b/meta/classes/dpkg-base.bbclass @@ -9,6 +9,7 @@ inherit debianize inherit terminal inherit repository inherit deb-dl-dir +inherit isar-apt-cache DEPENDS ?= "" diff --git a/meta/classes/isar-apt-cache.bbclass b/meta/classes/isar-apt-cache.bbclass new file mode 100644 index 0000000..c9533f0 --- /dev/null +++ b/meta/classes/isar-apt-cache.bbclass @@ -0,0 +1,72 @@ +# This software is a part of ISAR. +# Copyright (C) 2017-2019 Siemens AG +# Copyright (C) 2019 ilbers GmbH +# +# SPDX-License-Identifier: MIT + +iac_check_package_in_repo() { + DISTS_ISAR="${REPO_ISAR_DIR}/${DISTRO}/dists/${DEBDISTRONAME}" + PACKAGES="${DISTS_ISAR}/main/binary-${DISTRO_ARCH}/Packages" + + if [ ! -f "${PACKAGES}" ]; then + return 1 + fi + + if ! grep -q "^Package: ${PN}$" "${PACKAGES}"; then + return 2 + fi + + local repo_version=$(sed -n -e '/^Package: ${PN}$/,/Version/p' ${PACKAGES} | grep '^Version' | sed -e 's/.* //') + local new_version=$(head -n1 ${S}/debian/changelog | sed -e 's/.* (\(.*\)) .*/\1/') + + if [ "${repo_version}" != "${new_version}" ]; then + return 3 + fi + + bbnote "Package ${PN}-${PV} is already in isar-apt repo, reuse it" + return 0 +} + +iac_check_need_rebuild() { + if [ "${ISAR_APT_ALWAYS_REBUILD_ON_CHANGE}" = "1" ]; then + return 1 + fi + + iac_check_package_in_repo +} + +def iac_check_task_early_exit(): + try: + bb.build.exec_func("iac_check_need_rebuild", d) + return True + except: + return False + + +python do_apt_fetch_prepend() { + if iac_check_task_early_exit(): + return 0 +} + +python do_apt_unpack_prepend() { + if iac_check_task_early_exit(): + return 0 +} + +do_prepare_build_prepend() { + iac_check_need_rebuild && return +} + +do_deploy_deb_prepend() { + iac_check_need_rebuild && return +} + +python do_install_builddeps_prepend() { + if iac_check_task_early_exit(): + return 0 +} + +python do_dpkg_build_prepend() { + if iac_check_task_early_exit(): + return 0 +} -- 2.20.1