]> glassweightruler.freedombox.rocks Git - Ventoy.git/blobdiff - INSTALL/grub/grub.cfg
Merge branch 'master' of https://github.com/ventoy/Ventoy
[Ventoy.git] / INSTALL / grub / grub.cfg
index b85a31a8b88051f88907058bc19363378ed21ce0..df7d9a6fb75669986c771867ae0949939aa912a7 100644 (file)
@@ -157,6 +157,9 @@ function distro_specify_initrd_file {
         if [ -e (loop)/casper/initrd ]; then
             vt_linux_specify_initrd_file /casper/initrd
         fi
+        if [ -e (loop)/casper/initrd.gz ]; then
+            vt_linux_specify_initrd_file /casper/initrd.gz
+        fi
         if [ -e (loop)/casper/initrd-oem ]; then
             vt_linux_specify_initrd_file /casper/initrd-oem
         fi
@@ -170,14 +173,28 @@ function distro_specify_initrd_file {
         vt_linux_specify_initrd_file /pmagic/initrd.img
     elif [ -e (loop)/boot/initrd.xz ]; then
         vt_linux_specify_initrd_file /boot/initrd.xz
+    elif [ -e (loop)/boot/initrd.gz ]; then
+        vt_linux_specify_initrd_file /boot/initrd.gz
     elif [ -f (loop)/boot/initrd ]; then
         vt_linux_specify_initrd_file /boot/initrd
     elif [ -f (loop)/boot/x86_64/loader/initrd ]; then
         vt_linux_specify_initrd_file /boot/x86_64/loader/initrd
     elif [ -f (loop)/boot/initramfs-x86_64.img ]; then
         vt_linux_specify_initrd_file /boot/initramfs-x86_64.img
-        
+    elif [ -f (loop)/boot/isolinux/initramfs_data64.cpio.gz ]; then 
+        vt_linux_specify_initrd_file /boot/isolinux/initramfs_data64.cpio.gz
 
+        
+    fi
+    
+    if [ -f (loop)/isolinux/initrd.gz ]; then 
+        vt_linux_specify_initrd_file /isolinux/initrd.gz
+    fi
+    
+    if [ "$vt_chosen_size" = "1133375488" ]; then
+        if [ -d (loop)/boot/grub/x86_64-efi ]; then
+            vt_cpio_busybox64
+        fi
     fi
 }
 
@@ -221,6 +238,19 @@ function distro_specify_initrd_file_phase2 {
         vt_linux_specify_initrd_file /initrd
     elif [ -f (loop)/live/initrd1 ]; then 
         vt_linux_specify_initrd_file /live/initrd1
+    elif [ -f (loop)/isolinux/initrd.img ]; then 
+        vt_linux_specify_initrd_file /isolinux/initrd.img
+    elif [ -f (loop)/isolinux/initrd.gz ]; then 
+        vt_linux_specify_initrd_file /isolinux/initrd.gz
+    elif [ -f (loop)/syslinux/kernel/initramfs.gz ]; then 
+        vt_linux_specify_initrd_file /syslinux/kernel/initramfs.gz    
+    elif vt_strstr $vt_volume_id "Daphile"; then
+        vt_linux_parse_initrd_isolinux   (loop)/isolinux/
+    elif [ -f (loop)/boot/rootfs.xz ]; then 
+        vt_linux_specify_initrd_file /boot/rootfs.xz
+        if [ "$grub_platform" != "pc" ]; then
+            vt_add_replace_file 0 "minimal\\x86_64\\rootfs.xz"
+        fi
         
     fi
 }
@@ -258,7 +288,13 @@ function ventoy_get_freenas_ver {
     fi
 }
 
+function ventoy_get_midnightbsd_ver {   
+    set vt_freebsd_ver=11.x
+}
+
 function ventoy_freebsd_proc {
+    set vtFreeBsdDistro=FreeBSD
+
     if vt_strstr "$vt_volume_id" "GHOSTBSD"; then
         ventoy_get_ghostbsd_ver $1 ${chosen_path}
     elif vt_strstr "$vt_volume_id" "FREENAS"; then
@@ -275,6 +311,9 @@ function ventoy_freebsd_proc {
         set vt_freebsd_ver=10.x
     elif regexp "^9_[0-9]" "$vt_volume_id"; then
         set vt_freebsd_ver=9.x
+    elif [ -d (loop)/usr/midnightbsd-dist ]; then
+        ventoy_get_midnightbsd_ver $1 ${chosen_path}
+        set vtFreeBsdDistro=MidnightBSD
     elif [ -e (loop)/bin/freebsd-version ]; then
         vt_unix_parse_freebsd_ver (loop)/bin/freebsd-version vt_userland_ver
         if regexp "\"13\.[0-9]-" "$vt_userland_ver"; then
@@ -329,7 +368,11 @@ function ventoy_freebsd_proc {
         fi
     done
     
-    vt_unix_replace_ko $vt_unix_mod_path (vtunix)/ventoy_unix/FreeBSD/geom_ventoy_ko/$vt_freebsd_ver/$vt_freebsd_bit/geom_ventoy.ko.xz
+    if [ -e (loop)/usr/freebsd-dist/cloninst.sh ]; then
+        set vtFreeBsdDistro=ClonOS
+    fi
+    
+    vt_unix_replace_ko $vt_unix_mod_path (vtunix)/ventoy_unix/$vtFreeBsdDistro/geom_ventoy_ko/$vt_freebsd_ver/$vt_freebsd_bit/geom_ventoy.ko.xz
     vt_unix_replace_conf FreeBSD ${1}${chosen_path} 
 }
 
@@ -453,6 +496,8 @@ function uefi_linux_menu_func {
                 vt_add_replace_file $vtindex "EFI\\BOOT\\initrd.gz"
             elif [ -f (loop)/loader/entries/thinstation.conf ]; then
                 vt_add_replace_file $vtindex "boot\\initrd"
+            elif [ -f (loop)/loader/entries/pisi-efi-x86_64.conf ]; then
+                vt_add_replace_file $vtindex "EFI\\pisi\\initrd.img"
             fi
         elif [ -d (loop)/EFI/boot/entries ]; then
             if [ -f (loop)/parabola/boot/x86_64/parabolaiso.img ]; then
@@ -460,9 +505,15 @@ function uefi_linux_menu_func {
             elif [ -f (loop)/hyperbola/boot/x86_64/hyperiso.img ]; then
                 vt_add_replace_file 0 "EFI\\hyperiso\\hyperiso.img"
             fi
+        elif [ -d (loop)/EFI/BOOT/entries ]; then
+            if [ -f (loop)/parabola/boot/x86_64/parabolaiso.img ]; then
+                vt_add_replace_file 0 "EFI\\parabolaiso\\parabolaiso.img"            
+            fi
         elif [ -e (loop)/syslinux/alt0/full.cz ]; then
             vt_add_replace_file 0 "EFI\\BOOT\\full.cz"            
             set FirstTryBootFile='@EFI@BOOT@grubx64.efi'
+
+
         fi
         
     fi
@@ -595,6 +646,8 @@ function legacy_windows_menu_func {
     
     if [ -n "$vtoy_chain_mem_addr" ]; then
         linux16   $vtoy_path/ipxe.krn ${vtdebug_flag} ibft mem:${vtoy_chain_mem_addr}:size:${vtoy_chain_mem_size}
+        set gfxmode=1920x1080,1366x768,1024x768,800x600,auto
+        terminal_output gfxterm
         boot
     else
         echo "chain empty failed"
@@ -644,6 +697,10 @@ function legacy_linux_menu_func {
         
         vt_linux_initrd_count vtcount
         if [ $vtcount -eq 0 ]; then
+            if [ -d (loop)/rancheros ]; then
+                vt_linux_parse_initrd_isolinux   (loop)/boot/  /boot/isolinux/
+            fi
+
             distro_specify_initrd_file_phase2
         fi
         
@@ -762,9 +819,14 @@ function ventoy_iso_busybox_ver {
     
     #special process for deepin-live iso
     if [ "$vt_chosen_size" = "403701760" ]; then
-        if vt_str_begin $vt_chosen_path "/deepin-live"; then
+        if vt_str_str $vt_chosen_path "/deepin-live"; then
             set ventoy_busybox_ver=64
         fi
+    elif vt_str_begin $vt_volume_id "PHOTON_"; then
+        set ventoy_busybox_ver=64
+    elif vt_str_begin $vt_volume_id "smgl-test-quinq-x86_64"; then
+        set ventoy_busybox_ver=64
+        
     fi
 }
 
@@ -780,6 +842,8 @@ function iso_common_menuentry {
     #special process for Endless OS
     if vt_str_begin $vt_volume_id "Endless-OS"; then
         iso_endless_os_proc $vtoy_iso_part $vt_chosen_path
+    elif vt_str_begin $vt_volume_id "TENS-Public"; then
+        set vtcompat=1
     fi
 
     if [ "$grub_platform" = "pc" ]; then
@@ -797,6 +861,17 @@ function iso_common_menuentry {
     fi      
 }
 
+function miso_common_menuentry {
+    vt_chosen_img_path vt_chosen_path vt_chosen_size
+
+    if [ "$grub_platform" = "pc" ]; then
+        legacy_iso_memdisk $vtoy_iso_part $vt_chosen_path
+    else
+        uefi_iso_memdisk $vtoy_iso_part  $vt_chosen_path
+    fi      
+}
+
+
 function common_unsupport_menuentry {
     echo -e "\n The name of the iso file could NOT contain space or non-ascii characters. \n"
     echo -e " 文件名中不能有中文或空格 \n"    
@@ -804,6 +879,10 @@ function common_unsupport_menuentry {
     read vtInputKey
 }
 
+function miso_unsupport_menuentry {
+    common_unsupport_menuentry
+}
+
 function iso_unsupport_menuentry {
     common_unsupport_menuentry
 }
@@ -817,6 +896,8 @@ function wim_common_menuentry {
     if [ -n "$vtoy_chain_mem_addr" ]; then
         if [ "$grub_platform" = "pc" ]; then
             linux16   $vtoy_path/ipxe.krn ${vtdebug_flag}  mem:${vtoy_chain_mem_addr}:size:${vtoy_chain_mem_size}
+            set gfxmode=1920x1080,1366x768,1024x768,800x600,auto
+            terminal_output gfxterm
         else
             ventoy_cli_console
             chainloader ${vtoy_path}/ventoy_x64.efi  env_param=${env_param} isoefi=${LoadIsoEfiDriver} ${vtdebug_flag} mem:${vtoy_chain_mem_addr}:size:${vtoy_chain_mem_size}
@@ -840,9 +921,18 @@ function efi_common_menuentry {
     
     ventoy_debug_pause
     
-    ventoy_cli_console    
-    chainloader ${vtoy_path}/ventoy_x64.efi memdisk env_param=${env_param} isoefi=on ${vtdebug_flag} mem:${vtoy_iso_buf_addr}:size:${vtoy_iso_buf_size}
+    ventoy_cli_console
+
+    unset vtoy_dotefi_retry
+    chainloader ${vtoy_path}/ventoy_x64.efi memdisk env_param=${env_param} dotefi isoefi=on ${vtdebug_flag} mem:${vtoy_iso_buf_addr}:size:${vtoy_iso_buf_size}
     boot
+    
+    if [ -n "$vtoy_dotefi_retry" ]; then
+        unset vtoy_dotefi_retry
+        chainloader ${vtoy_iso_part}${vt_chosen_path}
+        boot
+    fi
+    
     ventoy_gui_console
 }
 
@@ -850,6 +940,48 @@ function efi_unsupport_menuentry {
     common_unsupport_menuentry
 }
 
+
+function vhd_common_menuentry {
+
+    if [ "$VTOY_VHD_NO_WARNING" != "1" ]; then
+        if [ "$vtoy_iso_fs" != "ntfs" ]; then
+            echo -e "!!! WARNING !!!\n"
+            echo -e "\nPartition1 ($vtoy_iso_fs) is NOT ntfs, the VHD(x) file may not boot normally \n"
+            echo -e "\nVHD(x) 文件所在分区不是 ntfs 格式, 可能无法正常启动 \n\n"
+            echo -n "press ENTER to continue boot (请按 回车 键继续) ..."    
+            read vtInputKey
+        fi
+    fi
+
+    vt_chosen_img_path vt_chosen_path vt_chosen_size
+    vt_patch_vhdboot ${vtoy_iso_part} ${vt_chosen_path}
+    
+    ventoy_debug_pause    
+    
+    if [ -n "$vtoy_vhd_buf_addr" ]; then
+        if [ "$grub_platform" = "pc" ]; then
+            linux16   $vtoy_path/memdisk iso raw    
+            initrd16  mem:${vtoy_vhd_buf_addr}:size:${vtoy_vhd_buf_size}
+            
+            set gfxmode=1920x1080,1366x768,1024x768,800x600,auto
+            terminal_output gfxterm
+            boot
+        else
+            ventoy_cli_console
+            chainloader ${vtoy_path}/ventoy_x64.efi memdisk env_param=${env_param} isoefi=${LoadIsoEfiDriver} ${vtdebug_flag} mem:${vtoy_vhd_buf_addr}:size:${vtoy_vhd_buf_size}
+            boot
+            ventoy_gui_console
+        fi        
+    else
+        echo "Failed to boot vhd file"
+        ventoy_pause
+    fi
+}
+
+function vhd_unsupport_menuentry {
+    common_unsupport_menuentry
+}
+
 #
 #============================================================#
 # IMG file boot process                                      #
@@ -899,40 +1031,147 @@ function ventoy_img_volumio {
     vt_unset_boot_opt
 }
 
-function ventoy_img_fydeos {
+function ventoy_img_openelec {
+    elec_ver=$1
+    
+    vt_load_cpio  $vtoy_path/ventoy.cpio  ${vt_chosen_path} ${vtoy_iso_part} "busybox=$ventoy_busybox_ver"
+    vt_trailer_cpio ${vtoy_iso_part} ${vt_chosen_path} noinit
+
+    loopback vtloopex $vtoy_efi_part/ventoy/vtloopex.cpio    
+    vt_img_extra_initrd_append  (vtloopex)/$elec_ver/vtloopex.tar.xz
+
+    ventoy_debug_pause
+
+    #boot image file
+    vt_set_boot_opt rdinit=/vtoy/vtoy ventoyos=$elec_ver
+    vt_img_hook_root
+    
+    set root=(vtimghd,1)
+    syslinux_configfile (vtimghd,1)/syslinux.cfg
+    
+    vt_img_unhook_root
+    vt_unset_boot_opt
+    loopback -d vtloopex
+}
+
 
-    set ventoy_busybox_ver=64
+function ventoy_img_freedombox {
+    vt_load_cpio  $vtoy_path/ventoy.cpio  ${vt_chosen_path} ${vtoy_iso_part} "busybox=$ventoy_busybox_ver"
+    vt_trailer_cpio ${vtoy_iso_part} ${vt_chosen_path} noinit
+
+    vt_get_lib_module_ver (vtimghd,1) /lib/modules/ vt_module_ver
+    if [ -n "$vt_module_ver" ]; then        
+        vt_img_extra_initrd_append  (vtimghd,1)/lib/modules/$vt_module_ver/kernel/drivers/md/dm-mod.ko
+    fi
+
+    ventoy_debug_pause
+
+    #boot image file
+    vt_set_boot_opt rdinit=/vtoy/vtoy ventoyos=freedombox
+    vt_img_hook_root
+    
+    configfile (vtimghd,1)/boot/grub/grub.cfg
+    
+    vt_img_unhook_root
+    vt_unset_boot_opt
+}
 
+function ventoy_img_paldo {
     vt_load_cpio  $vtoy_path/ventoy.cpio  ${vt_chosen_path} ${vtoy_iso_part} "busybox=$ventoy_busybox_ver"
     vt_trailer_cpio ${vtoy_iso_part} ${vt_chosen_path} noinit
+
+    ventoy_debug_pause
+
+    #boot image file
+    vt_set_boot_opt rdinit=/vtoy/vtoy ventoyos=paldo
+    vt_img_hook_root
     
-    # loopback easysfs (vtimghd,1)/easy.sfs
-    # vt_get_lib_module_ver (easysfs) /lib/modules/ vt_module_ver
+    vt_fs_enum_1st_file (vtimghd,1) /loader/entries/ vt_paldo_entry_conf
+    vt_file_basename $vt_paldo_entry_conf vtPaldoVer
     
-    # if [ -n "$vt_module_ver" ]; then        
-        # for mod in "kernel/drivers/md/dm-mod.ko" "kernel/drivers/dax/dax.ko"; do
-            # vt_img_extra_initrd_append  (easysfs)/lib/modules/$vt_module_ver/$mod
-        # done
-    # fi
+    echo loading file...
+    linux (vtimghd,1)/linux-${vtPaldoVer} root=/dev/ventoy1 rootfstype=vfat
+    initrd (vtimghd,1)/initramfs-${vtPaldoVer}
+    boot
+    
+    vt_img_unhook_root
+    vt_unset_boot_opt
+}
+
+function ventoy_img_ubos {
+    vt_load_cpio  $vtoy_path/ventoy.cpio  ${vt_chosen_path} ${vtoy_iso_part} "busybox=$ventoy_busybox_ver"
+    vt_trailer_cpio ${vtoy_iso_part} ${vt_chosen_path} noinit
+
+    vt_get_lib_module_ver (vtimghd,3) /lib/modules/ vt_module_ver
+    if [ -n "$vt_module_ver" ]; then        
+        vt_img_extra_initrd_append  (vtimghd,3)/lib/modules/$vt_module_ver/kernel/drivers/md/dm-mod.ko.xz
+    fi
 
     ventoy_debug_pause
 
     #boot image file
-    vt_set_boot_opt rdinit=/vtoy/vtoy
+    vt_set_boot_opt rdinit=/vtoy/vtoy ventoyos=ubos
+    vt_img_hook_root
+    
+    echo loading file...
+    linux (vtimghd,2)/vmlinuz-linux root=/dev/ventoy3 rw
+    initrd (vtimghd,2)/initramfs-linux.img
+    boot
+
+    vt_img_unhook_root
+    vt_unset_boot_opt
+}
+
+function ventoy_img_recalbox {
+    vt_load_cpio  $vtoy_path/ventoy.cpio  ${vt_chosen_path} ${vtoy_iso_part} "busybox=$ventoy_busybox_ver"
+    vt_trailer_cpio ${vtoy_iso_part} ${vt_chosen_path} noinit
+
+    ventoy_debug_pause
+
+    #boot image file
+    vt_set_boot_opt rdinit=/vtoy/vtoy ventoyos=recalbox
     vt_img_hook_root
     
-    set root=(vtimghd,12)
-    configfile (vtimghd,12)/efi/boot/grub.cfg
-    #syslinux_configfile (vtimghd,12)/syslinux/syslinux.cfg
+    set root=(vtimghd,1)
+    configfile (vtimghd,1)/boot/grub/grub.cfg
+
+    vt_img_unhook_root
+    vt_unset_boot_opt
+}
+
+function ventoy_img_batocera {
+    vt_load_cpio  $vtoy_path/ventoy.cpio  ${vt_chosen_path} ${vtoy_iso_part} "busybox=$ventoy_busybox_ver"
+    vt_trailer_cpio ${vtoy_iso_part} ${vt_chosen_path} noinit
+
+    ventoy_debug_pause
+
+    #boot image file
+    vt_set_boot_opt rdinit=/vtoy/vtoy ventoyos=batocera
+    vt_img_hook_root
     
+    set root=(vtimghd,1)
+    syslinux_configfile (vtimghd,1)/boot/syslinux/syslinux.cfg
+
     vt_img_unhook_root
     vt_unset_boot_opt
 }
 
+function ventoy_img_memtest86 {      
+    chainloader (vtimghd,1)/efi/boot/BOOTX64.efi
+    boot
+}
+
+function img_unsupport_tip {
+    echo -e "\n This IMG file is NOT supported now. \n"
+    echo -e " 当前不支持启动此 IMG 文件 \n"    
+    echo -e "\npress ENTER to exit (请按 回车 键返回) ..."    
+    read vtInputKey 
+}
 
 function img_common_menuentry {
+    set ventoy_compatible=YES
     set ventoy_busybox_ver=32
-    
+
     vt_chosen_img_path vt_chosen_path vt_chosen_size
 
     if [ -d (vtimghd)/ ]; then
@@ -950,25 +1189,53 @@ function img_common_menuentry {
 
     vt_img_extra_initrd_reset
 
+    vt_get_fs_label (vtimghd,1) vtImgHd1Label
+    if [ -d (vtimghd,2)/lib ]; then
+        vt_get_fs_label (vtimghd,2) vtImgHd2Label
+    fi
+    
+    if [ -e (vtimghd,1)/etc/hostname ]; then
+        vt_1st_line (vtimghd,1)/etc/hostname vtImgHostname
+    fi
+    
     if [ -e (vtimghd,1)/easy.sfs ]; then
         ventoy_img_easyos
     elif [ -e (vtimghd,1)/volumio.initrd ]; then
         ventoy_img_volumio
-    elif [ -e (vtimghd,3)/etc/os-release ]; then
-        if vt_file_strstr (vtimghd,3)/etc/os-release FydeOS; then
-            ventoy_img_fydeos
+    elif vt_str_begin $vtImgHd1Label "LAKKA"; then
+        ventoy_img_openelec lakka
+    elif vt_str_begin $vtImgHd1Label "LIBREELEC"; then
+        ventoy_img_openelec LibreELEC
+    elif vt_str_begin $vtImgHd1Label "paldo-live"; then
+        ventoy_img_paldo
+    elif vt_str_begin $vtImgHostname "freedombox"; then
+        ventoy_img_freedombox
+    elif vt_str_begin $vtImgHd1Label "BATOCERA"; then
+        ventoy_img_batocera
+    elif [ "$vtImgHd2Label" = "RECALBOX" ]; then
+        ventoy_img_recalbox
+    elif [ -f (vtimghd,2)/loader/entries/ubos.conf ]; then
+        ventoy_img_ubos
+    elif [ -f (vtimghd,1)/efi/boot/mt86.png ]; then 
+        if [ "$grub_platform" = "pc" ]; then
+            img_unsupport_tip
+        else
+            ventoy_img_memtest86            
         fi
-        
     else
-        echo -e "\n This IMG file is NOT supported now. \n"
-        echo -e " 当前不支持启动此 IMG 文件 \n"    
-        echo -e "\npress ENTER to exit (请按 回车 键返回) ..."    
-        read vtInputKey        
+        if [ "$grub_platform" = "pc" ]; then 
+            img_unsupport_tip
+        else
+            vt_linux_chain_data ${vtoy_iso_part}${vt_chosen_path}
+            chainloader ${vtoy_path}/ventoy_x64.efi sector512 env_param=${env_param} isoefi=${LoadIsoEfiDriver} FirstTry=${FirstTryBootFile} ${vtdebug_flag} mem:${vtoy_chain_mem_addr}:size:${vtoy_chain_mem_size}
+            boot
+        fi
     fi
 
     set root=$vtback_root
     vt_pop_last_entry
     ventoy_gui_console
+    set ventoy_compatible=NO
 }
 
 function img_unsupport_menuentry {
@@ -983,7 +1250,7 @@ function img_unsupport_menuentry {
 #############################################################
 #############################################################
 
-set VENTOY_VERSION="1.0.18"
+set VENTOY_VERSION="1.0.20"
 
 # Default menu display mode, you can change it as you want.
 #    0: List mode   
@@ -1055,6 +1322,12 @@ elif [ -f $vtoy_efi_part/ventoy/ventoy_wimboot.img ]; then
     vt_load_wimboot $vtoy_efi_part/ventoy/ventoy_wimboot.img
 fi
 
+if [ -f $vtoy_iso_part/ventoy/ventoy_vhdboot.img ]; then
+    vt_load_vhdboot $vtoy_iso_part/ventoy/ventoy_vhdboot.img
+elif [ -f $vtoy_efi_part/ventoy/ventoy_vhdboot.img ]; then
+    vt_load_vhdboot $vtoy_efi_part/ventoy/ventoy_vhdboot.img
+fi
+
 
 if [ $VTOY_DEFAULT_MENU_MODE -eq 0 ]; then
     set VTOY_F3_CMD="vt_dynamic_menu 1 1"
@@ -1068,7 +1341,7 @@ fi
 if [ -n "$vtoy_gfxmode" ]; then
     set gfxmode=$vtoy_gfxmode
 else
-    set gfxmode=1920x1080,1366x768,1024x768
+    set gfxmode=1920x1080,1366x768,1024x768,800x600,auto
 fi
 
 if [ "$vtoy_display_mode" = "CLI" ]; then