[RFC,03/12] download debs without locking

Message ID 20260218115827.3947145-4-felix.moessbauer@siemens.com
State New
Headers show
Series add support to build isar unprivileged | expand

Commit Message

MOESSBAUER, Felix Feb. 18, 2026, 11:58 a.m. UTC
As we are only downloading and we are the only one acting on the rootfs,
it is safe to not lock the apt cache. By that, we can avoid complex file
ownerships in the tree.

Signed-off-by: Felix Moessbauer <felix.moessbauer@siemens.com>
---
 meta/classes-recipe/deb-dl-dir.bbclass              |  2 +-
 meta/classes-recipe/dpkg-source.bbclass             |  2 +-
 meta/classes-recipe/image-locales-extension.bbclass |  2 +-
 meta/classes-recipe/image-tools-extension.bbclass   |  3 ++-
 meta/classes-recipe/rootfs.bbclass                  | 10 +---------
 meta/lib/aptsrc_fetcher.py                          |  2 +-
 6 files changed, 7 insertions(+), 14 deletions(-)

Patch

diff --git a/meta/classes-recipe/deb-dl-dir.bbclass b/meta/classes-recipe/deb-dl-dir.bbclass
index 76c2435f..6675d48d 100644
--- a/meta/classes-recipe/deb-dl-dir.bbclass
+++ b/meta/classes-recipe/deb-dl-dir.bbclass
@@ -80,6 +80,7 @@  debsrc_download() {
                 --chdir "/deb-src/${rootfs_distro}/${src}" \
                 -- \
                 apt-get -o APT::Architecture=${DISTRO_ARCH} \
+                        -oDebug::NoLocking=1 \
                         -o Dir="${rootfs}" -y --download-only \
                         --only-source source "${src}=${version}" \
                 || echo "${src} ${version}" >> ${missing}
@@ -121,7 +122,6 @@  deb_dl_dir_import() {
     # let our unprivileged user place downloaded packages in /var/cache/apt/archives/
     sudo -Es << '    EOSUDO'
         mkdir -p "${rootfs}"/var/cache/apt/archives/partial/
-        touch "${rootfs}"/var/cache/apt/archives/lock
         chown -R ${uid}:${gid} "${rootfs}"/var/cache/apt/archives/
     EOSUDO
 
diff --git a/meta/classes-recipe/dpkg-source.bbclass b/meta/classes-recipe/dpkg-source.bbclass
index 1227da36..d0809477 100644
--- a/meta/classes-recipe/dpkg-source.bbclass
+++ b/meta/classes-recipe/dpkg-source.bbclass
@@ -77,7 +77,7 @@  do_fetch_common_source() {
     schroot -r -c ${session_id} -d / -- \
         sh -c '
             cd /work
-            apt-get -y --download-only --only-source -o Acquire::Source-Symlinks="false" source ${DEBIAN_SOURCE}'
+            apt-get -y --download-only --only-source -o Debug::NoLocking=1 -o Acquire::Source-Symlinks="false" source ${DEBIAN_SOURCE}'
 
     schroot -e -c ${session_id}
     remove_mounts
diff --git a/meta/classes-recipe/image-locales-extension.bbclass b/meta/classes-recipe/image-locales-extension.bbclass
index b6b07dba..9bff36ff 100644
--- a/meta/classes-recipe/image-locales-extension.bbclass
+++ b/meta/classes-recipe/image-locales-extension.bbclass
@@ -30,7 +30,7 @@  image_install_localepurge_download[weight] = "40"
 image_install_localepurge_download[network] = "${TASK_USE_NETWORK_AND_SUDO}"
 image_install_localepurge_download() {
     sudo -E chroot '${ROOTFSDIR}' \
-        /usr/bin/apt-get ${ROOTFS_APT_ARGS} --download-only localepurge
+        /usr/bin/apt-get ${ROOTFS_APT_ARGS} -oDebug::NoLocking=1 --download-only localepurge
 }
 
 ROOTFS_INSTALL_COMMAND += "image_install_localepurge_install"
diff --git a/meta/classes-recipe/image-tools-extension.bbclass b/meta/classes-recipe/image-tools-extension.bbclass
index b0f25a69..e88557f6 100644
--- a/meta/classes-recipe/image-tools-extension.bbclass
+++ b/meta/classes-recipe/image-tools-extension.bbclass
@@ -54,7 +54,8 @@  imager_run() {
             apt-get update \
                 -o Dir::Etc::SourceList='sources.list.d/isar-apt.list' \
                 -o Dir::Etc::SourceParts='-' \
-                -o APT::Get::List-Cleanup='0'
+                -o APT::Get::List-Cleanup='0' \
+                -o Debug::NoLocking=1
             apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends -y \
                 --allow-unauthenticated --allow-downgrades --download-only install \
                 ${local_install}"
diff --git a/meta/classes-recipe/rootfs.bbclass b/meta/classes-recipe/rootfs.bbclass
index 8485b32f..629dc666 100644
--- a/meta/classes-recipe/rootfs.bbclass
+++ b/meta/classes-recipe/rootfs.bbclass
@@ -340,18 +340,10 @@  rootfs_install_pkgs_download[progress] = "custom:rootfs_progress.PkgsDownloadPro
 rootfs_install_pkgs_download[isar-apt-lock] = "release-after"
 rootfs_install_pkgs_download[network] = "${TASK_USE_NETWORK}"
 rootfs_install_pkgs_download() {
-    mkdir -p "${WORKDIR}/dpkg"
-
-    # Use our own dpkg lock files rather than those in the rootfs since we are not root
-    # (this is safe as there are no concurrent apt/dpkg operations for that rootfs)
-    touch "${WORKDIR}/dpkg/lock" "${WORKDIR}/dpkg/lock-frontend"
-
     # download packages using apt in a non-privileged namespace
     rootfs_cmd --bind "${ROOTFSDIR}/var/cache/apt/archives" /var/cache/apt/archives \
-               --bind "${WORKDIR}/dpkg/lock" /var/lib/dpkg/lock \
-               --bind "${WORKDIR}/dpkg/lock-frontend" /var/lib/dpkg/lock-frontend \
                ${ROOTFSDIR} \
-               -- /usr/bin/apt-get ${ROOTFS_APT_ARGS} --download-only ${ROOTFS_PACKAGES}
+               -- /usr/bin/apt-get ${ROOTFS_APT_ARGS} -oDebug::NoLocking=1 --download-only ${ROOTFS_PACKAGES}
 }
 
 ROOTFS_INSTALL_COMMAND_BEFORE_EXPORT ??= ""
diff --git a/meta/lib/aptsrc_fetcher.py b/meta/lib/aptsrc_fetcher.py
index 041f5445..dfa784a9 100644
--- a/meta/lib/aptsrc_fetcher.py
+++ b/meta/lib/aptsrc_fetcher.py
@@ -41,7 +41,7 @@  class AptSrc(FetchMethod):
                         set -e
                         mkdir -p /downloads/{ud.localfile}
                         cd /downloads/{ud.localfile}
-                        apt-get -y --download-only --only-source source {ud.src_package}
+                        apt-get -y -oDebug::NoLocking=1 --download-only --only-source source {ud.src_package}
                         '
                 ''', d)
         except (OSError, FetchError):