From: "Hombourger, Cedric" <Cedric_Hombourger@mentor.com>
To: Henning Schild <henning.schild@siemens.com>
Cc: Jan Kiszka <jan.kiszka@siemens.com>,
"isar-users@googlegroups.com" <isar-users@googlegroups.com>
Subject: RE: [PATCH 1/1] dpkg: acquire lock when calling reprepro
Date: Wed, 22 Aug 2018 13:47:36 +0000 [thread overview]
Message-ID: <75371d2352c041d8bb22986084bc479c@svr-ies-mbx-02.mgc.mentorg.com> (raw)
In-Reply-To: <20180822154145.07d4a2ca@md1pvb1c.ad001.siemens.net>
Hi Henning,
I am not sure this can be easily done without additional some additional refactoring
More specifically, I believe this would require splitting dpkg_runbuild & build.sh into 2 distinct tasks:
1) run apt-get update build the package dependencies package (aka the 1st section of build.sh)
2) perform the actual package build
Without this, we would keep the lock acquired for as long as the full package build goes
(several minutes for a kernel build)
I will investigate
This may make it easier to implement the other thing I had in mind: do not perform builds as root
Cedric
-----Original Message-----
From: Henning Schild [mailto:henning.schild@siemens.com]
Sent: Wednesday, August 22, 2018 3:42 PM
To: Hombourger, Cedric <Cedric_Hombourger@mentor.com>
Cc: Jan Kiszka <jan.kiszka@siemens.com>; isar-users@googlegroups.com
Subject: Re: [PATCH 1/1] dpkg: acquire lock when calling reprepro
My first reaction was the same, but in the other direction. I would prefer a bitbake lock over the flock, if possible.
Henning
Am Wed, 22 Aug 2018 12:48:14 +0000
schrieb "Hombourger, Cedric" <Cedric_Hombourger@mentor.com>:
> Thanks Jan for your quick feedback. I have submitted a v2 with
> isar.lock removed
>
> Cedric
>
> -----Original Message-----
> From: Jan Kiszka [mailto:jan.kiszka@siemens.com]
> Sent: Wednesday, August 22, 2018 2:20 PM
> To: Hombourger, Cedric <Cedric_Hombourger@mentor.com>;
> isar-users@googlegroups.com Subject: Re: [PATCH 1/1] dpkg: acquire
> lock when calling reprepro
>
> On 2018-08-22 13:34, Cedric Hombourger wrote:
> > As bitbake performs multi-threaded builds, packages may be built
> > while others get deployed. A lock was already acquired within
> > dpkg_runbuild but accesses to the isar-apt database were not
> > protected from do_deploy_deb. Move the lock from the buildchroot to
> > the isar-apt repository and acquire the (same) lock from
> > dpkg_runbuild, repo_clean and do_deploy_deb.
>
> I think I've seen this issue once but forgot to dig into the details.
> It looks consistent.
>
> >
> > Signed-off-by: Cedric Hombourger <Cedric_Hombourger@mentor.com>
> > ---
> > meta/classes/dpkg-base.bbclass | 8 ++++++--
> > meta/recipes-devtools/buildchroot/files/build.sh | 2 +-
> > meta/recipes-kernel/linux/files/build-kernel.sh | 2 +-
> > 3 files changed, 8 insertions(+), 4 deletions(-)
> >
> > diff --git a/meta/classes/dpkg-base.bbclass
> > b/meta/classes/dpkg-base.bbclass index a41df2c..7137968 100644
> > --- a/meta/classes/dpkg-base.bbclass
> > +++ b/meta/classes/dpkg-base.bbclass
> > @@ -71,6 +71,8 @@ do_build() {
> > mount -t proc none ${BUILDCHROOT_DIR}/proc
> > fi'
> >
> > + # Create database lock file here so we own it (not root) and
> > perform actual build
> > + touch ${DEPLOY_DIR_APT}/${DISTRO}/db.lock
> > dpkg_runbuild
> >
> > sudo umount ${BUILDROOT} 2>/dev/null || true @@ -82,7 +84,8 @@
> > CLEANFUNCS += "repo_clean"
> > repo_clean() {
> > PACKAGES=$(cd ${S}/..; ls *.deb | sed 's/\([^_]*\).*/\1/')
> > if [ -n "${PACKAGES}" ]; then
> > - reprepro -b ${DEPLOY_DIR_APT}/${DISTRO} \
> > + flock ${DEPLOY_DIR_APT}/${DISTRO}/db.lock \
> > + reprepro -b ${DEPLOY_DIR_APT}/${DISTRO} \
> > --dbdir ${DEPLOY_DIR_DB}/${DISTRO} \
> > -C main -A ${DISTRO_ARCH} \
> > remove ${DEBDISTRONAME} \ @@ -93,7 +96,8 @@
> > repo_clean() {
> > # Install package to Isar-apt
> > do_deploy_deb() {
> > repo_clean
> > - reprepro -b ${DEPLOY_DIR_APT}/${DISTRO} \
> > + flock ${DEPLOY_DIR_APT}/${DISTRO}/db.lock \
> > + reprepro -b ${DEPLOY_DIR_APT}/${DISTRO} \
> > --dbdir ${DEPLOY_DIR_DB}/${DISTRO} \
> > -C main \
> > includedeb ${DEBDISTRONAME} \
>
> There is also
>
> do_deploy_deb[lockfiles] = "${DEPLOY_DIR_APT}/isar.lock"
>
> in that file. I suppose that can now be dropped, can't it?
>
> > diff --git a/meta/recipes-devtools/buildchroot/files/build.sh
> > b/meta/recipes-devtools/buildchroot/files/build.sh
> > index e2dabab..e8a9c17 100644
> > --- a/meta/recipes-devtools/buildchroot/files/build.sh
> > +++ b/meta/recipes-devtools/buildchroot/files/build.sh
> > @@ -50,7 +50,7 @@ install_cmd="apt-get -o
> > Debug::pkgProblemResolver=yes --no-install-recommends -y
> >
> > # Install all build deps
> > mk-build-deps $set_arch -t "${install_cmd}" -i -r
> > debian/control -) 42>/dpkg.lock
> > +) 42>/isar-apt/db.lock
> >
> > # If autotools files have been created, update their timestamp to
> > # prevent them from being regenerated diff --git
> > a/meta/recipes-kernel/linux/files/build-kernel.sh
> > b/meta/recipes-kernel/linux/files/build-kernel.sh
> > index 8b58e93..2ff5a1e 100644
> > --- a/meta/recipes-kernel/linux/files/build-kernel.sh
> > +++ b/meta/recipes-kernel/linux/files/build-kernel.sh
> > @@ -34,7 +34,7 @@ REPACK_LINUX_IMAGE_DIR="${REPACK_DIR}/linux-image"
> > REPACK_LINUX_HEADERS_DIR="${REPACK_DIR}/linux-headers"
> >
> > # Lock-protected because apt and dpkg do not wait in case of
> > contention -flock /dpkg.lock \
> > +flock /isar-apt/db.lock \
> > apt-get install -y -o Debug::pkgProblemResolver=yes \
> > --no-install-recommends ${KBUILD_DEPENDS}
> >
> >
>
> Jan
>
> --
> Siemens AG, Corporate Technology, CT RDA IOT SES-DE Corporate
> Competence Center Embedded Linux
>
next prev parent reply other threads:[~2018-08-22 13:47 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-08-22 11:34 [PATCH 0/1] acquire database " Cedric Hombourger
2018-08-22 11:34 ` [PATCH 1/1] dpkg: acquire " Cedric Hombourger
2018-08-22 12:20 ` Jan Kiszka
2018-08-22 12:48 ` Hombourger, Cedric
2018-08-22 13:41 ` Henning Schild
2018-08-22 13:47 ` Hombourger, Cedric [this message]
2018-08-22 13:48 ` Jan Kiszka
2018-08-26 6:21 ` [PATCH v3 1/3] dpkg: move installation of dependencies into dpkg_prepare Cedric Hombourger
2018-08-26 6:21 ` [PATCH v3 2/3] linux: leverage dpkg_prepare to install build dependencies Cedric Hombourger
2018-08-26 6:21 ` [PATCH v3 3/3] dpkg+linux: use Isar's lock via do_prepare[lockfiles] instead of flock Cedric Hombourger
2018-08-28 12:12 ` [PATCH v3 1/3] dpkg: move installation of dependencies into dpkg_prepare Maxim Yu. Osipov
2018-08-31 8:10 ` Jan Kiszka
2018-08-31 8:15 ` chombourger
2018-08-31 8:21 ` Jan Kiszka
2018-08-31 8:28 ` Jan Kiszka
2018-08-31 8:33 ` chombourger
2018-08-31 8:41 ` Jan Kiszka
2018-08-31 9:05 ` Jan Kiszka
2018-09-01 6:58 ` Jan Kiszka
2018-09-01 8:44 ` Cedric Hombourger
2018-09-01 9:31 ` Jan Kiszka
2018-08-22 11:58 ` [PATCH 0/1] acquire database lock when calling reprepro Alexander Smirnov
2018-08-22 12:07 ` Hombourger, Cedric
2018-08-22 12:47 ` [PATCH v2] dpkg: acquire " Cedric Hombourger
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=75371d2352c041d8bb22986084bc479c@svr-ies-mbx-02.mgc.mentorg.com \
--to=cedric_hombourger@mentor.com \
--cc=henning.schild@siemens.com \
--cc=isar-users@googlegroups.com \
--cc=jan.kiszka@siemens.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