ping (update-grub2)

Jason Thomas jason at debian.org
Mon Nov 27 22:48:08 CET 2006


I think now is the time. Lets do it.

On Mon, Nov 27, 2006 at 06:00:16PM +0100, Robert Millan wrote:
> 
> No comments?  Are you interested in getting this into the main grub tree? In my
> opinion, since update-grub needs a rewrite it's a good oportunity to merge this
> now and unify grub.cfg generation across distributions (something that wasn't
> possible with the old update-grub because of copyright issues).
> 
> That said, if you don't like the idea then we could proceed adding it in debian,
> but that might close the door to merging in the future (maintaining the script
> in debian ourselves implies accepting contributions from many people without any
> paperwork arrangements).
> 
> On Sun, Oct 15, 2006 at 12:18:42PM +0200, Robert Millan wrote:
> > 
> > Hi there,
> > 
> > This is my proposal for a new dessign in update-grub.  As you might know,
> > update-grub is a script used in Debian to generate GRUB config file.  Over time,
> > we've found that the monolithic dessign of that script made it difficult to
> > maintain and extend, and it ultimately has become bloated.  I'm redessigning it
> > to be simple, modular and easily extensible.
> > 
> > With this work, we solve another problem: the copyright for original update-grub
> > was held by several people and it was too difficult to attain the paperwork FSF
> > projects require for submitting the script to you.
> > 
> > The script I'm attaching is mostly meant as proof of concept to show the
> > proposed framework for generating the config file and allowing third-party apps
> > (memtest86, etc) to hook their stuff in.
> > 
> > Please send me your feedback and tell wether you like it.  I think it'd be very
> > good if a unified solution for this were provided from GRUB upstream, instead of
> > each distributor cooking up their own.
> > 
> > -- 
> > Robert Millan
> > 
> > My spam trap is honeypot at aybabtu.com.  Note: this address is only intended for
> > spam harvesters.  Writing to it will get you added to my black list.
> 
> > diff -Nur empty/update-grub update-grub/update-grub
> > --- empty/update-grub	1970-01-01 01:00:00.000000000 +0100
> > +++ update-grub/update-grub	2006-10-15 00:49:37.000000000 +0200
> > @@ -0,0 +1,77 @@
> > +#! /bin/bash -e
> > +
> > +# Generate grub.cfg by inspecting /boot contents.
> > +# 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.
> > +
> > +grub_prefix=/boot/grub
> > +grub_cfg=${grub_prefix}/grub.cfg
> > +update_grub_dir=/etc/update-grub.d
> > +test_mode=false
> > +
> > +if [ "$UID" != 0 ] ; then
> > +  echo "$0: You must run this as root"
> > +  exit 1
> > +fi
> > +
> > +if [ "$1" == "-y" ] ; then
> > +  echo "$0: warning: Ignoring -y option (no longer needed)."
> > +fi
> > +
> > +if ! test -d ${update_grub_dir} && test -d ./update-grub.d ; then
> > +  update_grub_dir=./update-grub.d
> > +  test_mode=true
> > +fi
> > +
> > +if ! which grub-probe > /dev/null ; then
> > +  echo "$0: grub-probe not found in PATH."
> > +  exit 1
> > +fi
> > +
> > +if ! ${test_mode} ; then
> > +  exec > ${grub_cfg}.new
> > +fi
> > +
> > +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}`"
> > +
> > +shopt -s nullglob ; for i in ${update_grub_dir}/* ; do
> > +  case $i in
> > +    # emacsen backup files. FIXME: support other editors
> > +    *~) ;;
> > +    *)
> > +      if test -x $i ; then
> > +        echo -e "\n### 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
> > +  exec mv ${grub_cfg}{.new,}
> > +fi
> > diff -Nur empty/update-grub.d/00_header update-grub/update-grub.d/00_header
> > --- empty/update-grub.d/00_header	1970-01-01 01:00:00.000000000 +0100
> > +++ update-grub/update-grub.d/00_header	2006-10-15 11:42:32.000000000 +0200
> > @@ -0,0 +1,28 @@
> > +#! /bin/bash -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
> > diff -Nur empty/update-grub.d/10_hurd update-grub/update-grub.d/10_hurd
> > --- empty/update-grub.d/10_hurd	1970-01-01 01:00:00.000000000 +0100
> > +++ update-grub/update-grub.d/10_hurd	2006-10-15 11:42:21.000000000 +0200
> > @@ -0,0 +1,65 @@
> > +#! /bin/bash -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.
> > +
> > +# FIXME: add l4 here?
> > +kernel=
> > +for i in /boot/gnumach{.gz,} ; 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
> > +    at_least_one=true
> > +  else
> > +    all_of_them=false
> > +  fi
> > +done
> > +
> > +if ! ${at_least_one} ; then
> > +  # no hurd here, aborting
> > +  exit 0
> > +fi
> > +
> > +if ! ${all_of_them} || ! test -e /lib/ld.so.1 ; then
> > +  echo "Some Hurd stuff found, but not enough to boot."
> > +  exit 1
> > +fi
> > +
> > +cat << EOF
> > +menuentry "GNU" {
> > +	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 empty/update-grub.d/10_linux update-grub/update-grub.d/10_linux
> > --- empty/update-grub.d/10_linux	1970-01-01 01:00:00.000000000 +0100
> > +++ update-grub/update-grub.d/10_linux	2006-10-15 11:42:25.000000000 +0200
> > @@ -0,0 +1,36 @@
> > +#! /bin/bash -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.
> > +
> > +shopt -s nullglob
> > +
> > +for linux in /{boot/,}vmlinuz-* ; do
> > +  version=`echo $linux | sed -e "s,.*/[^0-9]*-,,g"`
> > +  basedir=`echo $linux | sed -e "s,/[^/]*$,,g"`
> > +  cat << EOF
> > +menuentry "GNU/Linux, linux ${version}" {
> > +	linux	${linux} root=${GRUB_DEVICE} ro 
> > +EOF
> > +  if test -e /boot/initrd.img-${version} ; then cat << EOF
> > +	initrd	${dir}/initrd.img-${version}
> > +EOF
> > +  fi
> > +  cat << EOF
> > +}
> > +EOF
> > +done
> > diff -Nur empty/update-grub.d/README update-grub/update-grub.d/README
> > --- empty/update-grub.d/README	1970-01-01 01:00:00.000000000 +0100
> > +++ update-grub/update-grub.d/README	2006-10-15 01:09:12.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 by editting 00_header.
> 
> > _______________________________________________
> > Grub-devel mailing list
> > Grub-devel at gnu.org
> > http://lists.gnu.org/mailman/listinfo/grub-devel
> 
> 
> -- 
> Robert Millan
> 
> My spam trap is honeypot at aybabtu.com.  Note: this address is only intended for
> spam harvesters.  Writing to it will get you added to my black list.



More information about the Pkg-grub-devel mailing list