From: Alexander Smirnov <asmirnov@ilbers.de>
To: isar-users@googlegroups.com
Cc: Alexander Smirnov <asmirnov@ilbers.de>
Subject: [PATCH 3/6] classes/dpkg: Split install for cache
Date: Sun, 27 Aug 2017 18:13:36 +0300 [thread overview]
Message-ID: <20170827151339.12806-4-asmirnov@ilbers.de> (raw)
In-Reply-To: <20170827151339.12806-1-asmirnov@ilbers.de>
Split install function into two parts:
- install_to_cache: if caching is enabled
- install_to_deploy: if caching is disabled
This patch brings flexibility to the implementation and makes it possible
to move all the caching implementation code to dedicated class. The magic
behavior depending on the value of DEBCACHE_ENABLED is now transparent in
the bitbake pipeline (can be inspected via "bitbake -g").
Signed-off-by: Alexander Smirnov <asmirnov@ilbers.de>
---
meta/classes/dpkg.bbclass | 66 ++++++++++++++++++++++++++--------------------
meta/classes/image.bbclass | 2 +-
2 files changed, 38 insertions(+), 30 deletions(-)
diff --git a/meta/classes/dpkg.bbclass b/meta/classes/dpkg.bbclass
index b1e201d..118ba2f 100644
--- a/meta/classes/dpkg.bbclass
+++ b/meta/classes/dpkg.bbclass
@@ -56,46 +56,53 @@ do_build() {
}
# Install package to dedicated deploy directory
-do_binary_deb_install() {
+do_install_to_deploy() {
+ # Deb caching is disabled, simply copy all binary packages to the deploy
+ # directory
+ install -m 644 "${BUILDROOT}"/*.deb "${DEPLOY_DIR_DEB}/"
+}
+
+addtask install_to_deploy after do_build
+do_install_to_deploy[dirs] = "${DEPLOY_DIR_DEB}"
+do_install_to_deploy[stamp-extra-info] = "${DISTRO}-${DISTRO_ARCH}"
+do_install_to_deploy[noexec] = "1"
+
+# Install package to dedicated apt repo
+do_install_to_cache() {
readonly DIR_CACHE="${DEBCACHEDIR}/${DISTRO}"
readonly DIR_DB="${DEBDBDIR}/${DISTRO}"
- if [ "${DEBCACHE_ENABLED}" != "0" ]; then
- # If `bitbake` is running for the first time, the cache doesn't exist
- # yet and needs to be configured using a `distributions` file.
- # A template stored in the layer directory is pre-processed to
- # generate the configuration file, which is then placed in the
- # appropriate directory.
- if [ ! -e "${DIR_CACHE}/conf/distributions" ]; then
- mkdir -p "${DIR_CACHE}/conf"
- sed -e "s#{DISTRO_NAME}#${DEBDISTRONAME}#g" \
- "${DEBFILESDIR}/distributions.in" \
- > "${DIR_CACHE}/conf/distributions"
- fi
-
- # Add binary and source packages to the deb cache
- # If the cache doesn't exist yet, it will be created using the
- # `distributions` file generated above.
- ls -1 "${BUILDROOT}"/*.deb "${BUILDROOT}"/*.dsc | while read -r p; do
- reprepro --waitforlock 3 -b "${DIR_CACHE}" --dbdir "${DIR_DB}" \
- -C main "include${p##*.}" "${DEBDISTRONAME}" "${p}"
- done
- else
- # Deb caching is disabled, simply copy all binary packages to the
- # deploy directory
- mkdir -p "${DEPLOY_DIR_DEB}"
- install -m 644 "${BUILDROOT}"/*.deb "${DEPLOY_DIR_DEB}/"
+ # If `bitbake` is running for the first time, the cache doesn't exist
+ # yet and needs to be configured using a `distributions` file.
+ # A template stored in the layer directory is pre-processed to
+ # generate the configuration file, which is then placed in the
+ # appropriate directory.
+ if [ ! -e "${DIR_CACHE}/conf/distributions" ]; then
+ mkdir -p "${DIR_CACHE}/conf"
+ sed -e "s#{DISTRO_NAME}#${DEBDISTRONAME}#g" \
+ "${DEBFILESDIR}/distributions.in" \
+ > "${DIR_CACHE}/conf/distributions"
fi
+
+ # Add binary and source packages to the deb cache
+ # If the cache doesn't exist yet, it will be created using the
+ # `distributions` file generated above.
+ ls -1 "${BUILDROOT}"/*.deb "${BUILDROOT}"/*.dsc | while read -r p; do
+ reprepro --waitforlock 3 -b "${DIR_CACHE}" --dbdir "${DIR_DB}" \
+ -C main "include${p##*.}" "${DEBDISTRONAME}" "${p}"
+ done
}
-addtask binary_deb_install after do_build
-do_binary_deb_install[stamp-extra-info] = "${DISTRO}-${DISTRO_ARCH}"
+addtask install_to_cache after do_build
+do_install_to_cache[stamp-extra-info] = "${DISTRO}-${DISTRO_ARCH}"
+do_install_to_cache[noexec] = "1"
# Deb caching lambda run during the parsing phase that checks whether the
# current package has to be rebuilt, or taken from the cache
python __anonymous () {
if d.getVar("DEBCACHE_ENABLED", True) == "0":
- # Deb caching is disabled, do nothing
+ # Deb caching is disabled
+ d.delVarFlag('do_install_to_deploy', 'noexec')
return True
PN = d.getVar("PN", True)
@@ -108,6 +115,7 @@ python __anonymous () {
path_cache = os.path.join(DEBCACHEDIR, DISTRO)
path_databases = os.path.join(DEBDBDIR, DISTRO)
path_distributions = os.path.join(path_cache, "conf", "distributions")
+ d.delVarFlag('do_install_to_cache', 'noexec')
# The distributions file is needed by `reprepro` to know what types
# of packages are supported, what the distribution name is, etc.
diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass
index c2ff453..6b1b5eb 100644
--- a/meta/classes/image.bbclass
+++ b/meta/classes/image.bbclass
@@ -46,4 +46,4 @@ do_populate() {
}
addtask populate before do_build
-do_populate[deptask] = "do_install"
+do_populate[deptask] = "do_install_to_cache do_install_to_deploy"
--
2.1.4
next prev parent reply other threads:[~2017-08-27 15:14 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-08-27 15:13 [PATCH 0/6] Isar apt cache implementation Alexander Smirnov
2017-08-27 15:13 ` [PATCH 1/6] meta-isar-bin: Enable caching of deb packages Alexander Smirnov
2017-08-28 15:18 ` Henning Schild
2017-08-29 6:40 ` Alexander Smirnov
2017-08-29 7:51 ` Henning Schild
2017-08-29 8:20 ` Alexander Smirnov
2017-08-31 10:55 ` Claudius Heine
2017-08-31 11:20 ` Henning Schild
2017-08-31 12:08 ` Claudius Heine
2017-09-06 14:21 ` Henning Schild
2017-09-07 11:13 ` Claudius Heine
2017-08-27 15:13 ` [PATCH 2/6] classes/image: Provide /dev/null for Stretch apt Alexander Smirnov
2017-08-28 15:20 ` Henning Schild
2017-08-28 15:26 ` Henning Schild
2017-08-27 15:13 ` Alexander Smirnov [this message]
2017-08-28 8:00 ` [PATCH 3/6] classes/dpkg: Split install for cache Claudius Heine
2017-08-29 7:18 ` Alexander Smirnov
2017-08-30 8:54 ` Claudius Heine
2017-08-28 15:30 ` Henning Schild
2017-08-27 15:13 ` [PATCH 4/6] meta-isar-bin: Enable apt repo generation for amd64 Alexander Smirnov
2017-08-27 15:13 ` [PATCH 5/6] classes/dpkg: Properly update packages in the cache Alexander Smirnov
2017-08-28 15:32 ` Henning Schild
2017-08-29 7:20 ` Alexander Smirnov
2017-08-29 7:57 ` Henning Schild
2017-08-29 11:26 ` Jan Kiszka
2017-08-27 15:13 ` [PATCH 6/6] doc/technical_overview: Describe binary cache Alexander Smirnov
2017-08-28 15:36 ` Henning Schild
2017-08-29 7:29 ` Alexander Smirnov
2017-08-29 8:06 ` Henning Schild
2017-08-29 11:29 ` Jan Kiszka
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170827151339.12806-4-asmirnov@ilbers.de \
--to=asmirnov@ilbers.de \
--cc=isar-users@googlegroups.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox