[PATCH 1/1] isar-apt: fix race-condition in do_cache_config

3 views
Skip to first unread message

Felix Moessbauer

unread,
Jun 3, 2026, 7:46:35 AM (7 days ago) Jun 3
to isar-...@googlegroups.com, Felix Moessbauer
Repo configuration operations on the isar apt have to happen while
holding the isar lock. However, bitbake executes the cleandirs operation
without holding the lock, introducing a race-condition that sporadically
breaks the build with the following error:

Error opening config file '/isar/build/tmp/deploy/isar-apt/
debian-trixie/apt/debian-trixie/conf/distributions': No such file
or directory(2)

We fix this by open-coding the cleandirs logic inside the function and
by that under the lock.

Fixes: be290896 ("isar-apt: support further optional fields ...")
Signed-off-by: Felix Moessbauer <felix.mo...@siemens.com>
---
Note, that I was able to reliably produce this with the sbom test:
./scripts/run-tests.sh -t sbom

Best regards,
Felix

meta/recipes-devtools/isar-apt/isar-apt.bb | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/meta/recipes-devtools/isar-apt/isar-apt.bb b/meta/recipes-devtools/isar-apt/isar-apt.bb
index e824bf1d..4ecbdb82 100644
--- a/meta/recipes-devtools/isar-apt/isar-apt.bb
+++ b/meta/recipes-devtools/isar-apt/isar-apt.bb
@@ -10,11 +10,15 @@ SRC_URI = "file://distributions.in"

do_cache_config[lockfiles] = "${REPO_ISAR_DIR}/isar.lock"
do_cache_config[vardeps] += "ISAR_APT_OPT_FIELD"
-do_cache_config[cleandirs] += "${REPO_ISAR_DIR}/${DISTRO}/conf"

# Generate reprepro config for current distro if it doesn't exist. Once it's
# generated, this task should do nothing.
do_cache_config() {
+ # this part must be executed while holding the isar.lock, hence do not move
+ # it to cleandirs (these are executed without holding the lock)
+ rm -rf ${REPO_ISAR_DIR}/${DISTRO}/conf
+ mkdir -p ${REPO_ISAR_DIR}/${DISTRO}/conf
+
repo_create "${REPO_ISAR_DIR}"/"${DISTRO}" \
"${REPO_ISAR_DB_DIR}"/"${DISTRO}" \
"${DEBDISTRONAME}" \
--
2.53.0

MOESSBAUER, Felix

unread,
Jun 3, 2026, 7:56:46 AM (7 days ago) Jun 3
to isar-...@googlegroups.com
On Wed, 2026-06-03 at 13:46 +0200, Felix Moessbauer wrote:
> Repo configuration operations on the isar apt have to happen while
> holding the isar lock. However, bitbake executes the cleandirs operation
> without holding the lock, introducing a race-condition that sporadically
> breaks the build with the following error:
>
> Error opening config file '/isar/build/tmp/deploy/isar-apt/
> debian-trixie/apt/debian-trixie/conf/distributions': No such file
> or directory(2)
>
> We fix this by open-coding the cleandirs logic inside the function and
> by that under the lock.
>
> Fixes: be290896 ("isar-apt: support further optional fields ...")

PS: Commit "Revert "Split up isar-apt into distro-arch specific
instances" probably made it much more likely to run into the race-
condition, but the race was there before.

Felix

Anton Mikanovich

unread,
Jun 4, 2026, 5:39:22 AM (6 days ago) Jun 4
to isar-...@googlegroups.com, Felix Moessbauer
03.06.2026 14:56, 'MOESSBAUER, Felix' via isar-users wrote:
> PS: Commit "Revert "Split up isar-apt into distro-arch specific
> instances" probably made it much more likely to run into the race-
> condition, but the race was there before.
>
> Felix
>
Hello Felix,

Thanks for the fix.
It looks like the patch is working, but on the full CI other issue observed.
Don't think it is related, but rechecking will take some time.

Just in case, here is the failure during do_rootfs_install task of
isar-image-base recipe for virtualbox-bullseye target:

dpkg: error processing archive
/tmp/apt-dpkg-install-rJzE6r/16-example-raw_0.3_all.deb (--unpack):
cannot access archive
'/tmp/apt-dpkg-install-rJzE6r/16-example-raw_0.3_all.deb': No such file
or directory

Anton Mikanovich

unread,
Jun 5, 2026, 10:22:44 AM (5 days ago) Jun 5
to isar-...@googlegroups.com, Felix Moessbauer
04.06.2026 12:39, Anton Mikanovich wrote:
> Hello Felix,
>
> Thanks for the fix.
> It looks like the patch is working, but on the full CI other issue
> observed.
> Don't think it is related, but rechecking will take some time.
>
> Just in case, here is the failure during do_rootfs_install task of
> isar-image-base recipe for virtualbox-bullseye target:
>
> dpkg: error processing archive
> /tmp/apt-dpkg-install-rJzE6r/16-example-raw_0.3_all.deb (--unpack):
> cannot access archive
> '/tmp/apt-dpkg-install-rJzE6r/16-example-raw_0.3_all.deb': No such
> file or directory
>
Ok, I've found the reason of one more race in do_rootfs_install:
Apt-get don't cache debs from isar-apt (because of file:// scheme) to
/var/cache/apt/archives, so our isar-apt locking on
rootfs_install_pkgs_download
don't really work.
Will merge this fix and prepare the next fix for do_rootfs_install soon.

Anton Mikanovich

unread,
Jun 5, 2026, 10:24:10 AM (5 days ago) Jun 5
to Felix Moessbauer, isar-...@googlegroups.com
03.06.2026 14:46, 'Felix Moessbauer' via isar-users wrote:
> Repo configuration operations on the isar apt have to happen while
> holding the isar lock. However, bitbake executes the cleandirs operation
> without holding the lock, introducing a race-condition that sporadically
> breaks the build with the following error:
>
> Error opening config file '/isar/build/tmp/deploy/isar-apt/
> debian-trixie/apt/debian-trixie/conf/distributions': No such file
> or directory(2)
>
> We fix this by open-coding the cleandirs logic inside the function and
> by that under the lock.
>
> Fixes: be290896 ("isar-apt: support further optional fields ...")
> Signed-off-by: Felix Moessbauer <felix.mo...@siemens.com>
Applied to next, thanks.
Reply all
Reply to author
Forward
0 new messages