[v8,12/14] rootfs: Add version and arch for downloaded package

Message ID 20260727112812.2255297-13-akarpovich@ilbers.de
State New
Headers show
Series Improving base-apt usage | expand

Commit Message

Aliaksei Karpovich July 27, 2026, 11:26 a.m. UTC
It fixes following error:
 | E: Internal Error, Pathname to install is not absolute 'gcc-14-base_14.2.0-19_arm64.deb'

In case of cross compile the arch of package is lost. F.e. the
gcc-14-base_14.2.0-19_arm64.deb will be transformed in
gcc-14-base name and amd64 version will be downloaded instead of
arm64. We should take into account arch and version.
After this fix package name will be extracted in following way:
gcc-14-base_14.2.0-19_arm64.deb -> gcc-14-base:arm64=14.2.0-19

Signed-off-by: Aliaksei Karpovich <akarpovich@ilbers.de>
---
 meta/classes-recipe/rootfs.bbclass | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Jan Kiszka July 27, 2026, 11:46 a.m. UTC | #1
On 27.07.26 13:26, Aliaksei Karpovich wrote:
> It fixes following error:
>  | E: Internal Error, Pathname to install is not absolute 'gcc-14-base_14.2.0-19_arm64.deb'
> 

Again the question when this is relevant. Do we want it earlier,
independent of this series?

Jan

> In case of cross compile the arch of package is lost. F.e. the
> gcc-14-base_14.2.0-19_arm64.deb will be transformed in
> gcc-14-base name and amd64 version will be downloaded instead of
> arm64. We should take into account arch and version.
> After this fix package name will be extracted in following way:
> gcc-14-base_14.2.0-19_arm64.deb -> gcc-14-base:arm64=14.2.0-19
> 
> Signed-off-by: Aliaksei Karpovich <akarpovich@ilbers.de>
> ---
>  meta/classes-recipe/rootfs.bbclass | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/meta/classes-recipe/rootfs.bbclass b/meta/classes-recipe/rootfs.bbclass
> index 2ffbbca7..f6913cff 100644
> --- a/meta/classes-recipe/rootfs.bbclass
> +++ b/meta/classes-recipe/rootfs.bbclass
> @@ -374,13 +374,15 @@ rootfs_install_pkgs_isar_download() {
>      # Command apt-get install do not cache packages from local repos
>      # We can obtain non cached package URIs by recalling install command here
>      # No need in export those files to dl_dir, so we can run it right after
> +    # Package name extraction from URI for download : libmagic-mgc_1%3a5.46-5_amd64.deb -> libmagic-mgc:amd64=1:5.46-5
>      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 \
>                 --chdir "/var/cache/apt/archives" \
>                 ${ROOTFSDIR} \
>                 -- /usr/bin/sh -c "apt-get ${ROOTFS_APT_ARGS} --print-uris ${ROOTFS_PACKAGES} |  \
> -                                  sed -n \"s|^[^ ]* \([^_]*\)_[^_]*_[^_]*\\.deb .*|\1|p\" | \
> +                                  sed -n 's|^[^ ]* \([^_]*\)_\(.*\)_\([^_]*\)\.deb .*|\1:\3=\2|p' | \
> +                                  sed 's/%3a/:/g' | \
>                                    xargs -r apt-get download"
>  }
>

Patch

diff --git a/meta/classes-recipe/rootfs.bbclass b/meta/classes-recipe/rootfs.bbclass
index 2ffbbca7..f6913cff 100644
--- a/meta/classes-recipe/rootfs.bbclass
+++ b/meta/classes-recipe/rootfs.bbclass
@@ -374,13 +374,15 @@  rootfs_install_pkgs_isar_download() {
     # Command apt-get install do not cache packages from local repos
     # We can obtain non cached package URIs by recalling install command here
     # No need in export those files to dl_dir, so we can run it right after
+    # Package name extraction from URI for download : libmagic-mgc_1%3a5.46-5_amd64.deb -> libmagic-mgc:amd64=1:5.46-5
     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 \
                --chdir "/var/cache/apt/archives" \
                ${ROOTFSDIR} \
                -- /usr/bin/sh -c "apt-get ${ROOTFS_APT_ARGS} --print-uris ${ROOTFS_PACKAGES} |  \
-                                  sed -n \"s|^[^ ]* \([^_]*\)_[^_]*_[^_]*\\.deb .*|\1|p\" | \
+                                  sed -n 's|^[^ ]* \([^_]*\)_\(.*\)_\([^_]*\)\.deb .*|\1:\3=\2|p' | \
+                                  sed 's/%3a/:/g' | \
                                   xargs -r apt-get download"
 }