ping (update-grub2)

Robert Millan rmh at aybabtu.com
Mon Nov 27 18:00:16 CET 2006


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