X-Git-Url: https://glassweightruler.freedombox.rocks/gitweb/Ventoy.git/blobdiff_plain/f7fac26c91a2efbb77b243ffd20e89e992ea1f71..635b1a1c6c6b30840e591d73d1a2bb927819ef1e:/INSTALL/grub/grub.cfg diff --git a/INSTALL/grub/grub.cfg b/INSTALL/grub/grub.cfg index feb8b2a..487dae0 100644 --- a/INSTALL/grub/grub.cfg +++ b/INSTALL/grub/grub.cfg @@ -111,12 +111,18 @@ function ventoy_show_help { function get_os_type { set vtoy_os=Linux - for file in "efi/microsoft/boot/bcd" "sources/boot.wim" "boot/bcd" "bootmgr.efi" "boot/etfsboot.com" ; do - if vt_file_exist_nocase (loop)/$file; then + if vt_str_begin "$vt_volume_id" "DLC Boot"; then + if [ -f (loop)/DLCBoot.exe ]; then set vtoy_os=Windows - break fi - done + else + for file in "efi/microsoft/boot/bcd" "sources/boot.wim" "boot/bcd" "bootmgr.efi" "boot/etfsboot.com" ; do + if vt_file_exist_nocase (loop)/$file; then + set vtoy_os=Windows + break + fi + done + fi if [ "$vtoy_os" = "Linux" ]; then if vt_strstr "$vt_system_id" "FreeBSD"; then @@ -152,7 +158,7 @@ function get_os_type { function vt_check_compatible_pe { #Check for PE without external tools #set compatible if ISO file is less than 80MB - if [ $vt_chosen_size -gt 33554432 -a $vt_chosen_size -le 83886080 ]; then + if [ $vt_chosen_size -GT 33554432 -a $vt_chosen_size -LE 83886080 ]; then set ventoy_compatible=YES fi @@ -179,7 +185,7 @@ function locate_initrd { } function locate_wim { - vt_windows_locate_wim_patch (loop) + vt_windows_locate_wim_patch (loop) "$1" if [ -n "${vtdebug_flag}" ]; then echo '###############################################' @@ -206,6 +212,15 @@ function distro_specify_wim_patch_phase2 { if [ -f (loop)/boot/boot.wim ]; then vt_windows_collect_wim_patch wim /boot/boot.wim fi + + if vt_str_begin "$vt_volume_id" "DLC Boot"; then + for vwfile in "/DLC1/WinPE/W11x64.wim" "/DLC1/WinPE/W10x64.wim" "/DLC1/WinPE/W10x86.wim"; do + if [ -f (loop)/$vwfile ]; then + vt_windows_collect_wim_patch wim $vwfile + fi + done + fi + } @@ -364,8 +379,11 @@ function distro_specify_initrd_file_phase2 { vt_linux_specify_initrd_file /initrd0.img elif [ -f (loop)/sysresccd/boot/i686/sysresccd.img ]; then vt_linux_specify_initrd_file /sysresccd/boot/i686/sysresccd.img - - + elif [ -f (loop)/boot/full.cz ]; then + vt_linux_specify_initrd_file /boot/full.cz + elif [ -f (loop)/images/pxeboot/initrd.img ]; then + vt_linux_specify_initrd_file /images/pxeboot/initrd.img + fi } @@ -500,6 +518,8 @@ function ventoy_freebsd_proc { if [ "$vt_freebsd_ver" = "xx" ]; then if [ -e (loop)/boot/kernel/kernel ]; then vt_unix_parse_freebsd_ver_elf (loop)/boot/kernel/kernel $vt_freebsd_bit vt_freebsd_ver + elif [ -e (loop)/boot/kernel/kernel.gz ]; then + vt_unix_parse_freebsd_ver_elf (loop)/boot/kernel/kernel.gz $vt_freebsd_bit vt_freebsd_ver fi if [ "$vt_freebsd_ver" = "xx" ]; then @@ -519,8 +539,17 @@ function ventoy_freebsd_proc { fi done - 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}" + if [ -n "$vt_unix_mod_path" ]; then + 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}" + elif [ -e (loop)/easyre.ufs.uzip ]; then + vt_unix_replace_ko "/boot/grub/i386-pc/linux.mod" (vtunix)/ventoy_unix/$vtFreeBsdDistro/geom_ventoy_ko/$vt_freebsd_ver/$vt_freebsd_bit/geom_ventoy.ko.xz + if [ "$grub_platform" = "pc" ]; then + vt_unix_replace_grub_conf "/boot/grub/i386-pc/linux.mod" "cd9" + else + vt_unix_replace_conf FreeBSD "${1}${chosen_path}" "cd9" + fi + fi } function ventoy_dragonfly_proc { @@ -542,6 +571,8 @@ function ventoy_dragonfly_proc { function ventoy_unix_comm_proc { vt_unix_reset + vt_unix_check_vlnk "${1}${chosen_path}" + if [ "$ventoy_compatible" = "NO" ]; then loopback vtunix $vtoy_efi_part/ventoy/ventoy_unix.cpio @@ -586,13 +617,13 @@ function uefi_windows_menu_func { fi ventoy_debug_pause - locate_wim + locate_wim "${chosen_path}" fi vt_windows_chain_data "${1}${chosen_path}" ventoy_debug_pause - if vt_check_mode 4; then + if vt_check_mode 4 "$vt_chosen_name"; then vtoy_windows_wimboot_func fi @@ -659,6 +690,9 @@ function uefi_linux_menu_func { vt_linux_initrd_count vtcount if [ $vtcount -eq 0 ]; then + if [ -e (loop)/EFI/boot/livegrub.cfg ]; then + vt_linux_parse_initrd_grub file (loop)/EFI/boot/livegrub.cfg + fi distro_specify_initrd_file_phase2 if [ "$vt_efi_dir" = "NO" ]; then @@ -736,7 +770,7 @@ function uefi_linux_menu_func { vt_linux_chain_data "${1}${chosen_path}" - if [ -n "$LoadIsoEfiDriver" -a $vt_chosen_size -lt 104857600 ]; then + if [ -n "$LoadIsoEfiDriver" -a $vt_chosen_size -LT 104857600 ]; then if [ -f (loop)/efi/clover/cloverx64.efi ]; then unset LoadIsoEfiDriver fi @@ -747,7 +781,7 @@ function uefi_linux_menu_func { ventoy_cli_console unset vtGrub2Mode - if vt_check_mode 3; then + if vt_check_mode 3 "$vt_chosen_name"; then set vtGrub2Mode=1 elif vt_str_begin "$vt_volume_id" "KRD"; then if [ -f (loop)/boot/grub/grub.cfg.sig ]; then @@ -835,7 +869,7 @@ function uefi_iso_menu_func { if [ -n "$vtisouefi" ]; then set LoadIsoEfiDriver=on unset vtisouefi - elif vt_check_mode 2; then + elif vt_check_mode 2 "$vt_chosen_name"; then set LoadIsoEfiDriver=on else unset LoadIsoEfiDriver @@ -872,7 +906,7 @@ function uefi_iso_menu_func { if [ -n "$vtcompat" ]; then set ventoy_compatible=YES unset vtcompat - elif vt_check_mode 1; then + elif vt_check_mode 1 "$vt_chosen_name"; then set ventoy_compatible=YES else vt_check_compatible (loop) @@ -1012,19 +1046,23 @@ function legacy_windows_menu_func { fi ventoy_debug_pause - locate_wim + locate_wim "${chosen_path}" fi vt_windows_chain_data "${1}${chosen_path}" ventoy_debug_pause - if vt_check_mode 4; then + if vt_check_mode 4 "$vt_chosen_name"; then vtoy_windows_wimboot_func fi if [ -n "$vtoy_chain_mem_addr" ]; then ventoy_acpi_param ${vtoy_chain_mem_addr} 2048 - linux16 $vtoy_path/ipxe.krn ${vtdebug_flag} ibft mem:${vtoy_chain_mem_addr}:size:${vtoy_chain_mem_size} + if [ "$ventoy_compatible" = "NO" ]; then + linux16 $vtoy_path/ipxe.krn ${vtdebug_flag} mem:${vtoy_chain_mem_addr}:size:${vtoy_chain_mem_size} + else + linux16 $vtoy_path/ipxe.krn ${vtdebug_flag} ibft mem:${vtoy_chain_mem_addr}:size:${vtoy_chain_mem_size} + fi boot else echo "chain empty failed" @@ -1097,7 +1135,7 @@ function legacy_linux_menu_func { ventoy_debug_pause if [ -n "$vtoy_chain_mem_addr" ]; then - if vt_check_mode 3; then + if vt_check_mode 3 "$vt_chosen_name"; then ventoy_acpi_param ${vtoy_chain_mem_addr} 2048 ventoy_cli_console @@ -1176,7 +1214,7 @@ function legacy_iso_menu_func { if [ -n "$vtcompat" ]; then set ventoy_compatible=YES unset vtcompat - elif vt_check_mode 1; then + elif vt_check_mode 1 "$vt_chosen_name"; then set ventoy_compatible=YES else vt_check_compatible (loop) @@ -1268,10 +1306,10 @@ function iso_common_menuentry { unset vt_system_id unset vt_volume_id - vt_chosen_img_path vt_chosen_path vt_chosen_size + vt_chosen_img_path vt_chosen_path vt_chosen_size vt_chosen_name vt_parse_iso_volume "${vtoy_iso_part}${vt_chosen_path}" vt_system_id vt_volume_id vt_volume_space - if [ $vt_volume_space -ne $vt_chosen_size ]; then + if [ $vt_volume_space -NE $vt_chosen_size ]; then vt_mod $vt_chosen_size 2048 vt_chosen_size_mod if [ $vt_chosen_size_mod -ne 0 ]; then echo -e "\n $vt_volume_space $vt_chosen_size $vt_chosen_size_mod\n" @@ -1307,7 +1345,7 @@ function iso_common_menuentry { # auto memdisk mode for some special ISO files vt_iso_vd_id_parse "${vtoy_iso_part}${vt_chosen_path}" unset vtMemDiskBoot - if vt_check_mode 0; then + if vt_check_mode 0 "$vt_chosen_name"; then set vtMemDiskBoot=1 else if [ "$grub_platform" = "pc" ]; then @@ -1316,10 +1354,17 @@ function iso_common_menuentry { elif vt_iso_vd_id_begin 0 1 "KolibriOS"; then set vtMemDiskBoot=1 fi - fi + fi + + #For iKuai8 (<64MB) + if [ $vt_chosen_size -LE 67108864 ]; then + if vt_str_begin "$vt_chosen_name" "iKuai"; then + set vtMemDiskBoot=1 + fi + fi fi vt_iso_vd_id_clear - + if [ "$grub_platform" = "pc" ]; then if [ -n "$vtMemDiskBoot" ]; then @@ -1337,7 +1382,7 @@ function iso_common_menuentry { } function miso_common_menuentry { - vt_chosen_img_path vt_chosen_path vt_chosen_size + vt_chosen_img_path vt_chosen_path vt_chosen_size vt_chosen_name if vt_check_password "${vt_chosen_path}"; then return @@ -1371,7 +1416,7 @@ function iso_unsupport_menuentry { } function wim_common_menuentry { - vt_chosen_img_path vt_chosen_path vt_chosen_size + vt_chosen_img_path vt_chosen_path vt_chosen_size vt_chosen_name if vt_check_password "${vt_chosen_path}"; then return @@ -1410,7 +1455,7 @@ function wim_unsupport_menuentry { } function efi_common_menuentry { - vt_chosen_img_path vt_chosen_path vt_chosen_size + vt_chosen_img_path vt_chosen_path vt_chosen_size vt_chosen_name if vt_check_password "${vt_chosen_path}"; then return @@ -1432,22 +1477,22 @@ function efi_common_menuentry { vt_vlnk_dst="${vtoy_iso_part}${vt_chosen_path}" fi - vt_concat_efi_iso "${vt_vlnk_dst}" vtoy_iso_buf - ventoy_debug_pause - + ventoy_cli_console + + #first try with chainload + set vtOldRoot=$root + set root=$vtoy_iso_part + chainloader "${vt_vlnk_dst}" + boot - unset vtoy_dotefi_retry + #retry with isoboot + set root=$vtOldRoot + vt_concat_efi_iso "${vt_vlnk_dst}" vtoy_iso_buf chainloader ${vtoy_path}/ventoy_${VTOY_EFI_ARCH}.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 "${vt_vlnk_dst}" - boot - fi - + boot + ventoy_gui_console } @@ -1480,7 +1525,7 @@ function vhdboot_common_func { } function vhd_common_menuentry { - vt_chosen_img_path vt_chosen_path vt_chosen_size + vt_chosen_img_path vt_chosen_path vt_chosen_size vt_chosen_name if vt_check_password "${vt_chosen_path}"; then return @@ -1577,7 +1622,7 @@ function vtoyboot_common_func { } function vtoy_common_menuentry { - vt_chosen_img_path vt_chosen_path vt_chosen_size + vt_chosen_img_path vt_chosen_path vt_chosen_size vt_chosen_name if vt_check_password "${vt_chosen_path}"; then return @@ -1627,7 +1672,9 @@ function ventoy_img_easyos { 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 + if [ -e (easysfs)/lib/modules/$vt_module_ver/$mod ]; then + vt_img_extra_initrd_append (easysfs)/lib/modules/$vt_module_ver/$mod + fi done fi @@ -1752,7 +1799,7 @@ function ventoy_img_ubos { } function ventoy_img_recalbox { - if [ $vtoy_img_max_part_end -gt $vt_chosen_size ]; then + if [ $vtoy_img_max_part_end -GT $vt_chosen_size ]; then echo -e "\nPlease extend the img file size before boot it. \n" ventoy_pause return @@ -1985,7 +2032,7 @@ function img_common_menuentry { set ventoy_busybox_ver=32 unset LoadIsoEfiDriver - vt_chosen_img_path vt_chosen_path vt_chosen_size + vt_chosen_img_path vt_chosen_path vt_chosen_size vt_chosen_name if vt_check_password "${vt_chosen_path}"; then return @@ -1996,7 +2043,7 @@ function img_common_menuentry { fi if [ "$grub_platform" = "pc" ]; then - if vt_check_mode 0; then + if vt_check_mode 0 "$vt_chosen_name"; then legacy_img_memdisk $vtoy_iso_part "$vt_chosen_path" return fi @@ -2031,11 +2078,15 @@ function img_common_menuentry { if vt_str_begin "$vtImgHd3Label" "ROOT-"; then if [ -f (vtimghd,3)/etc/os-release.d/ID ]; then vt_1st_line (vtimghd,3)/etc/os-release.d/ID vt_release_line1 - if [ vt_str_begin "$vt_release_line1" "FydeOS" ]; then + if vt_str_begin "$vt_release_line1" "FydeOS"; then ventoy_img_fydeos + else + ventoy_img_cloudready fi elif [ -f (vtimghd,3)/etc/cloudready-release ]; then ventoy_img_cloudready + elif [ -f (vtimghd,3)/etc/chrome_dev.conf ]; then + ventoy_img_cloudready fi elif vt_str_begin "$vtImgHd1Label" "LAKKA"; then ventoy_img_openelec lakka @@ -2100,7 +2151,7 @@ function img_unsupport_menuentry { ############################################################# ############################################################# -set VENTOY_VERSION="1.0.70" +set VENTOY_VERSION="1.0.79" #ACPI not compatible with Window7/8, so disable by default set VTOY_PARAM_NO_ACPI=1 @@ -2254,6 +2305,11 @@ else terminal_output gfxterm fi +if [ "$grub_platform" = "efi" ]; then + set mouse_delta=4000 + # terminal_input --append mouse +fi + if [ -n "$VTOY_DEFAULT_KBD_LAYOUT" ]; then set_keyboard_layout "$VTOY_DEFAULT_KBD_LAYOUT" fi @@ -2336,11 +2392,11 @@ if [ $ventoy_img_count -gt 0 ]; then fi else if [ -n "$VTOY_NO_ISO_TIP" ]; then - NO_ISO_MENU="No ISO files found, $VTOY_NO_ISO_TIP" + NO_ISO_MENU="No ISO or supported IMG files found, $VTOY_NO_ISO_TIP" elif [ -n "$VTOY_DEFAULT_SEARCH_ROOT" ]; then - NO_ISO_MENU="No ISO files found, please check VTOY_DEFAULT_SEARCH_ROOT" + NO_ISO_MENU="No ISO or supported IMG files found, please check VTOY_DEFAULT_SEARCH_ROOT" else - NO_ISO_MENU="No ISO files found" + NO_ISO_MENU="No ISO or supported IMG files found" fi menuentry "$NO_ISO_MENU (Press enter to reboot ...)" { echo -e "\n Rebooting ... " @@ -2363,6 +2419,8 @@ if [ -n "$VTOY_DEFAULT_IMAGE" ]; then export timeout export default + vt_fn_mutex_lock 1 + if [ "$vtHotkey" = "F2" ]; then unset timeout vt_browser_disk @@ -2374,6 +2432,8 @@ if [ -n "$VTOY_DEFAULT_IMAGE" ]; then ventoy_ext_menu fi + vt_fn_mutex_lock 0 + unset timeout unset default fi