commit: a664d1fcf818ecdeff4c35d58731fe6442991930
Author: Andreas K. Hüttel <dilfridge <AT> gentoo <DOT> org>
AuthorDate: Fri Oct 11 18:12:54 2024 +0000
Commit: Andreas K. Hüttel <dilfridge <AT> gentoo <DOT> org>
CommitDate: Fri Oct 11 18:12:54 2024 +0000
URL: https://gitweb.gentoo.org/proj/catalyst.git/commit/?id=a664d1fc
Prepare for separate bootloader codepath
Signed-off-by: Andreas K. Hüttel <dilfridge <AT> gentoo.org>
targets/diskimage-stage2/controller.sh | 17 +--
targets/support/qcow2-bootloader-setup.sh | 166 ++++++++++++++++++++++++++++--
2 files changed, 162 insertions(+), 21 deletions(-)
diff --git a/targets/diskimage-stage2/controller.sh
b/targets/diskimage-stage2/controller.sh
index dce37172..2c70642c 100755
--- a/targets/diskimage-stage2/controller.sh
+++ b/targets/diskimage-stage2/controller.sh
@@ -46,21 +46,10 @@ case $1 in
bootloader)
shift
+ # We don't have to create any directories or copy any stuff
here, since
+ # the qcow2 has no internal squashfs or similar
- # We create a firmware directory, if necessary
- if [ -e ${clst_chroot_path}/lib/firmware.tar.bz2 ]
- then
- echo "Creating firmware directory in $1"
- mkdir -p $1/firmware
- # TODO: Unpack firmware into $1/firmware and remove it
from the
- # chroot so newer livecd-tools/genkernel can find it
and unpack it.
- fi
-
- if [ -e ${clst_chroot_path}/boot/memtest86plus/ ]; then
- cp -rv ${clst_chroot_path}/boot/memtest86plus/* $1
- fi
-
- ${clst_shdir}/support/iso-bootloader-setup.sh $1
+ ${clst_shdir}/support/qcow2-bootloader-setup.sh $1
;;
unmerge)
diff --git a/targets/support/qcow2-bootloader-setup.sh
b/targets/support/qcow2-bootloader-setup.sh
index be577ada..34d95dc9 100755
--- a/targets/support/qcow2-bootloader-setup.sh
+++ b/targets/support/qcow2-bootloader-setup.sh
@@ -13,16 +13,32 @@ extract_kernels $1/boot
cmdline_opts=()
# Add any additional options
-if [ -n "${clst_qcow2_bootargs}" ]
+if [ -n "${clst_livecd_bootargs}" ]
then
- for x in ${clst_qcow2_bootargs}
+ for x in ${clst_livecd_bootargs}
do
cmdline_opts+=(${x})
done
fi
+case ${clst_fstype} in
+ squashfs)
+ cmdline_opts+=(looptype=squashfs loop=/image.squashfs)
+ ;;
+ jffs2)
+ cmdline_opts+=(looptype=jffs2 loop=/image.jffs2)
+ ;;
+esac
+
# Optional memtest setups
memtest_grub() {
+ if [[ -e $1/memtest64.bios ]]; then
+ echo 'if [ "x$grub_platform" = xpc ]; then'
+ echo ' menuentry "Memtest86+ 64bit BIOS" {'
+ echo ' linux "/memtest64.bios"'
+ echo ' }'
+ echo 'fi'
+ fi
if [[ -e $1/memtest.efi64 ]]; then
echo 'if [ "x$grub_platform" = xefi ]; then'
echo ' menuentry "Memtest86+ 64bit UEFI" {'
@@ -30,13 +46,65 @@ memtest_grub() {
echo ' }'
echo 'fi'
fi
+ if [[ -e $1/memtest32.bios ]]; then
+ echo 'menuentry "Memtest86+ 32bit BIOS" {'
+ echo ' linux "/memtest32.bios"'
+ echo '}'
+ fi
}
-default_append_line=(${cmdline_opts[@]})
-default_dracut_append_line=(${clst_qcow2_bootargs})
+default_append_line=(${cmdline_opts[@]} cdroot)
+default_dracut_append_line=(${clst_livecd_bootargs}
root=live:CDLABEL=${clst_iso_volume_id} rd.live.dir=/
rd.live.squashimg=image.squashfs cdroot)
case ${clst_hostarch} in
- amd64|arm64|ppc64*)
+ alpha)
+ # NO SOFTLEVEL SUPPORT YET
+ acfg=$1/etc/aboot.conf
+ bctr=0
+ # Pass 1 is for non-serial
+ for x in ${clst_boot_kernel}
+ do
+ echo -n "${bctr}:/boot/${x} " >> ${acfg}
+ echo -n "initrd=/boot/${x}.igz " >> ${acfg}
+ echo "${cmdline_opts[@]} cdroot" >> ${acfg}
+ ((bctr=${bctr}+1))
+ done
+ # Pass 2 is for serial
+ cmdline_opts+=(console=ttyS0)
+ for x in ${clst_boot_kernel}
+ do
+ echo -n "${bctr}:/boot/${x} " >> ${acfg}
+ echo -n "initrd=/boot/${x}.igz " >> ${acfg}
+ echo "${cmdline_opts[@]} cdroot" >> ${acfg}
+ ((bctr=${bctr}+1))
+ done
+ ;;
+ arm)
+ # NO SOFTLEVEL SUPPORT YET
+ ;;
+ hppa)
+ # NO SOFTLEVEL SUPPORT YET
+ mkdir -p $1/boot
+
+ icfg=$1/boot/palo.conf
+ kmsg=$1/boot/kernels.msg
+ hmsg=$1/boot/help.msg
+ # Make sure we strip the extension to the kernel to allow palo
to choose
+ boot_kernel_common_name=${first/%32/}
+ boot_kernel_common_name=${boot_kernel_common_name/%64/}
+
+ # copy the bootloader for the final image
+ cp /usr/share/palo/iplboot $1/boot/
+
+ echo "--commandline=0/${boot_kernel_common_name}
initrd=${first}.igz ${default_append_line[@]}" >> ${icfg}
+ echo "--bootloader=boot/iplboot" >> ${icfg}
+ echo "--ramdisk=boot/${first}.igz" >> ${icfg}
+ for x in ${clst_boot_kernel}
+ do
+ echo "--recoverykernel=boot/${x}" >> ${icfg}
+ done
+ ;;
+ amd64|arm64|ia64|ppc*|powerpc*|sparc*|x86|i?86)
kern_subdir=/boot
iacfg=$1/boot/grub/grub.cfg
mkdir -p $1/boot/grub
@@ -50,10 +118,9 @@ case ${clst_hostarch} in
eval "kernel_console=\$clst_boot_kernel_${x}_console"
eval "distkernel=\$clst_boot_kernel_${x}_distkernel"
- echo "menuentry 'Boot Gentoo image (kernel: ${x})'
--class gnu-linux --class os {" >> ${iacfg}
+ echo "menuentry 'Boot LiveCD (kernel: ${x})' --class
gnu-linux --class os {" >> ${iacfg}
if [ ${distkernel} = "yes" ]
then
- # FIXME: what can we search for here?
echo " search --no-floppy --set=root -l
${clst_iso_volume_id}" >> ${iacfg}
echo " linux ${kern_subdir}/${x}
${default_dracut_append_line[@]}" >> ${iacfg}
else
@@ -62,8 +129,93 @@ case ${clst_hostarch} in
echo " initrd ${kern_subdir}/${x}.igz" >> ${iacfg}
echo "}" >> ${iacfg}
echo "" >> ${iacfg}
+ echo "menuentry 'Boot LiveCD (kernel: ${x}) (cached)'
--class gnu-linux --class os {" >> ${iacfg}
+ if [ ${distkernel} = "yes" ]
+ then
+ echo " search --no-floppy --set=root -l
${clst_iso_volume_id}" >> ${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}" ]
+ then
+ echo "submenu 'Special console options (kernel: ${x})'
--class gnu-linux --class os {" >> ${iacfg}
+ for y in ${kernel_console}
+ do
+ echo "menuentry 'Boot LiveCD (kernel:
${x} console=${y})' --class gnu-linux --class os {" >> ${iacfg}
+ echo " linux ${kern_subdir}/${x}
${default_append_line[@]} console=${y}" >> ${iacfg}
+ echo " initrd ${kern_subdir}/${x}.igz"
>> ${iacfg}
+ echo "}" >> ${iacfg}
+ echo "" >> ${iacfg}
+ done
+ echo "}" >> ${iacfg}
+ fi
+ echo "" >> ${iacfg}
done
memtest_grub $1 >> ${iacfg}
;;
+ mips)
+ # NO SOFTLEVEL SUPPORT YET
+
+ # Mips is an interesting arch -- where most archs will
+ # use ${1} as the root of the LiveCD, an SGI LiveCD lacks
+ # such a root. Instead, we will use ${1} as a scratch
+ # directory to build the components we need for the
+ # CD image, and then pass these components to the
+ # `sgibootcd` tool which outputs a final CD image
+ scratch="${1}"
+ mkdir -p ${scratch}/{kernels/misc,arcload}
+ echo "" > ${scratch}/arc.cf
+
+ # Move kernel binaries to ${scratch}/kernels, and
+ # move everything else to ${scratch}/kernels/misc
+ for x in ${clst_boot_kernel}; do
+ [ -e "${1}/boot/${x}" ] && mv ${1}/boot/${x}
${scratch}/kernels
+ [ -e "${1}/boot/${x}.igz" ] && mv ${1}/boot/${x}.igz
${scratch}/kernels/misc
+ done
+ [ -d "${1}/boot" ] && rmdir ${1}/boot
+
+ # Source the arcload source file to generated required sections
of arc.cf
+ source ${clst_shdir}/support/mips-arcload_conf.sh
+
+ # Generate top portions of the config
+ echo -e "${topofconfig}${serial}${dbg}${cmt1}" >>
${scratch}/arc.cf
+
+ # Next, figure out what kernels were specified in the
+ # spec file, and generate the appropriate arcload conf
+ # blocks specific to each system
+ ip22="$(echo ${clst_boot_kernel} | tr " " "\n" | grep "ip22" |
tr "\n" " ")"
+ ip27="$(echo ${clst_boot_kernel} | tr " " "\n" | grep "ip27" |
tr "\n" " ")"
+ ip28="$(echo ${clst_boot_kernel} | tr " " "\n" | grep "ip28" |
tr "\n" " ")"
+ ip30="$(echo ${clst_boot_kernel} | tr " " "\n" | grep "ip30" |
tr "\n" " ")"
+ ip32="$(echo ${clst_boot_kernel} | tr " " "\n" | grep "ip32" |
tr "\n" " ")"
+
+ if [ -n "${ip22}" ]; then
+ echo -e "${ip22base}" >> ${scratch}/arc.cf
+ for x in ${ip22}; do echo -e "${!x}" >>
${scratch}/arc.cf; done
+ echo -e "${ip22vid}${ip22x}" >> ${scratch}/arc.cf
+ fi
+
+ [ -n "${ip27}" ] && echo -e "${ip27base}" >> ${scratch}/arc.cf
+ [ -n "${ip28}" ] && echo -e "${ip28base}" >> ${scratch}/arc.cf
+ [ -n "${ip30}" ] && echo -e "${ip30base}" >> ${scratch}/arc.cf
+
+ if [ -n "${ip32}" ]; then
+ echo -e "${ip32base}" >> ${scratch}/arc.cf
+ for x in ${ip32}; do echo -e "${!x}" >>
${scratch}/arc.cf; done
+ echo -e "${ip32vid}${ip32x}" >> ${scratch}/arc.cf
+ fi
+
+ # Finish off the config
+ echo -e "${cmt2}" >> ${scratch}/arc.cf
+
+ # Move the bootloader binaries & config to their destination
+ [ -e "${1}/sashARCS" ] && mv ${1}/sashARCS ${scratch}/arcload
+ [ -e "${1}/sash64" ] && mv ${1}/sash64 ${scratch}/arcload
+ [ -e "${1}/arc.cf" ] && mv ${1}/arc.cf ${scratch}/arcload
+ ;;
esac
exit $?