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