grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

ping (update-grub2)


From: Robert Millan
Subject: ping (update-grub2)
Date: Mon, 27 Nov 2006 18:00:16 +0100
User-agent: Mutt/1.5.13 (2006-08-11)

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 address@hidden  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
> address@hidden
> http://lists.gnu.org/mailman/listinfo/grub-devel


-- 
Robert Millan

My spam trap is address@hidden  Note: this address is only intended for
spam harvesters.  Writing to it will get you added to my black list.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]