From: Robert Millan <rmh@aybabtu.com>
To: The development of GRUB 2 <grub-devel@gnu.org>
Subject: Re: update-grub2 patch
Date: Mon, 30 Apr 2007 01:22:51 +0200 [thread overview]
Message-ID: <20070429232251.GA2611@aragorn> (raw)
In-Reply-To: <200704211538.38367.okuji@enbug.org>
[-- Attachment #1: Type: text/plain, Size: 709 bytes --]
On Sat, Apr 21, 2007 at 03:38:38PM +0200, Yoshinori K. Okuji wrote:
> On Tuesday 17 April 2007 14:49, Robert Millan wrote:
> > Here's my patch. Let me know if it's ok for commit.
>
> To include this in the official repository, you need to take care about the
> portability. [...]
I ported it to bourne shell. It's tested and known to work with dash as
/bin/sh. I think this should address your concern.
My new patch also arranges the logic for generating update-grub components
to make it more similar to how grub-install is handled.
--
Robert Millan
My spam trap is honeypot@aybabtu.com. Note: this address is only intended
for spam harvesters. Writing to it will get you added to my black list.
[-- Attachment #2: update-grub2.diff --]
[-- Type: text/x-diff, Size: 12986 bytes --]
2007-04-30 Robert Millan <rmh@aybabtu.com>
* DISTLIST: Add util/update-grub.in, util/grub.d/00_header.in,
util/grub.d/10_hurd.in, util/grub.d/10_linux.in and util/grub.d/README.
* Makefile.in: Build update-grub_SCRIPTS. Install update-grub_SCRIPTS
and update-grub_DATA.
* conf/common.rmk: Build and install update-grub components.
* conf/common.mk: Regenerate.
* util/update-grub.in: New. Core of update-grub.
* util/grub.d/00_header.in: New. Generates grub.cfg header.
* util/grub.d/10_hurd.in: New. Generates boot entries for the Hurd.
* util/grub.d/10_linux.in: New. Generates boot entries for Linux.
* util/grub.d/README: New. Document grub.d directory layout.
Index: DISTLIST
===================================================================
RCS file: /sources/grub/grub2/DISTLIST,v
retrieving revision 1.38
diff -u -r1.38 DISTLIST
--- DISTLIST 14 Oct 2006 18:59:34 -0000 1.38
+++ DISTLIST 29 Apr 2007 23:00:30 -0000
@@ -258,6 +258,11 @@
util/raid.c
util/resolve.c
util/unifont2pff.rb
+util/update-grub.in
+util/grub.d/00_header.in
+util/grub.d/10_hurd.in
+util/grub.d/10_linux.in
+util/grub.d/README
util/i386/efi/grub-mkimage.c
util/i386/pc/biosdisk.c
util/i386/pc/getroot.c
Index: Makefile.in
===================================================================
RCS file: /sources/grub/grub2/Makefile.in,v
retrieving revision 1.24
diff -u -r1.24 Makefile.in
--- Makefile.in 10 Apr 2007 21:38:26 -0000 1.24
+++ Makefile.in 29 Apr 2007 23:00:30 -0000
@@ -87,7 +87,7 @@
DATA = $(pkgdata_IMAGES) $(pkgdata_MODULES) $(pkgdata_PROGRAMS) \
$(pkgdata_DATA)
PROGRAMS = $(bin_UTILITIES) $(sbin_UTILITIES)
-SCRIPTS = $(sbin_SCRIPTS)
+SCRIPTS = $(sbin_SCRIPTS) $(update-grub_SCRIPTS)
CLEANFILES =
MOSTLYCLEANFILES =
@@ -153,6 +153,17 @@
dest="`echo $$file | sed 's,.*/,,' | sed '$(transform)'`"; \
$(INSTALL_SCRIPT) $$dir$$file $(DESTDIR)$(sbindir)/$$dest; \
done
+ $(mkinstalldirs) $(DESTDIR)$(sysconfdir)/grub.d
+ @list='$(update-grub_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 \
+ 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; \
+ done
install-strip:
$(MAKE) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" install
Index: conf/common.rmk
===================================================================
RCS file: /sources/grub/grub2/conf/common.rmk,v
retrieving revision 1.12
diff -u -r1.12 common.rmk
--- conf/common.rmk 3 Nov 2006 20:28:04 -0000 1.12
+++ conf/common.rmk 29 Apr 2007 23:00:32 -0000
@@ -18,6 +18,33 @@
rm -f $@; sh $(srcdir)/geninit.sh $(filter %.c,$^) > $@
DISTCLEANFILES += grub_emu_init.c
+# For update-grub
+update-grub: util/update-grub.in config.status
+ ./config.status --file=$@:$<
+ chmod +x $@
+sbin_SCRIPTS += update-grub
+CLEANFILES += update-grub
+
+00_header: util/grub.d/00_header.in config.status
+ ./config.status --file=$@:$<
+ chmod +x $@
+update-grub_SCRIPTS += 00_header
+CLEANFILES += 00_header
+
+10_linux: util/grub.d/10_linux.in config.status
+ ./config.status --file=$@:$<
+ chmod +x $@
+update-grub_SCRIPTS += 10_linux
+CLEANFILES += 10_linux
+
+10_hurd: util/grub.d/10_hurd.in config.status
+ ./config.status --file=$@:$<
+ chmod +x $@
+update-grub_SCRIPTS += 10_hurd
+CLEANFILES += 10_hurd
+
+update-grub_DATA += util/grub.d/README
+
# Filing systems.
pkgdata_MODULES += fshelp.mod fat.mod ufs.mod ext2.mod \
Index: util/update-grub.in
===================================================================
RCS file: util/update-grub.in
diff -N util/update-grub.in
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ util/update-grub.in 29 Apr 2007 23:00:32 -0000
@@ -0,0 +1,94 @@
+#! /bin/sh -e
+
+# Generate grub.cfg by inspecting /boot contents.
+# Copyright (C) 2006, 2007 Free Software Foundation, Inc.
+#
+# This file 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St - Suite 330, Boston, MA 02110, USA.
+
+transform="@program_transform_name@"
+
+sysconfdir=@sysconfdir@
+grub_prefix=`echo /boot/grub | sed ${transform}`
+grub_cfg=${grub_prefix}/grub.cfg
+update_grub_dir=${sysconfdir}/grub.d
+test_mode=false
+
+if test -z "$UID" ; then
+ UID=`id -u`
+fi
+
+if [ "$UID" != 0 ] ; then
+ echo "$0: You must run this as root" >&2
+ exit 1
+fi
+
+if [ "$1" = "-y" ] ; then
+ echo "$0: warning: Ignoring -y option (no longer needed)." >&2
+fi
+
+if test ! -d ${update_grub_dir} && test -d ./grub.d ; then
+ update_grub_dir=./grub.d
+ test_mode=true
+fi
+
+if which grub-probe > /dev/null ; then : ; else
+ echo "$0: grub-probe not found in PATH." >&2
+ exit 1
+fi
+
+if ${test_mode} ; then : ; else
+ exec > ${grub_cfg}.new
+ chmod 444 ${grub_cfg}.new
+fi
+
+if test -f ${sysconfdir}/default/grub ; then
+ . ${sysconfdir}/default/grub
+fi
+
+echo "Updating ${grub_cfg} ..." >&2
+
+cat << EOF
+#
+# DO NOT EDIT THIS FILE
+#
+# It is automaticaly generated by $0 using templates from ${update_grub_dir}
+#
+EOF
+
+export GRUB_DEVICE="`grub-probe --target=device ${grub_prefix}`"
+export GRUB_DRIVE="`grub-probe --target=drive ${grub_prefix}`"
+export GRUB_FS="`grub-probe --target=fs ${grub_prefix}`"
+
+for i in ${update_grub_dir}/* ; do
+ case $i in
+ # emacsen backup files. FIXME: support other editors
+ *~) ;;
+ *)
+ if 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
+if ${test_mode} ; then : ; else
+ mv ${grub_cfg}.new ${grub_cfg}
+fi
+
+echo "done" >&2
Index: util/grub.d/00_header.in
===================================================================
RCS file: util/grub.d/00_header.in
diff -N util/grub.d/00_header.in
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ util/grub.d/00_header.in 29 Apr 2007 23:00:32 -0000
@@ -0,0 +1,28 @@
+#! /bin/sh -e
+
+# update-grub helper script.
+# Copyright (C) 2006 Free Software Foundation, Inc.
+#
+# This file 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St - Suite 330, Boston, MA 02110, USA.
+
+
+if [ -z "${GRUB_DEFAULT}" ] ; then GRUB_DEFAULT=0 ; fi
+if [ -z "${GRUB_TIMEOUT}" ] ; then GRUB_TIMEOUT=5 ; fi
+
+cat << EOF
+set default=${GRUB_DEFAULT}
+set timeout=${GRUB_TIMEOUT}
+set root=${GRUB_DRIVE}
+EOF
Index: util/grub.d/10_hurd.in
===================================================================
RCS file: util/grub.d/10_hurd.in
diff -N util/grub.d/10_hurd.in
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ util/grub.d/10_hurd.in 29 Apr 2007 23:00:32 -0000
@@ -0,0 +1,72 @@
+#! /bin/sh -e
+
+# update-grub helper script.
+# Copyright (C) 2006, 2007 Free Software Foundation, Inc.
+#
+# This file 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St - Suite 330, Boston, MA 02110, USA.
+
+if test -z "${GRUB_DISTRIBUTOR}" ; then
+ OS=GNU
+else
+ OS="${GRUB_DISTRIBUTOR} GNU/Hurd"
+fi
+
+# FIXME: add l4 here?
+kernel=
+for i in /boot/gnumach.gz /boot/gnumach ; do
+ if test -e $i ; then
+ kernel=$i
+ fi
+done
+
+# FIXME: This works for ext2. For other filesystems we might need special-casing
+case "${GRUB_FS}" in
+ *fs) hurd_fs="${GRUB_FS}" ;;
+ *) hurd_fs="${GRUB_FS}fs" ;;
+esac
+
+at_least_one=false
+all_of_them=true
+for i in "${kernel}" /hurd/${hurd_fs}.static /hurd/exec ; do
+ if test -e "$i" ; then
+ echo "Found Hurd module: $i" >&2
+ at_least_one=true
+ else
+ all_of_them=false
+ fi
+done
+
+if ${at_least_one} ; then : ; else
+ # no hurd here, aborting silently
+ exit 0
+fi
+
+if ${all_of_them} && test -e /lib/ld.so.1 ; then : ; else
+ echo "Some Hurd stuff found, but not enough to boot." >&2
+ exit 1
+fi
+
+cat << EOF
+menuentry "${OS}" {
+ multiboot ${kernel} root=device:${GRUB_DEVICE}
+ module /hurd/${hurd_fs}.static --readonly \\
+ --multiboot-command-line='\${kernel-command-line}' \\
+ --host-priv-port='\${host-port}' \\
+ --device-master-port='\${device-port}' \\
+ --exec-server-task='\${exec-task}' -T typed '\${root}' \\
+ '\$(task-create)' '\$(task-resume)'
+ module /lib/ld.so.1 /hurd/exec '\$(exec-task=task-create)'
+}
+EOF
Index: util/grub.d/10_linux.in
===================================================================
RCS file: util/grub.d/10_linux.in
diff -N util/grub.d/10_linux.in
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ util/grub.d/10_linux.in 29 Apr 2007 23:00:32 -0000
@@ -0,0 +1,54 @@
+#! /bin/sh -e
+
+# update-grub helper script.
+# Copyright (C) 2006, 2007 Free Software Foundation, Inc.
+#
+# This file 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 2 of the License, or
+# (at your option) any later version.
+#
+# This program 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 this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St - Suite 330, Boston, MA 02110, USA.
+
+if [ -n "${GRUB_DISTRIBUTOR}" ] ; then GRUB_DISTRIBUTOR="${GRUB_DISTRIBUTOR} " ; fi
+
+for linux in /boot/vmlinu[xz]-* /vmlinu[xz]-* ; do
+ if test -e ${linux} ; then : ; else
+ continue
+ fi
+ echo "Found linux image: $linux" >&2
+ version=`echo $linux | sed -e "s,.*/[^0-9]*-,,g"`
+ basedir=`echo $linux | sed -e "s,/[^/]*$,,g"`
+ cat << EOF
+menuentry "${GRUB_DISTRIBUTOR}GNU/Linux, linux ${version}" {
+ linux ${linux} root=${GRUB_DEVICE} ro
+EOF
+ if test -e ${basedir}/initrd.img-${version} ; then
+ echo "Found initrd image: ${basedir}/initrd.img-${version}" >&2
+ cat << EOF
+ initrd ${basedir}/initrd.img-${version}
+EOF
+ fi
+ cat << EOF
+}
+EOF
+ cat << EOF
+menuentry "${GRUB_DISTRIBUTOR}GNU/Linux, linux ${version} (single-user mode)" {
+ linux ${linux} root=${GRUB_DEVICE} ro single
+EOF
+ if test -e ${basedir}/initrd.img-${version} ; then
+ cat << EOF
+ initrd ${basedir}/initrd.img-${version}
+EOF
+ fi
+ cat << EOF
+}
+EOF
+done
Index: util/grub.d/README
===================================================================
RCS file: util/grub.d/README
diff -N util/grub.d/README
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ util/grub.d/README 29 Apr 2007 23:00:32 -0000
@@ -0,0 +1,11 @@
+
+All executable files in this directory are processed in shell expansion order.
+
+ 00_*: Reserved for 00_header.
+ 10_*: Native boot entries.
+ 20_*: Third party apps (e.g. memtest86+).
+
+The number namespace in-between is configurable by system installer and/or
+administrator. For example, you can add an entry to boot another OS as
+01_otheros, 11_otheros, etc, depending on the position you want it to occupy in
+the menu; and then adjust the default setting via /etc/default/grub.
next prev parent reply other threads:[~2007-04-29 23:28 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-10-15 10:18 update-grub2 Robert Millan
2006-10-15 10:40 ` update-grub2 Declan Naughton
2006-10-15 11:16 ` update-grub2 Robert Millan
[not found] ` <8764elkryd.fsf@neumann.lab.ossystems.com.br>
2006-10-16 13:48 ` update-grub2 Robert Millan
2006-11-27 17:00 ` ping (update-grub2) Robert Millan
2006-11-27 22:20 ` Vincent Pelletier
2007-04-11 15:57 ` update-grub again (Re: ping (update-grub2)) Robert Millan
[not found] ` <20061127214807.GA23613@linkinnovations.com>
2006-11-28 6:32 ` ping (update-grub2) Robert Millan
2006-11-28 7:26 ` Yoshinori K. Okuji
2007-04-11 15:50 ` update-grub again (Re: ping (update-grub2)) Robert Millan
2007-04-17 12:49 ` update-grub2 patch Robert Millan
2007-04-17 13:26 ` Otavio Salvador
2007-04-21 13:38 ` Yoshinori K. Okuji
2007-04-29 23:22 ` Robert Millan [this message]
2007-05-01 20:45 ` Yoshinori K. Okuji
2007-05-02 13:31 ` Robert Millan
2007-05-02 15:35 ` Amin Azez
2007-05-03 15:48 ` Robert Millan
2007-05-03 21:44 ` Yoshinori K. Okuji
2007-05-04 7:14 ` Robert Millan
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=20070429232251.GA2611@aragorn \
--to=rmh@aybabtu.com \
--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.