From 845896cf9463dbc0ac409792921c332daf321380 Mon Sep 17 00:00:00 2001 From: Silvan Calarco Date: Fri, 10 Jun 2022 18:06:40 +0200 Subject: [PATCH] livecd, livedvd: replace syslinux with grub boot loader --- platforms/livecd-root/Makefile | 2 +- platforms/livecd/post.inc.sh | 146 ++++++++++++++++++++-------- platforms/livecd/settings.inc | 3 +- platforms/livedvd/post.inc.sh | 170 ++++++++++++++++++++++++--------- platforms/livedvd/settings.inc | 2 +- 5 files changed, 231 insertions(+), 92 deletions(-) diff --git a/platforms/livecd-root/Makefile b/platforms/livecd-root/Makefile index 8d64975..8e770da 100644 --- a/platforms/livecd-root/Makefile +++ b/platforms/livecd-root/Makefile @@ -18,7 +18,7 @@ $(MAKEDIST_TARGET)-livecd-root: \ mambatray dnf \ $(MAKEDIST_TARGET)-livecd-kde -$(MAKEDIST_TARGET)-livecd-root-$(ARCH): VirtualBox-guest +$(MAKEDIST_TARGET)-livecd-root-x86_64: VirtualBox-guest # Localization targets $(MAKEDIST_TARGET)-livecd-root-de: langpacks-de firefox-langpack-de diff --git a/platforms/livecd/post.inc.sh b/platforms/livecd/post.inc.sh index 7270b17..14efd58 100644 --- a/platforms/livecd/post.inc.sh +++ b/platforms/livecd/post.inc.sh @@ -6,13 +6,14 @@ # make initramfs [ -e $MOUNTDIR2/boot/isolinux ] || mkdir -p $MOUNTDIR2/boot/isolinux +[ -e $MOUNTDIR2/boot/grub ] || mkdir -p $MOUNTDIR2/boot/grub ISOID= for K in $KERNEL_EXTRAVER $KERNEL_MORE_EXTRAVER; do chroot $MOUNTDIR depmod -a ${KERNEL_MAJVER}${K} LANG=${LANGUAGE}_${COUNTRY} chroot $MOUNTDIR dracut \ -a dmsquash-live -o squash-live \ - --filesystems "autofs4 ext3 ext4 overlay squashfs isofs reiserfs" \ + --filesystems "autofs4 ext4 overlay squashfs isofs hfsplus nls_utf8" \ --nomdadmconf --nolvmconf \ /boot/initramfs-${KERNEL_MAJVER}${K}.img.gz \ ${KERNEL_MAJVER}${K} @@ -33,7 +34,90 @@ done # add buildinfo buildinfo="`cat $MOUNTDIR/etc/openmamba-release` ${PLATFORM}" -# configure isolinux boot loader +# configure grub boot loader +cat > $MOUNTDIR2/boot/grub/grub.cfg << _EOF +# +# GRUB configuration generated by openmamba makedist +# +font=unicode +set gfxmode=auto +insmod all_video +insmod gfxterm +insmod gettext +insmod iso9660 +insmod biosdisk +terminal_output=gfxterm +timeout=10 +# theme +insmod=png +set menu_color_normal=white/black +set menu_color_highlight=white/green +_EOF + +# +# Boot entries +# +ISOID= +for K in $KERNEL_EXTRAVER $KERNEL_MORE_EXTRAVER; do + cat >> $MOUNTDIR2/boot/grub/grub.cfg << _EOF +menuentry "openmamba GNU/Linux (${KERNEL_MAJVER}${K})" { + echo "Loading /boot/vmlinuz${ISOID}" + linux /boot/vmlinuz${ISOID} root=live:LABEL=${MAKEDIST_TARGET}_${PLATFORM} selinux=0 quiet splash ro + echo "Loading /boot/initrd${ISOID}.gz" + initrd /boot/initrd${ISOID}.gz +} +_EOF + ISOID=$(($ISOID + 1)) +done + + cat >> $MOUNTDIR2/boot/grub/grub.cfg << _EOF +submenu "Advanced options for openmamba GNU/Linux" { +_EOF + +#ISOID= +#for K in $KERNEL_EXTRAVER $KERNEL_MORE_EXTRAVER; do +# cat >> $MOUNTDIR2/boot/grub/grub.cfg << _EOF +# menuentry "No modeset (${KERNEL_MAJVER}${K})" { +# echo "Loading /boot/vmlinuz${ISOID}" +# linux /boot/vmlinuz${ISOID} root=live:LABEL=${MAKEDIST_TARGET}_${PLATFORM} selinux=0 quiet splash ro nomodeset +# echo "Loading /boot/initrd${ISOID}.gz" +# initrd /boot/initrd${ISOID}.gz +# } +#_EOF +# ISOID=$(($ISOID + 1)) +#done + +ISOID= +for K in $KERNEL_EXTRAVER $KERNEL_MORE_EXTRAVER; do + cat >> $MOUNTDIR2/boot/grub/grub.cfg << _EOF + menuentry "Debug mode (${KERNEL_MAJVER}${K})" { + echo "Loading /boot/vmlinuz${ISOID}" + linux /boot/vmlinuz${ISOID} root=live:LABEL=${MAKEDIST_TARGET}_${PLATFORM} ro selinux=0 rddebug + echo "Loading /boot/initrd${ISOID}.gz" + initrd /boot/initrd${ISOID}.gz + } +_EOF + ISOID=$(($ISOID + 1)) +done +ISOID= +for K in $KERNEL_EXTRAVER $KERNEL_MORE_EXTRAVER; do + cat >> $MOUNTDIR2/boot/grub/grub.cfg << _EOF + menuentry "Debug mode with nomodeset (${KERNEL_MAJVER}${K})" { + echo "Loading /boot/vmlinuz${ISOID}" + linux /boot/vmlinuz${ISOID} root=live:LABEL=${MAKEDIST_TARGET}_${PLATFORM} ro selinux=0 rddebug nomodeset + echo "Loading /boot/initrd${ISOID}.gz" + initrd /boot/initrd${ISOID}.gz + } +_EOF + ISOID=$(($ISOID + 1)) +done + +cat >> $MOUNTDIR2/boot/grub/grub.cfg << _EOF +} +_EOF + + +# configure isolinux boot loader (obsolete) cat > $MOUNTDIR2/boot/isolinux/isolinux.cfg << _EOF PROMPT 0 TIMEOUT 5 @@ -89,11 +173,23 @@ _EOF ISOID=$(($ISOID + 1)) done -cat >> $MOUNTDIR2/boot/isolinux/isolinux.cfg << _EOF +# install memtest +if [ -e $MOUNTDIR/boot/memtest86+.bin ]; then + cp $MOUNTDIR/boot/memtest86+.bin $MOUNTDIR2/boot/memtest + + cat >> $MOUNTDIR2/boot/grub/grub.cfg << _EOF +menuentry 'Memory test' { + insmod part_gpt + insmod fat + linux16 /boot/memtest +} +_EOF + + cat >> $MOUNTDIR2/boot/isolinux/isolinux.cfg << _EOF MENU SEPARATOR LABEL memtest MENU LABEL Memory test - kernel memtest + kernel /boot/memtest MENU SEPARATOR MENU SEPARATOR LABEL - @@ -101,20 +197,10 @@ LABEL - MENU DISABLE _EOF -# install isolinux binary -[ -e $MOUNTDIR/usr/share/syslinux/isolinux.bin ] && cp $MOUNTDIR/usr/share/syslinux/isolinux.bin $MOUNTDIR2/boot/isolinux/isolinux.bin || - { echo "Error: /usr/share/syslinux/isolinux.bin not found. Please install the syslinux package."; - exit 1; } - -# copy syslinux addons to final root /boot dir -for f in ldlinux.c32 libcom32.c32 libutil.c32 libmenu.c32 menu.c32 vesamenu.c32; do - [ -e $MOUNTDIR/usr/share/syslinux/$f ] && cp $MOUNTDIR/usr/share/syslinux/$f $MOUNTDIR2/boot/isolinux/ -done - -# install memtest -[ -e $MOUNTDIR/boot/memtest86+.bin ] && cp $MOUNTDIR/boot/memtest86+.bin $MOUNTDIR2/boot/isolinux/memtest || - { echo "Error: /boot/memtest86+.bin not found. Please install the memtest86 package."; - exit 1; } +else + echo "Error: /boot/memtest86+.bin not found. Please install the memtest86 package." + exit 1 +fi # copy static files for specific platform [ -e $TARGETDIR/platforms/$PLATFORM/root ] && @@ -141,30 +227,6 @@ grub-mkimage -o $MOUNTDIR2/EFI/BOOT/bootx64.efi -O x86_64-efi -p /EFI/BOOT \ errorAndExit $"Error: unable to create GRUB x86_64-efi image" } -# basic extlinux.conf -> grub.cfg conversion -echo "search --no-floppy --label --set=root openmamba_live" > $MOUNTDIR2/EFI/BOOT/grub.cfg -while read line; do - case $line in - "MENU LABEL "*) [ "$CURR_BRACKET_OPEN" = "1" ] && echo "}" >> $MOUNTDIR2/EFI/BOOT/grub.cfg - echo "menuentry \"${line/MENU LABEL }\" {" >> $MOUNTDIR2/EFI/BOOT/grub.cfg - CURR_BRACKET_OPEN=1 - ;; - "kernel "*) CURR_KERNEL="${line/kernel }" - echo "echo \"Loading ${CURR_KERNEL}\"" >> $MOUNTDIR2/EFI/BOOT/grub.cfg - ;; - "append "*) set -- ${line/append initrd=} - CURR_INITRD="$1" - CURR_CMDLINE="${line/append initrd=$CURR_INITRD}" - echo "linux ${CURR_KERNEL} ${CURR_CMDLINE}" >> $MOUNTDIR2/EFI/BOOT/grub.cfg - echo "echo \"Loading ${CURR_INITRD}\"" >> $MOUNTDIR2/EFI/BOOT/grub.cfg - echo "initrd ${CURR_INITRD}" >> $MOUNTDIR2/EFI/BOOT/grub.cfg - echo "}" >> $MOUNTDIR2/EFI/BOOT/grub.cfg - CURR_BRACKET_OPEN=0 - ;; - esac -done < $MOUNTDIR2/boot/isolinux/isolinux.cfg -[ "$CURR_BRACKET_OPEN" = "1" ] && echo "}" >> $MOUNTDIR2/EFI/BOOT/grub.cfg - # # EFI support section END # diff --git a/platforms/livecd/settings.inc b/platforms/livecd/settings.inc index 5963b82..0c6e695 100644 --- a/platforms/livecd/settings.inc +++ b/platforms/livecd/settings.inc @@ -1,4 +1,5 @@ -MEDIA=iso +#MEDIA=iso +MEDIA=iso-grub DISTROMATIC=off if [ "$ARCH" = "i586" ]; then KERNEL_EXTRAVER=mamba diff --git a/platforms/livedvd/post.inc.sh b/platforms/livedvd/post.inc.sh index 7e8f2fe..a94c504 100644 --- a/platforms/livedvd/post.inc.sh +++ b/platforms/livedvd/post.inc.sh @@ -1,4 +1,4 @@ -# livecd post script +# livedvd post script # # creates a fake installation aimed at producing a kernel image and initrd # for livecd boot @@ -6,13 +6,14 @@ # make initramfs [ -e $MOUNTDIR2/boot/isolinux ] || mkdir -p $MOUNTDIR2/boot/isolinux +[ -e $MOUNTDIR2/boot/grub ] || mkdir -p $MOUNTDIR2/boot/grub ISOID= for K in $KERNEL_EXTRAVER $KERNEL_MORE_EXTRAVER; do chroot $MOUNTDIR depmod -a ${KERNEL_MAJVER}${K} LANG=${LANGUAGE}_${COUNTRY} chroot $MOUNTDIR dracut \ -a dmsquash-live -o squash-live \ - --filesystems "autofs4 ext3 ext4 overlay squashfs isofs reiserfs" \ + --filesystems "autofs4 ext4 overlay squashfs isofs hfsplus nls_utf8" \ --nomdadmconf --nolvmconf \ /boot/initramfs-${KERNEL_MAJVER}${K}.img.gz \ ${KERNEL_MAJVER}${K} @@ -33,7 +34,104 @@ done # add buildinfo buildinfo="`cat $MOUNTDIR/etc/openmamba-release` ${PLATFORM}" -# configure isolinux boot loader +# configure grub boot loader +cat > $MOUNTDIR2/boot/grub/grub.cfg << _EOF +# +# GRUB configuration generated by openmamba makedist +# +font=unicode +set gfxmode=auto +insmod all_video +insmod gfxterm +insmod gettext +insmod iso9660 +insmod biosdisk +terminal_output=gfxterm +timeout=10 +# theme +insmod=png +set menu_color_normal=white/black +set menu_color_highlight=white/green +_EOF + +# +# Boot entries +# +for l in $MULTILANGUAGE; do + case $l in + "en") LABEL="English"; LOCALELANG="en_US.UTF-8"; VCONSOLEKEYMAP="us" ;; + "it") LABEL="Italiano"; LOCALELANG="it_IT.UTF-8"; VCONSOLEKEYMAP="it" ;; + "fr") LABEL="Français"; LOCALELANG="fr_FR.UTF-8"; VCONSOLEKEYMAP="fr" ;; + "es") LABEL="Español"; LOCALELANG="es_ES.UTF-8"; VCONSOLEKEYMAP="es" ;; + "de") LABEL="Deutsch"; LOCALELANG="de_DE.UTF-8"; VCONSOLEKEYMAP="de" ;; + *) LABEL="$l" + esac + cat >> $MOUNTDIR2/boot/grub/grub.cfg << _EOF +submenu "${LABEL}" { +_EOF + +ISOID= +for K in $KERNEL_EXTRAVER $KERNEL_MORE_EXTRAVER; do + cat >> $MOUNTDIR2/boot/grub/grub.cfg << _EOF +menuentry "openmamba GNU/Linux (${KERNEL_MAJVER}${K} - ${l})" { + echo "Loading /boot/vmlinuz${ISOID}" + linux /boot/vmlinuz${ISOID} root=live:LABEL=${MAKEDIST_TARGET}_${PLATFORM} selinux=0 quiet splash ro locale.LANG=$LOCALELANG vconsole.keymap=$VCONSOLEKEYMAP + echo "Loading /boot/initrd${ISOID}.gz" + initrd /boot/initrd${ISOID}.gz +} +_EOF + ISOID=$(($ISOID + 1)) +done + + cat >> $MOUNTDIR2/boot/grub/grub.cfg << _EOF +submenu "Advanced options for openmamba GNU/Linux" { +_EOF + +#ISOID= +#for K in $KERNEL_EXTRAVER $KERNEL_MORE_EXTRAVER; do +# cat >> $MOUNTDIR2/boot/grub/grub.cfg << _EOF +# menuentry "No modeset (${KERNEL_MAJVER}${K})" { +# echo "Loading /boot/vmlinuz${ISOID}" +# linux /boot/vmlinuz${ISOID} root=live:LABEL=${MAKEDIST_TARGET}_${PLATFORM} selinux=0 quiet splash ro nomodeset +# echo "Loading /boot/initrd${ISOID}.gz" +# initrd /boot/initrd${ISOID}.gz +# } +#_EOF +# ISOID=$(($ISOID + 1)) +#done + +ISOID= +for K in $KERNEL_EXTRAVER $KERNEL_MORE_EXTRAVER; do + cat >> $MOUNTDIR2/boot/grub/grub.cfg << _EOF + menuentry "Debug mode (${KERNEL_MAJVER}${K} - ${l})" { + echo "Loading /boot/vmlinuz${ISOID}" + linux /boot/vmlinuz${ISOID} root=live:LABEL=${MAKEDIST_TARGET}_${PLATFORM} ro selinux=0 rddebug locale.LANG=$LOCALELANG vconsole.keymap=$VCONSOLEKEYMAP + echo "Loading /boot/initrd${ISOID}.gz" + initrd /boot/initrd${ISOID}.gz + } +_EOF + ISOID=$(($ISOID + 1)) +done +ISOID= +for K in $KERNEL_EXTRAVER $KERNEL_MORE_EXTRAVER; do + cat >> $MOUNTDIR2/boot/grub/grub.cfg << _EOF + menuentry "Debug mode with nomodeset (${KERNEL_MAJVER}${K} - ${l})" { + echo "Loading /boot/vmlinuz${ISOID}" + linux /boot/vmlinuz${ISOID} root=live:LABEL=${MAKEDIST_TARGET}_${PLATFORM} ro selinux=0 rddebug nomodeset locale.LANG=$LOCALELANG vconsole.keymap=$VCONSOLEKEYMAP + echo "Loading /boot/initrd${ISOID}.gz" + initrd /boot/initrd${ISOID}.gz + } +_EOF + ISOID=$(($ISOID + 1)) +done + +cat >> $MOUNTDIR2/boot/grub/grub.cfg << _EOF +} +} +_EOF + + +# configure isolinux boot loader (obsolete) cat > $MOUNTDIR2/boot/isolinux/isolinux.cfg.utf8 << _EOF PROMPT 0 TIMEOUT 20 @@ -113,11 +211,27 @@ MENU END _EOF done -cat >> $MOUNTDIR2/boot/isolinux/isolinux.cfg.utf8 << _EOF +# convert isolinux.cfg from UTF-8 to CP437 +iconv -f utf-8 -t cp437 $MOUNTDIR2/boot/isolinux/isolinux.cfg.utf8 > $MOUNTDIR2/boot/isolinux/isolinux.cfg +rm -f $MOUNTDIR2/boot/isolinux/isolinux.cfg.utf8 + +# install memtest +if [ -e $MOUNTDIR/boot/memtest86+.bin ]; then + cp $MOUNTDIR/boot/memtest86+.bin $MOUNTDIR2/boot/memtest + + cat >> $MOUNTDIR2/boot/grub/grub.cfg << _EOF +menuentry 'Memory test' { + insmod part_gpt + insmod fat + linux16 /boot/memtest +} +_EOF + + cat >> $MOUNTDIR2/boot/isolinux/isolinux.cfg << _EOF MENU SEPARATOR LABEL memtest MENU LABEL Memory test - kernel memtest + kernel /boot/memtest MENU SEPARATOR MENU SEPARATOR LABEL - @@ -125,24 +239,10 @@ LABEL - MENU DISABLE _EOF -# convert isolinux.cfg from UTF-8 to CP437 -iconv -f utf-8 -t cp437 $MOUNTDIR2/boot/isolinux/isolinux.cfg.utf8 > $MOUNTDIR2/boot/isolinux/isolinux.cfg -rm -f $MOUNTDIR2/boot/isolinux/isolinux.cfg.utf8 - -# install isolinux binary -[ -e $MOUNTDIR/usr/share/syslinux/isolinux.bin ] && cp $MOUNTDIR/usr/share/syslinux/isolinux.bin $MOUNTDIR2/boot/isolinux/isolinux.bin || - { echo "Error: /usr/share/syslinux/isolinux.bin not found. Please install the syslinux package."; - exit 1; } - -# copy syslinux addons to final root /boot dir -for f in ldlinux.c32 libcom32.c32 libutil.c32 libmenu.c32 menu.c32 vesamenu.c32; do - [ -e $MOUNTDIR/usr/share/syslinux/$f ] && cp $MOUNTDIR/usr/share/syslinux/$f $MOUNTDIR2/boot/isolinux/ -done - -# install memtest -[ -e $MOUNTDIR/boot/memtest86+.bin ] && cp $MOUNTDIR/boot/memtest86+.bin $MOUNTDIR2/boot/isolinux/memtest || - { echo "Error: /boot/memtest.bin not found. Please install the memtest86 package."; - exit 1; } +else + echo "Error: /boot/memtest86+.bin not found. Please install the memtest86 package." + exit 1 +fi # copy static files for specific platform [ -e $TARGETDIR/platforms/$PLATFORM/root ] && @@ -169,30 +269,6 @@ grub-mkimage -o $MOUNTDIR2/EFI/BOOT/bootx64.efi -O x86_64-efi -p /EFI/BOOT \ errorAndExit $"Error: unable to create GRUB x86_64-efi image" } -# basic extlinux.conf -> grub.cfg conversion -echo "search --no-floppy --label --set=root openmamba_live" > $MOUNTDIR2/EFI/BOOT/grub.cfg -while read line; do - case $line in - "MENU LABEL "*) [ "$CURR_BRACKET_OPEN" = "1" ] && echo "}" >> $MOUNTDIR2/EFI/BOOT/grub.cfg - echo "menuentry \"${line/MENU LABEL }\" {" >> $MOUNTDIR2/EFI/BOOT/grub.cfg - CURR_BRACKET_OPEN=1 - ;; - "kernel "*) CURR_KERNEL="${line/kernel }" - echo "echo \"Loading ${CURR_KERNEL}\"" >> $MOUNTDIR2/EFI/BOOT/grub.cfg - ;; - "append "*) set -- ${line/append initrd=} - CURR_INITRD="$1" - CURR_CMDLINE="${line/append initrd=$CURR_INITRD}" - echo "linux ${CURR_KERNEL} ${CURR_CMDLINE}" >> $MOUNTDIR2/EFI/BOOT/grub.cfg - echo "echo \"Loading ${CURR_INITRD}\"" >> $MOUNTDIR2/EFI/BOOT/grub.cfg - echo "initrd ${CURR_INITRD}" >> $MOUNTDIR2/EFI/BOOT/grub.cfg - echo "}" >> $MOUNTDIR2/EFI/BOOT/grub.cfg - CURR_BRACKET_OPEN=0 - ;; - esac -done < $MOUNTDIR2/boot/isolinux/isolinux.cfg -[ "$CURR_BRACKET_OPEN" = "1" ] && echo "}" >> $MOUNTDIR2/EFI/BOOT/grub.cfg - # # EFI support section END # diff --git a/platforms/livedvd/settings.inc b/platforms/livedvd/settings.inc index f7301ec..5255a14 100644 --- a/platforms/livedvd/settings.inc +++ b/platforms/livedvd/settings.inc @@ -1,4 +1,4 @@ -MEDIA=iso +MEDIA=iso-grub MULTILANGUAGE="en it es fr de" DISTROMATIC=off