Thanks, pushed! -a

Am Dienstag, 1. August 2023, 10:18:31 CEST schrieb Azamat H. Hackimov:
> ---
>  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 <target>/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
> 


-- 
Andreas K. Hüttel
dilfri...@gentoo.org
Gentoo Linux developer
(council, toolchain, base-system, perl, libreoffice)

Attachment: signature.asc
Description: This is a digitally signed message part.

Reply via email to