From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id 5C1C415800A for ; Tue, 1 Aug 2023 08:21:24 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 91B6AE0D0A; Tue, 1 Aug 2023 08:21:23 +0000 (UTC) Received: from mail-lj1-x22d.google.com (mail-lj1-x22d.google.com [IPv6:2a00:1450:4864:20::22d]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 484B4E0D0A for ; Tue, 1 Aug 2023 08:21:23 +0000 (UTC) Received: by mail-lj1-x22d.google.com with SMTP id 38308e7fff4ca-2b9c55e0fbeso75016381fa.2 for ; Tue, 01 Aug 2023 01:21:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1690878081; x=1691482881; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Xc5znhl8z0B9K6qjx2mnzaAZVi4PS8ro6s7IcWnTkBE=; b=a7c1UjJ12RhzQ24TPeAL8mrgKbcy7c9SYPA8n3hyZUh/1tOpwiUUzSIHN1B9CnFbHI b4k6Htwk1fGj11oRSBc6gJcg9V7LhfAbzd9PuCl2H5Sx5viOYG37cHyZHh7zFY2P5R29 kapx/SbNwayj6Te3uZS7XqVklyTUgOI7QzE4pBpka8/OONTsmfizqnK7xcnVMh6Je9de oUZwMJi4lYT6eqi3sLMpdp5qN7lXBLutJatvqHo2a/gN3RgE+lVICvkpnieS8IPviqTz TDAw+K5KGgqOpW02lr1FTJFjsMsfl6PVA7OdczzqGIAmcICGiwKdZ0GOrIPZWiwuhQuQ vAkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690878081; x=1691482881; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Xc5znhl8z0B9K6qjx2mnzaAZVi4PS8ro6s7IcWnTkBE=; b=F5ncYH90BplhlJExKVbGMiU9EkJOMJgJXmiZQOGMaD581t38Df7/kXGj0zF15r+nU/ 6GEA+9lV7bIHyhQ7mXdkQ9seH82HnGPb33ypT8eUW48i/dthYiHZnD974i2ZIZBysfbU ZOnOCztJvznQT+6Dlq+UliZ9H1rV4EYvoM2z92zBt1VFePFzFAESTLLs8bkSh8nISnGH Xh86M1LAtJwqE0hjPfan5xDZkSV190rWECUm/nz9X9v8g47tn3/Fk1tD77QpPly3pWhn 9/Cno0cinAQ9Rwt9+Cq+SUJjdorVHuxMIATELwUQcT7uNaZtbzMl2JAC4mR0LLh/tn7q Np9Q== X-Gm-Message-State: ABy/qLa4TGgBVc9uivz+3cAxW4hBipijw/fA2l8wF8OkQEwhNbuMTDka 9mUzNYx6YN8aAorrJH0ToyFVr2ttdTJsEhoL X-Google-Smtp-Source: APBJJlHesZxRQNX2xGMPp0hZA6C24H/ey513VbsGRMN/+8d7BpUwte1reWwO1Vqwn9pWiazGDOAupw== X-Received: by 2002:a2e:6e15:0:b0:2b9:f007:9908 with SMTP id j21-20020a2e6e15000000b002b9f0079908mr2061602ljc.41.1690878080640; Tue, 01 Aug 2023 01:21:20 -0700 (PDT) Received: from icewind.auth.lfstrm.tv ([95.161.221.30]) by smtp.gmail.com with ESMTPSA id v23-20020a2e9617000000b002b9e5afa14csm1320361ljh.42.2023.08.01.01.21.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Aug 2023 01:21:20 -0700 (PDT) From: "Azamat H. Hackimov" To: gentoo-catalyst@lists.gentoo.org Cc: "Azamat H. Hackimov" Subject: [gentoo-catalyst] [PATCH] Implementing distkernel installation Date: Tue, 1 Aug 2023 11:18:31 +0300 Message-ID: <20230801082000.21185-3-azamat.hackimov@gmail.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20230801082000.21185-2-azamat.hackimov@gmail.com> References: <20230801082000.21185-2-azamat.hackimov@gmail.com> Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-catalyst@lists.gentoo.org Reply-to: gentoo-catalyst@lists.gentoo.org X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Archives-Salt: 67647bc1-a47c-49ad-af46-870c3007e697 X-Archives-Hash: a71df5a814cab0447f57a66bc219c2c4 --- catalyst/base/stagebase.py | 22 ++++++-- targets/livecd-stage2/controller.sh | 5 ++ targets/support/bootloader-setup.sh | 19 ++++++- targets/support/kmerge.sh | 85 ++++++++++++++++++++++++----- targets/support/pre-distkmerge.sh | 7 +++ 5 files changed, 116 insertions(+), 22 deletions(-) create mode 100644 targets/support/pre-distkmerge.sh diff --git a/catalyst/base/stagebase.py b/catalyst/base/stagebase.py index 057d9960..474013f1 100644 --- a/catalyst/base/stagebase.py +++ b/catalyst/base/stagebase.py @@ -695,6 +695,8 @@ class StageBase(TargetBase, ClearBase, GenBase): "boot/kernel/" + x + "/aliases", "boot/kernel/" + x + "/config", "boot/kernel/" + x + "/console", + "boot/kernel/" + x + "/distkernel", + "boot/kernel/" + x + "/dracut_args", "boot/kernel/" + x + "/extraversion", "boot/kernel/" + x + "/gk_action", "boot/kernel/" + x + "/gk_kernargs", @@ -717,6 +719,11 @@ class StageBase(TargetBase, ClearBase, GenBase): self.settings["gk_mainargs"] = self.settings[gk_mainargs] del self.settings[gk_mainargs] + dracut_mainargs = prefix + "/dracut_args" + if dracut_mainargs in self.settings: + self.settings["dracut_args"] = self.settings[dracut_mainargs] + del self.settings[dracut_mainargs] + # Ask genkernel to include b2sum if /verify is set verify = prefix + "/verify" if verify in self.settings: @@ -1554,7 +1561,7 @@ class StageBase(TargetBase, ClearBase, GenBase): self.resume.enable("build_packages") def build_kernel(self): - '''Build all configured kernels''' + """Build all configured kernels""" if "autoresume" in self.settings["options"] \ and self.resume.is_enabled("build_kernel"): log.notice( @@ -1565,19 +1572,23 @@ class StageBase(TargetBase, ClearBase, GenBase): mynames = self.settings["boot/kernel"] if isinstance(mynames, str): mynames = [mynames] - # Execute the script that sets up the kernel build environment - cmd([self.settings['controller_file'], 'pre-kmerge'], env=self.env) for kname in [sanitize_name(name) for name in mynames]: + if "boot/kernel/" + kname + "/distkernel" in self.settings: + cmd([self.settings['controller_file'], 'pre-distkmerge'], env=self.env) + else: + # Execute the script that sets up the kernel build environment + cmd([self.settings['controller_file'], 'pre-kmerge'], env=self.env) self._build_kernel(kname=kname) self.resume.enable("build_kernel") def _build_kernel(self, kname): - "Build a single configured kernel by name" + """Build a single configured kernel by name""" if "autoresume" in self.settings["options"] \ and self.resume.is_enabled("build_kernel_" + kname): log.notice('Resume point detected, skipping build_kernel ' 'for %s operation...', kname) return + self._copy_kernel_config(kname=kname) key = 'boot/kernel/' + kname + '/extraversion' @@ -1587,8 +1598,7 @@ class StageBase(TargetBase, ClearBase, GenBase): self._copy_initramfs_overlay(kname=kname) # Execute the script that builds the kernel - cmd([self.settings['controller_file'], 'kernel', kname], - env=self.env) + cmd([self.settings['controller_file'], 'kernel', kname], env=self.env) if "boot/kernel/" + kname + "/initramfs_overlay" in self.settings: log.notice('Cleaning up temporary overlay dir') diff --git a/targets/livecd-stage2/controller.sh b/targets/livecd-stage2/controller.sh index f6522e63..57d947a1 100755 --- a/targets/livecd-stage2/controller.sh +++ b/targets/livecd-stage2/controller.sh @@ -20,6 +20,11 @@ case $1 in extract_modules ${clst_chroot_path} ${kname} ;; + pre-distkmerge) + # Install dracut + exec_in_chroot ${clst_shdir}/support/pre-distkmerge.sh + ;; + preclean) # Move over the motd (if applicable) case ${clst_livecd_type} in diff --git a/targets/support/bootloader-setup.sh b/targets/support/bootloader-setup.sh index 7fa3133f..8699779e 100755 --- a/targets/support/bootloader-setup.sh +++ b/targets/support/bootloader-setup.sh @@ -54,6 +54,7 @@ memtest_grub() { } default_append_line=(${cmdline_opts[@]} cdroot) +default_dracut_append_line=(root=live:CDLABEL=ISOIMAGE rd.live.dir=/ rd.live.squashimg=image.squashfs) case ${clst_basearch} in alpha) @@ -115,14 +116,28 @@ case ${clst_basearch} in for x in ${clst_boot_kernel} do eval "kernel_console=\$clst_boot_kernel_${x}_console" + eval "distkernel=\$clst_boot_kernel_${x}_distkernel" echo "menuentry 'Boot LiveCD (kernel: ${x})' --class gnu-linux --class os {" >> ${iacfg} - echo " linux ${kern_subdir}/${x} ${default_append_line[@]}" >> ${iacfg} + if [ ${distkernel} = "yes" ] + then + echo " search --no-floppy --set=root -l 'ISOIMAGE'" >> ${iacfg} + echo " linux ${kern_subdir}/${x} ${default_dracut_append_line[@]}" >> ${iacfg} + else + echo " linux ${kern_subdir}/${x} ${default_append_line[@]}" >> ${iacfg} + fi echo " initrd ${kern_subdir}/${x}.igz" >> ${iacfg} echo "}" >> ${iacfg} echo "" >> ${iacfg} echo "menuentry 'Boot LiveCD (kernel: ${x}) (cached)' --class gnu-linux --class os {" >> ${iacfg} - echo " linux ${kern_subdir}/${x} ${default_append_line[@]} docache" >> ${iacfg} + if [ ${distkernel} = "yes" ] + then + echo " search --no-floppy --set=root -l 'ISOIMAGE'" >> ${iacfg} + echo " linux ${kern_subdir}/${x} ${default_dracut_append_line[@]} rd.live.ram=1" >> ${iacfg} + else + echo " linux ${kern_subdir}/${x} ${default_append_line[@]} docache" >> ${iacfg} + fi + echo " initrd ${kern_subdir}/${x}.igz" >> ${iacfg} echo "}" >> ${iacfg} if [ -n "${kernel_console}" ] diff --git a/targets/support/kmerge.sh b/targets/support/kmerge.sh index 20b471f1..c5beddc9 100755 --- a/targets/support/kmerge.sh +++ b/targets/support/kmerge.sh @@ -4,6 +4,29 @@ source /tmp/chroot-functions.sh install -d /tmp/kerncache +distkmerge_get_image_path() { + case ${clst_basearch} in + amd64|x86) + echo arch/x86/boot/bzImage + ;; + arm64) + echo arch/arm64/boot/Image.gz + ;; + arm) + echo arch/arm/boot/zImage + ;; + hppa|ppc|ppc64) + echo ./vmlinux + ;; + riscv) + echo arch/riscv/boot/Image.gz + ;; + *) + die "unsupported ARCH=${clst_basearch}" + ;; + esac +} + genkernel_compile() { # default genkernel args GK_ARGS=( @@ -78,8 +101,15 @@ eval "initramfs_overlay=\$clst_boot_kernel_${kname}_initramfs_overlay" eval "kernel_merge=\$clst_boot_kernel_${kname}_packages" eval "kernel_use=\$clst_boot_kernel_${kname}_use" eval eval kernel_gk_kernargs=( \$clst_boot_kernel_${kname}_gk_kernargs ) +eval eval kernel_dracut_kernargs=( \$clst_boot_kernel_${kname}_dracut_args ) eval "ksource=\$clst_boot_kernel_${kname}_sources" -[[ -z ${ksource} ]] && ksource="sys-kernel/gentoo-sources" +eval "distkernel=\$clst_boot_kernel_${kname}_distkernel" + +if [[ ${distkernel} = "yes" ]] ; then + [[ -z ${ksource} ]] && ksource="sys-kernel/gentoo-kernel" +else + [[ -z ${ksource} ]] && ksource="sys-kernel/gentoo-sources" +fi kernel_version=$(portageq best_visible / "${ksource}") @@ -103,7 +133,11 @@ if [[ -n ${clst_KERNCACHE} ]]; then fi if [[ ! ${cached_kernel_found} ]]; then - USE=symlink run_merge --update "${ksource}" + if [[ ${distkernel} = "yes" ]] ; then +USE="-initramfs" run_merge --update "${ksource}" + else +USE="symlink" run_merge --update "${ksource}" + fi fi if [[ -n ${clst_KERNCACHE} ]]; then @@ -117,20 +151,43 @@ if [[ -n ${clst_KERNCACHE} ]]; then ln -snf "${SOURCESDIR}" /usr/src/linux fi -if [[ -n ${clst_kextraversion} ]]; then - echo "Setting EXTRAVERSION to ${clst_kextraversion}" - - if [[ -e /usr/src/linux/Makefile.bak ]]; then - cp /usr/src/linux/Makefile{.bak,} - else - cp /usr/src/linux/Makefile{,.bak} - fi - sed -i -e "s:EXTRAVERSION \(=.*\):EXTRAVERSION \1-${clst_kextraversion}:" \ - /usr/src/linux/Makefile +if [[ ${distkernel} = "yes" ]] ; then + # Kernel already built, let's run dracut to make initramfs + distkernel_source_path=$(equery -Cq f ${ksource} | grep "/usr/src/linux-" -m1) + distkernel_image_path=$(distkmerge_get_image_path) + distkernel_version=${distkernel_source_path##"/usr/src/linux-"} + + DRACUT_ARGS=( + "${kernel_dracut_kernargs[@]}" + --force + --kernel-image="${distkernel_source_path}/${distkernel_image_path}" + --kver="${distkernel_version}" + ) + + dracut "${DRACUT_ARGS[@]}" || exit 1 + + # Create minkernel package to mimic genkernel's behaviour + cd /boot + tar jcvf /tmp/kerncache/${kname}-kernel-initrd-${clst_version_stamp}.tar.bz2 System.map* config* initramfs* vmlinuz* + cd / + tar jcvf /tmp/kerncache/${kname}-modules-${clst_version_stamp}.tar.bz2 lib/modules + +else + if [[ -n ${clst_kextraversion} ]]; then + echo "Setting EXTRAVERSION to ${clst_kextraversion}" + + if [[ -e /usr/src/linux/Makefile.bak ]]; then + cp /usr/src/linux/Makefile{.bak,} + else + cp /usr/src/linux/Makefile{,.bak} + fi + sed -i -e "s:EXTRAVERSION \(=.*\):EXTRAVERSION \1-${clst_kextraversion}:" \ + /usr/src/linux/Makefile + fi + + genkernel_compile fi -genkernel_compile - # Write out CONFIG, USE, VERSION, and EXTRAVERSION files if [[ -n ${clst_KERNCACHE} && ! ${cached_kernel_found} ]]; then pushd "/tmp/kerncache/${kname}" >/dev/null diff --git a/targets/support/pre-distkmerge.sh b/targets/support/pre-distkmerge.sh new file mode 100644 index 00000000..08409a93 --- /dev/null +++ b/targets/support/pre-distkmerge.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +RUN_DEFAULT_FUNCS="yes" + +source /tmp/chroot-functions.sh + +run_merge --oneshot sys-kernel/dracut -- 2.41.0