All of lore.kernel.org
 help / color / mirror / Atom feed
From: Robert Millan <rmh@aybabtu.com>
To: The development of GRUB 2 <grub-devel@gnu.org>
Subject: Re: update-grub2 patch
Date: Thu, 3 May 2007 17:48:39 +0200	[thread overview]
Message-ID: <20070503154839.GA4030@aragorn> (raw)
In-Reply-To: <20070502133116.GA29394@aragorn>

[-- Attachment #1: Type: text/plain, Size: 725 bytes --]

On Wed, May 02, 2007 at 03:31:16PM +0200, Robert Millan wrote:
> > You should avoid ! in test. Use else instead.
> 
> Earlier when I read the portability document I was pointed to, I found:
> 
>   "You may use `!' with `test', but not with `if'"
> 
> Are you sure this change is required?

Well, since this is just one line, I fixed it.

Attached new patch fixes all three problems ('which', 'test !' and 'test -z|-n')
and also adds code in 00_header.in to enable gfxterm when the unicode font is
found in /boot/grub.

Let me know if everything is ok now..

-- 
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: 12917 bytes --]


2007-05-03  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.

diff -Nur grub2/conf/common.rmk grub2.update-grub/conf/common.rmk
--- grub2/conf/common.rmk	2007-05-03 17:44:05.000000000 +0200
+++ grub2.update-grub/conf/common.rmk	2007-05-03 16:53:34.000000000 +0200
@@ -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		\
diff -Nur grub2/DISTLIST grub2.update-grub/DISTLIST
--- grub2/DISTLIST	2007-05-03 17:44:05.000000000 +0200
+++ grub2.update-grub/DISTLIST	2007-05-03 16:53:34.000000000 +0200
@@ -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
diff -Nur grub2/Makefile.in grub2.update-grub/Makefile.in
--- grub2/Makefile.in	2007-05-03 17:44:05.000000000 +0200
+++ grub2.update-grub/Makefile.in	2007-05-03 16:53:34.000000000 +0200
@@ -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
diff -Nur grub2/util/grub.d/00_header.in grub2.update-grub/util/grub.d/00_header.in
--- grub2/util/grub.d/00_header.in	1970-01-01 01:00:00.000000000 +0100
+++ grub2.update-grub/util/grub.d/00_header.in	2007-05-03 17:40:42.000000000 +0200
@@ -0,0 +1,38 @@
+#! /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 [ "x${GRUB_DEFAULT}" = "x" ] ; then GRUB_DEFAULT=0 ; fi
+if [ "x${GRUB_TIMEOUT}" = "x" ] ; then GRUB_TIMEOUT=5 ; fi
+
+cat << EOF
+set default=${GRUB_DEFAULT}
+set timeout=${GRUB_TIMEOUT}
+set root=${GRUB_DRIVE}
+EOF
+
+if test -e /boot/grub/unifont.pff ; then
+  cat << EOF
+font /boot/grub/unifont.pff
+set gfxmode=640x480x32
+insmod gfxterm
+insmod vbe
+terminal gfxterm
+EOF
+fi
diff -Nur grub2/util/grub.d/10_hurd.in grub2.update-grub/util/grub.d/10_hurd.in
--- grub2/util/grub.d/10_hurd.in	1970-01-01 01:00:00.000000000 +0100
+++ grub2.update-grub/util/grub.d/10_hurd.in	2007-05-03 17:38:19.000000000 +0200
@@ -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 [ "x${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
diff -Nur grub2/util/grub.d/10_linux.in grub2.update-grub/util/grub.d/10_linux.in
--- grub2/util/grub.d/10_linux.in	1970-01-01 01:00:00.000000000 +0100
+++ grub2.update-grub/util/grub.d/10_linux.in	2007-05-03 17:40:21.000000000 +0200
@@ -0,0 +1,59 @@
+#! /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 [ "x${GRUB_DISTRIBUTOR}" = "" ] ; then
+  OS=GNU/Linux
+else
+  OS="${GRUB_DISTRIBUTOR} GNU/Linux"
+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 "${OS}, 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 "${OS}, 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
diff -Nur grub2/util/grub.d/README grub2.update-grub/util/grub.d/README
--- grub2/util/grub.d/README	1970-01-01 01:00:00.000000000 +0100
+++ grub2.update-grub/util/grub.d/README	2007-05-03 16:53:34.000000000 +0200
@@ -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.
diff -Nur grub2/util/update-grub.in grub2.update-grub/util/update-grub.in
--- grub2/util/update-grub.in	1970-01-01 01:00:00.000000000 +0100
+++ grub2.update-grub/util/update-grub.in	2007-05-03 17:42:23.000000000 +0200
@@ -0,0 +1,106 @@
+#! /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 [ "x$UID" = "x" ] ; 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} ; then : ; else
+  if test -d ./grub.d ; then
+    update_grub_dir=./grub.d
+    test_mode=true
+  fi
+fi
+
+found=false
+old_IFS="$IFS"
+IFS=:
+for i in $PATH ; do
+  if test -x "$i/grub-probe" ; then
+    found=true
+    break
+  fi
+done
+IFS="$old_IFS"
+if ${found} ; 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

  parent reply	other threads:[~2007-05-03 15:54 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
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 [this message]
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=20070503154839.GA4030@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.