diff --git a/packages/sysutils/busybox/scripts/init b/packages/sysutils/busybox/scripts/init index 69170c6986..fa870e2a87 100755 --- a/packages/sysutils/busybox/scripts/init +++ b/packages/sysutils/busybox/scripts/init @@ -53,6 +53,7 @@ RUN_FSCK="yes" RUN_FSCK_DISKS="" SYSLINUX_DEFAULT="" + GRUB_DEFAULT="" NBD_DEVS="0" FLASH_FREE_MIN="5" @@ -153,6 +154,13 @@ portable) SYSLINUX_DEFAULT="run" ;; + grub_live) + LIVE=yes + GRUB_DEFAULT="\"Live\"" + ;; + grub_portable) + GRUB_DEFAULT="\"Run\"" + ;; overlay) OVERLAY=yes ;; @@ -716,6 +724,20 @@ fi fi fi + + if [ -n "$GRUB_DEFAULT" -a -f /flash/grub.cfg ]; then + if grep -q "^menuentry $GRUB_DEFAULT" /flash/grub.cfg; then + crnt_default="$(awk '/^set default/ {print substr($2,9,19)}' /flash/grub.cfg)" + if [ ! "$crnt_default" = "$GRUB_DEFAULT" ]; then + progress "Updating /flash/grub.cfg [$crnt_default -> $GRUB_DEFAULT]" + + mount -o remount,rw /flash + sed -i "s/^set default=.*/set default=$GRUB_DEFAULT/" /flash/grub.cfg + [ -f /flash/EFI/BOOT/grub.cfg ] && cp /flash/grub.cfg /flash/EFI/BOOT/grub.cfg + mount -o remount,ro /flash + fi + fi + fi } check_out_of_space() { diff --git a/packages/tools/grub/config/grub-postinstall.cfg b/packages/tools/grub/config/grub-postinstall.cfg deleted file mode 100644 index 08429f7dc5..0000000000 --- a/packages/tools/grub/config/grub-postinstall.cfg +++ /dev/null @@ -1,8 +0,0 @@ -GRUB_SAVEDEFAULT=true -set timeout="0" -set default="0" - -menuentry "LibreELEC"{ - search --set -f /KERNEL - linux /KERNEL boot=LABEL=System disk=LABEL=Storage quiet -} diff --git a/packages/tools/grub/config/grub.cfg b/packages/tools/grub/config/grub.cfg deleted file mode 100644 index e85f819b19..0000000000 --- a/packages/tools/grub/config/grub.cfg +++ /dev/null @@ -1,21 +0,0 @@ -set timeout="5" -set default="3" -menuentry "LibreELEC Boot Menu"{ - set -} -menuentry ' '{ - set -} -menuentry "1. Installer"{ - search --set -f /KERNEL - linux /KERNEL boot=LABEL=LIBREELEC installer quiet tty vga=current -} - -menuentry "2. Live"{ - search --set -f /KERNEL - linux /KERNEL boot=LABEL=LIBREELEC live quiet tty vga=current -} -menuentry "3. Portable"{ - search --set -f /KERNEL - linux /KERNEL boot=LABEL=LIBREELEC disk=UUID=132e735c-fc99-4639-8138-c8db4f7698b5 portable quiet -} diff --git a/packages/tools/grub/package.mk b/packages/tools/grub/package.mk index adbbd8e1b6..44bfaab16d 100755 --- a/packages/tools/grub/package.mk +++ b/packages/tools/grub/package.mk @@ -58,14 +58,12 @@ makeinstall_target() { cd $PKG_BUILD/grub-core $PKG_BUILD/grub-mkimage -d . -o bootia32.efi -O i386-efi -p /EFI/BOOT \ boot chain configfile ext2 fat linux search \ - efi_gop efi_uga gettext gzio part_gpt \ - loadenv loadbios memrw + efi_gop efi_uga part_gpt gzio \ + gettext loadenv loadbios memrw mkdir -p $INSTALL/usr/share/grub cp -P $PKG_BUILD/grub-core/bootia32.efi $INSTALL/usr/share/grub - cp -P $PKG_DIR/config/grub-postinstall.cfg $INSTALL/usr/share/grub/grub.cfg mkdir -p $TOOLCHAIN/share/grub cp -P $PKG_BUILD/grub-core/bootia32.efi $TOOLCHAIN/share/grub - cp -P $PKG_DIR/config/grub.cfg $TOOLCHAIN/share/grub } diff --git a/packages/tools/installer/scripts/installer b/packages/tools/installer/scripts/installer index f696fa596c..86485f0983 100755 --- a/packages/tools/installer/scripts/installer +++ b/packages/tools/installer/scripts/installer @@ -268,6 +268,13 @@ do_install_quick() { echo "LABEL linux" >> $TMPDIR/part1/extlinux.conf echo " KERNEL /KERNEL" >> $TMPDIR/part1/extlinux.conf echo " APPEND boot=LABEL=$DISKLABEL_SYSTEM disk=LABEL=$DISKLABEL_STORAGE $EXTLINUX_PARAMETERS quiet" >> $TMPDIR/part1/extlinux.conf + echo "set timeout=\"0\"" > $TMPDIR/part1/grub.cfg + echo "set default=\"LibreELEC\"" >> $TMPDIR/part1/grub.cfg + echo "" >> $TMPDIR/part1/grub.cfg + echo "menuentry \"LibreELEC\" {" >> $TMPDIR/part1/grub.cfg + echo " search --set -f /KERNEL" >> $TMPDIR/part1/grub.cfg + echo " linux /KERNEL boot=LABEL=$DISKLABEL_SYSTEM disk=LABEL=$DISKLABEL_STORAGE quiet" >> $TMPDIR/part1/grub.cfg + echo "}" >> $TMPDIR/part1/grub.cfg # uefi boot / hybrid mode if [ "$UEFI" = "1" ]; then mv $TMPDIR/part1/extlinux.conf $TMPDIR/part1/syslinux.cfg @@ -275,9 +282,9 @@ do_install_quick() { cp $TMPDIR/part1/syslinux.cfg $TMPDIR/part1/EFI/BOOT cp /usr/share/syslinux/bootx64.efi $TMPDIR/part1/EFI/BOOT cp /usr/share/syslinux/ldlinux.e64 $TMPDIR/part1/EFI/BOOT + cp $TMPDIR/part1/grub.cfg $TMPDIR/part1/EFI/BOOT cp /usr/share/grub/bootia32.efi $TMPDIR/part1/EFI/BOOT - cp /usr/share/grub/grub.cfg $TMPDIR/part1/EFI/BOOT - fi + fi sync # umount system partition, remove mountpoint diff --git a/scripts/mkimage b/scripts/mkimage index 804606edb0..8ce3d815e2 100755 --- a/scripts/mkimage +++ b/scripts/mkimage @@ -147,7 +147,25 @@ LABEL run APPEND boot=UUID=$UUID_SYSTEM disk=UUID=$UUID_STORAGE portable quiet EOF + cat << EOF > "$LE_TMP"/grub.cfg +set timeout="25" +set default="Installer" +menuentry "Installer" { + search --set -f /KERNEL + linux /KERNEL boot=UUID=$UUID_SYSTEM installer quiet tty vga=current +} +menuentry "Live" { + search --set -f /KERNEL + linux /KERNEL boot=UUID=$UUID_SYSTEM grub_live quiet tty vga=current +} +menuentry "Run" { + search --set -f /KERNEL + linux /KERNEL boot=UUID=$UUID_SYSTEM disk=UUID=$UUID_STORAGE grub_portable quiet +} +EOF + mcopy "$LE_TMP/syslinux.cfg" :: + mcopy "$LE_TMP/grub.cfg" :: # install extlinux echo "image: installing extlinux to part1..." @@ -164,8 +182,8 @@ EOF mcopy $TOOLCHAIN/share/syslinux/bootx64.efi ::/EFI/BOOT mcopy $TOOLCHAIN/share/syslinux/ldlinux.e64 ::/EFI/BOOT mcopy $TOOLCHAIN/share/grub/bootia32.efi ::/EFI/BOOT - mcopy $TOOLCHAIN/share/grub/grub.cfg ::/EFI/BOOT mcopy "$LE_TMP"/syslinux.cfg ::/EFI/BOOT + mcopy "$LE_TMP"/grub.cfg ::/EFI/BOOT elif [ "$BOOTLOADER" = "bcm2835-bootloader" ]; then # create bootloader configuration echo "image: creating bootloader configuration..." @@ -300,10 +318,12 @@ fi # bootloader dd if="$DISK" of="${DISK/img/tmp}" bs=1M >"$SAVE_ERROR" 2>&1 || show_error # change syslinux default to 'run' echo "image: modifying fs on part1 for open virtual appliance..." - sed -i "/DEFAULT/ s/installer/run/" "$LE_TMP"/syslinux.cfg + sed -i "/DEFAULT/ s/installer/run/" "$LE_TMP"/syslinux.cfg "$LE_TMP"/grub.cfg # FIXME: an unalias should work here, but it does not; call mcopy directly $TOOLCHAIN/bin/mcopy -i $LE_TMP/part1.fat -o "$LE_TMP"/syslinux.cfg ::/EFI/BOOT $TOOLCHAIN/bin/mcopy -i $LE_TMP/part1.fat -o "$LE_TMP"/syslinux.cfg :: +$TOOLCHAIN/bin/mcopy -i $LE_TMP/part1.fat -o "$LE_TMP"/grub.cfg ::/EFI/BOOT + $TOOLCHAIN/bin/mcopy -i $LE_TMP/part1.fat -o "$LE_TMP"/grub.cfg :: sync # merge modified part1 back to tmp disk image echo "image: merging part1 back to open virtual appliance..."