Skip to content

Instantly share code, notes, and snippets.

@SmartFinn
Last active April 16, 2022 13:48
Show Gist options
  • Save SmartFinn/8cd0b118b3baed9d4a1ce951ed9fe992 to your computer and use it in GitHub Desktop.
Save SmartFinn/8cd0b118b3baed9d4a1ce951ed9fe992 to your computer and use it in GitHub Desktop.
[Deprecated. Use ventoy.net instead] My GRUB2 config on a USB drive
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