[1/1] add apt options to mmdebstrap

Message ID 20241121125528.1370018-1-felix.moessbauer@siemens.com
State Accepted, archived
Headers show
Series [1/1] add apt options to mmdebstrap | expand

Commit Message

Felix Moessbauer Nov. 21, 2024, 12:55 p.m. UTC
In contrast to deboostrap, mmdebstrap supports apt options. By that, we
finally can inject the config needed to have reliable builds against the
debian snapshot mirrors.

Technically we need the options in two different formats, hence use a
function to generate them accordingly.

Signed-off-by: Felix Moessbauer <felix.moessbauer@siemens.com>
---
 .../isar-mmdebstrap/isar-mmdebstrap.inc         | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

Comments

Uladzimir Bely Dec. 2, 2024, 9:23 a.m. UTC | #1
On Thu, 2024-11-21 at 13:55 +0100, 'Felix Moessbauer' via isar-users
wrote:
> In contrast to deboostrap, mmdebstrap supports apt options. By that,
> we
> finally can inject the config needed to have reliable builds against
> the
> debian snapshot mirrors.
> 
> Technically we need the options in two different formats, hence use a
> function to generate them accordingly.
> 
> Signed-off-by: Felix Moessbauer <felix.moessbauer@siemens.com>
> ---
>  .../isar-mmdebstrap/isar-mmdebstrap.inc         | 17
> ++++++++++++++++-
>  1 file changed, 16 insertions(+), 1 deletion(-)
> 
> diff --git a/meta/recipes-core/isar-mmdebstrap/isar-mmdebstrap.inc
> b/meta/recipes-core/isar-mmdebstrap/isar-mmdebstrap.inc
> index 1043f2d1..97ee4431 100644
> --- a/meta/recipes-core/isar-mmdebstrap/isar-mmdebstrap.inc
> +++ b/meta/recipes-core/isar-mmdebstrap/isar-mmdebstrap.inc
> @@ -24,6 +24,19 @@ MMHOOKS:debian-buster ?= "${DPKG_HOOKS}"
>  
>  DISTRO_BOOTSTRAP_KEYRING = "${WORKDIR}/distro-keyring.gpg"
>  
> +def get_apt_opts(d, param):
> +    opts = []
> +    retries = d.getVar('ISAR_APT_RETRIES') or "3"
> +    opts.append(f'Acquire::Retries="{retries}"')
> +    max_delay = d.getVar('ISAR_APT_DELAY_MAX')
> +    if max_delay:
> +       
> opts.append(f'Acquire::Retries::Delay::Maximum="{max_delay}"')
> +    dl_limit = d.getVar('ISAR_APT_DL_LIMIT')
> +    if dl_limit:
> +        opts.append(f'Acquire::http::Dl-Limit="{dl_limit}"')
> +        opts.append(f'Acquire::https::Dl-Limit="{dl_limit}"')
> +    return ' '.join([f'{param} {o}' for o in opts])
> +
>  do_generate_keyrings[cleandirs] = "${WORKDIR}/trusted.gpg.d"
>  do_generate_keyrings[dirs] = "${DEBDIR}"
>  do_generate_keyrings[vardeps] += "DISTRO_BOOTSTRAP_KEYS
> THIRD_PARTY_APT_KEYS"
> @@ -126,7 +139,8 @@ do_bootstrap() {
>                                   -o Dir::State="$1/var/lib/apt" \
>                                   -o Dir::Etc="$1/etc/apt" \
>                                   -o Dir::Cache="$1/var/cache/apt" \
> -                                 -o
> Apt::Architecture="${BOOTSTRAP_DISTRO_ARCH}"'
> +                                 -o
> Apt::Architecture="${BOOTSTRAP_DISTRO_ARCH}" \
> +                                 ${@get_apt_opts(d, '-o')}'
>          extra_essential="$extra_essential && $syncout"
>          extra_customize="$syncout"
>      fi
> @@ -173,6 +187,7 @@ do_bootstrap() {
>                     --customize-hook='chroot "$1" /usr/bin/apt-get -y
> clean' \
>                     --skip=cleanup/apt \
>                     --skip=download/empty \
> +                   ${@get_apt_opts(d, '--aptopt')} \
>                     ${@get_distro_components_argument(d)} \
>                     "${@get_distro_suite(d)}" \
>                     "${WORKDIR}/rootfs.tar.zst" \
> -- 
> 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..97ee4431 100644
--- a/meta/recipes-core/isar-mmdebstrap/isar-mmdebstrap.inc
+++ b/meta/recipes-core/isar-mmdebstrap/isar-mmdebstrap.inc
@@ -24,6 +24,19 @@  MMHOOKS:debian-buster ?= "${DPKG_HOOKS}"
 
 DISTRO_BOOTSTRAP_KEYRING = "${WORKDIR}/distro-keyring.gpg"
 
+def get_apt_opts(d, param):
+    opts = []
+    retries = d.getVar('ISAR_APT_RETRIES') or "3"
+    opts.append(f'Acquire::Retries="{retries}"')
+    max_delay = d.getVar('ISAR_APT_DELAY_MAX')
+    if max_delay:
+        opts.append(f'Acquire::Retries::Delay::Maximum="{max_delay}"')
+    dl_limit = d.getVar('ISAR_APT_DL_LIMIT')
+    if dl_limit:
+        opts.append(f'Acquire::http::Dl-Limit="{dl_limit}"')
+        opts.append(f'Acquire::https::Dl-Limit="{dl_limit}"')
+    return ' '.join([f'{param} {o}' for o in opts])
+
 do_generate_keyrings[cleandirs] = "${WORKDIR}/trusted.gpg.d"
 do_generate_keyrings[dirs] = "${DEBDIR}"
 do_generate_keyrings[vardeps] += "DISTRO_BOOTSTRAP_KEYS THIRD_PARTY_APT_KEYS"
@@ -126,7 +139,8 @@  do_bootstrap() {
                                  -o Dir::State="$1/var/lib/apt" \
                                  -o Dir::Etc="$1/etc/apt" \
                                  -o Dir::Cache="$1/var/cache/apt" \
-                                 -o Apt::Architecture="${BOOTSTRAP_DISTRO_ARCH}"'
+                                 -o Apt::Architecture="${BOOTSTRAP_DISTRO_ARCH}" \
+                                 ${@get_apt_opts(d, '-o')}'
         extra_essential="$extra_essential && $syncout"
         extra_customize="$syncout"
     fi
@@ -173,6 +187,7 @@  do_bootstrap() {
                    --customize-hook='chroot "$1" /usr/bin/apt-get -y clean' \
                    --skip=cleanup/apt \
                    --skip=download/empty \
+                   ${@get_apt_opts(d, '--aptopt')} \
                    ${@get_distro_components_argument(d)} \
                    "${@get_distro_suite(d)}" \
                    "${WORKDIR}/rootfs.tar.zst" \