xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
* /etc/grub.d/09-xen for generating grub.cfg for hypervisor boot entries.
@ 2010-05-18 22:30 Bruce Edge
  2010-05-19  0:24 ` Richie
  0 siblings, 1 reply; 9+ messages in thread
From: Bruce Edge @ 2010-05-18 22:30 UTC (permalink / raw)
  To: xen-devel


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

If this has already been done, please forgive me. However, if not, I'd like
to submit this as a mechanism for generating a bootable grub2 stanza for
hypervisors.

As the /etc/grub.d/* files rely on defaults in /etc/default/grub, I added
the following Xen specific variable:

GRUB_CMDLINE_XEN_DEFAULT="console=com1 115200,8n1 dom0_mem=512M
dom0_max_vcpus=1 dom0_vcpus_pin=true iommu=1,passthrough,no-intremap
loglvl=all loglvl_guest=all loglevl=10 debug acpi=force apic=on
apic_verbosity=verbose numa=on"

The script itself is a hacked version of the10-linux that comes with grub2.
This is 09-xen so it places it's boot entries ahead of the non-xen entries.
The resulting grub.cfg entry looks like:

### BEGIN /etc/grub.d/09_xen ###
  insmod lvm
  set root=(system-dom0_0)
menuentry "Xen osa-dom0 6.0.13-05, linux 2.6.32.12" {
        multiboot /boot/xen.gz /boot/xen.gz console=com1 115200,8n1
dom0_mem=512M dom0_max_vcpus=1 dom0_vcpus_pin=true
iommu=1,passthrough,no-intremap loglvl=all loglvl_guest=all loglevl=10 debug
acpi=force apic=on apic_verbosity=verbose numa=on
        module /boot/vmlinuz-2.6.32.12 /boot/vmlinuz-2.6.32.12
root=UUID=a3764d7d-6292-4f08-8ece-480e54c77229  ro earlyprintk=xen
loglevel=10 debug acpi=force console=hvc0,115200n8
        module /boot/initrd.img-2.6.32.12 /boot/initrd.img-2.6.32.12
}
### END /etc/grub.d/09_xen ###

Note the duplication of the first params. I believe there's a bug that drops
the 1st param so this could be changed later.

#! /bin/sh -e

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" ; 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 /boot/xen.gz /boot/xen.gz $GRUB_CMDLINE_XEN_DEFAULT
        module ${rel_dirname}/${basename} ${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


-Bruce

[-- Attachment #1.2: Type: text/html, Size: 6044 bytes --]

[-- Attachment #2: Type: text/plain, Size: 138 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel

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

* Re: /etc/grub.d/09-xen for generating grub.cfg for hypervisor boot entries.
  2010-05-18 22:30 /etc/grub.d/09-xen for generating grub.cfg for hypervisor boot entries Bruce Edge
@ 2010-05-19  0:24 ` Richie
  2010-05-19 16:04   ` Bruce Edge
  0 siblings, 1 reply; 9+ messages in thread
From: Richie @ 2010-05-19  0:24 UTC (permalink / raw)
  To: Bruce Edge; +Cc: xen-devel

I like the idea myself and I haven't seen anything in the wiki's other 
than manual creation steps.

Just an opinion here, but why not use "dummy=dummy" as opposed to first 
parameter duplication?  My understanding is that dummy is used to avoid 
this same bug.  Either way we it avoids having to hardcode root= into 
the kernel cmdline .config parameter :)  I don't know if parameter 
duplication would break things when the bug is fixed or not, but the 
dummy parameter shouldn't.  I also think it might be viewed as something 
more familiar, perhaps self explanatory, whereas the parameter 
duplication may cause confusion.

I skimmed the code and have not tested it.  I don't see that it is 
specifically trying to ensure that the kernel is Xenlinux or pvops...  
Not that I know of a proper way to do such or if its even pratical.  
Aren't most kernels now pvops (thus bootable under xen) but not 
necessarily dom0 capable?  I think a spin on this would be if one wanted 
to limit the Xen entries to kernels with "xen" (ie. --append-to-version) 
in the name.  Perhaps the code would change as follows?

<snip>
list=`for i in /boot/vmlinu[xz]-*xen* /vmlinu[xz]-*xen* ; do
        if grub_file_is_not_garbage "$i" ; then echo -n "$i " ; fi
      done`
<snip>



Bruce Edge wrote:
> If this has already been done, please forgive me. However, if not, I'd 
> like to submit this as a mechanism for generating a bootable grub2 
> stanza for hypervisors.
>
> As the /etc/grub.d/* files rely on defaults in /etc/default/grub, I 
> added the following Xen specific variable:
>
> GRUB_CMDLINE_XEN_DEFAULT="console=com1 115200,8n1 dom0_mem=512M 
> dom0_max_vcpus=1 dom0_vcpus_pin=true iommu=1,passthrough,no-intremap 
> loglvl=all loglvl_guest=all loglevl=10 debug acpi=force apic=on 
> apic_verbosity=verbose numa=on"
>
> The script itself is a hacked version of the10-linux that comes with 
> grub2. This is 09-xen so it places it's boot entries ahead of the 
> non-xen entries.
> The resulting grub.cfg entry looks like:
>
> ### BEGIN /etc/grub.d/09_xen ###
>   insmod lvm
>   set root=(system-dom0_0)
> menuentry "Xen osa-dom0 6.0.13-05, linux 2.6.32.12" {
>         multiboot /boot/xen.gz /boot/xen.gz console=com1 115200,8n1 
> dom0_mem=512M dom0_max_vcpus=1 dom0_vcpus_pin=true 
> iommu=1,passthrough,no-intremap loglvl=all loglvl_guest=all loglevl=10 
> debug acpi=force apic=on apic_verbosity=verbose numa=on
>         module /boot/vmlinuz-2.6.32.12 /boot/vmlinuz-2.6.32.12 
> root=UUID=a3764d7d-6292-4f08-8ece-480e54c77229  ro earlyprintk=xen 
> loglevel=10 debug acpi=force console=hvc0,115200n8
>         module /boot/initrd.img-2.6.32.12 /boot/initrd.img-2.6.32.12
> }
> ### END /etc/grub.d/09_xen ###
>
> Note the duplication of the first params. I believe there's a bug that 
> drops the 1st param so this could be changed later.
>
> #! /bin/sh -e
>
> 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" ; 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 /boot/xen.gz /boot/xen.gz $GRUB_CMDLINE_XEN_DEFAULT
>         module ${rel_dirname}/${basename} ${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
>
>
> -Bruce
> ------------------------------------------------------------------------
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xensource.com
> http://lists.xensource.com/xen-devel
>   

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

* Re: /etc/grub.d/09-xen for generating grub.cfg for hypervisor boot entries.
  2010-05-19  0:24 ` Richie
@ 2010-05-19 16:04   ` Bruce Edge
  2010-05-19 17:07     ` Richie
  0 siblings, 1 reply; 9+ messages in thread
From: Bruce Edge @ 2010-05-19 16:04 UTC (permalink / raw)
  Cc: xen-devel


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

Good points all. Will incorporate, retest and repost the resultant script.

Thanks

-Bruce


On Tue, May 18, 2010 at 5:24 PM, Richie <listmail@triad.rr.com> wrote:

> I like the idea myself and I haven't seen anything in the wiki's other than
> manual creation steps.
>
> Just an opinion here, but why not use "dummy=dummy" as opposed to first
> parameter duplication?  My understanding is that dummy is used to avoid this
> same bug.  Either way we it avoids having to hardcode root= into the kernel
> cmdline .config parameter :)  I don't know if parameter duplication would
> break things when the bug is fixed or not, but the dummy parameter
> shouldn't.  I also think it might be viewed as something more familiar,
> perhaps self explanatory, whereas the parameter duplication may cause
> confusion.
>
> I skimmed the code and have not tested it.  I don't see that it is
> specifically trying to ensure that the kernel is Xenlinux or pvops...  Not
> that I know of a proper way to do such or if its even pratical.  Aren't most
> kernels now pvops (thus bootable under xen) but not necessarily dom0
> capable?  I think a spin on this would be if one wanted to limit the Xen
> entries to kernels with "xen" (ie. --append-to-version) in the name.
>  Perhaps the code would change as follows?
>
> <snip>
> list=`for i in /boot/vmlinu[xz]-*xen* /vmlinu[xz]-*xen* ; do
>
>       if grub_file_is_not_garbage "$i" ; then echo -n "$i " ; fi
>     done`
> <snip>
>
>
>
> Bruce Edge wrote:
>
>> If this has already been done, please forgive me. However, if not, I'd
>> like to submit this as a mechanism for generating a bootable grub2 stanza
>> for hypervisors.
>>
>> As the /etc/grub.d/* files rely on defaults in /etc/default/grub, I added
>> the following Xen specific variable:
>>
>> GRUB_CMDLINE_XEN_DEFAULT="console=com1 115200,8n1 dom0_mem=512M
>> dom0_max_vcpus=1 dom0_vcpus_pin=true iommu=1,passthrough,no-intremap
>> loglvl=all loglvl_guest=all loglevl=10 debug acpi=force apic=on
>> apic_verbosity=verbose numa=on"
>>
>> The script itself is a hacked version of the10-linux that comes with
>> grub2. This is 09-xen so it places it's boot entries ahead of the non-xen
>> entries.
>> The resulting grub.cfg entry looks like:
>>
>> ### BEGIN /etc/grub.d/09_xen ###
>>  insmod lvm
>>  set root=(system-dom0_0)
>> menuentry "Xen osa-dom0 6.0.13-05, linux 2.6.32.12" {
>>        multiboot /boot/xen.gz /boot/xen.gz console=com1 115200,8n1
>> dom0_mem=512M dom0_max_vcpus=1 dom0_vcpus_pin=true
>> iommu=1,passthrough,no-intremap loglvl=all loglvl_guest=all loglevl=10 debug
>> acpi=force apic=on apic_verbosity=verbose numa=on
>>        module /boot/vmlinuz-2.6.32.12 /boot/vmlinuz-2.6.32.12
>> root=UUID=a3764d7d-6292-4f08-8ece-480e54c77229  ro earlyprintk=xen
>> loglevel=10 debug acpi=force console=hvc0,115200n8
>>        module /boot/initrd.img-2.6.32.12 /boot/initrd.img-2.6.32.12
>> }
>> ### END /etc/grub.d/09_xen ###
>>
>> Note the duplication of the first params. I believe there's a bug that
>> drops the 1st param so this could be changed later.
>>
>> #! /bin/sh -e
>>
>> 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" ; 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 /boot/xen.gz /boot/xen.gz $GRUB_CMDLINE_XEN_DEFAULT
>>        module ${rel_dirname}/${basename} ${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
>>
>>
>> -Bruce
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> Xen-devel mailing list
>> Xen-devel@lists.xensource.com
>> http://lists.xensource.com/xen-devel
>>
>>
>
>

[-- Attachment #1.2: Type: text/html, Size: 7728 bytes --]

[-- Attachment #2: Type: text/plain, Size: 138 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel

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

* Re: /etc/grub.d/09-xen for generating grub.cfg for hypervisor boot entries.
  2010-05-19 16:04   ` Bruce Edge
@ 2010-05-19 17:07     ` Richie
  2010-05-19 17:11       ` Bruce Edge
  0 siblings, 1 reply; 9+ messages in thread
From: Richie @ 2010-05-19 17:07 UTC (permalink / raw)
  To: Bruce Edge; +Cc: xen-devel

Perhaps it goes without saying, but I don't think my suggestion for a 
xen in the image name check will be an accurate solution for someone 
that does not roll their own kernels.  I always know that my kernels 
have xen in the name when they are pvops/dom0 capable and sxen when they 
are Xenlinux.  Also, technically, for Xenlinux kernels, grub should not 
be generating bare metal boot entries.

If anything, this could also be used as a basis for a script that 
generates an initial 40_custom file.  That can then be hand edited 
before running update-grub.


Bruce Edge wrote:
> Good points all. Will incorporate, retest and repost the resultant 
> script.
>
> Thanks
>
> -Bruce
>
>
> On Tue, May 18, 2010 at 5:24 PM, Richie <listmail@triad.rr.com 
> <mailto:listmail@triad.rr.com>> wrote:
>
>     I like the idea myself and I haven't seen anything in the wiki's
>     other than manual creation steps.
>
>     Just an opinion here, but why not use "dummy=dummy" as opposed to
>     first parameter duplication?  My understanding is that dummy is
>     used to avoid this same bug.  Either way we it avoids having to
>     hardcode root= into the kernel cmdline .config parameter :)  I
>     don't know if parameter duplication would break things when the
>     bug is fixed or not, but the dummy parameter shouldn't.  I also
>     think it might be viewed as something more familiar, perhaps self
>     explanatory, whereas the parameter duplication may cause confusion.
>
>     I skimmed the code and have not tested it.  I don't see that it is
>     specifically trying to ensure that the kernel is Xenlinux or
>     pvops...  Not that I know of a proper way to do such or if its
>     even pratical.  Aren't most kernels now pvops (thus bootable under
>     xen) but not necessarily dom0 capable?  I think a spin on this
>     would be if one wanted to limit the Xen entries to kernels with
>     "xen" (ie. --append-to-version) in the name.  Perhaps the code
>     would change as follows?
>
>     <snip>
>     list=`for i in /boot/vmlinu[xz]-*xen* /vmlinu[xz]-*xen* ; do
>
>           if grub_file_is_not_garbage "$i" ; then echo -n "$i " ; fi
>         done`
>     <snip>
>
>
>
>     Bruce Edge wrote:
>
>         If this has already been done, please forgive me. However, if
>         not, I'd like to submit this as a mechanism for generating a
>         bootable grub2 stanza for hypervisors.
>
>         As the /etc/grub.d/* files rely on defaults in
>         /etc/default/grub, I added the following Xen specific variable:
>
>         GRUB_CMDLINE_XEN_DEFAULT="console=com1 115200,8n1
>         dom0_mem=512M dom0_max_vcpus=1 dom0_vcpus_pin=true
>         iommu=1,passthrough,no-intremap loglvl=all loglvl_guest=all
>         loglevl=10 debug acpi=force apic=on apic_verbosity=verbose
>         numa=on"
>
>         The script itself is a hacked version of the10-linux that
>         comes with grub2. This is 09-xen so it places it's boot
>         entries ahead of the non-xen entries.
>         The resulting grub.cfg entry looks like:
>
>         ### BEGIN /etc/grub.d/09_xen ###
>          insmod lvm
>          set root=(system-dom0_0)
>         menuentry "Xen osa-dom0 6.0.13-05, linux 2.6.32.12" {
>                multiboot /boot/xen.gz /boot/xen.gz console=com1
>         115200,8n1 dom0_mem=512M dom0_max_vcpus=1 dom0_vcpus_pin=true
>         iommu=1,passthrough,no-intremap loglvl=all loglvl_guest=all
>         loglevl=10 debug acpi=force apic=on apic_verbosity=verbose numa=on
>                module /boot/vmlinuz-2.6.32.12 /boot/vmlinuz-2.6.32.12
>         root=UUID=a3764d7d-6292-4f08-8ece-480e54c77229  ro
>         earlyprintk=xen loglevel=10 debug acpi=force console=hvc0,115200n8
>                module /boot/initrd.img-2.6.32.12
>         /boot/initrd.img-2.6.32.12
>         }
>         ### END /etc/grub.d/09_xen ###
>
>         Note the duplication of the first params. I believe there's a
>         bug that drops the 1st param so this could be changed later.
>
>         #! /bin/sh -e
>
>         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" ; 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 /boot/xen.gz /boot/xen.gz
>         $GRUB_CMDLINE_XEN_DEFAULT
>                module ${rel_dirname}/${basename}
>         ${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
>
>
>         -Bruce
>         ------------------------------------------------------------------------
>
>         _______________________________________________
>         Xen-devel mailing list
>         Xen-devel@lists.xensource.com
>         <mailto:Xen-devel@lists.xensource.com>
>         http://lists.xensource.com/xen-devel
>          
>
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xensource.com
> http://lists.xensource.com/xen-devel
>   

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

* Re: /etc/grub.d/09-xen for generating grub.cfg for hypervisor boot entries.
  2010-05-19 17:07     ` Richie
@ 2010-05-19 17:11       ` Bruce Edge
  2010-05-19 17:47         ` listmail
  0 siblings, 1 reply; 9+ messages in thread
From: Bruce Edge @ 2010-05-19 17:11 UTC (permalink / raw)
  Cc: xen-devel


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

Perhaps grepping for CONFIG_XEN_DOM0=y in the boot/config-XX would validate
the dom0 kernel compatibility better then looking for -xen in the name.

-Bruce

-Bruce


On Wed, May 19, 2010 at 10:07 AM, Richie <listmail@triad.rr.com> wrote:

> Perhaps it goes without saying, but I don't think my suggestion for a xen
> in the image name check will be an accurate solution for someone that does
> not roll their own kernels.  I always know that my kernels have xen in the
> name when they are pvops/dom0 capable and sxen when they are Xenlinux.
>  Also, technically, for Xenlinux kernels, grub should not be generating bare
> metal boot entries.
>
> If anything, this could also be used as a basis for a script that generates
> an initial 40_custom file.  That can then be hand edited before running
> update-grub.
>
>
> Bruce Edge wrote:
>
>> Good points all. Will incorporate, retest and repost the resultant script.
>>
>> Thanks
>>
>> -Bruce
>>
>>
>> On Tue, May 18, 2010 at 5:24 PM, Richie <listmail@triad.rr.com <mailto:
>> listmail@triad.rr.com>> wrote:
>>
>>    I like the idea myself and I haven't seen anything in the wiki's
>>    other than manual creation steps.
>>
>>    Just an opinion here, but why not use "dummy=dummy" as opposed to
>>    first parameter duplication?  My understanding is that dummy is
>>    used to avoid this same bug.  Either way we it avoids having to
>>    hardcode root= into the kernel cmdline .config parameter :)  I
>>    don't know if parameter duplication would break things when the
>>    bug is fixed or not, but the dummy parameter shouldn't.  I also
>>    think it might be viewed as something more familiar, perhaps self
>>    explanatory, whereas the parameter duplication may cause confusion.
>>
>>    I skimmed the code and have not tested it.  I don't see that it is
>>    specifically trying to ensure that the kernel is Xenlinux or
>>    pvops...  Not that I know of a proper way to do such or if its
>>    even pratical.  Aren't most kernels now pvops (thus bootable under
>>    xen) but not necessarily dom0 capable?  I think a spin on this
>>    would be if one wanted to limit the Xen entries to kernels with
>>    "xen" (ie. --append-to-version) in the name.  Perhaps the code
>>    would change as follows?
>>
>>    <snip>
>>    list=`for i in /boot/vmlinu[xz]-*xen* /vmlinu[xz]-*xen* ; do
>>
>>          if grub_file_is_not_garbage "$i" ; then echo -n "$i " ; fi
>>        done`
>>    <snip>
>>
>>
>>
>>    Bruce Edge wrote:
>>
>>        If this has already been done, please forgive me. However, if
>>        not, I'd like to submit this as a mechanism for generating a
>>        bootable grub2 stanza for hypervisors.
>>
>>        As the /etc/grub.d/* files rely on defaults in
>>        /etc/default/grub, I added the following Xen specific variable:
>>
>>        GRUB_CMDLINE_XEN_DEFAULT="console=com1 115200,8n1
>>        dom0_mem=512M dom0_max_vcpus=1 dom0_vcpus_pin=true
>>        iommu=1,passthrough,no-intremap loglvl=all loglvl_guest=all
>>        loglevl=10 debug acpi=force apic=on apic_verbosity=verbose
>>        numa=on"
>>
>>        The script itself is a hacked version of the10-linux that
>>        comes with grub2. This is 09-xen so it places it's boot
>>        entries ahead of the non-xen entries.
>>        The resulting grub.cfg entry looks like:
>>
>>        ### BEGIN /etc/grub.d/09_xen ###
>>         insmod lvm
>>         set root=(system-dom0_0)
>>        menuentry "Xen osa-dom0 6.0.13-05, linux 2.6.32.12" {
>>               multiboot /boot/xen.gz /boot/xen.gz console=com1
>>        115200,8n1 dom0_mem=512M dom0_max_vcpus=1 dom0_vcpus_pin=true
>>        iommu=1,passthrough,no-intremap loglvl=all loglvl_guest=all
>>        loglevl=10 debug acpi=force apic=on apic_verbosity=verbose numa=on
>>               module /boot/vmlinuz-2.6.32.12 /boot/vmlinuz-2.6.32.12
>>        root=UUID=a3764d7d-6292-4f08-8ece-480e54c77229  ro
>>        earlyprintk=xen loglevel=10 debug acpi=force console=hvc0,115200n8
>>               module /boot/initrd.img-2.6.32.12
>>        /boot/initrd.img-2.6.32.12
>>        }
>>        ### END /etc/grub.d/09_xen ###
>>
>>        Note the duplication of the first params. I believe there's a
>>        bug that drops the 1st param so this could be changed later.
>>
>>        #! /bin/sh -e
>>
>>        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" ; 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 /boot/xen.gz /boot/xen.gz
>>        $GRUB_CMDLINE_XEN_DEFAULT
>>               module ${rel_dirname}/${basename}
>>        ${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
>>
>>
>>        -Bruce
>>
>>  ------------------------------------------------------------------------
>>
>>        _______________________________________________
>>        Xen-devel mailing list
>>        Xen-devel@lists.xensource.com
>>        <mailto:Xen-devel@lists.xensource.com>
>>
>>        http://lists.xensource.com/xen-devel
>>
>>
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> Xen-devel mailing list
>> Xen-devel@lists.xensource.com
>> http://lists.xensource.com/xen-devel
>>
>>
>
>

[-- Attachment #1.2: Type: text/html, Size: 10651 bytes --]

[-- Attachment #2: Type: text/plain, Size: 138 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel

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

* Re: /etc/grub.d/09-xen for generating grub.cfg for hypervisor boot entries.
  2010-05-19 17:11       ` Bruce Edge
@ 2010-05-19 17:47         ` listmail
  2010-05-19 18:09           ` Jeremy Fitzhardinge
  0 siblings, 1 reply; 9+ messages in thread
From: listmail @ 2010-05-19 17:47 UTC (permalink / raw)
  To: Bruce Edge; +Cc: xen-devel

Yes that should do it and no corresponding boot/config-$(uname -r) means 
nothing will be generated for the respective kernel.  There could also 
be a check for CONFIG_XEN=y to support Xenlinux kernels.  That entry 
should not exist in pvops .config so a special menu entry tag could also 
be generated depicting kernel type if desirable.  Those are things I 
might add in afterwards if you are not interested in them.

Bruce Edge wrote:
> Perhaps grepping for CONFIG_XEN_DOM0=y in the boot/config-XX would 
> validate the dom0 kernel compatibility better then looking for -xen in 
> the name.
>
> -Bruce
>
> -Bruce
>
>
> On Wed, May 19, 2010 at 10:07 AM, Richie <listmail@triad.rr.com 
> <mailto:listmail@triad.rr.com>> wrote:
>
>     Perhaps it goes without saying, but I don't think my suggestion
>     for a xen in the image name check will be an accurate solution for
>     someone that does not roll their own kernels.  I always know that
>     my kernels have xen in the name when they are pvops/dom0 capable
>     and sxen when they are Xenlinux.  Also, technically, for Xenlinux
>     kernels, grub should not be generating bare metal boot entries.
>
>     If anything, this could also be used as a basis for a script that
>     generates an initial 40_custom file.  That can then be hand edited
>     before running update-grub.
>
>
>     Bruce Edge wrote:
>
>         Good points all. Will incorporate, retest and repost the
>         resultant script.
>
>         Thanks
>
>         -Bruce
>
>
>         On Tue, May 18, 2010 at 5:24 PM, Richie <listmail@triad.rr.com
>         <mailto:listmail@triad.rr.com> <mailto:listmail@triad.rr.com
>         <mailto:listmail@triad.rr.com>>> wrote:
>
>            I like the idea myself and I haven't seen anything in the
>         wiki's
>            other than manual creation steps.
>
>            Just an opinion here, but why not use "dummy=dummy" as
>         opposed to
>            first parameter duplication?  My understanding is that dummy is
>            used to avoid this same bug.  Either way we it avoids having to
>            hardcode root= into the kernel cmdline .config parameter :)  I
>            don't know if parameter duplication would break things when the
>            bug is fixed or not, but the dummy parameter shouldn't.  I also
>            think it might be viewed as something more familiar,
>         perhaps self
>            explanatory, whereas the parameter duplication may cause
>         confusion.
>
>            I skimmed the code and have not tested it.  I don't see
>         that it is
>            specifically trying to ensure that the kernel is Xenlinux or
>            pvops...  Not that I know of a proper way to do such or if its
>            even pratical.  Aren't most kernels now pvops (thus
>         bootable under
>            xen) but not necessarily dom0 capable?  I think a spin on this
>            would be if one wanted to limit the Xen entries to kernels with
>            "xen" (ie. --append-to-version) in the name.  Perhaps the code
>            would change as follows?
>
>            <snip>
>            list=`for i in /boot/vmlinu[xz]-*xen* /vmlinu[xz]-*xen* ; do
>
>                  if grub_file_is_not_garbage "$i" ; then echo -n "$i "
>         ; fi
>                done`
>            <snip>
>
>
>
>            Bruce Edge wrote:
>
>                If this has already been done, please forgive me.
>         However, if
>                not, I'd like to submit this as a mechanism for
>         generating a
>                bootable grub2 stanza for hypervisors.
>
>                As the /etc/grub.d/* files rely on defaults in
>                /etc/default/grub, I added the following Xen specific
>         variable:
>
>                GRUB_CMDLINE_XEN_DEFAULT="console=com1 115200,8n1
>                dom0_mem=512M dom0_max_vcpus=1 dom0_vcpus_pin=true
>                iommu=1,passthrough,no-intremap loglvl=all loglvl_guest=all
>                loglevl=10 debug acpi=force apic=on apic_verbosity=verbose
>                numa=on"
>
>                The script itself is a hacked version of the10-linux that
>                comes with grub2. This is 09-xen so it places it's boot
>                entries ahead of the non-xen entries.
>                The resulting grub.cfg entry looks like:
>
>                ### BEGIN /etc/grub.d/09_xen ###
>                 insmod lvm
>                 set root=(system-dom0_0)
>                menuentry "Xen osa-dom0 6.0.13-05, linux 2.6.32.12" {
>                       multiboot /boot/xen.gz /boot/xen.gz console=com1
>                115200,8n1 dom0_mem=512M dom0_max_vcpus=1
>         dom0_vcpus_pin=true
>                iommu=1,passthrough,no-intremap loglvl=all loglvl_guest=all
>                loglevl=10 debug acpi=force apic=on
>         apic_verbosity=verbose numa=on
>                       module /boot/vmlinuz-2.6.32.12
>         /boot/vmlinuz-2.6.32.12
>                root=UUID=a3764d7d-6292-4f08-8ece-480e54c77229  ro
>                earlyprintk=xen loglevel=10 debug acpi=force
>         console=hvc0,115200n8
>                       module /boot/initrd.img-2.6.32.12
>                /boot/initrd.img-2.6.32.12
>                }
>                ### END /etc/grub.d/09_xen ###
>
>                Note the duplication of the first params. I believe
>         there's a
>                bug that drops the 1st param so this could be changed
>         later.
>
>                #! /bin/sh -e
>
>                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" ; 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 /boot/xen.gz /boot/xen.gz
>                $GRUB_CMDLINE_XEN_DEFAULT
>                       module ${rel_dirname}/${basename}
>                ${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
>
>
>                -Bruce
>              
>          ------------------------------------------------------------------------
>
>                _______________________________________________
>                Xen-devel mailing list
>                Xen-devel@lists.xensource.com
>         <mailto:Xen-devel@lists.xensource.com>
>                <mailto:Xen-devel@lists.xensource.com
>         <mailto:Xen-devel@lists.xensource.com>>
>
>                http://lists.xensource.com/xen-devel
>                
>
>
>         ------------------------------------------------------------------------
>
>         _______________________________________________
>         Xen-devel mailing list
>         Xen-devel@lists.xensource.com
>         <mailto:Xen-devel@lists.xensource.com>
>         http://lists.xensource.com/xen-devel
>          
>
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xensource.com
> http://lists.xensource.com/xen-devel
>   

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

* Re: /etc/grub.d/09-xen for generating grub.cfg for hypervisor boot entries.
  2010-05-19 17:47         ` listmail
@ 2010-05-19 18:09           ` Jeremy Fitzhardinge
  2010-05-19 20:19             ` Richie
  0 siblings, 1 reply; 9+ messages in thread
From: Jeremy Fitzhardinge @ 2010-05-19 18:09 UTC (permalink / raw)
  To: listmail; +Cc: xen-devel, Bruce Edge

On 05/19/2010 10:47 AM, listmail wrote:
> Yes that should do it and no corresponding boot/config-$(uname -r)
> means nothing will be generated for the respective kernel.  There
> could also be a check for CONFIG_XEN=y to support Xenlinux kernels. 
> That entry should not exist in pvops .config 

Yes, it does.  CONFIG_XEN is the master switch for all Xen-related
features in a pvops kernel.  You would have to look for the absence of
CONFIG_PARAVIRT to detect a Xenlinux kernel.

    J

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

* Re: /etc/grub.d/09-xen for generating grub.cfg for hypervisor boot entries.
  2010-05-19 18:09           ` Jeremy Fitzhardinge
@ 2010-05-19 20:19             ` Richie
  2010-05-19 22:23               ` Bruce Edge
  0 siblings, 1 reply; 9+ messages in thread
From: Richie @ 2010-05-19 20:19 UTC (permalink / raw)
  To: Jeremy Fitzhardinge; +Cc: xen-devel, Bruce Edge

Ok.  Thanks for correcting my mistake.

Jeremy Fitzhardinge wrote:
> On 05/19/2010 10:47 AM, listmail wrote:
>   
>> Yes that should do it and no corresponding boot/config-$(uname -r)
>> means nothing will be generated for the respective kernel.  There
>> could also be a check for CONFIG_XEN=y to support Xenlinux kernels. 
>> That entry should not exist in pvops .config 
>>     
>
> Yes, it does.  CONFIG_XEN is the master switch for all Xen-related
> features in a pvops kernel.  You would have to look for the absence of
> CONFIG_PARAVIRT to detect a Xenlinux kernel.
>
>     J
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xensource.com
> http://lists.xensource.com/xen-devel
>   

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

* Re: /etc/grub.d/09-xen for generating grub.cfg for hypervisor boot entries.
  2010-05-19 20:19             ` Richie
@ 2010-05-19 22:23               ` Bruce Edge
  0 siblings, 0 replies; 9+ messages in thread
From: Bruce Edge @ 2010-05-19 22:23 UTC (permalink / raw)
  To: xen-devel


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

OK, here's the minor mod to only do this for Xen kernels as determined by
DOM0=y in boot/config-*
Added header and switched from sh to bash to get param subst functionality
because I'm too lazy to think about other options.

========================================= cut
================================
#!/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

========================================= cut
================================
-Bruce


On Wed, May 19, 2010 at 1:19 PM, Richie <listmail@triad.rr.com> wrote:

> Ok.  Thanks for correcting my mistake.
>
> Jeremy Fitzhardinge wrote:
>
>> On 05/19/2010 10:47 AM, listmail wrote:
>>
>>
>>> Yes that should do it and no corresponding boot/config-$(uname -r)
>>> means nothing will be generated for the respective kernel.  There
>>> could also be a check for CONFIG_XEN=y to support Xenlinux kernels. That
>>> entry should not exist in pvops .config
>>>
>>
>> Yes, it does.  CONFIG_XEN is the master switch for all Xen-related
>> features in a pvops kernel.  You would have to look for the absence of
>> CONFIG_PARAVIRT to detect a Xenlinux kernel.
>>
>>    J
>>
>> _______________________________________________
>> Xen-devel mailing list
>> Xen-devel@lists.xensource.com
>> http://lists.xensource.com/xen-devel
>>
>>
>
>

[-- Attachment #1.2: Type: text/html, Size: 7545 bytes --]

[-- Attachment #2: Type: text/plain, Size: 138 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel

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

end of thread, other threads:[~2010-05-19 22:23 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-05-18 22:30 /etc/grub.d/09-xen for generating grub.cfg for hypervisor boot entries Bruce Edge
2010-05-19  0:24 ` Richie
2010-05-19 16:04   ` Bruce Edge
2010-05-19 17:07     ` Richie
2010-05-19 17:11       ` Bruce Edge
2010-05-19 17:47         ` listmail
2010-05-19 18:09           ` Jeremy Fitzhardinge
2010-05-19 20:19             ` Richie
2010-05-19 22:23               ` Bruce Edge

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).