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 6040415800A for ; Tue, 22 Aug 2023 20:39:01 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 9F9AE2BC084; Tue, 22 Aug 2023 20:39:00 +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)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 7E1F92BC084 for ; Tue, 22 Aug 2023 20:39:00 +0000 (UTC) From: "Andreas K. Huettel" To: gentoo-catalyst@lists.gentoo.org Subject: Re: [gentoo-catalyst] [PATCH] Implementing distkernel installation Date: Tue, 22 Aug 2023 22:38:52 +0200 Message-ID: <2718543.mvXUDI8C0e@pinacolada> Organization: Gentoo Linux In-Reply-To: <20230801082000.21185-3-azamat.hackimov@gmail.com> References: <20230801082000.21185-2-azamat.hackimov@gmail.com> <20230801082000.21185-3-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-Type: multipart/signed; boundary="nextPart12293596.O9o76ZdvQC"; micalg="pgp-sha512"; protocol="application/pgp-signature" X-Archives-Salt: b3b6acb4-fbae-406b-af36-37c7dab513e7 X-Archives-Hash: 18e1bbf6a52dd3e621fd956dd6b33d44 --nextPart12293596.O9o76ZdvQC Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="iso-8859-1"; protected-headers="v1" From: "Andreas K. Huettel" To: gentoo-catalyst@lists.gentoo.org Date: Tue, 22 Aug 2023 22:38:52 +0200 Message-ID: <2718543.mvXUDI8C0e@pinacolada> Organization: Gentoo Linux In-Reply-To: <20230801082000.21185-3-azamat.hackimov@gmail.com> MIME-Version: 1.0 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 >=20 > 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"] =3D self.settings[gk_mainargs] > del self.settings[gk_mainargs] > =20 > + dracut_mainargs =3D prefix + "/dracut_args" > + if dracut_mainargs in self.settings: > + self.settings["dracut_args"] =3D self.settings[dracut_mainar= gs] > + del self.settings[dracut_mainargs] > + > # Ask genkernel to include b2sum if /verify is set > verify =3D prefix + "/verify" > if verify in self.settings: > @@ -1554,7 +1561,7 @@ class StageBase(TargetBase, ClearBase, GenBase): > self.resume.enable("build_packages") > =20 > 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 =3D self.settings["boot/kernel"] > if isinstance(mynames, str): > mynames =3D [mynames] > - # Execute the script that sets up the kernel build environme= nt > - cmd([self.settings['controller_file'], 'pre-kmerge'], env=3D= self.env) > for kname in [sanitize_name(name) for name in mynames]: > + if "boot/kernel/" + kname + "/distkernel" in self.settin= gs: > + cmd([self.settings['controller_file'], 'pre-distkmer= ge'], env=3Dself.env) > + else: > + # Execute the script that sets up the kernel build e= nvironment > + cmd([self.settings['controller_file'], 'pre-kmerge']= , env=3Dself.env) > self._build_kernel(kname=3Dkname) > self.resume.enable("build_kernel") > =20 > 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=3Dkname) > =20 > key =3D 'boot/kernel/' + kname + '/extraversion' > @@ -1587,8 +1598,7 @@ class StageBase(TargetBase, ClearBase, GenBase): > self._copy_initramfs_overlay(kname=3Dkname) > =20 > # Execute the script that builds the kernel > - cmd([self.settings['controller_file'], 'kernel', kname], > - env=3Dself.env) > + cmd([self.settings['controller_file'], 'kernel', kname], env=3Ds= elf.env) > =20 > if "boot/kernel/" + kname + "/initramfs_overlay" in self.setting= s: > 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} > ;; > =20 > + 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/bootlo= ader-setup.sh > index 7fa3133f..8699779e 100755 > --- a/targets/support/bootloader-setup.sh > +++ b/targets/support/bootloader-setup.sh > @@ -54,6 +54,7 @@ memtest_grub() { > } > =20 > default_append_line=3D(${cmdline_opts[@]} cdroot) > +default_dracut_append_line=3D(root=3Dlive:CDLABEL=3DISOIMAGE rd.live.dir= =3D/ rd.live.squashimg=3Dimage.squashfs) > =20 > case ${clst_basearch} in > alpha) > @@ -115,14 +116,28 @@ case ${clst_basearch} in > for x in ${clst_boot_kernel} > do > eval "kernel_console=3D\$clst_boot_kernel_${x}_console" > + eval "distkernel=3D\$clst_boot_kernel_${x}_distkernel" > =20 > echo "menuentry 'Boot LiveCD (kernel: ${x})' --class gnu-linux --clas= s os {" >> ${iacfg} > - echo " linux ${kern_subdir}/${x} ${default_append_line[@]}" >> ${iacf= g} > + if [ ${distkernel} =3D "yes" ] > + then > + echo " search --no-floppy --set=3Droot -l 'ISOIMAGE'" >> ${iacfg} > + echo " linux ${kern_subdir}/${x} ${default_dracut_append_line[@]}" >= > ${iacfg} > + else > + echo " linux ${kern_subdir}/${x} ${default_append_line[@]}" >> ${iac= fg} > + fi > echo " initrd ${kern_subdir}/${x}.igz" >> ${iacfg} > echo "}" >> ${iacfg} > echo "" >> ${iacfg} > echo "menuentry 'Boot LiveCD (kernel: ${x}) (cached)' --class gnu-lin= ux --class os {" >> ${iacfg} > - echo " linux ${kern_subdir}/${x} ${default_append_line[@]} docache" >= > ${iacfg} > + if [ ${distkernel} =3D "yes" ] > + then > + echo " search --no-floppy --set=3Droot -l 'ISOIMAGE'" >> ${iacfg} > + echo " linux ${kern_subdir}/${x} ${default_dracut_append_line[@]} rd= =2Elive.ram=3D1" >> ${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 > =20 > install -d /tmp/kerncache > =20 > +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=3D${clst_basearch}" > + ;; > + esac > +} > + > genkernel_compile() { > # default genkernel args > GK_ARGS=3D( > @@ -78,8 +101,15 @@ eval "initramfs_overlay=3D\$clst_boot_kernel_${kname}= _initramfs_overlay" > eval "kernel_merge=3D\$clst_boot_kernel_${kname}_packages" > eval "kernel_use=3D\$clst_boot_kernel_${kname}_use" > eval eval kernel_gk_kernargs=3D( \$clst_boot_kernel_${kname}_gk_kernargs= ) > +eval eval kernel_dracut_kernargs=3D( \$clst_boot_kernel_${kname}_dracut_= args ) > eval "ksource=3D\$clst_boot_kernel_${kname}_sources" > -[[ -z ${ksource} ]] && ksource=3D"sys-kernel/gentoo-sources" > +eval "distkernel=3D\$clst_boot_kernel_${kname}_distkernel" > + > +if [[ ${distkernel} =3D "yes" ]] ; then > + [[ -z ${ksource} ]] && ksource=3D"sys-kernel/gentoo-kernel" > +else > + [[ -z ${ksource} ]] && ksource=3D"sys-kernel/gentoo-sources" > +fi > =20 > kernel_version=3D$(portageq best_visible / "${ksource}") > =20 > @@ -103,7 +133,11 @@ if [[ -n ${clst_KERNCACHE} ]]; then > fi > =20 > if [[ ! ${cached_kernel_found} ]]; then > - USE=3Dsymlink run_merge --update "${ksource}" > + if [[ ${distkernel} =3D "yes" ]] ; then > +USE=3D"-initramfs" run_merge --update "${ksource}" > + else > +USE=3D"symlink" run_merge --update "${ksource}" > + fi > fi > =20 > if [[ -n ${clst_KERNCACHE} ]]; then > @@ -117,20 +151,43 @@ if [[ -n ${clst_KERNCACHE} ]]; then > ln -snf "${SOURCESDIR}" /usr/src/linux > fi > =20 > -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 \(=3D.*\):EXTRAVERSION \1-${clst_kextraversio= n}:" \ > - /usr/src/linux/Makefile > +if [[ ${distkernel} =3D "yes" ]] ; then > + # Kernel already built, let's run dracut to make initramfs > + distkernel_source_path=3D$(equery -Cq f ${ksource} | grep "/usr/src/li= nux-" -m1) > + distkernel_image_path=3D$(distkmerge_get_image_path) > + distkernel_version=3D${distkernel_source_path##"/usr/src/linux-"} > + > + DRACUT_ARGS=3D( > + "${kernel_dracut_kernargs[@]}" > + --force > + --kernel-image=3D"${distkernel_source_path}/${distkernel_image_path}" > + --kver=3D"${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}.t= ar.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 \(=3D.*\):EXTRAVERSION \1-${clst_kextraver= sion}:" \ > + /usr/src/linux/Makefile > + fi > + > + genkernel_compile > fi > =20 > -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-dist= kmerge.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=3D"yes" > + > +source /tmp/chroot-functions.sh > + > +run_merge --oneshot sys-kernel/dracut >=20 =2D-=20 Andreas K. H=FCttel dilfridge@gentoo.org Gentoo Linux developer (council, toolchain, base-system, perl, libreoffice) --nextPart12293596.O9o76ZdvQC Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part. Content-Transfer-Encoding: 7Bit -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQKTBAABCgB9FiEE/Rnm0xsZLuTcY+rT3CsWIV7VQSoFAmTlHNxfFIAAAAAALgAo aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldEZE MTlFNkQzMUIxOTJFRTREQzYzRUFEM0RDMkIxNjIxNUVENTQxMkEACgkQ3CsWIV7V QSooug//QCgkdG87VW3nth4TW7jhHAtYjjaEddKlXeyEEKHclTegO45mV5IyK4dG xngTyHXCLQKGk7MV9khArmwt6cbLwnZEB0J687LhZuGlcsUiSZWM7HZppnXFpnq4 oEgo8fzijKg0ET0ONFD9dyTPC+9R1m/btyc72ct+NjaMXNjdUanJicbaVtqItlEn /o/vs5wLc7P3RNvZU2Jds7Ai9L+FK8tVHk6zEXf2VrMY+TiiC1HDLS1R589MTeMS P6gV0US+iw4qnyzy9RHbwm6R9gY9F0exswjc3aoEWU5fjBgkGELCvA5jnScjRBBy 4J/liB/+XSyrPqovUR6H1nJyoxRCWradX28E9nD6pmbMeZVwwq+bRPCHwiXYllQa 9//g+lO94Pxr2WX98wBo/2oA8IUKy5v6tGItjLFCy7Ex+gHY3NOhnktG0TuC8fQv Hvv+iQb0zYTQSob6KtL82HudnIjjkhI5V4DuRauJEA/jfEel6ZE9XbE+4SvaN0FG rIiqEp/eT1koZtykN06aBK3FY3/kDxaFBCopT/T6CtQI+HDzGZsk4GDgaWvi1Yos AjtTlAMJ+FbO6EF1zEftoHD8TL9B8JBbHK9bej2mOm4xLtbEkCDj+WViiykU+e9+ WUtVbu1o9LUoqR/sB50UYEHFWzcYG2qqtsy/i9gStcdkSOXOEQY= =ghfg -----END PGP SIGNATURE----- --nextPart12293596.O9o76ZdvQC--