* util/update-grub_lib.in: Copy to ...
* util/grub-mkconfig_lib.in: ... this. Update all users.
* util/update-grub_lib.in: Make it a stub to `grub-mkconfigig_lib.in'.
* util/update-grub.in: Rename to ...
* util/grub-mkconfig.in: ... this. Update all users. Remove `-y'
option. Add `--output' option to allow users to specify the generated
configuration file. Default to stdout.
(update_grub_dir): Rename to ...
(grub_mkconfig_dir): ... this.
(grub_cfg): Default to an empty string.
* conf/common.rmk (update-grub): Rename to ...
(grub-mkconfig): ... this.
(update-grub_lib): Copy to ...
(grub-mkconfig_lib): ... this.
(update-grub_SCRIPTS): Copy to ...
(grub-mkconfig_SCRIPTS): ... this. Update all users.
(update-grub_DATA): Rename to ...
(grub-mkconfig_DATA): ... this.
+2008-09-29 Felix Zielcke <fzielcke@z-51.de>
+
+ * util/update-grub_lib.in: Copy to ...
+ * util/grub-mkconfig_lib.in: ... this. Update all users.
+ * util/update-grub_lib.in: Make it a stub to `grub-mkconfigig_lib.in'.
+ * util/update-grub.in: Rename to ...
+ * util/grub-mkconfig.in: ... this. Update all users. Remove `-y'
+ option. Add `--output' option to allow users to specify the generated
+ configuration file. Default to stdout.
+ (update_grub_dir): Rename to ...
+ (grub_mkconfig_dir): ... this.
+ (grub_cfg): Default to an empty string.
+ * conf/common.rmk (update-grub): Rename to ...
+ (grub-mkconfig): ... this.
+ (update-grub_lib): Copy to ...
+ (grub-mkconfig_lib): ... this.
+ (update-grub_SCRIPTS): Copy to ...
+ (grub-mkconfig_SCRIPTS): ... this. Update all users.
+ (update-grub_DATA): Rename to ...
+ (grub-mkconfig_DATA): ... this.
+
2008-09-28 Robert Millan <rmh@aybabtu.com>
* fs/iso9660.c (struct grub_iso9660_primary_voldesc): Rename `created'
util/grub-editenv.c
util/grub-emu.c
util/grub-fstest.c
+util/grub-mkconfig.in
+util/grub-mkconfig_lib.in
util/grub-mkdevicemap.c
util/grub-pe2elf.c
util/grub-probe.c
util/raid.c
util/resolve.c
util/unifont2pff.rb
-util/update-grub.in
util/update-grub_lib.in
util/elf/grub-mkimage.c
util/grub.d/00_header.in
$(pkglib_DATA) $(lib_DATA)
PKGDATA = $(pkgdata_DATA)
PROGRAMS = $(bin_UTILITIES) $(sbin_UTILITIES)
-SCRIPTS = $(bin_SCRIPTS) $(sbin_SCRIPTS) $(update-grub_SCRIPTS)
+SCRIPTS = $(bin_SCRIPTS) $(sbin_SCRIPTS) $(grub-mkconfig_SCRIPTS)
CLEANFILES =
MOSTLYCLEANFILES =
$(HELP2MAN) --section=8 $(builddir)/$$file > $(DESTDIR)$(mandir)/man8/$$dest.8; \
done
$(mkinstalldirs) $(DESTDIR)$(sysconfdir)/grub.d
- @list='$(update-grub_SCRIPTS)'; for file in $$list; do \
+ @list='$(grub-mkconfig_SCRIPTS)'; for file in $$list; do \
if test -f "$$file"; then dir=; else dir="$(srcdir)/"; fi; \
dest="`echo $$file | sed 's,.*/,,' | sed '$(transform)'`"; \
$(INSTALL_SCRIPT) $$dir$$file $(DESTDIR)$(sysconfdir)/grub.d/$$dest; \
done
- @list='$(update-grub_DATA)'; for file in $$list; do \
+ @list='$(grub-mkconfig_DATA)'; for file in $$list; do \
if test -f "$$file"; then dir=; else dir="$(srcdir)/"; fi; \
dest="`echo $$file | sed 's,.*/,,' | sed '$(transform)'`"; \
$(INSTALL_DATA) $$dir$$file $(DESTDIR)$(sysconfdir)/grub.d/$$dest; \
dest="`echo $$file | sed 's,.*/,,' | sed '$(transform)'`"; \
rm -f $(DESTDIR)$(sbindir)/$$dest; \
done
- @list='$(update-grub_SCRIPTS) $(update-grub_DATA)'; for file in $$list; do \
+ @list='$(grub-mkconfig_SCRIPTS) $(grub-mkconfig_DATA)'; for file in $$list; do \
dest="`echo $$file | sed 's,.*/,,' | sed '$(transform)'`"; \
rm -f $(DESTDIR)$(sysconfdir)/grub.d/$$dest; \
done
CLEANFILES += grub-pe2elf
-# For update-grub
-update-grub: util/update-grub.in config.status
+# For grub-mkconfig
+grub-mkconfig: util/grub-mkconfig.in config.status
./config.status --file=$@:$<
chmod +x $@
-sbin_SCRIPTS += update-grub
-CLEANFILES += update-grub
+sbin_SCRIPTS += grub-mkconfig
+CLEANFILES += grub-mkconfig
+
+grub-mkconfig_lib: util/grub-mkconfig_lib.in config.status
+ ./config.status --file=$@:$<
+ chmod +x $@
+lib_DATA += grub-mkconfig_lib
+CLEANFILES += grub-mkconfig_lib
update-grub_lib: util/update-grub_lib.in config.status
./config.status --file=$@:$<
%: util/grub.d/%.in config.status
./config.status --file=$@:$<
chmod +x $@
-update-grub_SCRIPTS = 00_header 10_linux 10_hurd 30_os-prober 40_custom
+grub-mkconfig_SCRIPTS = 00_header 10_linux 10_hurd 30_os-prober 40_custom
ifeq ($(target_os), cygwin)
-update-grub_SCRIPTS += 10_windows
+grub-mkconfig_SCRIPTS += 10_windows
endif
-CLEANFILES += $(update-grub_SCRIPTS)
+CLEANFILES += $(grub-mkconfig_SCRIPTS)
-update-grub_DATA += util/grub.d/README
+grub-mkconfig_DATA += util/grub.d/README
# Filing systems.
grub_pe2elf_SOURCES = util/grub-pe2elf.c util/misc.c
CLEANFILES += grub-pe2elf
-# For update-grub
-update-grub: util/update-grub.in config.status
+# For grub-mkconfig
+grub-mkconfig: util/grub-mkconfig.in config.status
./config.status --file=$@:$<
chmod +x $@
-sbin_SCRIPTS += update-grub
-CLEANFILES += update-grub
+sbin_SCRIPTS += grub-mkconfig
+CLEANFILES += grub-mkconfig
+
+grub-mkconfig_lib: util/grub-mkconfig_lib.in config.status
+ ./config.status --file=$@:$<
+ chmod +x $@
+lib_DATA += grub-mkconfig_lib
+CLEANFILES += grub-mkconfig_lib
update-grub_lib: util/update-grub_lib.in config.status
./config.status --file=$@:$<
%: util/grub.d/%.in config.status
./config.status --file=$@:$<
chmod +x $@
-update-grub_SCRIPTS = 00_header 10_linux 10_hurd 30_os-prober 40_custom
+grub-mkconfig_SCRIPTS = 00_header 10_linux 10_hurd 30_os-prober 40_custom
ifeq ($(target_os), cygwin)
-update-grub_SCRIPTS += 10_windows
+grub-mkconfig_SCRIPTS += 10_windows
endif
-CLEANFILES += $(update-grub_SCRIPTS)
+CLEANFILES += $(grub-mkconfig_SCRIPTS)
-update-grub_DATA += util/grub.d/README
+grub-mkconfig_DATA += util/grub.d/README
# Filing systems.
libdir=@libdir@
sysconfdir=@sysconfdir@
grub_prefix=`echo /boot/grub | sed ${transform}`
-grub_cfg=${grub_prefix}/grub.cfg
-update_grub_dir=${sysconfdir}/grub.d
+grub_cfg=""
+grub_mkconfig_dir=${sysconfdir}/grub.d
grub_mkdevicemap=${sbindir}/`echo grub-mkdevicemap | sed ${transform}`
grub_probe=${sbindir}/`echo grub-probe | sed ${transform}`
usage () {
cat <<EOF
Usage: $0 [OPTION]
-Generate /boot/grub/grub.cfg
+Generate a grub config file
+ -o, --output=FILE output generated config to FILE [default=stdout]
-h, --help print this message and exit
-v, --version print the version information and exit
- -y ignored for compatibility
Report bugs to <bug-grub@gnu.org>.
EOF
-v | --version)
echo "$0 (GNU GRUB ${PACKAGE_VERSION})"
exit 0 ;;
- -y)
- echo "$0: warning: Ignoring -y option (no longer needed)." >&2
- ;;
+ -o)
+ shift
+ grub_cfg=$1
+ ;;
+ --output=)
+ grub_cfg=`echo "$option" | sed 's/--output=//'`
+ ;;
-*)
echo "Unrecognized option \`$option'" 1>&2
usage
esac
done
-. ${libdir}/grub/update-grub_lib
+. ${libdir}/grub/grub-mkconfig_lib
if [ "x$EUID" = "x" ] ; then
EUID=`id -u`
# These are optional, user-defined variables.
export GRUB_DEFAULT GRUB_TIMEOUT GRUB_DISTRIBUTOR GRUB_CMDLINE_LINUX GRUB_CMDLINE_LINUX_DEFAULT GRUB_TERMINAL GRUB_SERIAL_COMMAND GRUB_DISABLE_LINUX_UUID GRUB_GFXMODE
-rm -f ${grub_cfg}.new
-exec > ${grub_cfg}.new
-
-# Allow this to fail, since /boot/grub/ might need to be fatfs to support some
-# firmware implementations (e.g. OFW or EFI).
-chmod 444 ${grub_cfg}.new || true
+if test "x${grub_cfg}" != "x"; then
+ rm -f ${grub_cfg}.new
+ exec > ${grub_cfg}.new
-echo "Updating ${grub_cfg} ..." >&2
+ # Allow this to fail, since /boot/grub/ might need to be fatfs to support some
+ # firmware implementations (e.g. OFW or EFI).
+ chmod 444 ${grub_cfg}.new || true
+fi
+echo "Generating grub.cfg ..." >&2
cat << EOF
#
#
EOF
-for i in ${update_grub_dir}/* ; do
+for i in ${grub_mkconfig_dir}/* ; do
case "$i" in
# emacsen backup files. FIXME: support other editors
*~) ;;
esac
done
-# none of the children aborted with error, install the new grub.cfg
-mv -f ${grub_cfg}.new ${grub_cfg}
+if test "x${grub_cfg}" != "x" ; then
+ # none of the children aborted with error, install the new grub.cfg
+ mv -f ${grub_cfg}.new ${grub_cfg}
+fi
echo "done" >&2
--- /dev/null
+# Helper library for grub-mkconfig
+# Copyright (C) 2007,2008 Free Software Foundation, Inc.
+#
+# GRUB is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# GRUB is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GRUB. If not, see <http://www.gnu.org/licenses/>.
+
+transform="@program_transform_name@"
+
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+datarootdir=@datarootdir@
+datadir=@datadir@
+sbindir=@sbindir@
+pkgdatadir=${datadir}/`echo @PACKAGE_TARNAME@ | sed "${transform}"`
+
+grub_probe=${sbindir}/`echo grub-probe | sed ${transform}`
+
+make_system_path_relative_to_its_root ()
+{
+ path=$1
+ # abort if file doesn't exist
+ if test -e $path ; then : ;else
+ return 1
+ fi
+
+ # canonicalize
+ if path=`readlink -f $path` ; then : ; else
+ return 1
+ fi
+
+ # if not a directory, climb up to the directory containing it
+ if test -d $path ; then
+ dir=$path
+ else
+ dir=`echo $path | sed -e "s,/[^/]*$,,g"`
+ fi
+
+ num=`stat -c %d $dir`
+
+ # this loop sets $dir to the root directory of the filesystem we're inspecting
+ while : ; do
+ parent=`readlink -f $dir/..`
+ if [ "x`stat -c %d $parent`" = "x$num" ] ; then : ; else
+ # $parent is another filesystem; we found it.
+ break
+ fi
+ if [ "x$dir" = "x/" ] ; then
+ # / is our root.
+ break
+ fi
+ dir=$parent
+ done
+
+ # This function never prints trailing slashes (so that its output can be
+ # appended a slash unconditionally). Each slash in $dir is considered a
+ # preceding slash, and therefore the root directory is an empty string.
+ if [ "$dir" = "/" ] ; then
+ dir=""
+ fi
+
+ # XXX: This fails if $dir contains ','.
+ path=`echo "$path" | sed -e "s,^$dir,,g"` || return 1
+
+ case "`uname 2>/dev/null`" in
+ CYGWIN*)
+ # Cygwin: Check if regular or emulated mount.
+ if [ -z "$dir" ] || [ "`stat -c %D "$dir/.."`" != 620000 ] ; then
+ # Reached some mount point not below /cygdrive.
+ # GRUB does not know Cygwin's emulated mounts,
+ # convert to Win32 path and remove drive letter.
+ path=`cygpath -m "$path" | sed -n 's,^[A-Za-z]:,,p'`
+ test ! -z "$path" || return 1
+ fi ;;
+ esac
+
+ echo "$path"
+}
+
+is_path_readable_by_grub ()
+{
+ path=$1
+
+ # abort if path doesn't exist
+ if test -e $path ; then : ;else
+ return 1
+ fi
+
+ # abort if file is in a filesystem we can't read
+ if ${grub_probe} -t fs $path > /dev/null 2>&1 ; then : ; else
+ return 1
+ fi
+
+ return 0
+}
+
+convert_system_path_to_grub_path ()
+{
+ path=$1
+
+ echo "Warning: convert_system_path_to_grub_path() is deprecated. Use prepare_grub_to_access_device() instead." >&2
+
+ # abort if GRUB can't access the path
+ if is_path_readable_by_grub ${path} ; then : ; else
+ return 1
+ fi
+
+ if drive=`${grub_probe} -t drive $path` ; then : ; else
+ return 1
+ fi
+
+ if relative_path=`make_system_path_relative_to_its_root $path` ; then : ; else
+ return 1
+ fi
+
+ echo ${drive}${relative_path}
+}
+
+prepare_grub_to_access_device ()
+{
+ device=$1
+
+ # Abstraction modules aren't auto-loaded.
+ abstraction="`${grub_probe} --device ${device} --target=abstraction`"
+ if [ "x${abstraction}" = "x" ] ; then : ; else
+ echo "insmod ${abstraction}"
+ fi
+
+ # If there's a filesystem UUID that GRUB is capable of identifying, use it;
+ # otherwise set root as per value in device.map.
+ echo "set root=`${grub_probe} --device ${device} --target=drive`"
+ if fs_uuid="`${grub_probe} --device ${device} --target=fs_uuid 2> /dev/null`" ; then
+ echo "search --fs-uuid --set ${fs_uuid}"
+ fi
+}
+
+font_path ()
+{
+ for dir in ${pkgdatadir} /boot/grub /usr/share/grub ; do
+ # FIXME: We prefer ascii because loading complete fonts is too slow (and
+ # we don't yet provide the gettext magic that would make unicode useful).
+ for basename in ascii unicode unifont ; do
+ path="${dir}/${basename}.pff"
+ if is_path_readable_by_grub ${path} > /dev/null ; then
+ echo "${path}"
+ return 0
+ fi
+ done
+ done
+
+ return 1
+}
+
+grub_file_is_not_garbage ()
+{
+ if test -f "$1" ; then
+ case "$1" in
+ *.dpkg-dist|*.dpkg-old|*.dpkg-tmp) return 1 ;; # debian dpkg
+ esac
+ else
+ return 1
+ fi
+ return 0
+}
libdir=@libdir@
grub_prefix=`echo /boot/grub | sed ${transform}`
-. ${libdir}/grub/update-grub_lib
+. ${libdir}/grub/grub-mkconfig_lib
# Do this as early as possible, since other commands might depend on it.
# (e.g. the `font' command might need lvm or raid modules)
prefix=@prefix@
exec_prefix=@exec_prefix@
libdir=@libdir@
-. ${libdir}/grub/update-grub_lib
+. ${libdir}/grub/grub-mkconfig_lib
if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then
OS=GNU
prefix=@prefix@
exec_prefix=@exec_prefix@
libdir=@libdir@
-. ${libdir}/grub/update-grub_lib
+. ${libdir}/grub/grub-mkconfig_lib
if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then
OS=GNU/Linux
prefix=@prefix@
exec_prefix=@exec_prefix@
libdir=@libdir@
-. ${libdir}/grub/update-grub_lib
+. ${libdir}/grub/grub-mkconfig_lib
case "`uname 2>/dev/null`" in
CYGWIN*) ;;
done
;;
hurd|*)
- echo " ${LONGNAME} is not yet supported by update-grub." >&2
+ echo " ${LONGNAME} is not yet supported by grub-mkconfig." >&2
;;
esac
done
-# Helper library for update-grub
+# stub for new grub-mkconfig_lib
# Copyright (C) 2007,2008 Free Software Foundation, Inc.
#
# GRUB is free software: you can redistribute it and/or modify
# You should have received a copy of the GNU General Public License
# along with GRUB. If not, see <http://www.gnu.org/licenses/>.
-transform="@program_transform_name@"
-
prefix=@prefix@
exec_prefix=@exec_prefix@
-datarootdir=@datarootdir@
-datadir=@datadir@
-sbindir=@sbindir@
-pkgdatadir=${datadir}/`echo @PACKAGE_TARNAME@ | sed "${transform}"`
-
-grub_probe=${sbindir}/`echo grub-probe | sed ${transform}`
-
-make_system_path_relative_to_its_root ()
-{
- path=$1
- # abort if file doesn't exist
- if test -e $path ; then : ;else
- return 1
- fi
-
- # canonicalize
- if path=`readlink -f $path` ; then : ; else
- return 1
- fi
-
- # if not a directory, climb up to the directory containing it
- if test -d $path ; then
- dir=$path
- else
- dir=`echo $path | sed -e "s,/[^/]*$,,g"`
- fi
-
- num=`stat -c %d $dir`
-
- # this loop sets $dir to the root directory of the filesystem we're inspecting
- while : ; do
- parent=`readlink -f $dir/..`
- if [ "x`stat -c %d $parent`" = "x$num" ] ; then : ; else
- # $parent is another filesystem; we found it.
- break
- fi
- if [ "x$dir" = "x/" ] ; then
- # / is our root.
- break
- fi
- dir=$parent
- done
-
- # This function never prints trailing slashes (so that its output can be
- # appended a slash unconditionally). Each slash in $dir is considered a
- # preceding slash, and therefore the root directory is an empty string.
- if [ "$dir" = "/" ] ; then
- dir=""
- fi
-
- # XXX: This fails if $dir contains ','.
- path=`echo "$path" | sed -e "s,^$dir,,g"` || return 1
-
- case "`uname 2>/dev/null`" in
- CYGWIN*)
- # Cygwin: Check if regular or emulated mount.
- if [ -z "$dir" ] || [ "`stat -c %D "$dir/.."`" != 620000 ] ; then
- # Reached some mount point not below /cygdrive.
- # GRUB does not know Cygwin's emulated mounts,
- # convert to Win32 path and remove drive letter.
- path=`cygpath -m "$path" | sed -n 's,^[A-Za-z]:,,p'`
- test ! -z "$path" || return 1
- fi ;;
- esac
-
- echo "$path"
-}
-
-is_path_readable_by_grub ()
-{
- path=$1
-
- # abort if path doesn't exist
- if test -e $path ; then : ;else
- return 1
- fi
-
- # abort if file is in a filesystem we can't read
- if ${grub_probe} -t fs $path > /dev/null 2>&1 ; then : ; else
- return 1
- fi
-
- return 0
-}
-
-convert_system_path_to_grub_path ()
-{
- path=$1
-
- echo "Warning: convert_system_path_to_grub_path() is deprecated. Use prepare_grub_to_access_device() instead." >&2
-
- # abort if GRUB can't access the path
- if is_path_readable_by_grub ${path} ; then : ; else
- return 1
- fi
-
- if drive=`${grub_probe} -t drive $path` ; then : ; else
- return 1
- fi
-
- if relative_path=`make_system_path_relative_to_its_root $path` ; then : ; else
- return 1
- fi
-
- echo ${drive}${relative_path}
-}
-
-prepare_grub_to_access_device ()
-{
- device=$1
-
- # Abstraction modules aren't auto-loaded.
- abstraction="`${grub_probe} --device ${device} --target=abstraction`"
- if [ "x${abstraction}" = "x" ] ; then : ; else
- echo "insmod ${abstraction}"
- fi
-
- # If there's a filesystem UUID that GRUB is capable of identifying, use it;
- # otherwise set root as per value in device.map.
- echo "set root=`${grub_probe} --device ${device} --target=drive`"
- if fs_uuid="`${grub_probe} --device ${device} --target=fs_uuid 2> /dev/null`" ; then
- echo "search --fs-uuid --set ${fs_uuid}"
- fi
-}
-
-font_path ()
-{
- for dir in ${pkgdatadir} /boot/grub /usr/share/grub ; do
- # FIXME: We prefer ascii because loading complete fonts is too slow (and
- # we don't yet provide the gettext magic that would make unicode useful).
- for basename in ascii unicode unifont ; do
- path="${dir}/${basename}.pff"
- if is_path_readable_by_grub ${path} > /dev/null ; then
- echo "${path}"
- return 0
- fi
- done
- done
-
- return 1
-}
+libdir=@libdir@
-grub_file_is_not_garbage ()
-{
- if test -f "$1" ; then
- case "$1" in
- *.dpkg-dist|*.dpkg-old|*.dpkg-tmp) return 1 ;; # debian dpkg
- esac
- else
- return 1
- fi
- return 0
-}
+echo "warning: this file is deprecated, use grub-mkconfig_lib instead" >&2
+. ${libdir}/grub/grub-mkconfig_lib