]> git.proxmox.com Git - grub2.git/blob - util/grub.d/10_hurd.in
Add GRUB_RECOVERY_TITLE option
[grub2.git] / util / grub.d / 10_hurd.in
1 #! /bin/sh
2 set -e
3
4 # grub-mkconfig helper script.
5 # Copyright (C) 2006,2007,2008,2009,2010 Free Software Foundation, Inc.
6 #
7 # GRUB is free software: you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation, either version 3 of the License, or
10 # (at your option) any later version.
11 #
12 # GRUB is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
16 #
17 # You should have received a copy of the GNU General Public License
18 # along with GRUB. If not, see <http://www.gnu.org/licenses/>.
19
20 prefix="@prefix@"
21 exec_prefix="@exec_prefix@"
22 datarootdir="@datarootdir@"
23
24 export TEXTDOMAIN=@PACKAGE@
25 export TEXTDOMAINDIR="@localedir@"
26
27 . "@datadir@/@PACKAGE@/grub-mkconfig_lib"
28
29 CLASS="--class gnu --class os"
30
31 if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then
32 OS=GNU
33 else
34 OS="${GRUB_DISTRIBUTOR} GNU/Hurd"
35 CLASS="--class $(echo ${GRUB_DISTRIBUTOR} | tr 'A-Z' 'a-z' | cut -d' ' -f1|LC_ALL=C sed 's,[^[:alnum:]_],_,g') ${CLASS}"
36 fi
37
38 at_least_one=false
39 all_of_them=true
40
41 # FIXME: add l4 here?
42 kernel=
43 for i in /boot/gnumach* ; do
44 if test -e $i ; then
45 basename=`basename $i`
46 dirname=`dirname $i`
47 rel_dirname=`make_system_path_relative_to_its_root $dirname`
48 gettext_printf "Found GNU Mach: %s" "$i" >&2
49 echo >&2
50 kernels="${kernels} ${rel_dirname}/${basename}"
51 at_least_one=true
52 fi
53 done
54
55 # FIXME: This works for ext2. For other filesystems we might need special-casing
56 case "${GRUB_FS}" in
57 *fs) hurd_fs="${GRUB_FS}" ;;
58 *) hurd_fs="${GRUB_FS}fs" ;;
59 esac
60
61 for i in /hurd/${hurd_fs}.static /hurd/exec ; do
62 if test -e "$i" ; then
63 gettext_printf "Found Hurd module: %s" "$i" >&2
64 echo >&2
65 at_least_one=true
66 else
67 all_of_them=false
68 fi
69 done
70
71 if ${at_least_one} ; then : ; else
72 # no hurd here, aborting silently
73 exit 0
74 fi
75
76 if ${all_of_them} && test -e /lib/ld.so.1 ; then : ; else
77 gettext "Some Hurd stuff found, but not enough to boot." >&2
78 echo >&2
79 exit 1
80 fi
81
82 title_correction_code=
83
84 hurd_entry () {
85 kernel="$1"
86 type="$2"
87 kernel_base="`basename "${kernel}"`"
88
89 if [ x$type != xsimple ] ; then
90 if [ x$type = xrecovery ] ; then
91 title="$(gettext_printf "%s, with Hurd %s (%s)" "${OS}" "${kernel_base}" "$(gettext "${GRUB_RECOVERY_TITLE}")")"
92 oldtitle="$OS using $kernel_base ($GRUB_RECOVERY_TITLE)"
93 else
94 title="$(gettext_printf "%s, with Hurd %s" "${OS}" "${kernel_base}")"
95 oldtitle="$OS using $kernel_base"
96 fi
97 if [ x"$oldtitle" = x"$GRUB_ACTUAL_DEFAULT" ]; then
98 quoted="$(echo "$GRUB_ACTUAL_DEFAULT" | grub_quote)"
99 title_correction_code="${title_correction_code}if [ \"x\$default\" = '$quoted' ]; then default='$(echo "$replacement_title" | grub_quote)'; fi;"
100 grub_warn "$(gettext_printf "Please don't use old title \`%s' for GRUB_DEFAULT, use \`%s' (for versions before 2.00) or \`%s' (for 2.00 or later)" "$GRUB_ACTUAL_DEFAULT" "$replacement_title" "gnuhurd-advanced-$boot_device_id>'gnuhurd-$kernel-$type-$(grub_get_device_id "${GRUB_DEVICE_BOOT}")'")"
101 fi
102 sed "s/^/$submenu_indentation/" << EOF
103 menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnuhurd-$kernel-$type-$(grub_get_device_id "${GRUB_DEVICE_BOOT}")' {
104 EOF
105 else
106 sed "s/^/$submenu_indentation/" << EOF
107 menuentry '$(echo "$OS" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnuhurd-simple-$(grub_get_device_id "${GRUB_DEVICE_BOOT}")' {
108 EOF
109 fi
110
111 prepare_grub_to_access_device "${GRUB_DEVICE_BOOT}" | grub_add_tab|sed "s/^/$submenu_indentation/"
112 message="$(gettext_printf "Loading GNU Mach ...")"
113
114 if [ x$type = xrecovery ] ; then
115 opts="-s"
116 else
117 opts=
118 fi
119 sed "s/^/$submenu_indentation/" << EOF
120 echo '$(echo "$message" | grub_quote)'
121 multiboot ${kernel} root=device:${GRUB_DEVICE#/dev/} $opts ${GRUB_CMDLINE_GNUMACH}
122 EOF
123
124 if [ x$type != xrecovery ] ; then
125 save_default_entry | grub_add_tab| sed "s/^/$submenu_indentation/"
126 fi
127 prepare_grub_to_access_device "${GRUB_DEVICE}" | grub_add_tab| sed "s/^/$submenu_indentation/"
128 message="$(gettext_printf "Loading the Hurd ...")"
129 if [ x$type = xrecovery ] ; then
130 opts=
131 else
132 opts="--readonly"
133 fi
134
135 sed "s/^/$submenu_indentation/" << EOF
136 echo '$(echo "$message" | grub_quote)'
137 module /hurd/${hurd_fs}.static ${hurd_fs} $opts \\
138 --multiboot-command-line='\${kernel-command-line}' \\
139 --host-priv-port='\${host-port}' \\
140 --device-master-port='\${device-port}' \\
141 --exec-server-task='\${exec-task}' -T typed '\${root}' \\
142 '\$(task-create)' '\$(task-resume)'
143 module /lib/ld.so.1 exec /hurd/exec '\$(exec-task=task-create)'
144 }
145 EOF
146
147 }
148
149 title_correction_code=
150
151 # Extra indentation to add to menu entries in a submenu. We're not in a submenu
152 # yet, so it's empty. In a submenu it will be equal to '\t' (one tab).
153 submenu_indentation=""
154 is_top_level=true
155
156 while [ "x$kernels" != "x" ] ; do
157 kernel=`version_find_latest $kernels`
158
159 if [ "x$is_top_level" = xtrue ] && [ "x${GRUB_DISABLE_SUBMENU}" != xy ]; then
160 hurd_entry "$kernel" simple
161 submenu_indentation="$grub_tab"
162
163 # TRANSLATORS: %s is replaced with an OS name
164 echo "submenu '$(gettext_printf "Advanced options for %s" "${OS}" | grub_quote)' \$menuentry_id_option 'gnuhurd-advanced-$(grub_get_device_id "${GRUB_DEVICE_BOOT}")' {"
165 is_top_level=false
166 fi
167
168 hurd_entry "$kernel" advanced
169 hurd_entry "$kernel" recovery
170
171 kernels=`echo $kernels | tr ' ' '\n' | grep -vx $kernel | tr '\n' ' '`
172 done
173
174 # If at least one kernel was found, then we need to
175 # add a closing '}' for the submenu command.
176 if [ x"$is_top_level" != xtrue ]; then
177 echo '}'
178 fi
179
180 echo "$title_correction_code"