4
# Generate grub.cfg by inspecting /boot contents.
5
# Copyright (C) 2006,2007,2008,2009,2010 Free Software Foundation, Inc.
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.
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.
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/>.
20
transform="@program_transform_name@"
22
exec_prefix="@exec_prefix@"
23
datarootdir="@datarootdir@"
26
exec_prefix="@exec_prefix@"
29
sysconfdir="@sysconfdir@"
30
PACKAGE_NAME=@PACKAGE_NAME@
31
PACKAGE_VERSION=@PACKAGE_VERSION@
34
if [ "x$pkgdatadir" = x ]; then
35
pkgdatadir="${datadir}/@PACKAGE@"
38
grub_mkconfig_dir="${sysconfdir}"/grub.d
42
grub_probe="${sbindir}/`echo grub-probe | sed "${transform}"`"
43
grub_editenv="${bindir}/`echo grub-editenv | sed "${transform}"`"
44
grub_script_check="${bindir}/`echo grub-script-check | sed "${transform}"`"
46
export TEXTDOMAIN=@PACKAGE@
47
export TEXTDOMAINDIR="@localedir@"
49
. "${pkgdatadir}/grub-mkconfig_lib"
54
gettext_printf "Usage: %s [OPTION]\n" "$self"
55
gettext "Generate a grub config file"; echo
57
print_option_help "-o, --output=$(gettext FILE)" "$(gettext "output generated config to FILE [default=stdout]")"
58
print_option_help "-h, --help" "$(gettext "print this message and exit")"
59
print_option_help "-v, --version" "$(gettext "print the version information and exit")"
61
gettext "Report bugs to <bug-grub@gnu.org>."; echo
68
if test $# -eq 0; then
69
gettext_printf "%s: option requires an argument -- \`%s'\n" "$0" "$opt" 1>&2
75
# Check the arguments.
86
echo "$self (${PACKAGE_NAME}) ${PACKAGE_VERSION}"
89
grub_cfg=`argument $option "$@"`; shift;;
91
grub_cfg=`echo "$option" | sed 's/--output=//'`
94
gettext_printf "Unrecognized option \`%s'\n" "$option" 1>&2
98
# Explicitly ignore non-option arguments, for compatibility.
102
if fgrep -qs '${GRUB_PREFIX}/video.lst' "${grub_mkconfig_dir}/00_header"; then
103
echo "GRUB >= 2.00 has been unpacked but not yet configured." >&2
104
echo "grub-mkconfig will not work until the upgrade is complete." >&2
105
echo "It should run later as part of configuring the new GRUB packages." >&2
109
if [ "x$EUID" = "x" ] ; then
113
if [ "$EUID" != 0 ] ; then
115
case "`uname 2>/dev/null`" in
117
# Cygwin: Assume root if member of admin group
118
for g in `id -G 2>/dev/null` ; do
124
if [ $root != t ] ; then
125
gettext_printf "%s: You must run this as root\n" "$self" >&2
130
set $grub_probe dummy
131
if test -f "$1"; then
134
gettext_print "%s: Not found.\n" "$1" 1>&2
138
# Device containing our userland. Typically used for root= parameter.
139
GRUB_DEVICE="`${grub_probe} --target=device /`"
140
GRUB_DEVICE_UUID="`${grub_probe} --device ${GRUB_DEVICE} --target=fs_uuid 2> /dev/null`" || true
142
# Device containing our /boot partition. Usually the same as GRUB_DEVICE.
143
GRUB_DEVICE_BOOT="`${grub_probe} --target=device /boot`"
144
GRUB_DEVICE_BOOT_UUID="`${grub_probe} --device ${GRUB_DEVICE_BOOT} --target=fs_uuid 2> /dev/null`" || true
146
# Filesystem for the device containing our userland. Used for stuff like
147
# choosing Hurd filesystem module.
148
GRUB_FS="`${grub_probe} --device ${GRUB_DEVICE} --target=fs 2> /dev/null || echo unknown`"
150
if test -f ${sysconfdir}/default/grub ; then
151
. ${sysconfdir}/default/grub
154
# XXX: should this be deprecated at some point?
155
if [ "x${GRUB_TERMINAL}" != "x" ] ; then
156
GRUB_TERMINAL_INPUT="${GRUB_TERMINAL}"
157
GRUB_TERMINAL_OUTPUT="${GRUB_TERMINAL}"
161
if [ "x${GRUB_TERMINAL_OUTPUT}" = "x" ]; then
162
GRUB_TERMINAL_OUTPUT=gfxterm;
166
for x in ${GRUB_TERMINAL_OUTPUT}; do
169
xconsole | xserial | xofconsole)
170
# make sure all our children behave in conformance with ascii..
172
*) echo "Invalid output terminal \"${GRUB_TERMINAL_OUTPUT}\"" >&2 ; exit 1 ;;
176
GRUB_ACTUAL_DEFAULT="$GRUB_DEFAULT"
178
if [ "x${GRUB_ACTUAL_DEFAULT}" = "xsaved" ] ; then GRUB_ACTUAL_DEFAULT="`"${grub_editenv}" - list | sed -n '/^saved_entry=/ s,^saved_entry=,,p'`" ; fi
181
# These are defined in this script, export them here so that user can
186
GRUB_DEVICE_BOOT_UUID \
189
GRUB_PRELOAD_MODULES \
192
# These are optional, user-defined variables.
193
export GRUB_DEFAULT \
194
GRUB_HIDDEN_TIMEOUT \
195
GRUB_HIDDEN_TIMEOUT_QUIET \
197
GRUB_DEFAULT_BUTTON \
198
GRUB_HIDDEN_TIMEOUT_BUTTON \
199
GRUB_TIMEOUT_BUTTON \
200
GRUB_BUTTON_CMOS_ADDRESS \
201
GRUB_BUTTON_CMOS_CLEAN \
204
GRUB_CMDLINE_LINUX_DEFAULT \
206
GRUB_CMDLINE_XEN_DEFAULT \
207
GRUB_CMDLINE_LINUX_XEN_REPLACE \
208
GRUB_CMDLINE_LINUX_XEN_REPLACE_DEFAULT \
209
GRUB_CMDLINE_NETBSD \
210
GRUB_CMDLINE_NETBSD_DEFAULT \
211
GRUB_CMDLINE_GNUMACH \
212
GRUB_TERMINAL_INPUT \
213
GRUB_TERMINAL_OUTPUT \
214
GRUB_SERIAL_COMMAND \
215
GRUB_DISABLE_LINUX_UUID \
216
GRUB_DISABLE_RECOVERY \
221
GRUB_GFXPAYLOAD_LINUX \
222
GRUB_DISABLE_OS_PROBER \
225
GRUB_ENABLE_CRYPTODISK \
227
GRUB_RECORDFAIL_TIMEOUT
229
if test "x${grub_cfg}" != "x"; then
230
rm -f "${grub_cfg}.new"
231
oldumask=$(umask); umask 077
232
exec > "${grub_cfg}.new"
235
gettext "Generating grub.cfg ..." >&2
240
# DO NOT EDIT THIS FILE
242
# It is automatically generated by $self using templates
243
# from ${grub_mkconfig_dir} and settings from ${sysconfdir}/default/grub
247
for i in ${grub_mkconfig_dir}/* ; do
249
# emacsen backup files. FIXME: support other editors
251
# emacsen autosave files. FIXME: support other editors
254
if grub_file_is_not_garbage "$i" && test -x "$i" ; then
256
echo "### BEGIN $i ###"
258
echo "### END $i ###"
264
if [ "x${grub_cfg}" != "x" ] && ! grep "^password " ${grub_cfg}.new >/dev/null; then
265
chmod 444 ${grub_cfg}.new || true
268
if test "x${grub_cfg}" != "x" ; then
269
if ! ${grub_script_check} ${grub_cfg}.new; then
270
# TRANSLATORS: %s is replaced by filename
271
gettext_printf "Syntax errors are detected in generated GRUB config file.
272
Ensure that there are no errors in /etc/default/grub
273
and /etc/grub.d/* files or please file a bug report with
274
%s file attached." "${grub_cfg}.new" >&2
276
# none of the children aborted with error, install the new grub.cfg
277
mv -f ${grub_cfg}.new ${grub_cfg}