commit: 4cb160c076f04cc932aff3b658c051e7b402c4b4 Author: Andreas K. Hüttel <dilfridge <AT> gentoo <DOT> org> AuthorDate: Fri Oct 11 20:13:29 2024 +0000 Commit: Andreas K. Hüttel <dilfridge <AT> gentoo <DOT> org> CommitDate: Fri Oct 11 20:13:29 2024 +0000 URL: https://gitweb.gentoo.org/proj/catalyst.git/commit/?id=4cb160c0
Configure bootloader in qcow2 Signed-off-by: Andreas K. Hüttel <dilfridge <AT> gentoo.org> targets/support/create-qcow2.sh | 4 +- targets/support/qcow2-bootloader-setup.sh | 182 +++--------------------------- 2 files changed, 20 insertions(+), 166 deletions(-) diff --git a/targets/support/create-qcow2.sh b/targets/support/create-qcow2.sh index 071dccac..9510cabb 100755 --- a/targets/support/create-qcow2.sh +++ b/targets/support/create-qcow2.sh @@ -43,14 +43,14 @@ qemu-nbd -c ${mydevice} -f qcow2 "${1}.tmp.qcow2" || die "Cannot connect qcow2 f parted -s ${mydevice} mklabel gpt || die "Cannot create disklabel" # create an EFI boot partition -parted -s ${mydevice} -- mkpart efi fat32 1M ${clst_qcow2_efisize} || die "Cannot create EFI partition" +parted -s ${mydevice} -- mkpart gentoo_efi fat32 1M ${clst_qcow2_efisize} || die "Cannot create EFI partition" # mark it as EFI boot partition parted -s ${mydevice} -- type 1 C12A7328-F81F-11D2-BA4B-00A0C93EC93B || die "Cannot set EFI partition UUID" # note down name mypartefi=${mydevice}p1 # create the root partition -parted -s ${mydevice} -- mkpart root ${clst_qcow2_roottype} ${clst_qcow2_efisize}GiB -1M || die "Cannot create root partition" +parted -s ${mydevice} -- mkpart gentoo_root ${clst_qcow2_roottype} ${clst_qcow2_efisize}GiB -1M || die "Cannot create root partition" # mark it as generic linux filesystem partition parted -s ${mydevice} -- type 2 0FC63DAF-8483-4772-8E79-3D69D8477DE4 || die "Cannot set root partition UUID" # note down name diff --git a/targets/support/qcow2-bootloader-setup.sh b/targets/support/qcow2-bootloader-setup.sh index 34d95dc9..2bf6d873 100755 --- a/targets/support/qcow2-bootloader-setup.sh +++ b/targets/support/qcow2-bootloader-setup.sh @@ -2,112 +2,51 @@ source ${clst_shdir}/support/functions.sh -# $1 is the destination root - -if [[ -n ${clst_cdtar} ]]; then - extract_cdtar $1 -fi - -extract_kernels $1/boot +# $1 would be the the destination root for an iso +# ${clst_stage_path} is where the stage can be found cmdline_opts=() +my_bootdir="${clst_stage_path}/boot" # Add any additional options -if [ -n "${clst_livecd_bootargs}" ] +if [ -n "${clst_diskimage_bootargs}" ] then - for x in ${clst_livecd_bootargs} + for x in ${clst_diskimage_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 + if [[ -e ${my_bootdir}/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 + if [[ -e ${my_bootdir}/memtest.efi64 ]]; then echo 'if [ "x$grub_platform" = xefi ]; then' echo ' menuentry "Memtest86+ 64bit UEFI" {' echo ' chainloader "/memtest.efi64"' echo ' }' echo 'fi' fi - if [[ -e $1/memtest32.bios ]]; then + if [[ -e ${my_bootdir}/memtest32.bios ]]; then echo 'menuentry "Memtest86+ 32bit BIOS" {' echo ' linux "/memtest32.bios"' echo '}' fi } -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) +default_append_line=(${cmdline_opts[@]}) +default_dracut_append_line=(${clst_diskimage_bootargs} 'root="LABEL=gentoo_root"') case ${clst_hostarch} in - 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 + amd64|arm64|ppc*) + iacfg=${my_bootdir}/grub/grub.cfg + mkdir -p ${my_bootdir}/grub echo 'set default=0' > ${iacfg} echo 'set gfxpayload=keep' >> ${iacfg} echo 'set timeout=10' >> ${iacfg} @@ -118,104 +57,19 @@ case ${clst_hostarch} in 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 "menuentry 'Gentoo Linux (kernel: ${x})' --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[@]}" >> ${iacfg} + echo " search --no-floppy --set=root -l gentoo_efi" >> ${iacfg} + echo " linux /${x} ${default_dracut_append_line[@]}" >> ${iacfg} else - echo " linux ${kern_subdir}/${x} ${default_append_line[@]}" >> ${iacfg} + echo " linux /${x} ${default_append_line[@]}" >> ${iacfg} fi - echo " initrd ${kern_subdir}/${x}.igz" >> ${iacfg} + echo " initrd /${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 $?