Last active
April 16, 2022 13:48
-
-
Save SmartFinn/8cd0b118b3baed9d4a1ce951ed9fe992 to your computer and use it in GitHub Desktop.
[Deprecated. Use ventoy.net instead] My GRUB2 config on a USB drive
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
if serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1; then | |
terminal_input --append serial | |
terminal_output --append serial | |
fi | |
insmod font | |
if loadfont ${prefix}/fonts/unicode.pf2; then | |
if keystatus --shift; then true | |
else | |
insmod gfxterm | |
insmod vbe | |
insmod vga | |
set gfxmode=auto | |
set gfxpayload=auto | |
terminal_output gfxterm | |
if terminal_output gfxterm; then true; else | |
terminal gfxterm | |
fi | |
fi | |
fi | |
insmod regexp | |
function setenv { set "$1"="$2"; export "$1"; } | |
function _entry_loopback { | |
menuentry "${submenu_symbol}${1}" --id loopback "${2}" { | |
set iso_path="$2"; export iso_path | |
loopback loop "${iso_path}" | |
set oldroot=$root | |
set root=(loop) | |
configfile /boot/grub/loopback.cfg | |
set root=$oldroot | |
loopback --delete loop | |
} | |
return 0 | |
} | |
function _entry_ubuntu_server { | |
menuentry "${menuentry_symbol}${1}" --id ubuntu-server "${2}" { | |
set iso_path="$2" | |
loopback loop "${iso_path}" | |
linux (loop)/install/vmlinuz file=/cdrom/preseed/ubuntu-server.seed iso-scan/filename=${iso_path} noprompt noeject quiet -- | |
initrd (loop)/install/initrd.gz | |
} | |
return 0 | |
} | |
function _entry_ubuntu_mini { | |
menuentry "${menuentry_symbol}${1}" --id ubuntu-mini "${2}" { | |
set iso_path="$2" | |
loopback loop "${iso_path}" | |
linux (loop)/linux iso-scan/filename=${iso_path} noprompt noeject toram -- | |
initrd (loop)/initrd.gz | |
} | |
return 0 | |
} | |
function _entry_debian { | |
menuentry "${menuentry_symbol}${1}" --id debian "${2}" { | |
set iso_path="$2" | |
loopback loop "${iso_path}" | |
linux (loop)/live/vmlinuz boot=live config quiet splash findiso=${iso_path} -- | |
initrd (loop)/live/initrd.img | |
} | |
return 0 | |
} | |
function _entry_neon { | |
menuentry "${menuentry_symbol}${1}" --id neon "${2}" { | |
set iso_path="$2" | |
loopback loop "${iso_path}" | |
linux (loop)/casper/vmlinuz boot=casper apparmor=0 quiet splash iso-scan/filename=${iso_path} -- | |
initrd (loop)/casper/initrd.lz | |
} | |
return 0 | |
} | |
function _entry_kali_linux { | |
menuentry "${menuentry_symbol}${1}" --id kali-linux "${2}" { | |
set iso_path="$2" | |
loopback loop "${iso_path}" | |
linux (loop)/live/vmlinuz boot=live noconfig=sudo username=root hostname=kali noswap noautomount findiso=${iso_path} -- | |
initrd (loop)/live/initrd.img | |
} | |
return 0 | |
} | |
function _entry_clonezilla { | |
menuentry "${menuentry_symbol}${1}" --id clonezilla "${2}" { | |
set iso_path="$2" | |
loopback loop "${iso_path}" | |
linux (loop)/live/vmlinuz findiso=${iso_path} boot=live union=overlay username=user config quiet noswap edd=on nomodeset noeject toram=filesystem.squashfs vga=normal nosplash | |
initrd (loop)/live/initrd.img | |
} | |
return 0 | |
} | |
function _entry_redobackup { | |
menuentry "${menuentry_symbol}${1}" --id redobackup "${2}" { | |
set iso_path="$2" | |
loopback loop "${iso_path}" | |
linux (loop)/casper/vmlinuz boot=casper vga=791 quiet splash iso-scan/filename=${iso_path} -- | |
initrd (loop)/casper/initrd.lz | |
} | |
return 0 | |
} | |
function _entry_pmagic { | |
menuentry "${menuentry_symbol}${1}" --id pmagic "${2}" { | |
set iso_path="$2" | |
set kernel="(loop)/pmagic/bzImage" | |
set initrd="(loop)/pmagic/initrd.img (loop)/pmagic/fu.img (loop)/pmagic/m32.img" | |
if cpuid -l; then | |
set kernel="(loop)/pmagic/bzImage64" | |
set initrd="(loop)/pmagic/initrd.img (loop)/pmagic/fu.img (loop)/pmagic/m64.img" | |
fi | |
set cmdline="edd=on vga=normal vmalloc=512MiB boot=live eject=no" | |
loopback loop "${iso_path}" | |
linux ${kernel} iso_filename=${iso_path} ${cmdline} load_ramdisk=1 -- | |
initrd ${initrd} | |
} | |
return 0 | |
} | |
function _entry_systemrescuecd { | |
submenu "${submenu_symbol}${1}" --id systemrescuecd "${2}" { | |
set iso_path="${2}"; export iso_path | |
set kernel="(loop)/isolinux/rescue32" | |
if cpuid -l; then | |
set kernel="(loop)/isolinux/rescue64" | |
fi | |
set initrd="(loop)/isolinux/initram.igz" | |
set cmdline="setkmap=us rootpass=rescue" | |
menuentry "${menuentry_symbol}System Rescue CD" --id boot { | |
loopback loop ${iso_path} | |
linux ${kernel} isoloop=${iso_path} ${cmdline} scandelay=1 rootpass=root | |
initrd ${initrd} | |
} | |
menuentry "${menuentry_symbol}System Rescue CD (dostartx)" { | |
loopback loop ${iso_path} | |
linux ${kernel} isoloop=${iso_path} ${cmdline} dostartx | |
initrd ${initrd} | |
} | |
menuentry "${menuentry_symbol}System Rescue CD (docache)" { | |
loopback loop ${iso_path} | |
linux ${kernel} isoloop=${iso_path} ${cmdline} docache | |
initrd ${initrd} | |
} | |
menuentry "${menuentry_symbol}System Rescue CD (serial)" { | |
loopback loop ${iso_path} | |
linux ${kernel} isoloop=${iso_path} ${cmdline} console=tty0 console=ttyS0,115200n8 | |
initrd ${initrd} | |
} | |
if [ "${grub_platform}" == "pc" ]; then | |
menuentry "${menuentry_symbol}MEMTEST: Memory test using Memtest86+" { | |
loopback loop ${iso_path} | |
linux16 (loop)/bootdisk/memtestp | |
} | |
menuentry "${menuentry_symbol}NTPASSWD: Reset or edit Windows passwords" { | |
loopback loop ${iso_path} | |
linux16 (loop)/ntpasswd/vmlinuz rw vga=1 | |
initrd16 (loop)/ntpasswd/initrd.cgz (loop)/ntpasswd/scsi.cgz | |
} | |
menuentry "${menuentry_symbol}SGD: Super Grub2 Disk" { | |
loopback loop ${iso_path} | |
linux16 (loop)/isolinux/memdisk floppy raw | |
initrd16 (loop)/bootdisk/grubdisk.img | |
} | |
menuentry "${menuentry_symbol}FREEDOS: Clone of the MSDOS Operating System" { | |
loopback loop ${iso_path} | |
linux16 (loop)/isolinux/memdisk floppy | |
initrd16 (loop)/bootdisk/freedos.img | |
} | |
menuentry "${menuentry_symbol}NETBOOT: Boot from the network" { | |
loopback loop ${iso_path} | |
linux16 (loop)/isolinux/netboot | |
} | |
menuentry "${menuentry_symbol}HDT: recent hardware diagnostics tool" { | |
loopback loop ${iso_path} | |
linux16 (loop)/isolinux/memdisk floppy | |
initrd16 (loop)/bootdisk/hdt.img | |
} | |
menuentry "${menuentry_symbol}AIDA: old hardware diagnostics tool" { | |
loopback loop ${iso_path} | |
linux16 (loop)/isolinux/memdisk floppy | |
initrd16 (loop)/bootdisk/aida.img | |
} | |
menuentry "${menuentry_symbol}GAG: Graphical Boot Manager" { | |
loopback loop ${iso_path} | |
linux16 (loop)/isolinux/memdisk floppy | |
initrd16 (loop)/bootdisk/gag.img | |
} | |
menuentry "${menuentry_symbol}DBAN: erase all data from the disk" { | |
loopback loop ${iso_path} | |
linux16 (loop)/bootdisk/dban.bzi nuke="dwipe" silent | |
} | |
menuentry "${menuentry_symbol}MHDD: Low-level Hard Drive diagnostic tool" { | |
loopback loop ${iso_path} | |
linux16 (loop)/isolinux/memdisk floppy | |
initrd16 (loop)/bootdisk/mhdd.img | |
} | |
fi | |
} | |
return 0 | |
} | |
function _entry_systemrescuecd_6x { | |
submenu "${submenu_symbol}${1}" --id systemrescuecd_6x "${2}" { | |
set iso_path="${2}"; export iso_path | |
set kernel="(loop)/sysresccd/boot/x86_64/vmlinuz" | |
set initrd="(loop)/sysresccd/boot/intel_ucode.img (loop)/sysresccd/boot/amd_ucode.img (loop)/sysresccd/boot/x86_64/sysresccd.img" | |
set cmdline="img_dev=/dev/disk/by-label/${ROOT_LABEL} img_loop=${iso_path} archisobasedir=sysresccd" | |
set cmdline_extra="setkmap=us rootpass=rescue" | |
menuentry "${menuentry_symbol}System Rescue CD" { | |
loopback loop ${iso_path} | |
linux ${kernel} ${cmdline} ${cmdline_extra} | |
initrd ${initrd} | |
} | |
menuentry "${menuentry_symbol}System Rescue CD (copy to RAM)" { | |
loopback loop ${iso_path} | |
linux ${kernel} ${cmdline} ${cmdline_extra} copytoram | |
initrd ${initrd} | |
} | |
} | |
return 0 | |
} | |
function _entry_linux_lite { | |
menuentry "${menuentry_symbol}${1}" --id linuxlite "${2}" { | |
set iso_path="$2" | |
loopback loop "${iso_path}" | |
linux (loop)/casper/vmlinuz iso-scan/filename=${iso_path} boot=casper quiet splash -- | |
initrd (loop)/casper/initrd.gz | |
} | |
return 0 | |
} | |
function _entry_linuxbbq { | |
menuentry "${menuentry_symbol}${1}" --id linuxbbq "${2}" { | |
set iso_path="$2" | |
loopback loop "${iso_path}" | |
linux (loop)/live/vmlinuz boot=live config fromiso=${iso_path} toram -- | |
initrd (loop)/live/initrd.img | |
} | |
return 0 | |
} | |
function _entry_archlinux { | |
menuentry "${menuentry_symbol}${1}" --id arch "${2}" { | |
set iso_path="$2" | |
set archi="i686" | |
if cpuid -l; then | |
set archi="x86_64" | |
fi | |
loopback loop "${iso_path}" | |
linux (loop)/arch/boot/${archi}/vmlinuz img_dev=/dev/disk/by-label/${ROOT_LABEL} img_loop=${iso_path} -- | |
initrd (loop)/arch/boot/intel_ucode.img (loop)/arch/boot/amd_ucode.img (loop)/arch/boot/${archi}/archiso.img | |
} | |
return 0 | |
} | |
function _entry_manjaro { | |
menuentry "${menuentry_symbol}${1}" --id manjaro "${2}" { | |
set iso_path="$2" | |
loopback loop "${iso_path}" | |
linux (loop)/boot/vmlinuz-x86_64 img_dev=/dev/disk/by-uuid/${ROOT_UUID} img_loop=${iso_path} -- | |
initrd (loop)/boot/intel_ucode.img (loop)/boot/amd_ucode.img (loop)/boot/initramfs-x86_64.img | |
} | |
return 0 | |
} | |
function _entry_fedora { | |
menuentry "${menuentry_symbol}${1}" --id fedora "${2}" { | |
set iso_path="$2" | |
loopback loop "${iso_path}" | |
linux (loop)/isolinux/vmlinuz root=live:/dev/loop0 iso-scan/filename=${iso_path} rd.live.image -- | |
initrd (loop)/isolinux/initrd.img | |
} | |
return 0 | |
} | |
function _entry_solus { | |
menuentry "${menuentry_symbol}${1}" --id solus "${2}" { | |
set iso_path="$2" | |
loopback loop "${iso_path}" | |
probe -l (loop) --set=isolabel | |
linux (loop)/boot/kernel root=live:CDLABEL=${isolabel} iso-scan/filename=${iso_path} rd.live.image rd.live.overlay.overlayfs=1 rd.luks=0 rd.md=0 -- | |
initrd (loop)/boot/initrd.img | |
} | |
return 0 | |
} | |
function _entry_void { | |
menuentry "${menuentry_symbol}${1}" --id void "${2}" { | |
set iso_path="$2" | |
loopback loop "${iso_path}" | |
linux (loop)/boot/vmlinuz root=live:/dev/loop0 iso-scan/filename=${iso_path} rd.live.image rd.luks=0 rd.md=0 rd.dm=0 vconsole.unicode=1 vconsole.keymap=us locale.LANG=en_US.UTF-8 -- | |
initrd (loop)/boot/initrd | |
} | |
return 0 | |
} | |
function _entry_memdisk { | |
if [ "${grub_platform}" == "pc" ]; then | |
menuentry "${menuentry_symbol}${1}" --id memdisk "${2}" { | |
set iso_path="$2" | |
linux16 ${bin_dir}/memdisk iso | |
initrd16 ${iso_path} | |
} | |
fi | |
return 0 | |
} | |
function _generate_entries { | |
for file in ${iso_files}/*.iso ${iso_files}/*.ISO; do | |
if [ ! -f "${file}" ]; then break; fi | |
regexp --set=1:filepath '(/.+)$' "$file" | |
regexp --set=1:filename '^.*/(.+)$' "$file" | |
if regexp "ubuntu.*mini" "${filename}"; then | |
_entry_ubuntu_mini ${filename} ${filepath} | |
elif regexp "ubuntu.*server" "${filename}"; then | |
_entry_ubuntu_server ${filename} ${filepath} | |
elif regexp "(debian-live|bl-|q4os|refracta|cbpp)" "${filename}"; then | |
_entry_debian ${filename} ${filepath} | |
elif regexp "neon-" "${filename}"; then | |
_entry_neon ${filename} ${filepath} | |
elif regexp "kali-linux" "${filename}"; then | |
_entry_kali_linux ${filename} ${filepath} | |
elif regexp "clonezilla" "${filename}"; then | |
_entry_clonezilla ${filename} ${filepath} | |
elif regexp "redobackup|rescuezilla" "${filename}"; then | |
_entry_redobackup ${filename} ${filepath} | |
elif regexp "pmagic" "${filename}"; then | |
_entry_pmagic ${filename} ${filepath} | |
elif regexp "systemrescuecd(-amd64|)-6" "${filename}"; then | |
_entry_systemrescuecd_6x ${filename} ${filepath} | |
elif regexp "(systemrescuecd|sysresccd)" "${filename}"; then | |
_entry_systemrescuecd ${filename} ${filepath} | |
elif regexp "linux-lite" "${filename}"; then | |
_entry_linux_lite ${filename} ${filepath} | |
elif regexp "linuxbbq" "${filename}"; then | |
_entry_linuxbbq ${filename} ${filepath} | |
elif regexp "archlinux" "${filename}"; then | |
_entry_archlinux ${filename} ${filepath} | |
elif regexp "manjaro" "${filename}"; then | |
_entry_manjaro ${filename} ${filepath} | |
elif regexp "(Fedora|fedora)" "${filename}"; then | |
_entry_fedora ${filename} ${filepath} | |
elif regexp "(Solus|solus)" "${filename}"; then | |
_entry_solus ${filename} ${filepath} | |
elif regexp "void" "${filename}"; then | |
_entry_void ${filename} ${filepath} | |
elif regexp "(super_grub2_disk|sg2d|plpbt|kolibri)" "${filename}"; then | |
_entry_memdisk ${filename} ${filepath} | |
else | |
_entry_loopback ${filename} ${filepath} | |
fi | |
done | |
} | |
set timeout=30 | |
set default="0>systemrescuecd>boot" | |
set pager=1 | |
# set ROOT_LABEL ROOT_UUID | |
probe -l ${root} --set=ROOT_LABEL; export ROOT_LABEL | |
probe -u ${root} --set=ROOT_UUID; export ROOT_UUID | |
setenv menu_color_highlight light-gray/black | |
setenv menu_color_normal black/light-gray | |
setenv color_normal black/light-gray | |
setenv submenu_symbol "+ " | |
setenv menuentry_symbol " " | |
setenv iso_files "/ISO" | |
setenv bin_dir "/BIN" | |
# Boot from iso file | |
# ------ | |
submenu "${submenu_symbol}Boot from iso file" { | |
_generate_entries | |
} | |
# Utilities | |
# --------- | |
submenu "${submenu_symbol}Utilities" { | |
if [ "${grub_platform}" == "pc" ]; then | |
# ipxe | |
menuentry "${menuentry_symbol}iPXE Network Boot" { | |
linux16 ${bin_dir}/ipxe | |
} | |
# memtest86+ | |
menuentry "${menuentry_symbol}Memory test (memtest86+)" { | |
linux16 ${bin_dir}/memtest86+ | |
} | |
fi | |
# OneFileLinux | |
menuentry "${menuentry_symbol}One File Linux" { | |
linux "($root)/EFI/efi/OneFileLinux.efi" | |
} | |
} | |
# Extra | |
# ----- | |
submenu "${submenu_symbol}Grub2 extended functionality" { | |
menuentry "${menuentry_symbol}List devices/partitions" { | |
ls -l | |
sleep --interruptible 9999 | |
} | |
menuentry "${menuentry_symbol}Enable GRUB2's LVM support" { | |
insmod lvm | |
} | |
menuentry "${menuentry_symbol}Enable GRUB2's RAID support" { | |
insmod dm_nv | |
insmod mdraid09_be | |
insmod mdraid09 | |
insmod mdraid1x | |
insmod raid5rec | |
insmod raid6rec | |
} | |
menuentry "${menuentry_symbol}Enable GRUB2's PATA support (to work around BIOS bugs/limitations)" { | |
insmod ata | |
update_paths | |
} | |
menuentry "${menuentry_symbol}Enable GRUB2's USB support *experimental*" { | |
insmod ohci | |
insmod uhci | |
insmod usbms | |
update_paths | |
} | |
menuentry "${menuentry_symbol}Mount encrypted volumes (LUKS and geli)" { | |
insmod luks | |
insmod geli | |
cryptomount -a | |
} | |
menuentry "${menuentry_symbol}Enable serial terminal" { | |
serial | |
terminal_input --append serial | |
terminal_output --append serial | |
} | |
} | |
if [ -f "${prefix}/sgd/main.cfg" ]; then | |
menuentry "${menuentry_symbol}Super Grub2 Disk" { | |
configfile "${prefix}/sgd/main.cfg" | |
} | |
fi | |
if [ -f "${prefix}/glim/main.cfg" ]; then | |
menuentry "${menuentry_symbol}GRUB Live ISO Multiboot" { | |
configfile "${prefix}/glim/main.cfg" | |
} | |
fi | |
if [ "${grub_platform}" == "pc" ]; then | |
menuentry "${menuentry_symbol}Boot to Windows" { | |
insmod part_msdos | |
insmod ntfs | |
insmod ntldr | |
search --no-floppy --file --set=tmproot /bootmgr | |
ntldr "($tmproot)/bootmgr" | |
} | |
fi | |
if [ "${grub_platform}" == "efi" ]; then | |
menuentry "${menuentry_symbol}Memtest86" { | |
chainloader "($root)/EFI/efi/memtest86/BOOTX64.efi" | |
} | |
menuentry "${menuentry_symbol}Boot to Windows UEFI/GPT" { | |
insmod part_gpt | |
search --no-floppy --file --set=tmproot /EFI/Microsoft/Boot/bootmgfw.efi | |
chainloader "($tmproot)/EFI/Microsoft/Boot/bootmgfw.efi" | |
} | |
submenu "${submenu_symbol}EFI Tools" { | |
for efi_file in /EFI/efi/*.efi /EFI/efi/*.EFI; do | |
if [ ! -e "$efi_file" ]; then break; fi | |
menuentry "$efi_file" "$efi_file" { | |
chainloader "($root)$1" | |
} | |
done | |
} | |
submenu "${submenu_symbol}EFI Drivers" { | |
for efi_file in /EFI/efi/drivers/*.efi /EFI/efi/drivers/*.EFI; do | |
if [ ! -e "$efi_file" ]; then break; fi | |
menuentry "$efi_file" "$efi_file" { | |
chainloader "($root)$1" | |
} | |
done | |
} | |
fi | |
menuentry "${menuentry_symbol}Reboot" { | |
reboot | |
} | |
menuentry "${menuentry_symbol}Shutdown" { | |
halt | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment