From: Felix Zielcke <fzielcke@z-51.de>
To: The development of GRUB 2 <grub-devel@gnu.org>
Subject: Re: [RFC] rename update-grub to update-grubcfg
Date: Mon, 15 Sep 2008 19:56:23 +0200 [thread overview]
Message-ID: <1221501383.4278.2.camel@fz.local> (raw)
In-Reply-To: <20080904194559.GG9133@thorin>
[-- Attachment #1: Type: text/plain, Size: 487 bytes --]
Am Donnerstag, den 04.09.2008, 21:45 +0200 schrieb Robert Millan:
>
> Since we're going for a change, why not fix the CLI while at it?
>
> It'd be much more flexible and consistent if the command was meant to
> *generate* a grub.cfg rather than update the canonical /boot/grub/grub.cfg.
>
Attached is now a patch which renames it to grub-mkconf and prints it to
stdout instead of grub.cfg file.
I kept the Found kernel/initrd etc. stuff to stderr, but maybe this
should be removed ?
[-- Attachment #2: mkconf.diff --]
[-- Type: text/x-patch, Size: 16464 bytes --]
008-09-15 Felix Zielcke <fzielcke@z-51.de>
* util/update-grub_lib.in: Rename to ...
* util/grub-mkconfig_lib.in: ... this. Update all users.
* util/update-grub.in: Rename to ...
* util/grub-mkconf.in: ... this. Update all users. Print
generated config to stdout.
(update_grub_dir): Rename to ...
(grub_mkconf_dir): ... this.
* conf/common.rmk (update-grub): Rename to ...
(grub-mkconf): ... this.
(update-grub_lib): Rename to ...
(grub-mkconf_lib): ... this.
(update-grub_SCRIPTS): Rename to ...
(grub-mkconf_SCRIPTS): ... this. Update all users.
(update-grub_DATA): Rename to ...
(grub-mkconf_DATA): ... this.
Index: Makefile.in
===================================================================
--- Makefile.in (revision 1863)
+++ Makefile.in (working copy)
@@ -108,7 +108,7 @@ PKGLIB = $(pkglib_IMAGES) $(pkglib_MODUL
$(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-mkconf_SCRIPTS)
CLEANFILES =
MOSTLYCLEANFILES =
@@ -209,12 +209,12 @@ install-local: all
$(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-mkconf_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-mkconf_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; \
@@ -249,7 +249,7 @@ uninstall:
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-mkconf_SCRIPTS) $(grub-mkconf_DATA)'; for file in $$list; do \
dest="`echo $$file | sed 's,.*/,,' | sed '$(transform)'`"; \
rm -f $(DESTDIR)$(sysconfdir)/grub.d/$$dest; \
done
Index: conf/common.rmk
===================================================================
--- conf/common.rmk (revision 1863)
+++ conf/common.rmk (working copy)
@@ -115,30 +115,30 @@ endif
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-mkconf
+grub-mkconf: util/grub-mkconf.in config.status
./config.status --file=$@:$<
chmod +x $@
-sbin_SCRIPTS += update-grub
-CLEANFILES += update-grub
+sbin_SCRIPTS += grub-mkconf
+CLEANFILES += grub-mkconf
-update-grub_lib: util/update-grub_lib.in config.status
+grub-mkconf_lib: util/grub-mkconf_lib.in config.status
./config.status --file=$@:$<
chmod +x $@
-lib_DATA += update-grub_lib
-CLEANFILES += update-grub_lib
+lib_DATA += grub-mkconf_lib
+CLEANFILES += grub-mkconf_lib
%: 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-mkconf_SCRIPTS = 00_header 10_linux 10_hurd 30_os-prober 40_custom
ifeq ($(target_os), cygwin)
-update-grub_SCRIPTS += 10_windows
+grub-mkconf_SCRIPTS += 10_windows
endif
-CLEANFILES += $(update-grub_SCRIPTS)
+CLEANFILES += $(grub-mkconf_SCRIPTS)
-update-grub_DATA += util/grub.d/README
+grub-mkconf_DATA += util/grub.d/README
# Filing systems.
Index: util/grub-mkconf.in
===================================================================
--- util/grub-mkconf.in (revision 1863)
+++ util/grub-mkconf.in (working copy)
@@ -25,7 +25,7 @@ libdir=@libdir@
sysconfdir=@sysconfdir@
grub_prefix=`echo /boot/grub | sed ${transform}`
grub_cfg=${grub_prefix}/grub.cfg
-update_grub_dir=${sysconfdir}/grub.d
+grub_mkconf_dir=${sysconfdir}/grub.d
grub_mkdevicemap=${sbindir}/`echo grub-mkdevicemap | sed ${transform}`
grub_probe=${sbindir}/`echo grub-probe | sed ${transform}`
@@ -165,14 +165,7 @@ export GRUB_DEVICE GRUB_DEVICE_UUID GRUB
# 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
-
-echo "Updating ${grub_cfg} ..." >&2
+echo "Generating grub.cfg ..." >&2
cat << EOF
#
@@ -183,7 +176,7 @@ cat << EOF
#
EOF
-for i in ${update_grub_dir}/* ; do
+for i in ${grub_mkconf_dir}/* ; do
case "$i" in
# emacsen backup files. FIXME: support other editors
*~) ;;
@@ -198,7 +191,4 @@ for i in ${update_grub_dir}/* ; do
esac
done
-# none of the children aborted with error, install the new grub.cfg
-mv -f ${grub_cfg}.new ${grub_cfg}
-
echo "done" >&2
Property changes on: util/grub-mkconf.in
___________________________________________________________________
Added: svn:mergeinfo
Index: util/update-grub.in
===================================================================
--- util/update-grub.in (revision 1863)
+++ util/update-grub.in (working copy)
@@ -1,204 +0,0 @@
-#! /bin/sh -e
-
-# Generate grub.cfg by inspecting /boot contents.
-# Copyright (C) 2006,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@
-sbindir=@sbindir@
-libdir=@libdir@
-sysconfdir=@sysconfdir@
-grub_prefix=`echo /boot/grub | sed ${transform}`
-grub_cfg=${grub_prefix}/grub.cfg
-update_grub_dir=${sysconfdir}/grub.d
-
-grub_mkdevicemap=${sbindir}/`echo grub-mkdevicemap | sed ${transform}`
-grub_probe=${sbindir}/`echo grub-probe | sed ${transform}`
-
-# Usage: usage
-# Print the usage.
-usage () {
- cat <<EOF
-Usage: $0 [OPTION]
-Generate /boot/grub/grub.cfg
-
- -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
-}
-
-# Check the arguments.
-for option in "$@"; do
- case "$option" in
- -h | --help)
- usage
- exit 0 ;;
- -v | --version)
- echo "$0 (GNU GRUB ${PACKAGE_VERSION})"
- exit 0 ;;
- -y)
- echo "$0: warning: Ignoring -y option (no longer needed)." >&2
- ;;
- -*)
- echo "Unrecognized option \`$option'" 1>&2
- usage
- exit 1
- ;;
- esac
-done
-
-. ${libdir}/grub/update-grub_lib
-
-if [ "x$EUID" = "x" ] ; then
- EUID=`id -u`
-fi
-
-if [ "$EUID" != 0 ] ; then
- root=f
- case "`uname 2>/dev/null`" in
- CYGWIN*)
- # Cygwin: Assume root if member of admin group
- for g in `id -G 2>/dev/null` ; do
- case $g in
- 0|544) root=t ;;
- esac
- done ;;
- esac
- if [ $root != t ] ; then
- echo "$0: You must run this as root" >&2
- exit 1
- fi
-fi
-
-set $grub_mkdevicemap dummy
-if test -f "$1"; then
- :
-else
- echo "$1: Not found." 1>&2
- exit 1
-fi
-
-set $grub_probe dummy
-if test -f "$1"; then
- :
-else
- echo "$1: Not found." 1>&2
- exit 1
-fi
-
-mkdir -p ${grub_prefix}
-
-if test -e ${grub_prefix}/device.map ; then : ; else
- grub-mkdevicemap
-fi
-
-# Device containing our userland. Typically used for root= parameter.
-GRUB_DEVICE="`${grub_probe} --target=device /`"
-GRUB_DEVICE_UUID="`${grub_probe} --device ${GRUB_DEVICE} --target=fs_uuid 2> /dev/null`" || true
-
-# Device containing our /boot partition. Usually the same as GRUB_DEVICE.
-GRUB_DEVICE_BOOT="`${grub_probe} --target=device /boot`"
-GRUB_DEVICE_BOOT_UUID="`${grub_probe} --device ${GRUB_DEVICE_BOOT} --target=fs_uuid 2> /dev/null`" || true
-
-# Filesystem for the device containing our userland. Used for stuff like
-# choosing Hurd filesystem module.
-GRUB_FS="`${grub_probe} --target=fs / 2> /dev/null || echo unknown`"
-
-if test -f ${sysconfdir}/default/grub ; then
- . ${sysconfdir}/default/grub
-fi
-
-case x${GRUB_TERMINAL} in
- x)
- # If this platform supports gfxterm, try to use it.
- if test -e ${grub_prefix}/gfxterm.mod ; then
- GRUB_TERMINAL=gfxterm
- fi
- ;;
- xconsole | xserial | xofconsole | xgfxterm) ;;
- *) echo "Invalid terminal \"${GRUB_TERMINAL}\"" >&2 ; exit 1 ;;
-esac
-
-# check for terminals that require fonts
-case ${GRUB_TERMINAL} in
- gfxterm)
- if path=`font_path` ; then
- GRUB_FONT_PATH="${path}"
- else
- # fallback to the native terminal for this platform
- unset GRUB_TERMINAL
- fi
- ;;
-esac
-
-# does our terminal support utf-8 ?
-case ${GRUB_TERMINAL} in
- gfxterm) ;;
- *)
- # make sure all our children behave in conformance with ascii..
- export LANG=C
- ;;
-esac
-
-# These are defined in this script, export them here so that user can
-# override them.
-export GRUB_DEVICE GRUB_DEVICE_UUID GRUB_DEVICE_BOOT GRUB_DEVICE_BOOT_UUID GRUB_FS GRUB_FONT_PATH GRUB_PRELOAD_MODULES
-
-# 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
-
-echo "Updating ${grub_cfg} ..." >&2
-
-cat << EOF
-#
-# DO NOT EDIT THIS FILE
-#
-# It is automatically generated by $0 using templates
-# from ${update_grub_dir} and settings from ${sysconfdir}/default/grub
-#
-EOF
-
-for i in ${update_grub_dir}/* ; do
- case "$i" in
- # emacsen backup files. FIXME: support other editors
- *~) ;;
- *)
- if grub_file_is_not_garbage "$i" && test -x "$i" ; then
- echo
- echo "### BEGIN $i ###"
- "$i"
- echo "### END $i ###"
- fi
- ;;
- esac
-done
-
-# none of the children aborted with error, install the new grub.cfg
-mv -f ${grub_cfg}.new ${grub_cfg}
-
-echo "done" >&2
Index: util/grub-mkconf_lib.in
===================================================================
--- util/grub-mkconf_lib.in (revision 1863)
+++ util/grub-mkconf_lib.in (working copy)
@@ -1,4 +1,4 @@
-# Helper library for update-grub
+# Helper library for grub-mkconf
# Copyright (C) 2007,2008 Free Software Foundation, Inc.
#
# GRUB is free software: you can redistribute it and/or modify
Property changes on: util/grub-mkconf_lib.in
___________________________________________________________________
Added: svn:mergeinfo
Index: util/update-grub_lib.in
===================================================================
--- util/update-grub_lib.in (revision 1863)
+++ util/update-grub_lib.in (working copy)
@@ -1,173 +0,0 @@
-# Helper library for update-grub
-# 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
-}
next prev parent reply other threads:[~2008-09-15 17:58 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-09-04 12:22 [RFC] rename update-grub to update-grubcfg Felix Zielcke
2008-09-04 13:56 ` Pavel Roskin
2008-09-04 17:38 ` Vesa Jääskeläinen
2008-09-04 17:50 ` Felix Zielcke
2008-09-04 19:45 ` Robert Millan
2008-09-15 17:56 ` Felix Zielcke [this message]
2008-09-15 18:14 ` Vesa Jääskeläinen
2008-09-17 13:56 ` Robert Millan
2008-09-17 14:31 ` Vesa Jääskeläinen
2008-09-17 15:24 ` Felix Zielcke
2008-09-24 9:49 ` Robert Millan
2008-09-24 11:04 ` Felix Zielcke
2008-09-24 13:22 ` Robert Millan
2008-09-24 13:34 ` Felix Zielcke
2008-09-24 13:54 ` Robert Millan
2008-09-29 14:57 ` Felix Zielcke
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1221501383.4278.2.camel@fz.local \
--to=fzielcke@z-51.de \
--cc=grub-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.