From mboxrd@z Thu Jan 1 00:00:00 1970 X-GM-THRID: 7308563077608243200 X-Received: by 2002:a0c:cdce:0:b0:67a:a721:cb05 with SMTP id a14-20020a0ccdce000000b0067aa721cb05mr3493721qvn.102.1701657445106; Sun, 03 Dec 2023 18:37:25 -0800 (PST) X-BeenThere: isar-users@googlegroups.com Received: by 2002:ad4:4af2:0:b0:67a:bf7a:7ba6 with SMTP id cp18-20020ad44af2000000b0067abf7a7ba6ls891209qvb.1.-pod-prod-01-us; Sun, 03 Dec 2023 18:37:24 -0800 (PST) X-Google-Smtp-Source: AGHT+IHe43F+ENujlfNJ+eJ1IKf+sZZLUgHByjcb+luyeakSqLfl/Oa7V50JhRzHAvipfa9LawlF X-Received: by 2002:a0c:f78f:0:b0:67a:a10e:9187 with SMTP id s15-20020a0cf78f000000b0067aa10e9187mr4064891qvn.14.1701657444083; Sun, 03 Dec 2023 18:37:24 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701657444; cv=none; d=google.com; s=arc-20160816; b=JgCWKfIVtPrZxuD6oV5WgRcnCnVvFpQ5Er3L+4/V1xOA3ILQP7zj7+VuWrQxn5xaEP FIpBq0Glqmp0PgVA0W3vAw5KykA3a23v0S0nGKESXfde24Z1GRZMM1gOr1AzpKXgbD9O K2trnmlDxJoTO6jrm4I+FwR3PmIZyxFr+rzdOMFFA6/mV89T/3zFdd0ypjvFU3pE1lyO A6nXSWtiG8p0doLZY5t5bQskhbNA8nBFOkd2PIRLoO7Zx2YZL/SSbQ+ETfKVz/jtt5i5 33U47fS1Gvywivrx2b6GgF/fZ5tuCfSIrk2W9QOofaXxRoWI5GUirIQGvTTMOOu5vvws BOQw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=feedback-id:content-transfer-encoding:mime-version:message-id:date :subject:cc:to:from:dkim-signature; bh=jS675G72o/9Tlb/tn0H2nD0ZrR2jiMefQZ88vIkojjE=; fh=cYOfP7mHP3HOQz2FrofLMAijdwCZnujT5yZbx4t+io4=; b=DoMx6Dhm+gwO3Vy/eSjqgrbFi+8WflqkkdkCThimsBfDntrOfP86kq4V5f8hRLV13B zRbAvcDF+jBAVupm4PslaN9r6CGLUsNDaQJ67Pd4vHzbi2XfHdpTrVm8rVLYztlpoRg3 QdGHaxvAVVaoW4DmlnL46OsuUl43iPt2MJtrNX2Kb7+3m2iOWyBKpilMNnKliM2Dadru XuOp1JFKgICM3eYBRCno3WEUwjieUm4LemlgkmdeLxG67h7bIn6ZDvQ1BQQw0549vA7Y 2FXDybhSB7Vkk1q4ZHqAbJ9WpPz6hLBtOVAHFnurElMQKbDxxmF0/jX/qy1jfMvDJhzD HozQ== ARC-Authentication-Results: i=1; gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b="ie/dSDpo"; spf=pass (google.com: domain of fm-1321639-20231204023722d1a0a9545d815dd5a5-qfudxf@rts-flowmailer.siemens.com designates 185.136.65.228 as permitted sender) smtp.mailfrom=fm-1321639-20231204023722d1a0a9545d815dd5a5-QfuDXf@rts-flowmailer.siemens.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com Return-Path: Received: from mta-65-228.siemens.flowmailer.net (mta-65-228.siemens.flowmailer.net. [185.136.65.228]) by gmr-mx.google.com with ESMTPS id dm6-20020ad44e26000000b0067ab24a47a9si358243qvb.2.2023.12.03.18.37.23 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sun, 03 Dec 2023 18:37:24 -0800 (PST) Received-SPF: pass (google.com: domain of fm-1321639-20231204023722d1a0a9545d815dd5a5-qfudxf@rts-flowmailer.siemens.com designates 185.136.65.228 as permitted sender) client-ip=185.136.65.228; Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b="ie/dSDpo"; spf=pass (google.com: domain of fm-1321639-20231204023722d1a0a9545d815dd5a5-qfudxf@rts-flowmailer.siemens.com designates 185.136.65.228 as permitted sender) smtp.mailfrom=fm-1321639-20231204023722d1a0a9545d815dd5a5-QfuDXf@rts-flowmailer.siemens.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com Received: by mta-65-228.siemens.flowmailer.net with ESMTPSA id 20231204023722d1a0a9545d815dd5a5 for ; Mon, 04 Dec 2023 03:37:22 +0100 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; s=fm1; d=siemens.com; i=felix.moessbauer@siemens.com; h=Date:From:Subject:To:Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding:Cc; bh=jS675G72o/9Tlb/tn0H2nD0ZrR2jiMefQZ88vIkojjE=; b=ie/dSDpoHiBIdaxodeOz7dRKPsH9uG4pVCxdbB9WntvK6K02gvSMIRp/aj0YZA2A78jpQY 0w8IE/0784lGFz6/9DsyeBC26kmja2kq6SsrKX9BPy8YSWnEyOKiLQJzhoD8s5UOJaMMVa8L xm9hd12OXmJNMUJQux1VQuTkYuM+4=; From: Felix Moessbauer To: isar-users@googlegroups.com Cc: jan.kiszka@siemens.com, baocheng.su@siemens.com, Felix Moessbauer Subject: [RFC 1/1] delay creation of initrd until end of rootfs install Date: Mon, 4 Dec 2023 10:36:50 +0800 Message-Id: <20231204023650.1912972-1-felix.moessbauer@siemens.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Flowmailer-Platform: Siemens Feedback-ID: 519:519-1321639:519-21489:flowmailer X-TUID: Wsoz3g8k8hWY This patch solves major performance issues around the initramfs creation by ensuring that the initrd is only created once. This is implemented by stubbing the update-initramfs call during the package installing. After all apt operations are completed, we manually trigger the initrd creation. In case a custom initramfs is used, the creation is completely skipped in the image rootfs, as this would anyways not be used. Before that, each package install that made a initrd relevant change triggered the update of the initrd. As we have multiple apt calls during the build, this step was sometimes executed multiple times. In addition, the apt install step is emulated, further slowing down the initrd generation. On some layers on non native architecutes, this summed up to over 10 minutes of initrd generation time. Signed-off-by: Felix Moessbauer --- meta/classes/image.bbclass | 4 +++ meta/classes/rootfs.bbclass | 32 +++++++++++++++++++ .../isar-bootstrap/isar-bootstrap.inc | 2 ++ 3 files changed, 38 insertions(+) diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass index 73f1d52c..39addc59 100644 --- a/meta/classes/image.bbclass +++ b/meta/classes/image.bbclass @@ -72,6 +72,8 @@ inherit essential ROOTFSDIR = "${IMAGE_ROOTFS}" ROOTFS_FEATURES += "clean-package-cache clean-pycache generate-manifest export-dpkg-status clean-log-files clean-debconf-cache" +# when using a custom initrd, do not generate one as part of the image rootfs +ROOTFS_FEATURES += "${@ '' if d.getVar('INITRD_IMAGE') == '' else 'no-generate-initrd'}" ROOTFS_PACKAGES += "${IMAGE_PREINSTALL} ${@isar_multiarch_packages('IMAGE_INSTALL', d)}" ROOTFS_MANIFEST_DEPLOY_DIR ?= "${DEPLOY_DIR_IMAGE}" ROOTFS_DPKGSTATUS_DEPLOY_DIR ?= "${DEPLOY_DIR_IMAGE}" @@ -488,6 +490,8 @@ do_rootfs_quality_check() { args="${ROOTFS_QA_FIND_ARGS}" # rootfs_finalize chroot-setup.sh args="${args} ! -path ${ROOTFSDIR}/var/lib/dpkg/diversions" + # initramfs is generated outside of the image rootfs + args="${args} ! -path ${ROOTFSDIR}/boot/initrd.img*" for cmd in ${ROOTFS_POSTPROCESS_COMMAND}; do case "${cmd}" in image_postprocess_mark) diff --git a/meta/classes/rootfs.bbclass b/meta/classes/rootfs.bbclass index 1b95115a..69e38dac 100644 --- a/meta/classes/rootfs.bbclass +++ b/meta/classes/rootfs.bbclass @@ -14,6 +14,7 @@ ROOTFS_BASE_DISTRO ?= "${BASE_DISTRO}" # 'generate-manifest' - generate a package manifest of the rootfs into ${ROOTFS_MANIFEST_DEPLOY_DIR} # 'export-dpkg-status' - exports /var/lib/dpkg/status file to ${ROOTFS_DPKGSTATUS_DEPLOY_DIR} # 'clean-log-files' - delete log files that are not owned by packages +# 'no-generate-initrd' - do not generate debian default initrd ROOTFS_FEATURES ?= "" ROOTFS_APT_ARGS="install --yes -o Debug::pkgProblemResolver=yes" @@ -117,6 +118,16 @@ rootfs_configure_apt() { EOSUDO } +ROOTFS_CONFIGURE_COMMAND += "rootfs_disable_initrd_generation" +rootfs_disable_initrd_generation[weight] = "1" +rootfs_disable_initrd_generation() { + # fully disable initrd generation + echo "replace update-initramfs with stub" + sudo mv "${ROOTFSDIR}/usr/sbin/update-initramfs" \ + "${ROOTFSDIR}/usr/sbin/update-initramfs.isar" + sudo chroot "${ROOTFSDIR}" ln -s "/usr/bin/true" "/usr/sbin/update-initramfs" +} + ROOTFS_INSTALL_COMMAND += "rootfs_install_pkgs_update" rootfs_install_pkgs_update[weight] = "5" @@ -310,6 +321,27 @@ rootfs_cleanup_isar_apt() { EOSUDO } +ROOTFS_POSTPROCESS_COMMAND += "rootfs_restore_initrd_tooling" +rootfs_generate_initrd[weight] = "1" +rootfs_restore_initrd_tooling() { + if [ -e "${ROOTFSDIR}/usr/sbin/update-initramfs.isar" ]; then + sudo mv -f "${ROOTFSDIR}/usr/sbin/update-initramfs.isar" \ + "${ROOTFSDIR}/usr/sbin/update-initramfs" + fi +} + +ROOTFS_POSTPROCESS_COMMAND += "${@bb.utils.contains('ROOTFS_FEATURES', 'no-generate-initrd', '', 'rootfs_generate_initrd', d)}" +rootfs_generate_initrd[weight] = "10" +rootfs_generate_initrd() { + if [ -n "$(sudo find '${ROOTFSDIR}/boot' -type f -name 'vmlinu[xz]*')" ]; then + sudo -E chroot "${ROOTFSDIR}" sh -c '\ + export kernel_version=$(basename /boot/vmlinu[xz]* | cut -d'-' -f2-); \ + update-initramfs -u -v -k "$kernel_version";' + else + echo "no kernel in this rootfs, do not generate initrd" + fi +} + do_rootfs_postprocess[vardeps] = "${ROOTFS_POSTPROCESS_COMMAND}" do_rootfs_postprocess[network] = "${TASK_USE_SUDO}" python do_rootfs_postprocess() { diff --git a/meta/recipes-core/isar-bootstrap/isar-bootstrap.inc b/meta/recipes-core/isar-bootstrap/isar-bootstrap.inc index 3477c2fb..4c6011bc 100644 --- a/meta/recipes-core/isar-bootstrap/isar-bootstrap.inc +++ b/meta/recipes-core/isar-bootstrap/isar-bootstrap.inc @@ -24,6 +24,8 @@ DISTRO_BOOTSTRAP_KEYFILES = "" THIRD_PARTY_APT_KEYFILES = "" DEPLOY_ISAR_BOOTSTRAP ?= "" DISTRO_BOOTSTRAP_BASE_PACKAGES = "locales" +# install early, so we can stub the update-initramfs script before rootfs install +DISTRO_BOOTSTRAP_BASE_PACKAGES:append = ",initramfs-tools" DISTRO_BOOTSTRAP_BASE_PACKAGES:append:gnupg = ",gnupg" DISTRO_BOOTSTRAP_BASE_PACKAGES:append:https-support = ",ca-certificates" DISTRO_VARS_PREFIX ?= "${@'HOST_' if d.getVar('BOOTSTRAP_FOR_HOST') == '1' else ''}" -- 2.39.2