summaryrefslogtreecommitdiffstats
path: root/resources/grub/config/menuentries/common.cfg
blob: 0f51bae5909d9799b4d54c0523c797e07d79491d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
menuentry 'Load Operating System' {
	insmod ahci
	insmod part_msdos
	insmod part_gpt
	# Iterate through all possible disks and partitions
	for i in 0 1; do
		# Look for fully encrypted disks, prompt for passphrase if successful
		cryptomount "(ahci${i})"
		# Check for filesystems replacing MBR/GPT at all, e.g. BTRFS or ZFS
		x="(crypto${i})"
		set root=${x}
		for p in "grub/libreboot_" "boot/grub/libreboot_" "grub/" "boot/grub/"; do
			if [ -f "${x}/${p}grub.cfg" ] ; then
				configfile /${p}grub.cfg
			fi
		done
		for j in 0 1 2 3 4 5 6 7 8 9; do
		# Check for normal MBR/GPT disks
		# GPT allows more than 4 partitions, /boot on /dev/sda7 is highly unlikely but still possible
			# /boot can still be encrypted
			for k in "crypto" "ahci"; do
				x="(${k}${i},${j})"
				set root=${x}
				for p in "grub/libreboot_" "boot/grub/libreboot_" "grub/" "boot/grub/"; do
					if [ -f "${x}/${p}grub.cfg" ] ; then
						configfile /${p}grub.cfg
					fi
				done
			done
		done
	done

# Last resort, otherwise go to GRUB shell
	set root='ahci0,1'
	for p in "/" "/boot/"; do
		if [ -f "${p}vmlinuz" ] ; then
			linux ${p}vmlinuz root=/dev/sda1 rw
			if [ -f "${p}initrd.img" ] ; then
				initrd ${p}initrd.img
			fi
		fi
	done
}
menuentry 'Parse ISOLINUX menu (SATA)' {
	insmod ahci
	insmod part_msdos
	insmod part_gpt
	for i in 0 1; do
		# Check for filesystems replacing MBR/GPT at all, e.g. BTRFS or ZFS
		set root="(ahci${i})"
		for p in "/isolinux" "/syslinux"; do
			if [ -f "${p}${p}.cfg" ] ; then
				syslinux_configfile -i ${p}${p}.cfg
			elif [ -f "/boot${p}${p}.cfg" ] ; then
				syslinux_configfile -i /boot${p}${p}.cfg
			fi
		done
		# Check for normal MBR/GPT disks
		# GPT allows more than 4 partitions, /boot on /dev/sda7 is highly unlikely but still possible
		for j in 0 1 2 3 4 5 6 7 8 9; do
			set root="(ahci${i},${j})"
			for p in "/isolinux" "/syslinux"; do
				if [ -f "${p}${p}.cfg" ] ; then
					syslinux_configfile -i ${p}${p}.cfg
				elif [ -f "/boot${p}${p}.cfg" ] ; then
					syslinux_configfile -i /boot${p}${p}.cfg
				fi
			done
		done
	done
}
menuentry 'Parse ISOLINUX menu (USB)' {
	insmod usbms
	insmod part_msdos
	insmod part_gpt
	for i in 0 1; do
		# Check for filesystems replacing MBR/GPT at all, e.g. BTRFS or ZFS
		set root="(usb${i})"
		for p in "/isolinux" "/syslinux"; do
			if [ -f "${p}${p}.cfg" ] ; then
				syslinux_configfile -i ${p}${p}.cfg
					elif [ -f "/boot${p}${p}.cfg" ] ; then
				syslinux_configfile -i /boot${p}${p}.cfg
			fi
		done
		# Check for normal MBR/GPT disks
		# GPT allows more than 4 partitions, /boot on /dev/sda7 is highly unlikely but still possible
		for j in 0 1 2 3 4 5 6 7 8 9; do
			set root="(usb${i},${j})"
			for p in "/isolinux" "/syslinux"; do
				if [ -f "${p}${p}.cfg" ] ; then
					syslinux_configfile -i ${p}${p}.cfg
				elif [ -f "/boot${p}${p}.cfg" ] ; then
					syslinux_configfile -i /boot${p}${p}.cfg
				fi
			done
		done
	done
}
menuentry 'Parse ISOLINUX menu (CD/DVD)' {
	insmod ahci
	insmod ata
	insmod iso9660
	for x in (ata0) (ahci1); do
		set root=${x}
		for p in "/isolinux" "/syslinux"; do
			if [ -f "${p}${p}.cfg" ] ; then
				syslinux_configfile -i ${p}${p}.cfg
			elif [ -f "/boot${p}${p}.cfg" ] ; then
				syslinux_configfile -i /boot${p}${p}.cfg
			fi
		done
	done
}
menuentry 'Switch to grubtest.cfg' {
	set root='cbfsdisk'
	configfile (cbfsdisk)/grubtest.cfg
}
menuentry 'Search for GRUB configuration (grub.cfg) outside of CBFS' {
	insmod ahci
	insmod usbms
	insmod part_msdos
	insmod part_gpt
	for i in ahci0 usb0 usb1; do
		for j in 1 2 3 4 5 6 7 8 9; do
			x="(${i},${j})"
			for p in "grub" "boot/grub" "grub2" "boot/grub2"; do
				if [ -f "${x}/${p}/grub.cfg" ] ; then
					submenu "Load Config from ${x}" ${x} {
						root=$2
						source /${p}/grub.cfg
						unset superusers
					}
				fi
			done
		done
	done
}
menuentry 'Poweroff' {
halt
}
menuentry 'Reboot' {
reboot
}