All of lore.kernel.org
 help / color / mirror / Atom feed
* update-grub & Xen boot stanza generation
@ 2010-05-20 23:36 Bruce Edge
  2010-05-20 23:45 ` Seth Goldberg
  2010-05-20 23:53 ` Vladimir 'φ-coder/phcoder' Serbinenko
  0 siblings, 2 replies; 13+ messages in thread
From: Bruce Edge @ 2010-05-20 23:36 UTC (permalink / raw)
  To: grub-devel

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

Hi
Apologies in advance if this is already in the works.

I wanted to provide an etc/grub.d rule for generating boot stanzas for Xen
based systems such that it would end up in the upstream grub release.
If this conforms to the appropriate conventions, could someone possibly add
it ?

It's basically a copy of etc/grub.d/10_linux and adds checks for dom0
capable kernels. I picked "09_" as I assumed that one would want to default
to the Xen boot entry, but that may be a matter of some debate.

Thanks

-Bruce


#!/bin/bash -e
#===============================================================================
#
#          FILE:  09_xen
#
#         USAGE:  update-grub ... with this in /etc/grub.d
#
#   DESCRIPTION: Generate grub2 boot stanza for Xen systems
#                               Xen boot entries are automatically added to
grub.cfg
#                               The 09-... name prefix puts the Xen boot
entries before
#                               the linux kernel entries
#
#       OPTIONS:  ---
#  REQUIREMENTS:  --- grub2, Xen hypervisor
#          BUGS:  --- probably
#         NOTES:  --- Copied from 10_linux with a few hacks to make ir work
for Xen.
#                                       Incorporated suggestions to only do
this for valid dom0 kernels
#        AUTHOR:  Bruce Edge (BRE), bruce.edge@lsi.com
#       COMPANY:  LSI
#       VERSION:  1.0
#       CREATED:  05/19/2010 02:32:34 PM PDT
#      REVISION:  ---
#===============================================================================

prefix=/usr
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
. ${libdir}/grub/update-grub_lib

if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then
  OS=GNU/Linux
else
  OS="${GRUB_DISTRIBUTOR}"
fi

# Source grub defaults
. /etc/default/grub

# loop-AES arranges things so that /dev/loop/X can be our root device, but
# the initrds that Linux uses don't like that.
case ${GRUB_DEVICE} in
  /dev/loop/*|/dev/loop[0-9])
    GRUB_DEVICE=`losetup ${GRUB_DEVICE} | sed -e
"s/^[^(]*(\([^)]\+\)).*/\1/"`
  ;;
esac

if [ "x${GRUB_DEVICE_UUID}" = "x" ] || [ "x${GRUB_DISABLE_LINUX_UUID}" =
"xtrue" ] \
    || ! test -e "/dev/disk/by-uuid/${GRUB_DEVICE_UUID}" ; then
  LINUX_ROOT_DEVICE=${GRUB_DEVICE}
else
  LINUX_ROOT_DEVICE=UUID=${GRUB_DEVICE_UUID}
fi

test_gt ()
{
  local a=`echo $1 | sed -e
"s,.*/vmlinu[zx]-,,g;s/[._-]\(pre\|rc\|test\|git\|old\)/~\1/g"`
  local b=`echo $2 | sed -e
"s,.*/vmlinu[zx]-,,g;s/[._-]\(pre\|rc\|test\|git\|old\)/~\1/g"`
  if [ "x$b" = "x" ] ; then
    return 0
  fi
  dpkg --compare-versions "$a" gt "$b"
  return $?
}

find_latest ()
{
  local a=""
  for i in $@ ; do
    if test_gt "$i" "$a" ; then
      a="$i"
    fi
  done
  echo "$a"
}

list=`for i in /boot/vmlinu[xz]-* /vmlinu[xz]-* ; do
        if grub_file_is_not_garbage "$i" && grep -q 'DOM0=y'
${i/vmlinu[xz]/config} ; then echo -n "$i " ; fi
      done`

while [ "x$list" != "x" ] ; do
  linux=`find_latest $list`
  echo "Found linux image: $linux" >&2
  basename=`basename $linux`
  dirname=`dirname $linux`
  rel_dirname=`make_system_path_relative_to_its_root $dirname`
  version=`echo $basename | sed -e "s,^[^0-9]*-,,g"`
  alt_version=`echo $version | sed -e "s,\.old$,,g"`
  linux_root_device_thisversion="${LINUX_ROOT_DEVICE}"

  initrd=
  for i in "initrd.img-${version}" "initrd-${version}.img" \
           "initrd.img-${alt_version}" "initrd-${alt_version}.img"; do
    if test -e "${dirname}/${i}" ; then
      initrd="$i"
      break
    fi
  done
  if test -n "${initrd}" ; then
    echo "Found initrd image: ${dirname}/${initrd}" >&2
  else
    # "UUID=" magic is parsed by initrds.  Since there's no initrd, it can't
work here.
    linux_root_device_thisversion=${GRUB_DEVICE}
  fi

  cat << EOF
  insmod lvm
  set root=(system-dom0_0)
menuentry "Xen ${OS}, linux ${version}" {
        multiboot dummy=dummy /boot/xen.gz $GRUB_CMDLINE_XEN_DEFAULT
        module ${rel_dirname}/${basename}
root=${linux_root_device_thisversion} $GRUB_CMDLINE_LINUX_DEFAULT
EOF
  if test -n "${initrd}" ; then
    cat << EOF
        module ${rel_dirname}/${initrd} ${rel_dirname}/${initrd}
EOF
  fi
  cat << EOF
}
EOF

  list=`echo $list | tr ' ' '\n' | grep -vx $linux | tr '\n' ' '`
done

[-- Attachment #2: Type: text/html, Size: 6222 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: update-grub & Xen boot stanza generation
  2010-05-20 23:36 update-grub & Xen boot stanza generation Bruce Edge
@ 2010-05-20 23:45 ` Seth Goldberg
  2010-05-20 23:55   ` Bruce Edge
  2010-05-20 23:53 ` Vladimir 'φ-coder/phcoder' Serbinenko
  1 sibling, 1 reply; 13+ messages in thread
From: Seth Goldberg @ 2010-05-20 23:45 UTC (permalink / raw)
  To: The development of GNU GRUB


  What is this 'dummy=dummy' on the multiboot line?

  --S

Quoting Bruce Edge, who wrote the following on Thu, 20 May 2010:

> Hi
> Apologies in advance if this is already in the works.
>
> I wanted to provide an etc/grub.d rule for generating boot stanzas for Xen
> based systems such that it would end up in the upstream grub release.
> If this conforms to the appropriate conventions, could someone possibly add
> it ?
>
> It's basically a copy of etc/grub.d/10_linux and adds checks for dom0
> capable kernels. I picked "09_" as I assumed that one would want to default
> to the Xen boot entry, but that may be a matter of some debate.
>
> Thanks
>
> -Bruce
>
>
> #!/bin/bash -e
> #===============================================================================
> #
> #          FILE:  09_xen
> #
> #         USAGE:  update-grub ... with this in /etc/grub.d
> #
> #   DESCRIPTION: Generate grub2 boot stanza for Xen systems
> #                               Xen boot entries are automatically added to
> grub.cfg
> #                               The 09-... name prefix puts the Xen boot
> entries before
> #                               the linux kernel entries
> #
> #       OPTIONS:  ---
> #  REQUIREMENTS:  --- grub2, Xen hypervisor
> #          BUGS:  --- probably
> #         NOTES:  --- Copied from 10_linux with a few hacks to make ir work
> for Xen.
> #                                       Incorporated suggestions to only do
> this for valid dom0 kernels
> #        AUTHOR:  Bruce Edge (BRE), bruce.edge@lsi.com
> #       COMPANY:  LSI
> #       VERSION:  1.0
> #       CREATED:  05/19/2010 02:32:34 PM PDT
> #      REVISION:  ---
> #===============================================================================
>
> prefix=/usr
> exec_prefix=${prefix}
> libdir=${exec_prefix}/lib
> . ${libdir}/grub/update-grub_lib
>
> if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then
>  OS=GNU/Linux
> else
>  OS="${GRUB_DISTRIBUTOR}"
> fi
>
> # Source grub defaults
> . /etc/default/grub
>
> # loop-AES arranges things so that /dev/loop/X can be our root device, but
> # the initrds that Linux uses don't like that.
> case ${GRUB_DEVICE} in
>  /dev/loop/*|/dev/loop[0-9])
>    GRUB_DEVICE=`losetup ${GRUB_DEVICE} | sed -e
> "s/^[^(]*(\([^)]\+\)).*/\1/"`
>  ;;
> esac
>
> if [ "x${GRUB_DEVICE_UUID}" = "x" ] || [ "x${GRUB_DISABLE_LINUX_UUID}" =
> "xtrue" ] \
>    || ! test -e "/dev/disk/by-uuid/${GRUB_DEVICE_UUID}" ; then
>  LINUX_ROOT_DEVICE=${GRUB_DEVICE}
> else
>  LINUX_ROOT_DEVICE=UUID=${GRUB_DEVICE_UUID}
> fi
>
> test_gt ()
> {
>  local a=`echo $1 | sed -e
> "s,.*/vmlinu[zx]-,,g;s/[._-]\(pre\|rc\|test\|git\|old\)/~\1/g"`
>  local b=`echo $2 | sed -e
> "s,.*/vmlinu[zx]-,,g;s/[._-]\(pre\|rc\|test\|git\|old\)/~\1/g"`
>  if [ "x$b" = "x" ] ; then
>    return 0
>  fi
>  dpkg --compare-versions "$a" gt "$b"
>  return $?
> }
>
> find_latest ()
> {
>  local a=""
>  for i in $@ ; do
>    if test_gt "$i" "$a" ; then
>      a="$i"
>    fi
>  done
>  echo "$a"
> }
>
> list=`for i in /boot/vmlinu[xz]-* /vmlinu[xz]-* ; do
>        if grub_file_is_not_garbage "$i" && grep -q 'DOM0=y'
> ${i/vmlinu[xz]/config} ; then echo -n "$i " ; fi
>      done`
>
> while [ "x$list" != "x" ] ; do
>  linux=`find_latest $list`
>  echo "Found linux image: $linux" >&2
>  basename=`basename $linux`
>  dirname=`dirname $linux`
>  rel_dirname=`make_system_path_relative_to_its_root $dirname`
>  version=`echo $basename | sed -e "s,^[^0-9]*-,,g"`
>  alt_version=`echo $version | sed -e "s,\.old$,,g"`
>  linux_root_device_thisversion="${LINUX_ROOT_DEVICE}"
>
>  initrd=
>  for i in "initrd.img-${version}" "initrd-${version}.img" \
>           "initrd.img-${alt_version}" "initrd-${alt_version}.img"; do
>    if test -e "${dirname}/${i}" ; then
>      initrd="$i"
>      break
>    fi
>  done
>  if test -n "${initrd}" ; then
>    echo "Found initrd image: ${dirname}/${initrd}" >&2
>  else
>    # "UUID=" magic is parsed by initrds.  Since there's no initrd, it can't
> work here.
>    linux_root_device_thisversion=${GRUB_DEVICE}
>  fi
>
>  cat << EOF
>  insmod lvm
>  set root=(system-dom0_0)
> menuentry "Xen ${OS}, linux ${version}" {
>        multiboot dummy=dummy /boot/xen.gz $GRUB_CMDLINE_XEN_DEFAULT
>        module ${rel_dirname}/${basename}
> root=${linux_root_device_thisversion} $GRUB_CMDLINE_LINUX_DEFAULT
> EOF
>  if test -n "${initrd}" ; then
>    cat << EOF
>        module ${rel_dirname}/${initrd} ${rel_dirname}/${initrd}
> EOF
>  fi
>  cat << EOF
> }
> EOF
>
>  list=`echo $list | tr ' ' '\n' | grep -vx $linux | tr '\n' ' '`
> done
>


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: update-grub & Xen boot stanza generation
  2010-05-20 23:36 update-grub & Xen boot stanza generation Bruce Edge
  2010-05-20 23:45 ` Seth Goldberg
@ 2010-05-20 23:53 ` Vladimir 'φ-coder/phcoder' Serbinenko
  2010-05-20 23:57   ` Bruce Edge
  1 sibling, 1 reply; 13+ messages in thread
From: Vladimir 'φ-coder/phcoder' Serbinenko @ 2010-05-20 23:53 UTC (permalink / raw)
  To: The development of GNU GRUB

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

Bruce Edge wrote:
> Hi
> Apologies in advance if this is already in the works.
>
> I wanted to provide an etc/grub.d rule for generating boot stanzas for
> Xen based systems such that it would end up in the upstream grub release.
> If this conforms to the appropriate conventions, could someone
> possibly add it ?
>
> It's basically a copy of etc/grub.d/10_linux and adds checks for dom0
> capable kernels. I picked "09_" as I assumed that one would want to
> default to the Xen boot entry, but that may be a matter of some debate.
>
This is aready worked on but the problem is that it generates too much
entries. If you have 5 different versions of hypervisor and 10 different
kernels you have 100 entries.
> Thanks
>
> -Bruce
>
>
> #!/bin/bash -e
> #===============================================================================
> #
> #          FILE:  09_xen
> # 
> #         USAGE:  update-grub ... with this in /etc/grub.d
> # 
> #   DESCRIPTION: Generate grub2 boot stanza for Xen systems
> #                               Xen boot entries are automatically
> added to grub.cfg
> #                               The 09-... name prefix puts the Xen
> boot entries before 
> #                               the linux kernel entries
> # 
> #       OPTIONS:  ---
> #  REQUIREMENTS:  --- grub2, Xen hypervisor
> #          BUGS:  --- probably
> #         NOTES:  --- Copied from 10_linux with a few hacks to make ir
> work for Xen.
> #                                       Incorporated suggestions to
> only do this for valid dom0 kernels
> #        AUTHOR:  Bruce Edge (BRE), bruce.edge@lsi.com
> <mailto:bruce.edge@lsi.com> 
> #       COMPANY:  LSI
> #       VERSION:  1.0
> #       CREATED:  05/19/2010 02:32:34 PM PDT
> #      REVISION:  ---
> #===============================================================================
>
> prefix=/usr
> exec_prefix=${prefix}
> libdir=${exec_prefix}/lib
> . ${libdir}/grub/update-grub_lib
>
> if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then
>   OS=GNU/Linux
> else
>   OS="${GRUB_DISTRIBUTOR}"
> fi
>
> # Source grub defaults
> . /etc/default/grub
>
> # loop-AES arranges things so that /dev/loop/X can be our root device, but
> # the initrds that Linux uses don't like that.
> case ${GRUB_DEVICE} in
>   /dev/loop/*|/dev/loop[0-9])
>     GRUB_DEVICE=`losetup ${GRUB_DEVICE} | sed -e
> "s/^[^(]*(\([^)]\+\)).*/\1/"`
>   ;;
> esac
>
> if [ "x${GRUB_DEVICE_UUID}" = "x" ] || [ "x${GRUB_DISABLE_LINUX_UUID}"
> = "xtrue" ] \
>     || ! test -e "/dev/disk/by-uuid/${GRUB_DEVICE_UUID}" ; then
>   LINUX_ROOT_DEVICE=${GRUB_DEVICE}
> else
>   LINUX_ROOT_DEVICE=UUID=${GRUB_DEVICE_UUID}
> fi
>
> test_gt ()
> {
>   local a=`echo $1 | sed -e
> "s,.*/vmlinu[zx]-,,g;s/[._-]\(pre\|rc\|test\|git\|old\)/~\1/g"`
>   local b=`echo $2 | sed -e
> "s,.*/vmlinu[zx]-,,g;s/[._-]\(pre\|rc\|test\|git\|old\)/~\1/g"`
>   if [ "x$b" = "x" ] ; then
>     return 0
>   fi
>   dpkg --compare-versions "$a" gt "$b"
>   return $?
> }
>
> find_latest ()
> {
>   local a=""
>   for i in $@ ; do
>     if test_gt "$i" "$a" ; then
>       a="$i"
>     fi
>   done
>   echo "$a"
> }
>
> list=`for i in /boot/vmlinu[xz]-* /vmlinu[xz]-* ; do
>         if grub_file_is_not_garbage "$i" && grep -q 'DOM0=y'
> ${i/vmlinu[xz]/config} ; then echo -n "$i " ; fi
>       done`
>
> while [ "x$list" != "x" ] ; do
>   linux=`find_latest $list`
>   echo "Found linux image: $linux" >&2
>   basename=`basename $linux`
>   dirname=`dirname $linux`
>   rel_dirname=`make_system_path_relative_to_its_root $dirname`
>   version=`echo $basename | sed -e "s,^[^0-9]*-,,g"`
>   alt_version=`echo $version | sed -e "s,\.old$,,g"`
>   linux_root_device_thisversion="${LINUX_ROOT_DEVICE}"
>
>   initrd=
>   for i in "initrd.img-${version}" "initrd-${version}.img" \
>            "initrd.img-${alt_version}" "initrd-${alt_version}.img"; do
>     if test -e "${dirname}/${i}" ; then
>       initrd="$i"
>       break
>     fi
>   done
>   if test -n "${initrd}" ; then
>     echo "Found initrd image: ${dirname}/${initrd}" >&2
>   else
>     # "UUID=" magic is parsed by initrds.  Since there's no initrd, it
> can't work here.
>     linux_root_device_thisversion=${GRUB_DEVICE}
>   fi
>
>   cat << EOF
>   insmod lvm
>   set root=(system-dom0_0)
> menuentry "Xen ${OS}, linux ${version}" {
>         multiboot dummy=dummy /boot/xen.gz $GRUB_CMDLINE_XEN_DEFAULT
>         module ${rel_dirname}/${basename}
> root=${linux_root_device_thisversion} $GRUB_CMDLINE_LINUX_DEFAULT
> EOF
>   if test -n "${initrd}" ; then
>     cat << EOF
>         module ${rel_dirname}/${initrd} ${rel_dirname}/${initrd}
> EOF
>   fi
>   cat << EOF
> }
> EOF
>
>   list=`echo $list | tr ' ' '\n' | grep -vx $linux | tr '\n' ' '`
> done
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Grub-devel mailing list
> Grub-devel@gnu.org
> http://lists.gnu.org/mailman/listinfo/grub-devel
>   


-- 
Regards
Vladimir 'φ-coder/phcoder' Serbinenko



[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 293 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: update-grub & Xen boot stanza generation
  2010-05-20 23:45 ` Seth Goldberg
@ 2010-05-20 23:55   ` Bruce Edge
  2010-05-20 23:59     ` Seth Goldberg
  0 siblings, 1 reply; 13+ messages in thread
From: Bruce Edge @ 2010-05-20 23:55 UTC (permalink / raw)
  To: The development of GNU GRUB

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

There's a bug in certain hypervisor versions where it drops the first
parameter. This is the accepted workaround, pass a dummy param as the first
entry.

-Bruce


On Thu, May 20, 2010 at 4:45 PM, Seth Goldberg <seth.goldberg@oracle.com>wrote:

>
>  What is this 'dummy=dummy' on the multiboot line?
>
>  --S
>
>
> Quoting Bruce Edge, who wrote the following on Thu, 20 May 2010:
>
>  Hi
>> Apologies in advance if this is already in the works.
>>
>> I wanted to provide an etc/grub.d rule for generating boot stanzas for Xen
>> based systems such that it would end up in the upstream grub release.
>> If this conforms to the appropriate conventions, could someone possibly
>> add
>> it ?
>>
>> It's basically a copy of etc/grub.d/10_linux and adds checks for dom0
>> capable kernels. I picked "09_" as I assumed that one would want to
>> default
>> to the Xen boot entry, but that may be a matter of some debate.
>>
>> Thanks
>>
>> -Bruce
>>
>>
>> #!/bin/bash -e
>>
>> #===============================================================================
>> #
>> #          FILE:  09_xen
>> #
>> #         USAGE:  update-grub ... with this in /etc/grub.d
>> #
>> #   DESCRIPTION: Generate grub2 boot stanza for Xen systems
>> #                               Xen boot entries are automatically added
>> to
>> grub.cfg
>> #                               The 09-... name prefix puts the Xen boot
>> entries before
>> #                               the linux kernel entries
>> #
>> #       OPTIONS:  ---
>> #  REQUIREMENTS:  --- grub2, Xen hypervisor
>> #          BUGS:  --- probably
>> #         NOTES:  --- Copied from 10_linux with a few hacks to make ir
>> work
>> for Xen.
>> #                                       Incorporated suggestions to only
>> do
>> this for valid dom0 kernels
>> #        AUTHOR:  Bruce Edge (BRE), bruce.edge@lsi.com
>> #       COMPANY:  LSI
>> #       VERSION:  1.0
>> #       CREATED:  05/19/2010 02:32:34 PM PDT
>> #      REVISION:  ---
>>
>> #===============================================================================
>>
>> prefix=/usr
>> exec_prefix=${prefix}
>> libdir=${exec_prefix}/lib
>> . ${libdir}/grub/update-grub_lib
>>
>> if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then
>>  OS=GNU/Linux
>> else
>>  OS="${GRUB_DISTRIBUTOR}"
>> fi
>>
>> # Source grub defaults
>> . /etc/default/grub
>>
>> # loop-AES arranges things so that /dev/loop/X can be our root device, but
>> # the initrds that Linux uses don't like that.
>> case ${GRUB_DEVICE} in
>>  /dev/loop/*|/dev/loop[0-9])
>>   GRUB_DEVICE=`losetup ${GRUB_DEVICE} | sed -e
>> "s/^[^(]*(\([^)]\+\)).*/\1/"`
>>  ;;
>> esac
>>
>> if [ "x${GRUB_DEVICE_UUID}" = "x" ] || [ "x${GRUB_DISABLE_LINUX_UUID}" =
>> "xtrue" ] \
>>   || ! test -e "/dev/disk/by-uuid/${GRUB_DEVICE_UUID}" ; then
>>  LINUX_ROOT_DEVICE=${GRUB_DEVICE}
>> else
>>  LINUX_ROOT_DEVICE=UUID=${GRUB_DEVICE_UUID}
>> fi
>>
>> test_gt ()
>> {
>>  local a=`echo $1 | sed -e
>> "s,.*/vmlinu[zx]-,,g;s/[._-]\(pre\|rc\|test\|git\|old\)/~\1/g"`
>>  local b=`echo $2 | sed -e
>> "s,.*/vmlinu[zx]-,,g;s/[._-]\(pre\|rc\|test\|git\|old\)/~\1/g"`
>>  if [ "x$b" = "x" ] ; then
>>   return 0
>>  fi
>>  dpkg --compare-versions "$a" gt "$b"
>>  return $?
>> }
>>
>> find_latest ()
>> {
>>  local a=""
>>  for i in $@ ; do
>>   if test_gt "$i" "$a" ; then
>>     a="$i"
>>   fi
>>  done
>>  echo "$a"
>> }
>>
>> list=`for i in /boot/vmlinu[xz]-* /vmlinu[xz]-* ; do
>>       if grub_file_is_not_garbage "$i" && grep -q 'DOM0=y'
>> ${i/vmlinu[xz]/config} ; then echo -n "$i " ; fi
>>     done`
>>
>> while [ "x$list" != "x" ] ; do
>>  linux=`find_latest $list`
>>  echo "Found linux image: $linux" >&2
>>  basename=`basename $linux`
>>  dirname=`dirname $linux`
>>  rel_dirname=`make_system_path_relative_to_its_root $dirname`
>>  version=`echo $basename | sed -e "s,^[^0-9]*-,,g"`
>>  alt_version=`echo $version | sed -e "s,\.old$,,g"`
>>  linux_root_device_thisversion="${LINUX_ROOT_DEVICE}"
>>
>>  initrd=
>>  for i in "initrd.img-${version}" "initrd-${version}.img" \
>>          "initrd.img-${alt_version}" "initrd-${alt_version}.img"; do
>>   if test -e "${dirname}/${i}" ; then
>>     initrd="$i"
>>     break
>>   fi
>>  done
>>  if test -n "${initrd}" ; then
>>   echo "Found initrd image: ${dirname}/${initrd}" >&2
>>  else
>>   # "UUID=" magic is parsed by initrds.  Since there's no initrd, it can't
>> work here.
>>   linux_root_device_thisversion=${GRUB_DEVICE}
>>  fi
>>
>>  cat << EOF
>>  insmod lvm
>>  set root=(system-dom0_0)
>> menuentry "Xen ${OS}, linux ${version}" {
>>       multiboot dummy=dummy /boot/xen.gz $GRUB_CMDLINE_XEN_DEFAULT
>>       module ${rel_dirname}/${basename}
>> root=${linux_root_device_thisversion} $GRUB_CMDLINE_LINUX_DEFAULT
>> EOF
>>  if test -n "${initrd}" ; then
>>   cat << EOF
>>       module ${rel_dirname}/${initrd} ${rel_dirname}/${initrd}
>> EOF
>>  fi
>>  cat << EOF
>> }
>> EOF
>>
>>  list=`echo $list | tr ' ' '\n' | grep -vx $linux | tr '\n' ' '`
>> done
>>
>>
> _______________________________________________
> Grub-devel mailing list
> Grub-devel@gnu.org
> http://lists.gnu.org/mailman/listinfo/grub-devel
>

[-- Attachment #2: Type: text/html, Size: 6587 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: update-grub & Xen boot stanza generation
  2010-05-20 23:53 ` Vladimir 'φ-coder/phcoder' Serbinenko
@ 2010-05-20 23:57   ` Bruce Edge
  2010-05-21  0:35     ` Vladimir 'φ-coder/phcoder' Serbinenko
  0 siblings, 1 reply; 13+ messages in thread
From: Bruce Edge @ 2010-05-20 23:57 UTC (permalink / raw)
  To: The development of GNU GRUB

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

2010/5/20 Vladimir 'φ-coder/phcoder' Serbinenko <phcoder@gmail.com>

> Bruce Edge wrote:
> > Hi
> > Apologies in advance if this is already in the works.
> >
> > I wanted to provide an etc/grub.d rule for generating boot stanzas for
> > Xen based systems such that it would end up in the upstream grub release.
> > If this conforms to the appropriate conventions, could someone
> > possibly add it ?
> >
> > It's basically a copy of etc/grub.d/10_linux and adds checks for dom0
> > capable kernels. I picked "09_" as I assumed that one would want to
> > default to the Xen boot entry, but that may be a matter of some debate.
> >
> This is aready worked on but the problem is that it generates too much
> entries. If you have 5 different versions of hypervisor and 10 different
> kernels you have 100 entries.
>

What if I add a max_entries option. Say, don't generate more than 4 stanzas
total. Although I suppose then I need to go through and pick the most recent
kernel and hypervisor versions.

Actually the hypervisor version isn't an issue, Xen installs a symlink for
the most recent hypervisor in /boot, so one only needs to generate entries
for one hypervisor.

Where can I get a copy of the current implementation of this mechanism?

Thanks

-Bruce



> > Thanks
> >
> > -Bruce
> >
> >
> > #!/bin/bash -e
> >
> #===============================================================================
> > #
> > #          FILE:  09_xen
> > #
> > #         USAGE:  update-grub ... with this in /etc/grub.d
> > #
> > #   DESCRIPTION: Generate grub2 boot stanza for Xen systems
> > #                               Xen boot entries are automatically
> > added to grub.cfg
> > #                               The 09-... name prefix puts the Xen
> > boot entries before
> > #                               the linux kernel entries
> > #
> > #       OPTIONS:  ---
> > #  REQUIREMENTS:  --- grub2, Xen hypervisor
> > #          BUGS:  --- probably
> > #         NOTES:  --- Copied from 10_linux with a few hacks to make ir
> > work for Xen.
> > #                                       Incorporated suggestions to
> > only do this for valid dom0 kernels
> > #        AUTHOR:  Bruce Edge (BRE), bruce.edge@lsi.com
> > <mailto:bruce.edge@lsi.com>
> > #       COMPANY:  LSI
> > #       VERSION:  1.0
> > #       CREATED:  05/19/2010 02:32:34 PM PDT
> > #      REVISION:  ---
> >
> #===============================================================================
> >
> > prefix=/usr
> > exec_prefix=${prefix}
> > libdir=${exec_prefix}/lib
> > . ${libdir}/grub/update-grub_lib
> >
> > if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then
> >   OS=GNU/Linux
> > else
> >   OS="${GRUB_DISTRIBUTOR}"
> > fi
> >
> > # Source grub defaults
> > . /etc/default/grub
> >
> > # loop-AES arranges things so that /dev/loop/X can be our root device,
> but
> > # the initrds that Linux uses don't like that.
> > case ${GRUB_DEVICE} in
> >   /dev/loop/*|/dev/loop[0-9])
> >     GRUB_DEVICE=`losetup ${GRUB_DEVICE} | sed -e
> > "s/^[^(]*(\([^)]\+\)).*/\1/"`
> >   ;;
> > esac
> >
> > if [ "x${GRUB_DEVICE_UUID}" = "x" ] || [ "x${GRUB_DISABLE_LINUX_UUID}"
> > = "xtrue" ] \
> >     || ! test -e "/dev/disk/by-uuid/${GRUB_DEVICE_UUID}" ; then
> >   LINUX_ROOT_DEVICE=${GRUB_DEVICE}
> > else
> >   LINUX_ROOT_DEVICE=UUID=${GRUB_DEVICE_UUID}
> > fi
> >
> > test_gt ()
> > {
> >   local a=`echo $1 | sed -e
> > "s,.*/vmlinu[zx]-,,g;s/[._-]\(pre\|rc\|test\|git\|old\)/~\1/g"`
> >   local b=`echo $2 | sed -e
> > "s,.*/vmlinu[zx]-,,g;s/[._-]\(pre\|rc\|test\|git\|old\)/~\1/g"`
> >   if [ "x$b" = "x" ] ; then
> >     return 0
> >   fi
> >   dpkg --compare-versions "$a" gt "$b"
> >   return $?
> > }
> >
> > find_latest ()
> > {
> >   local a=""
> >   for i in $@ ; do
> >     if test_gt "$i" "$a" ; then
> >       a="$i"
> >     fi
> >   done
> >   echo "$a"
> > }
> >
> > list=`for i in /boot/vmlinu[xz]-* /vmlinu[xz]-* ; do
> >         if grub_file_is_not_garbage "$i" && grep -q 'DOM0=y'
> > ${i/vmlinu[xz]/config} ; then echo -n "$i " ; fi
> >       done`
> >
> > while [ "x$list" != "x" ] ; do
> >   linux=`find_latest $list`
> >   echo "Found linux image: $linux" >&2
> >   basename=`basename $linux`
> >   dirname=`dirname $linux`
> >   rel_dirname=`make_system_path_relative_to_its_root $dirname`
> >   version=`echo $basename | sed -e "s,^[^0-9]*-,,g"`
> >   alt_version=`echo $version | sed -e "s,\.old$,,g"`
> >   linux_root_device_thisversion="${LINUX_ROOT_DEVICE}"
> >
> >   initrd=
> >   for i in "initrd.img-${version}" "initrd-${version}.img" \
> >            "initrd.img-${alt_version}" "initrd-${alt_version}.img"; do
> >     if test -e "${dirname}/${i}" ; then
> >       initrd="$i"
> >       break
> >     fi
> >   done
> >   if test -n "${initrd}" ; then
> >     echo "Found initrd image: ${dirname}/${initrd}" >&2
> >   else
> >     # "UUID=" magic is parsed by initrds.  Since there's no initrd, it
> > can't work here.
> >     linux_root_device_thisversion=${GRUB_DEVICE}
> >   fi
> >
> >   cat << EOF
> >   insmod lvm
> >   set root=(system-dom0_0)
> > menuentry "Xen ${OS}, linux ${version}" {
> >         multiboot dummy=dummy /boot/xen.gz $GRUB_CMDLINE_XEN_DEFAULT
> >         module ${rel_dirname}/${basename}
> > root=${linux_root_device_thisversion} $GRUB_CMDLINE_LINUX_DEFAULT
> > EOF
> >   if test -n "${initrd}" ; then
> >     cat << EOF
> >         module ${rel_dirname}/${initrd} ${rel_dirname}/${initrd}
> > EOF
> >   fi
> >   cat << EOF
> > }
> > EOF
> >
> >   list=`echo $list | tr ' ' '\n' | grep -vx $linux | tr '\n' ' '`
> > done
> >
> > ------------------------------------------------------------------------
> >
> > _______________________________________________
> > Grub-devel mailing list
> > Grub-devel@gnu.org
> > http://lists.gnu.org/mailman/listinfo/grub-devel
> >
>
>
> --
> Regards
> Vladimir 'φ-coder/phcoder' Serbinenko
>
>
>
> _______________________________________________
> Grub-devel mailing list
> Grub-devel@gnu.org
> http://lists.gnu.org/mailman/listinfo/grub-devel
>
>

[-- Attachment #2: Type: text/html, Size: 8669 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: update-grub & Xen boot stanza generation
  2010-05-20 23:55   ` Bruce Edge
@ 2010-05-20 23:59     ` Seth Goldberg
  2010-05-21  1:58       ` Bruce Edge
  0 siblings, 1 reply; 13+ messages in thread
From: Seth Goldberg @ 2010-05-20 23:59 UTC (permalink / raw)
  To: The development of GNU GRUB


  But isn't the argument after "multiboot" the multiboot kernel file?  Wouldn't 
GRUB try to load the file called "dummy=dummy"?

  --S

Quoting Bruce Edge, who wrote the following on Thu, 20 May 2010:

> There's a bug in certain hypervisor versions where it drops the first
> parameter. This is the accepted workaround, pass a dummy param as the first
> entry.
>
> -Bruce
>
>
> On Thu, May 20, 2010 at 4:45 PM, Seth Goldberg <seth.goldberg@oracle.com>wrote:
>
>>
>>  What is this 'dummy=dummy' on the multiboot line?
>>
>>  --S
>>
>>
>> Quoting Bruce Edge, who wrote the following on Thu, 20 May 2010:
>>
>>  Hi
>>> Apologies in advance if this is already in the works.
>>>
>>> I wanted to provide an etc/grub.d rule for generating boot stanzas for Xen
>>> based systems such that it would end up in the upstream grub release.
>>> If this conforms to the appropriate conventions, could someone possibly
>>> add
>>> it ?
>>>
>>> It's basically a copy of etc/grub.d/10_linux and adds checks for dom0
>>> capable kernels. I picked "09_" as I assumed that one would want to
>>> default
>>> to the Xen boot entry, but that may be a matter of some debate.
>>>
>>> Thanks
>>>
>>> -Bruce
>>>
>>>
>>> #!/bin/bash -e
>>>
>>> #===============================================================================
>>> #
>>> #          FILE:  09_xen
>>> #
>>> #         USAGE:  update-grub ... with this in /etc/grub.d
>>> #
>>> #   DESCRIPTION: Generate grub2 boot stanza for Xen systems
>>> #                               Xen boot entries are automatically added
>>> to
>>> grub.cfg
>>> #                               The 09-... name prefix puts the Xen boot
>>> entries before
>>> #                               the linux kernel entries
>>> #
>>> #       OPTIONS:  ---
>>> #  REQUIREMENTS:  --- grub2, Xen hypervisor
>>> #          BUGS:  --- probably
>>> #         NOTES:  --- Copied from 10_linux with a few hacks to make ir
>>> work
>>> for Xen.
>>> #                                       Incorporated suggestions to only
>>> do
>>> this for valid dom0 kernels
>>> #        AUTHOR:  Bruce Edge (BRE), bruce.edge@lsi.com
>>> #       COMPANY:  LSI
>>> #       VERSION:  1.0
>>> #       CREATED:  05/19/2010 02:32:34 PM PDT
>>> #      REVISION:  ---
>>>
>>> #===============================================================================
>>>
>>> prefix=/usr
>>> exec_prefix=${prefix}
>>> libdir=${exec_prefix}/lib
>>> . ${libdir}/grub/update-grub_lib
>>>
>>> if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then
>>>  OS=GNU/Linux
>>> else
>>>  OS="${GRUB_DISTRIBUTOR}"
>>> fi
>>>
>>> # Source grub defaults
>>> . /etc/default/grub
>>>
>>> # loop-AES arranges things so that /dev/loop/X can be our root device, but
>>> # the initrds that Linux uses don't like that.
>>> case ${GRUB_DEVICE} in
>>>  /dev/loop/*|/dev/loop[0-9])
>>>   GRUB_DEVICE=`losetup ${GRUB_DEVICE} | sed -e
>>> "s/^[^(]*(\([^)]\+\)).*/\1/"`
>>>  ;;
>>> esac
>>>
>>> if [ "x${GRUB_DEVICE_UUID}" = "x" ] || [ "x${GRUB_DISABLE_LINUX_UUID}" =
>>> "xtrue" ] \
>>>   || ! test -e "/dev/disk/by-uuid/${GRUB_DEVICE_UUID}" ; then
>>>  LINUX_ROOT_DEVICE=${GRUB_DEVICE}
>>> else
>>>  LINUX_ROOT_DEVICE=UUID=${GRUB_DEVICE_UUID}
>>> fi
>>>
>>> test_gt ()
>>> {
>>>  local a=`echo $1 | sed -e
>>> "s,.*/vmlinu[zx]-,,g;s/[._-]\(pre\|rc\|test\|git\|old\)/~\1/g"`
>>>  local b=`echo $2 | sed -e
>>> "s,.*/vmlinu[zx]-,,g;s/[._-]\(pre\|rc\|test\|git\|old\)/~\1/g"`
>>>  if [ "x$b" = "x" ] ; then
>>>   return 0
>>>  fi
>>>  dpkg --compare-versions "$a" gt "$b"
>>>  return $?
>>> }
>>>
>>> find_latest ()
>>> {
>>>  local a=""
>>>  for i in $@ ; do
>>>   if test_gt "$i" "$a" ; then
>>>     a="$i"
>>>   fi
>>>  done
>>>  echo "$a"
>>> }
>>>
>>> list=`for i in /boot/vmlinu[xz]-* /vmlinu[xz]-* ; do
>>>       if grub_file_is_not_garbage "$i" && grep -q 'DOM0=y'
>>> ${i/vmlinu[xz]/config} ; then echo -n "$i " ; fi
>>>     done`
>>>
>>> while [ "x$list" != "x" ] ; do
>>>  linux=`find_latest $list`
>>>  echo "Found linux image: $linux" >&2
>>>  basename=`basename $linux`
>>>  dirname=`dirname $linux`
>>>  rel_dirname=`make_system_path_relative_to_its_root $dirname`
>>>  version=`echo $basename | sed -e "s,^[^0-9]*-,,g"`
>>>  alt_version=`echo $version | sed -e "s,\.old$,,g"`
>>>  linux_root_device_thisversion="${LINUX_ROOT_DEVICE}"
>>>
>>>  initrd=
>>>  for i in "initrd.img-${version}" "initrd-${version}.img" \
>>>          "initrd.img-${alt_version}" "initrd-${alt_version}.img"; do
>>>   if test -e "${dirname}/${i}" ; then
>>>     initrd="$i"
>>>     break
>>>   fi
>>>  done
>>>  if test -n "${initrd}" ; then
>>>   echo "Found initrd image: ${dirname}/${initrd}" >&2
>>>  else
>>>   # "UUID=" magic is parsed by initrds.  Since there's no initrd, it can't
>>> work here.
>>>   linux_root_device_thisversion=${GRUB_DEVICE}
>>>  fi
>>>
>>>  cat << EOF
>>>  insmod lvm
>>>  set root=(system-dom0_0)
>>> menuentry "Xen ${OS}, linux ${version}" {
>>>       multiboot dummy=dummy /boot/xen.gz $GRUB_CMDLINE_XEN_DEFAULT
>>>       module ${rel_dirname}/${basename}
>>> root=${linux_root_device_thisversion} $GRUB_CMDLINE_LINUX_DEFAULT
>>> EOF
>>>  if test -n "${initrd}" ; then
>>>   cat << EOF
>>>       module ${rel_dirname}/${initrd} ${rel_dirname}/${initrd}
>>> EOF
>>>  fi
>>>  cat << EOF
>>> }
>>> EOF
>>>
>>>  list=`echo $list | tr ' ' '\n' | grep -vx $linux | tr '\n' ' '`
>>> done
>>>
>>>
>> _______________________________________________
>> Grub-devel mailing list
>> Grub-devel@gnu.org
>> http://lists.gnu.org/mailman/listinfo/grub-devel
>>
>


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: update-grub & Xen boot stanza generation
  2010-05-20 23:57   ` Bruce Edge
@ 2010-05-21  0:35     ` Vladimir 'φ-coder/phcoder' Serbinenko
  2010-05-24  4:48       ` Joey Korkames
  0 siblings, 1 reply; 13+ messages in thread
From: Vladimir 'φ-coder/phcoder' Serbinenko @ 2010-05-21  0:35 UTC (permalink / raw)
  To: The development of GNU GRUB


[-- Attachment #1.1: Type: text/plain, Size: 7541 bytes --]

Bruce Edge wrote:
> 2010/5/20 Vladimir 'φ-coder/phcoder' Serbinenko <phcoder@gmail.com
> <mailto:phcoder@gmail.com>>
>
>     Bruce Edge wrote:
>     > Hi
>     > Apologies in advance if this is already in the works.
>     >
>     > I wanted to provide an etc/grub.d rule for generating boot
>     stanzas for
>     > Xen based systems such that it would end up in the upstream grub
>     release.
>     > If this conforms to the appropriate conventions, could someone
>     > possibly add it ?
>     >
>     > It's basically a copy of etc/grub.d/10_linux and adds checks for
>     dom0
>     > capable kernels. I picked "09_" as I assumed that one would want to
>     > default to the Xen boot entry, but that may be a matter of some
>     debate.
>     >
>     This is aready worked on but the problem is that it generates too much
>     entries. If you have 5 different versions of hypervisor and 10
>     different
>     kernels you have 100 entries.
>
>
> What if I add a max_entries option. Say, don't generate more than 4
> stanzas total. Although I suppose then I need to go through and pick
> the most recent kernel and hypervisor versions.
>
It feels like a kludgy solution
> Actually the hypervisor version isn't an issue,
> Xen installs a symlink for the most recent hypervisor in /boot,
No such link here and most recent may break after upgrade
> so one only needs to generate entries for one hypervisor.
>
> Where can I get a copy of the current implementation of this mechanism?
>
> Thanks
>
> -Bruce
>
>  
>
>     > Thanks
>     >
>     > -Bruce
>     >
>     >
>     > #!/bin/bash -e
>     >
>     #===============================================================================
>     > #
>     > #          FILE:  09_xen
>     > #
>     > #         USAGE:  update-grub ... with this in /etc/grub.d
>     > #
>     > #   DESCRIPTION: Generate grub2 boot stanza for Xen systems
>     > #                               Xen boot entries are automatically
>     > added to grub.cfg
>     > #                               The 09-... name prefix puts the Xen
>     > boot entries before
>     > #                               the linux kernel entries
>     > #
>     > #       OPTIONS:  ---
>     > #  REQUIREMENTS:  --- grub2, Xen hypervisor
>     > #          BUGS:  --- probably
>     > #         NOTES:  --- Copied from 10_linux with a few hacks to
>     make ir
>     > work for Xen.
>     > #                                       Incorporated suggestions to
>     > only do this for valid dom0 kernels
>     > #        AUTHOR:  Bruce Edge (BRE), bruce.edge@lsi.com
>     <mailto:bruce.edge@lsi.com>
>     > <mailto:bruce.edge@lsi.com <mailto:bruce.edge@lsi.com>>
>     > #       COMPANY:  LSI
>     > #       VERSION:  1.0
>     > #       CREATED:  05/19/2010 02:32:34 PM PDT
>     > #      REVISION:  ---
>     >
>     #===============================================================================
>     >
>     > prefix=/usr
>     > exec_prefix=${prefix}
>     > libdir=${exec_prefix}/lib
>     > . ${libdir}/grub/update-grub_lib
>     >
>     > if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then
>     >   OS=GNU/Linux
>     > else
>     >   OS="${GRUB_DISTRIBUTOR}"
>     > fi
>     >
>     > # Source grub defaults
>     > . /etc/default/grub
>     >
>     > # loop-AES arranges things so that /dev/loop/X can be our root
>     device, but
>     > # the initrds that Linux uses don't like that.
>     > case ${GRUB_DEVICE} in
>     >   /dev/loop/*|/dev/loop[0-9])
>     >     GRUB_DEVICE=`losetup ${GRUB_DEVICE} | sed -e
>     > "s/^[^(]*(\([^)]\+\)).*/\1/"`
>     >   ;;
>     > esac
>     >
>     > if [ "x${GRUB_DEVICE_UUID}" = "x" ] || [
>     "x${GRUB_DISABLE_LINUX_UUID}"
>     > = "xtrue" ] \
>     >     || ! test -e "/dev/disk/by-uuid/${GRUB_DEVICE_UUID}" ; then
>     >   LINUX_ROOT_DEVICE=${GRUB_DEVICE}
>     > else
>     >   LINUX_ROOT_DEVICE=UUID=${GRUB_DEVICE_UUID}
>     > fi
>     >
>     > test_gt ()
>     > {
>     >   local a=`echo $1 | sed -e
>     > "s,.*/vmlinu[zx]-,,g;s/[._-]\(pre\|rc\|test\|git\|old\)/~\1/g"`
>     >   local b=`echo $2 | sed -e
>     > "s,.*/vmlinu[zx]-,,g;s/[._-]\(pre\|rc\|test\|git\|old\)/~\1/g"`
>     >   if [ "x$b" = "x" ] ; then
>     >     return 0
>     >   fi
>     >   dpkg --compare-versions "$a" gt "$b"
>     >   return $?
>     > }
>     >
>     > find_latest ()
>     > {
>     >   local a=""
>     >   for i in $@ ; do
>     >     if test_gt "$i" "$a" ; then
>     >       a="$i"
>     >     fi
>     >   done
>     >   echo "$a"
>     > }
>     >
>     > list=`for i in /boot/vmlinu[xz]-* /vmlinu[xz]-* ; do
>     >         if grub_file_is_not_garbage "$i" && grep -q 'DOM0=y'
>     > ${i/vmlinu[xz]/config} ; then echo -n "$i " ; fi
>     >       done`
>     >
>     > while [ "x$list" != "x" ] ; do
>     >   linux=`find_latest $list`
>     >   echo "Found linux image: $linux" >&2
>     >   basename=`basename $linux`
>     >   dirname=`dirname $linux`
>     >   rel_dirname=`make_system_path_relative_to_its_root $dirname`
>     >   version=`echo $basename | sed -e "s,^[^0-9]*-,,g"`
>     >   alt_version=`echo $version | sed -e "s,\.old$,,g"`
>     >   linux_root_device_thisversion="${LINUX_ROOT_DEVICE}"
>     >
>     >   initrd=
>     >   for i in "initrd.img-${version}" "initrd-${version}.img" \
>     >            "initrd.img-${alt_version}"
>     "initrd-${alt_version}.img"; do
>     >     if test -e "${dirname}/${i}" ; then
>     >       initrd="$i"
>     >       break
>     >     fi
>     >   done
>     >   if test -n "${initrd}" ; then
>     >     echo "Found initrd image: ${dirname}/${initrd}" >&2
>     >   else
>     >     # "UUID=" magic is parsed by initrds.  Since there's no
>     initrd, it
>     > can't work here.
>     >     linux_root_device_thisversion=${GRUB_DEVICE}
>     >   fi
>     >
>     >   cat << EOF
>     >   insmod lvm
>     >   set root=(system-dom0_0)
>     > menuentry "Xen ${OS}, linux ${version}" {
>     >         multiboot dummy=dummy /boot/xen.gz $GRUB_CMDLINE_XEN_DEFAULT
>     >         module ${rel_dirname}/${basename}
>     > root=${linux_root_device_thisversion} $GRUB_CMDLINE_LINUX_DEFAULT
>     > EOF
>     >   if test -n "${initrd}" ; then
>     >     cat << EOF
>     >         module ${rel_dirname}/${initrd} ${rel_dirname}/${initrd}
>     > EOF
>     >   fi
>     >   cat << EOF
>     > }
>     > EOF
>     >
>     >   list=`echo $list | tr ' ' '\n' | grep -vx $linux | tr '\n' ' '`
>     > done
>     >
>     >
>     ------------------------------------------------------------------------
>     >
>     > _______________________________________________
>     > Grub-devel mailing list
>     > Grub-devel@gnu.org <mailto:Grub-devel@gnu.org>
>     > http://lists.gnu.org/mailman/listinfo/grub-devel
>     >
>
>
>     --
>     Regards
>     Vladimir 'φ-coder/phcoder' Serbinenko
>
>
>
>     _______________________________________________
>     Grub-devel mailing list
>     Grub-devel@gnu.org <mailto:Grub-devel@gnu.org>
>     http://lists.gnu.org/mailman/listinfo/grub-devel
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Grub-devel mailing list
> Grub-devel@gnu.org
> http://lists.gnu.org/mailman/listinfo/grub-devel
>   


-- 
Regards
Vladimir 'φ-coder/phcoder' Serbinenko


[-- Attachment #1.2: 20_linux_xen.in --]
[-- Type: text/plain, Size: 4688 bytes --]

#! /bin/sh -e

# grub-mkconfig helper script.
# Copyright (C) 2006,2007,2008,2009,2010  Free Software Foundation, Inc.
#
# GRUB 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 3 of the License, or
# (at your option) any later version.
#
# GRUB 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 GRUB.  If not, see <http://www.gnu.org/licenses/>.

prefix=@prefix@
exec_prefix=@exec_prefix@
bindir=@bindir@
libdir=@libdir@
. ${libdir}/grub/grub-mkconfig_lib

export TEXTDOMAIN=@PACKAGE@
export TEXTDOMAINDIR=@localedir@

CLASS="--class gnu-linux --class gnu --class os --class xen"

if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then
  OS=GNU/Linux
else
  OS="${GRUB_DISTRIBUTOR} GNU/Linux"
  CLASS="--class $(echo ${GRUB_DISTRIBUTOR} | tr '[A-Z]' '[a-z]' | cut -d' ' -f1) ${CLASS}"
fi

# loop-AES arranges things so that /dev/loop/X can be our root device, but
# the initrds that Linux uses don't like that.
case ${GRUB_DEVICE} in
  /dev/loop/*|/dev/loop[0-9])
    GRUB_DEVICE=`losetup ${GRUB_DEVICE} | sed -e "s/^[^(]*(\([^)]\+\)).*/\1/"`
  ;;
esac

if [ "x${GRUB_DEVICE_UUID}" = "x" ] || [ "x${GRUB_DISABLE_LINUX_UUID}" = "xtrue" ] \
    || ! test -e "/dev/disk/by-uuid/${GRUB_DEVICE_UUID}" ; then
  LINUX_ROOT_DEVICE=${GRUB_DEVICE}
else
  LINUX_ROOT_DEVICE=UUID=${GRUB_DEVICE_UUID}
fi

linux_entry ()
{
  os="$1"
  version="$2"
  xen_version="$3"
  recovery="$4"
  args="$5"
  xen_args="$6"
  if ${recovery} ; then
    title="$(gettext_quoted "%s, with Linux %s and XEN %s (recovery mode)")"
  else
    title="$(gettext_quoted "%s, with Linux %s and XEN %s")"
  fi
  printf "menuentry '${title}' ${CLASS} {\n" "${os}" "${version}" "${xen_version}"
  save_default_entry | sed -e "s/^/\t/"

  if [ -z "${prepare_boot_cache}" ]; then
    prepare_boot_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE_BOOT} | sed -e "s/^/\t/")"
  fi
  printf '%s\n' "${prepare_boot_cache}"
  cat << EOF
	echo	'$(printf "$(gettext_quoted "Loading Linux %s ...")" ${version})'
	multiboot	${rel_xen_dirname}/${xen_basename} placeholder ${xen_args}
	module	${rel_dirname}/${basename} placeholder root=${linux_root_device_thisversion} ro ${args}
EOF
  if test -n "${initrd}" ; then
    cat << EOF
	echo	'$(gettext_quoted "Loading initial ramdisk ...")'
	module	${rel_dirname}/${initrd}
EOF
  fi
  cat << EOF
}
EOF
}

linux_list=`for i in /boot/vmlinu[xz]-*jeremy* /vmlinu[xz]-*jeremy* ; do
        if grub_file_is_not_garbage "$i" ; then echo -n "$i " ; fi
      done`
xen_list=`for i in /boot/xen*; do
        if grub_file_is_not_garbage "$i" ; then echo -n "$i " ; fi
      done`
prepare_boot_cache=

while [ "x${xen_list}" != "x" ] ; do
    list="${linux_list}"
    current_xen=`version_find_latest $xen_list`
    xen_basename=`basename ${current_xen}`
    xen_dirname=`dirname ${current_xen}`
    rel_xen_dirname=`make_system_path_relative_to_its_root $xen_dirname`
    xen_version=`echo $xen_basename | sed -e "s,.gz$,,g;s,^xen-,,g"`
    while [ "x$list" != "x" ] ; do
	linux=`version_find_latest $list`
	echo "Found linux image: $linux" >&2
	basename=`basename $linux`
	dirname=`dirname $linux`
	rel_dirname=`make_system_path_relative_to_its_root $dirname`
	version=`echo $basename | sed -e "s,^[^0-9]*-,,g"`
	alt_version=`echo $version | sed -e "s,\.old$,,g"`
	linux_root_device_thisversion="${LINUX_ROOT_DEVICE}"

	initrd=
	for i in "initrd.img-${version}" "initrd-${version}.img" \
	    "initrd-${version}" "initrd.img-${alt_version}" \
	    "initrd-${alt_version}.img" "initrd-${alt_version}"; do
	    if test -e "${dirname}/${i}" ; then
		initrd="$i"
		break
	    fi
	done
	if test -n "${initrd}" ; then
	    echo "Found initrd image: ${dirname}/${initrd}" >&2
	else
    # "UUID=" magic is parsed by initrds.  Since there's no initrd, it can't work here.
	    linux_root_device_thisversion=${GRUB_DEVICE}
	fi

	linux_entry "${OS}" "${version}" "${xen_version}" false \
	    "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}" "${GRUB_CMDLINE_XEN} ${GRUB_CMDLINE_XEN_DEFAULT}"
	if [ "x${GRUB_DISABLE_LINUX_RECOVERY}" != "xtrue" ]; then
	    linux_entry "${OS}" "${version}" "${xen_version}" true \
		"single ${GRUB_CMDLINE_LINUX}" "${GRUB_CMDLINE_XEN}"
	fi

	list=`echo $list | tr ' ' '\n' | grep -vx $linux | tr '\n' ' '`
    done
    xen_list=`echo $xen_list | tr ' ' '\n' | grep -vx $current_xen | tr '\n' ' '`
done

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 293 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: update-grub & Xen boot stanza generation
  2010-05-20 23:59     ` Seth Goldberg
@ 2010-05-21  1:58       ` Bruce Edge
  2010-05-21  6:58         ` Grégoire Sutre
  0 siblings, 1 reply; 13+ messages in thread
From: Bruce Edge @ 2010-05-21  1:58 UTC (permalink / raw)
  To: The development of GNU GRUB

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

I actually had the kernel arg=val repeated twice originally, but the
xen-devel guys said to use dummy=dummy.
I thought the repeated kernel was less likely to break things.


-Bruce


On Thu, May 20, 2010 at 4:59 PM, Seth Goldberg <seth.goldberg@oracle.com>wrote:

>
>  But isn't the argument after "multiboot" the multiboot kernel file?
>  Wouldn't GRUB try to load the file called "dummy=dummy"?
>
>
>  --S
>
> Quoting Bruce Edge, who wrote the following on Thu, 20 May 2010:
>
>  There's a bug in certain hypervisor versions where it drops the first
>> parameter. This is the accepted workaround, pass a dummy param as the
>> first
>> entry.
>>
>> -Bruce
>>
>>
>> On Thu, May 20, 2010 at 4:45 PM, Seth Goldberg <seth.goldberg@oracle.com
>> >wrote:
>>
>>
>>>  What is this 'dummy=dummy' on the multiboot line?
>>>
>>>  --S
>>>
>>>
>>> Quoting Bruce Edge, who wrote the following on Thu, 20 May 2010:
>>>
>>>  Hi
>>>
>>>> Apologies in advance if this is already in the works.
>>>>
>>>> I wanted to provide an etc/grub.d rule for generating boot stanzas for
>>>> Xen
>>>> based systems such that it would end up in the upstream grub release.
>>>> If this conforms to the appropriate conventions, could someone possibly
>>>> add
>>>> it ?
>>>>
>>>> It's basically a copy of etc/grub.d/10_linux and adds checks for dom0
>>>> capable kernels. I picked "09_" as I assumed that one would want to
>>>> default
>>>> to the Xen boot entry, but that may be a matter of some debate.
>>>>
>>>> Thanks
>>>>
>>>> -Bruce
>>>>
>>>>
>>>> #!/bin/bash -e
>>>>
>>>>
>>>> #===============================================================================
>>>> #
>>>> #          FILE:  09_xen
>>>> #
>>>> #         USAGE:  update-grub ... with this in /etc/grub.d
>>>> #
>>>> #   DESCRIPTION: Generate grub2 boot stanza for Xen systems
>>>> #                               Xen boot entries are automatically added
>>>> to
>>>> grub.cfg
>>>> #                               The 09-... name prefix puts the Xen boot
>>>> entries before
>>>> #                               the linux kernel entries
>>>> #
>>>> #       OPTIONS:  ---
>>>> #  REQUIREMENTS:  --- grub2, Xen hypervisor
>>>> #          BUGS:  --- probably
>>>> #         NOTES:  --- Copied from 10_linux with a few hacks to make ir
>>>> work
>>>> for Xen.
>>>> #                                       Incorporated suggestions to only
>>>> do
>>>> this for valid dom0 kernels
>>>> #        AUTHOR:  Bruce Edge (BRE), bruce.edge@lsi.com
>>>> #       COMPANY:  LSI
>>>> #       VERSION:  1.0
>>>> #       CREATED:  05/19/2010 02:32:34 PM PDT
>>>> #      REVISION:  ---
>>>>
>>>>
>>>> #===============================================================================
>>>>
>>>> prefix=/usr
>>>> exec_prefix=${prefix}
>>>> libdir=${exec_prefix}/lib
>>>> . ${libdir}/grub/update-grub_lib
>>>>
>>>> if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then
>>>>  OS=GNU/Linux
>>>> else
>>>>  OS="${GRUB_DISTRIBUTOR}"
>>>> fi
>>>>
>>>> # Source grub defaults
>>>> . /etc/default/grub
>>>>
>>>> # loop-AES arranges things so that /dev/loop/X can be our root device,
>>>> but
>>>> # the initrds that Linux uses don't like that.
>>>> case ${GRUB_DEVICE} in
>>>>  /dev/loop/*|/dev/loop[0-9])
>>>>  GRUB_DEVICE=`losetup ${GRUB_DEVICE} | sed -e
>>>> "s/^[^(]*(\([^)]\+\)).*/\1/"`
>>>>  ;;
>>>> esac
>>>>
>>>> if [ "x${GRUB_DEVICE_UUID}" = "x" ] || [ "x${GRUB_DISABLE_LINUX_UUID}" =
>>>> "xtrue" ] \
>>>>  || ! test -e "/dev/disk/by-uuid/${GRUB_DEVICE_UUID}" ; then
>>>>  LINUX_ROOT_DEVICE=${GRUB_DEVICE}
>>>> else
>>>>  LINUX_ROOT_DEVICE=UUID=${GRUB_DEVICE_UUID}
>>>> fi
>>>>
>>>> test_gt ()
>>>> {
>>>>  local a=`echo $1 | sed -e
>>>> "s,.*/vmlinu[zx]-,,g;s/[._-]\(pre\|rc\|test\|git\|old\)/~\1/g"`
>>>>  local b=`echo $2 | sed -e
>>>> "s,.*/vmlinu[zx]-,,g;s/[._-]\(pre\|rc\|test\|git\|old\)/~\1/g"`
>>>>  if [ "x$b" = "x" ] ; then
>>>>  return 0
>>>>  fi
>>>>  dpkg --compare-versions "$a" gt "$b"
>>>>  return $?
>>>> }
>>>>
>>>> find_latest ()
>>>> {
>>>>  local a=""
>>>>  for i in $@ ; do
>>>>  if test_gt "$i" "$a" ; then
>>>>    a="$i"
>>>>  fi
>>>>  done
>>>>  echo "$a"
>>>> }
>>>>
>>>> list=`for i in /boot/vmlinu[xz]-* /vmlinu[xz]-* ; do
>>>>      if grub_file_is_not_garbage "$i" && grep -q 'DOM0=y'
>>>> ${i/vmlinu[xz]/config} ; then echo -n "$i " ; fi
>>>>    done`
>>>>
>>>> while [ "x$list" != "x" ] ; do
>>>>  linux=`find_latest $list`
>>>>  echo "Found linux image: $linux" >&2
>>>>  basename=`basename $linux`
>>>>  dirname=`dirname $linux`
>>>>  rel_dirname=`make_system_path_relative_to_its_root $dirname`
>>>>  version=`echo $basename | sed -e "s,^[^0-9]*-,,g"`
>>>>  alt_version=`echo $version | sed -e "s,\.old$,,g"`
>>>>  linux_root_device_thisversion="${LINUX_ROOT_DEVICE}"
>>>>
>>>>  initrd=
>>>>  for i in "initrd.img-${version}" "initrd-${version}.img" \
>>>>         "initrd.img-${alt_version}" "initrd-${alt_version}.img"; do
>>>>  if test -e "${dirname}/${i}" ; then
>>>>    initrd="$i"
>>>>    break
>>>>  fi
>>>>  done
>>>>  if test -n "${initrd}" ; then
>>>>  echo "Found initrd image: ${dirname}/${initrd}" >&2
>>>>  else
>>>>  # "UUID=" magic is parsed by initrds.  Since there's no initrd, it
>>>> can't
>>>> work here.
>>>>  linux_root_device_thisversion=${GRUB_DEVICE}
>>>>  fi
>>>>
>>>>  cat << EOF
>>>>  insmod lvm
>>>>  set root=(system-dom0_0)
>>>> menuentry "Xen ${OS}, linux ${version}" {
>>>>      multiboot dummy=dummy /boot/xen.gz $GRUB_CMDLINE_XEN_DEFAULT
>>>>      module ${rel_dirname}/${basename}
>>>> root=${linux_root_device_thisversion} $GRUB_CMDLINE_LINUX_DEFAULT
>>>> EOF
>>>>  if test -n "${initrd}" ; then
>>>>  cat << EOF
>>>>      module ${rel_dirname}/${initrd} ${rel_dirname}/${initrd}
>>>> EOF
>>>>  fi
>>>>  cat << EOF
>>>> }
>>>> EOF
>>>>
>>>>  list=`echo $list | tr ' ' '\n' | grep -vx $linux | tr '\n' ' '`
>>>> done
>>>>
>>>>
>>>>  _______________________________________________
>>> Grub-devel mailing list
>>> Grub-devel@gnu.org
>>> http://lists.gnu.org/mailman/listinfo/grub-devel
>>>
>>>
>>
> _______________________________________________
> Grub-devel mailing list
> Grub-devel@gnu.org
> http://lists.gnu.org/mailman/listinfo/grub-devel
>

[-- Attachment #2: Type: text/html, Size: 7833 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: update-grub & Xen boot stanza generation
  2010-05-21  1:58       ` Bruce Edge
@ 2010-05-21  6:58         ` Grégoire Sutre
  2010-05-21 15:14           ` Bruce Edge
  0 siblings, 1 reply; 13+ messages in thread
From: Grégoire Sutre @ 2010-05-21  6:58 UTC (permalink / raw)
  To: The development of GNU GRUB

Bruce Edge wrote:

> I actually had the kernel arg=val repeated twice originally, but the 
> xen-devel guys said to use dummy=dummy.

Maybe the xen-devel guys meant the following grub command:

multiboot /boot/xen.gz dummy=dummy [other options]

which will pass to xen the following multiboot-protocol command-line in
the multiboot information structure:

dummy=dummy [other options]

Grégoire


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: update-grub & Xen boot stanza generation
  2010-05-21  6:58         ` Grégoire Sutre
@ 2010-05-21 15:14           ` Bruce Edge
  0 siblings, 0 replies; 13+ messages in thread
From: Bruce Edge @ 2010-05-21 15:14 UTC (permalink / raw)
  To: The development of GNU GRUB

2010/5/20 Grégoire Sutre <gregoire.sutre@gmail.com>
>
> Bruce Edge wrote:
>
>> I actually had the kernel arg=val repeated twice originally, but the xen-devel guys said to use dummy=dummy.
>
> Maybe the xen-devel guys meant the following grub command:
>
> multiboot /boot/xen.gz dummy=dummy [other options]
>
> which will pass to xen the following multiboot-protocol command-line in
> the multiboot information structure:
>
> dummy=dummy [other options]
>
> Grégoire

Grégoire, you are correct. Thanks for the clarification.

-Bruce


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: update-grub & Xen boot stanza generation
  2010-05-21  0:35     ` Vladimir 'φ-coder/phcoder' Serbinenko
@ 2010-05-24  4:48       ` Joey Korkames
  2010-05-24 16:45         ` Isaac Dupree
  0 siblings, 1 reply; 13+ messages in thread
From: Joey Korkames @ 2010-05-24  4:48 UTC (permalink / raw)
  To: The development of GNU GRUB

>>     This is aready worked on but the problem is that it generates too much
>>     entries. If you have 5 different versions of hypervisor and 10
>>     different
>>     kernels you have 100 entries.
>>
>>
>> What if I add a max_entries option. Say, don't generate more than 4
>> stanzas total. Although I suppose then I need to go through and pick
>> the most recent kernel and hypervisor versions.
>>
> It feels like a kludgy solution

My $0.02:

Including this patch would probably save some Xen.gz help questions from 
having to be sent to grub-devel@ by newbies.

If a user doesn't like a bulky boot menu, then they can clear out all 
their old hypervisors and kernels after they verify that their upgraded 
versions are stable.

I use a local version of this script and it is very handy.

-joey (a GRUB2 and Xen user)


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: update-grub & Xen boot stanza generation
  2010-05-24  4:48       ` Joey Korkames
@ 2010-05-24 16:45         ` Isaac Dupree
  2010-05-24 17:00           ` Bruce Edge
  0 siblings, 1 reply; 13+ messages in thread
From: Isaac Dupree @ 2010-05-24 16:45 UTC (permalink / raw)
  To: The development of GNU GRUB

On 05/24/10 00:48, Joey Korkames wrote:
>>>  This is aready worked on but the problem is that it generates too much
>>> entries. If you have 5 different versions of hypervisor and 10
>>> different
>>> kernels you have 100 entries.
>>>
>>>
>>> What if I add a max_entries option. Say, don't generate more than 4
>>> stanzas total. Although I suppose then I need to go through and pick
>>> the most recent kernel and hypervisor versions.
>>>
>> It feels like a kludgy solution

It seems like the non-kludgy setup (while avoiding quadratic menu sizes) 
would be one in which, in one menu you pick which Xen hypervisor, and in 
the next menu you pick which Xen kernel. Is that feasible to implement? 
useful?

-Isaac


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: update-grub & Xen boot stanza generation
  2010-05-24 16:45         ` Isaac Dupree
@ 2010-05-24 17:00           ` Bruce Edge
  0 siblings, 0 replies; 13+ messages in thread
From: Bruce Edge @ 2010-05-24 17:00 UTC (permalink / raw)
  To: The development of GNU GRUB

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

-Bruce


On Mon, May 24, 2010 at 9:45 AM, Isaac Dupree <
ml@isaac.cedarswampstudios.org> wrote:

> On 05/24/10 00:48, Joey Korkames wrote:
>
>>  This is aready worked on but the problem is that it generates too much
>>>> entries. If you have 5 different versions of hypervisor and 10
>>>> different
>>>> kernels you have 100 entries.
>>>>
>>>>
>>>> What if I add a max_entries option. Say, don't generate more than 4
>>>> stanzas total. Although I suppose then I need to go through and pick
>>>> the most recent kernel and hypervisor versions.
>>>>
>>>>  It feels like a kludgy solution
>>>
>>
> It seems like the non-kludgy setup (while avoiding quadratic menu sizes)
> would be one in which, in one menu you pick which Xen hypervisor, and in the
> next menu you pick which Xen kernel. Is that feasible to implement? useful?
>
> -Isaac
>
>
The script below contains the fixes mentioned in the thread so far.
It only generates menu entries using the one xen.gz hypervisor to eliminate
the geometric entry number problem. The most recently installed hypervisor
overwrites this symlink with one pointing to itself. The result is that you
will only have entries for one hypervisor * the number of dom0 capable
kernels.

I made one more change such that if GRUB_CMDLINE_XEN_DEFAULT is not in
/etc/default/grub, then it will ignore xen completely and not generate any
additional boot entries. This should make it undetectable by anyone not
explicitly wanting Xen boot entries.

Feel free to strip the header, reformat, whatever.

-Bruce


#!/bin/bash -e
#===============================================================================
#
#          FILE:  09_xen
#
#         USAGE:  update-grub ... with this in /etc/grub.d
#
#   DESCRIPTION: Generate grub2 boot stanza for Xen systems
#                               Xen boot entries are automatically added to
grub.cfg
#                               The 09-... name prefix puts the Xen boot
entries before
#                               the linux kernel entries
#
#       OPTIONS:  ---
#  REQUIREMENTS:  --- grub2, Xen hypervisor
#          BUGS:  --- probably
#         NOTES:  --- Copied from 10_linux with a few hacks to make ir work
for Xen.
#                                       Incorporated suggestions to only do
this for valid dom0 kernels
#        AUTHOR:  Bruce Edge (BRE), bruce.edge@lsi.com
#       COMPANY:  LSI
#       VERSION:  1.0
#       CREATED:  05/19/2010 02:32:34 PM PDT
#      REVISION:  ---
#===============================================================================

prefix=/usr
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
. ${libdir}/grub/update-grub_lib

if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then
  OS=GNU/Linux
else
  OS="${GRUB_DISTRIBUTOR}"
fi

# Source grub defaults
. /etc/default/grub

# loop-AES arranges things so that /dev/loop/X can be our root device, but
# the initrds that Linux uses don't like that.
case ${GRUB_DEVICE} in
  /dev/loop/*|/dev/loop[0-9])
    GRUB_DEVICE=`losetup ${GRUB_DEVICE} | sed -e
"s/^[^(]*(\([^)]\+\)).*/\1/"`
  ;;
esac

if [ "x${GRUB_DEVICE_UUID}" = "x" ] || [ "x${GRUB_DISABLE_LINUX_UUID}" =
"xtrue" ] \
    || ! test -e "/dev/disk/by-uuid/${GRUB_DEVICE_UUID}" ; then
  LINUX_ROOT_DEVICE=${GRUB_DEVICE}
else
  LINUX_ROOT_DEVICE=UUID=${GRUB_DEVICE_UUID}
fi

test_gt ()
{
  local a=`echo $1 | sed -e
"s,.*/vmlinu[zx]-,,g;s/[._-]\(pre\|rc\|test\|git\|old\)/~\1/g"`
  local b=`echo $2 | sed -e
"s,.*/vmlinu[zx]-,,g;s/[._-]\(pre\|rc\|test\|git\|old\)/~\1/g"`
  if [ "x$b" = "x" ] ; then
    return 0
  fi
  dpkg --compare-versions "$a" gt "$b"
  return $?
}

find_latest ()
{
  local a=""
  for i in $@ ; do
    if test_gt "$i" "$a" ; then
      a="$i"
    fi
  done
  echo "$a"
}

list=`for i in /boot/vmlinu[xz]-* /vmlinu[xz]-* ; do
        if grub_file_is_not_garbage "$i" && grep -q 'DOM0=y'
${i/vmlinu[xz]/config} ; then echo -n "$i " ; fi
      done`

grub -q GRUB_CMDLINE_XEN_DEFAULT || list=""

while [ "x$list" != "x" ] ; do
  linux=`find_latest $list`
  echo "Found linux image: $linux" >&2
  basename=`basename $linux`
  dirname=`dirname $linux`
  rel_dirname=`make_system_path_relative_to_its_root $dirname`
  version=`echo $basename | sed -e "s,^[^0-9]*-,,g"`
  alt_version=`echo $version | sed -e "s,\.old$,,g"`
  linux_root_device_thisversion="${LINUX_ROOT_DEVICE}"

  initrd=
  for i in "initrd.img-${version}" "initrd-${version}.img" \
           "initrd.img-${alt_version}" "initrd-${alt_version}.img"; do
    if test -e "${dirname}/${i}" ; then
      initrd="$i"
      break
    fi
  done
  if test -n "${initrd}" ; then
    echo "Found initrd image: ${dirname}/${initrd}" >&2
  else
    # "UUID=" magic is parsed by initrds.  Since there's no initrd, it can't
work here.
    linux_root_device_thisversion=${GRUB_DEVICE}
  fi

  cat << EOF
  insmod lvm
  set root=(system-dom0_0)
menuentry "Xen ${OS}, linux ${version}" {
        multiboot /boot/xen.gz dummy=dummy $GRUB_CMDLINE_XEN_DEFAULT
        module ${rel_dirname}/${basename}
root=${linux_root_device_thisversion} $GRUB_CMDLINE_LINUX_DEFAULT
EOF
  if test -n "${initrd}" ; then
    cat << EOF
        module ${rel_dirname}/${initrd} ${rel_dirname}/${initrd}
EOF
  fi
  cat << EOF
}
EOF

  list=`echo $list | tr ' ' '\n' | grep -vx $linux | tr '\n' ' '`
done

[-- Attachment #2: Type: text/html, Size: 8022 bytes --]

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2010-05-24 17:01 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-05-20 23:36 update-grub & Xen boot stanza generation Bruce Edge
2010-05-20 23:45 ` Seth Goldberg
2010-05-20 23:55   ` Bruce Edge
2010-05-20 23:59     ` Seth Goldberg
2010-05-21  1:58       ` Bruce Edge
2010-05-21  6:58         ` Grégoire Sutre
2010-05-21 15:14           ` Bruce Edge
2010-05-20 23:53 ` Vladimir 'φ-coder/phcoder' Serbinenko
2010-05-20 23:57   ` Bruce Edge
2010-05-21  0:35     ` Vladimir 'φ-coder/phcoder' Serbinenko
2010-05-24  4:48       ` Joey Korkames
2010-05-24 16:45         ` Isaac Dupree
2010-05-24 17:00           ` Bruce Edge

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.