[1/1] fix: include ca-certificates in mmdebstrap if needed

Message ID 20241126141210.2004080-1-felix.moessbauer@siemens.com
State Accepted, archived
Headers show
Series [1/1] fix: include ca-certificates in mmdebstrap if needed | expand

Commit Message

Felix Moessbauer Nov. 26, 2024, 2:12 p.m. UTC
In case we have apt URLs with https, we also need the ca-certificates
package. While that is not needed in mmdebstrap itself (as it uses the
host packages), it will be needed in the later rootfs install tasks like
sbuild-chroot and image install. Otherwise these tasks will fail due to
certificate errors.

For now, I copied over the logic from the old isar-bootstrap file, but
we might want to unify this. Also, I did not copy the gnupg part as I'm
unsure if that is needed.

Signed-off-by: Felix Moessbauer <felix.moessbauer@siemens.com>
---
I'm wondering how that was not noticed earlier. It literally breaks
ALL Ubuntu builds against snapshot mirrors.

Best regards,
Felix Moessbauer
Siemens AG

 .../isar-mmdebstrap/isar-mmdebstrap.inc             | 13 +++++++++++++
 1 file changed, 13 insertions(+)

Comments

Anton Mikanovich Nov. 27, 2024, 7:15 a.m. UTC | #1
26/11/2024 16:12, 'Felix Moessbauer' via isar-users wrote:
> In case we have apt URLs with https, we also need the ca-certificates
> package. While that is not needed in mmdebstrap itself (as it uses the
> host packages), it will be needed in the later rootfs install tasks like
> sbuild-chroot and image install. Otherwise these tasks will fail due to
> certificate errors.
>
> For now, I copied over the logic from the old isar-bootstrap file, but
> we might want to unify this. Also, I did not copy the gnupg part as I'm
> unsure if that is needed.
>
> Signed-off-by: Felix Moessbauer <felix.moessbauer@siemens.com>
> ---
> I'm wondering how that was not noticed earlier. It literally breaks
> ALL Ubuntu builds against snapshot mirrors.
>
> Best regards,
> Felix Moessbauer
> Siemens AG

Hello Felix,
Thanks for that fix. It's all about changes between mmdebstrap versions of
different distros. Original development of this implementation was done when
bullseye still was using as host distro. And mmdebstrap in bullseye was
handling https inside URIs itself:

 >If any mirror contains a https URI, then the packages 
apt-transport-https and
ca-certificates will be installed inside the chroot.

But it turns out this logic was changed in bookworm version of mmdebstrap:

 >If you specify a https or tor MIRROR and you want the chroot to be able to
update itself, don't forget to also install the ca-certificates package, the
apt-transport-https package for apt versions less than 1.5 and/or the
apt-transport-tor package using the --include option, as necessary.

So we should do it manually now.
And probably cover snapshot mirrors by CI to avoid such a regression later.
Uladzimir Bely Dec. 2, 2024, 9:24 a.m. UTC | #2
On Tue, 2024-11-26 at 15:12 +0100, 'Felix Moessbauer' via isar-users
wrote:
> In case we have apt URLs with https, we also need the ca-certificates
> package. While that is not needed in mmdebstrap itself (as it uses
> the
> host packages), it will be needed in the later rootfs install tasks
> like
> sbuild-chroot and image install. Otherwise these tasks will fail due
> to
> certificate errors.
> 
> For now, I copied over the logic from the old isar-bootstrap file,
> but
> we might want to unify this. Also, I did not copy the gnupg part as
> I'm
> unsure if that is needed.
> 
> Signed-off-by: Felix Moessbauer <felix.moessbauer@siemens.com>
> ---
> I'm wondering how that was not noticed earlier. It literally breaks
> ALL Ubuntu builds against snapshot mirrors.
> 
> Best regards,
> Felix Moessbauer
> Siemens AG
> 
>  .../isar-mmdebstrap/isar-mmdebstrap.inc             | 13
> +++++++++++++
>  1 file changed, 13 insertions(+)
> 
> diff --git a/meta/recipes-core/isar-mmdebstrap/isar-mmdebstrap.inc
> b/meta/recipes-core/isar-mmdebstrap/isar-mmdebstrap.inc
> index 1043f2d1..c8ea53ab 100644
> --- a/meta/recipes-core/isar-mmdebstrap/isar-mmdebstrap.inc
> +++ b/meta/recipes-core/isar-mmdebstrap/isar-mmdebstrap.inc
> @@ -12,6 +12,8 @@ inherit deb-dl-dir
>  FILESEXTRAPATHS:append = ":${LAYERDIR_core}/recipes-core/isar-
> bootstrap/files"
>  
>  DISTRO_BOOTSTRAP_BASE_PACKAGES = "locales,apt,usrmerge"
> +DISTRO_BOOTSTRAP_BASE_PACKAGES:append:https-support = ",ca-
> certificates"
> +
>  BOOTSTRAP_TMPDIR = "${WORKDIR}/tempdir"
>  
>  # Fix for /var/lib/apt/available while maybe-jessie-or-older hook do
> not work
> @@ -24,6 +26,17 @@ MMHOOKS:debian-buster ?= "${DPKG_HOOKS}"
>  
>  DISTRO_BOOTSTRAP_KEYRING = "${WORKDIR}/distro-keyring.gpg"
>  
> +def get_distro_have_https_source(d):
> +    return any(source[2].startswith("https://") for source in
> generate_distro_sources(d))
> +
> +def get_distro_needs_https_support(d):
> +    if get_distro_have_https_source(d):
> +        return "https-support"
> +    else:
> +        return ""
> +
> +OVERRIDES:append = ":${@get_distro_needs_https_support(d)}"
> +
>  do_generate_keyrings[cleandirs] = "${WORKDIR}/trusted.gpg.d"
>  do_generate_keyrings[dirs] = "${DEBDIR}"
>  do_generate_keyrings[vardeps] += "DISTRO_BOOTSTRAP_KEYS
> THIRD_PARTY_APT_KEYS"
> -- 
> 2.39.5
> 

Applied to next, thanks.

Patch

diff --git a/meta/recipes-core/isar-mmdebstrap/isar-mmdebstrap.inc b/meta/recipes-core/isar-mmdebstrap/isar-mmdebstrap.inc
index 1043f2d1..c8ea53ab 100644
--- a/meta/recipes-core/isar-mmdebstrap/isar-mmdebstrap.inc
+++ b/meta/recipes-core/isar-mmdebstrap/isar-mmdebstrap.inc
@@ -12,6 +12,8 @@  inherit deb-dl-dir
 FILESEXTRAPATHS:append = ":${LAYERDIR_core}/recipes-core/isar-bootstrap/files"
 
 DISTRO_BOOTSTRAP_BASE_PACKAGES = "locales,apt,usrmerge"
+DISTRO_BOOTSTRAP_BASE_PACKAGES:append:https-support = ",ca-certificates"
+
 BOOTSTRAP_TMPDIR = "${WORKDIR}/tempdir"
 
 # Fix for /var/lib/apt/available while maybe-jessie-or-older hook do not work
@@ -24,6 +26,17 @@  MMHOOKS:debian-buster ?= "${DPKG_HOOKS}"
 
 DISTRO_BOOTSTRAP_KEYRING = "${WORKDIR}/distro-keyring.gpg"
 
+def get_distro_have_https_source(d):
+    return any(source[2].startswith("https://") for source in generate_distro_sources(d))
+
+def get_distro_needs_https_support(d):
+    if get_distro_have_https_source(d):
+        return "https-support"
+    else:
+        return ""
+
+OVERRIDES:append = ":${@get_distro_needs_https_support(d)}"
+
 do_generate_keyrings[cleandirs] = "${WORKDIR}/trusted.gpg.d"
 do_generate_keyrings[dirs] = "${DEBDIR}"
 do_generate_keyrings[vardeps] += "DISTRO_BOOTSTRAP_KEYS THIRD_PARTY_APT_KEYS"