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 B71F515800A for ; Tue, 22 Aug 2023 20:38:35 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id F2D0D2BC05F; Tue, 22 Aug 2023 20:38:34 +0000 (UTC) Received: from smtp.gentoo.org (woodpecker.gentoo.org [IPv6:2001:470:ea4a:1:5054:ff:fec7:86e4]) (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 D51222BC05F for ; Tue, 22 Aug 2023 20:38:34 +0000 (UTC) Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id BCE9A3412B1 for ; Tue, 22 Aug 2023 20:38:33 +0000 (UTC) Received: from localhost.localdomain (localhost [IPv6:::1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id 3113EFC9 for ; Tue, 22 Aug 2023 20:38:32 +0000 (UTC) From: "Andreas K. Hüttel" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Andreas K. Hüttel" Message-ID: <1692736597.3d4fb24383716958dadea95d100911037bb2b557.dilfridge@gentoo> Subject: [gentoo-commits] proj/catalyst:master commit in: catalyst/base/, targets/support/, targets/livecd-stage2/ X-VCS-Repository: proj/catalyst X-VCS-Files: catalyst/base/stagebase.py targets/livecd-stage2/controller.sh targets/support/bootloader-setup.sh targets/support/kmerge.sh targets/support/pre-distkmerge.sh X-VCS-Directories: catalyst/base/ targets/support/ targets/livecd-stage2/ X-VCS-Committer: dilfridge X-VCS-Committer-Name: Andreas K. Hüttel X-VCS-Revision: 3d4fb24383716958dadea95d100911037bb2b557 X-VCS-Branch: master Date: Tue, 22 Aug 2023 20:38:32 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-Archives-Salt: a87d6d80-c9a6-4133-8b90-44d1fa13f0b2 X-Archives-Hash: a0529d6c0095fa4f900add67470c9eb3 commit: 3d4fb24383716958dadea95d100911037bb2b557 Author: Azamat H. Hackimov gmail com> AuthorDate: Tue Aug 1 08:18:31 2023 +0000 Commit: Andreas K. Hüttel gentoo org> CommitDate: Tue Aug 22 20:36:37 2023 +0000 URL: https://gitweb.gentoo.org/proj/catalyst.git/commit/?id=3d4fb243 Implementing distkernel installation Signed-off-by: Andreas K. Hüttel gentoo.org> 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(-) diff --git a/catalyst/base/stagebase.py b/catalyst/base/stagebase.py index a9147241..fe307eab 100644 --- a/catalyst/base/stagebase.py +++ b/catalyst/base/stagebase.py @@ -694,6 +694,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", @@ -716,6 +718,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: @@ -1584,7 +1591,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( @@ -1595,19 +1602,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' @@ -1617,8 +1628,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 d6d5f96e..455a4f07 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_hostarch} in alpha) @@ -115,14 +116,28 @@ case ${clst_hostarch} 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