From: Jan Kiszka <jan.kiszka@siemens.com>
To: Alexander Smirnov <asmirnov@ilbers.de>,
isar-users <isar-users@googlegroups.com>
Subject: Re: Build can sporadically fail due to dpkg contention in buildchroot
Date: Mon, 12 Feb 2018 08:42:32 +0100 [thread overview]
Message-ID: <9a978df9-2c52-7bd5-ad75-d6a1ff0269bc@siemens.com> (raw)
In-Reply-To: <040312d8-2496-dc62-5cbc-744dbf6e953c@ilbers.de>
On 2018-02-11 19:44, Alexander Smirnov wrote:
>
>
> On 02/11/2018 09:18 PM, Jan Kiszka wrote:
>> On 2018-02-11 17:55, Alexander Smirnov wrote:
>>> Hi,
>>>
>>> On 02/11/2018 06:17 PM, Jan Kiszka wrote:
>>>> Hi all,
>>>>
>>>> I got this failure of example-hello:do_build already twice while doing
>>>> rebuild tests with my kernel series (ie. with more independent
>>>> buildchroot users):
>>>>
>>>> DEBUG: Executing shell function do_build
>>>> Get:1 file:/isar-apt isar InRelease
>>>> Ign:1 file:/isar-apt isar InRelease
>>>> Get:2 file:/isar-apt isar Release [2,864 B]
>>>> Get:2 file:/isar-apt isar Release [2,864 B]
>>>> Get:3 file:/isar-apt isar Release.gpg
>>>> Ign:3 file:/isar-apt isar Release.gpg
>>>> Get:4 file:/isar-apt isar/main amd64 Packages [1,135 B]
>>>> Reading package lists...
>>>> W: The repository 'file:/isar-apt isar Release' is not signed.
>>>> hostname: No address associated with hostname
>>>> dh_testdir
>>>> dh_testroot
>>>> dh_prep
>>>> dh_testdir
>>>> dh_testroot
>>>> dh_install
>>>> dh_install: Compatibility levels before 9 are deprecated (level 7 in
>>>> use)
>>>> dh_installdocs
>>>> dh_installdocs: Compatibility levels before 9 are deprecated (level 7
>>>> in use)
>>>> dh_installchangelogs
>>>> dh_compress
>>>> dh_fixperms
>>>> dh_installdeb
>>>> dh_installdeb: Compatibility levels before 9 are deprecated (level 7
>>>> in use)
>>>> dh_gencontrol
>>>> dh_md5sums
>>>> dh_builddeb
>>>> dpkg-deb: building package 'hello-build-deps' in
>>>> '../hello-build-deps_0.2_all.deb'.
>>>>
>>>
>>> Good catch!
>>>
>>>> The package has been created.
>>>> Attention, the package has been created in the current directory,
>>>> not in ".." as indicated by the message above!
>>>> dpkg: error: dpkg status database is locked by another process
>>>> mk-build-deps: dpkg --unpack failed
>>>> [...]
>>>>
>>>> So we have a concurrency problem when building over the same dpkg
>>>> database. Looks like we need to synchronize (lock-protect) the
>>>> access to
>>>> it, which also means pulling out the dependency installation from the
>>>> regular build step. Is that feasible at all? Any alternatives (besides
>>>> retrying such builds...)?
>>>
>>> In general we could do this easily:
>>>
>>> 1. Split the content of build.sh into two functions, for example:
>>> - install_build_deps
>>> - build_package
>>>
>>> 2. Spit the bitbake do_build() into two tasks:
>>>
>>> do_install_build_deps() {
>>> ... build.sh install_build_deps ...
>>> }
>>>
>>> addtask install_build_deps before do_build after do_unpack
>>>
>>> do_build_package() {
>>> ... build.sh build_package ...
>>> }
>>>
>>> 3. Using bitbake synchronization primitives, protect the fist task from
>>> parallel execution.
>>>
>>> If you are OK with this, I could do this tomorrow.
>>
>> I'm still concerned how well this will scale:
>>
>> a) We have additional users we already know of (linux-kernel.bbclass).
>> We will need to provide them the same means.
>>
>> b) There might be more users hidden in today's or future recipes...
>>
>
> Now we have pipeline:
> - do_fetch, do_unpack, do_build.
>
> I propose to extend this pipeline by one extra task:
> - do_fetch, do_unpack, do_install_build_deps, do_build.
>
> These are the core tasks that have default payload defined in calsses,
> so you should not touch them in custom recipes.
>
> For better scale-ability, a separate class could be created:
>
> 8<--
>
> dpkg-build-deps.bbclass:
>
> do_install_build_deps() {
> ... call mk-build-deps
> }
>
> addtask install_build_deps before do_build after do_unpack
>
> 8<--
>
> So if you want this functionality in your class, for example in
> dpkg.bbclass, so just include it. I can't imagine if we will have so
> many different classes to build something...
I'm concern about all dpkg calls. Are we sure there are no others to
just query the database eg. which cannot fail?
Otherwise, this sounds good to me.
Jan
--
Siemens AG, Corporate Technology, CT RDA IOT SES-DE
Corporate Competence Center Embedded Linux
next prev parent reply other threads:[~2018-02-12 7:42 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-11 15:17 Jan Kiszka
2018-02-11 16:55 ` Alexander Smirnov
2018-02-11 18:18 ` Jan Kiszka
2018-02-11 18:44 ` Alexander Smirnov
2018-02-12 7:42 ` Jan Kiszka [this message]
2018-02-14 15:02 ` Jan Kiszka
2018-02-14 17:57 ` Alexander Smirnov
2018-02-14 18:04 ` 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=9a978df9-2c52-7bd5-ad75-d6a1ff0269bc@siemens.com \
--to=jan.kiszka@siemens.com \
--cc=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