Source: grub2 Severity: wishlist Version: 2.02~beta2-11 Control: retitle -1 please provide prebuilt grub-xen binaries for host (dom0) use
I'm attaching a new version with a grub.cfg which is tested and seems to work. I've also taken the liberty of filing this into a wishlist bug (keeping entire quoted text below for the bug). I needed to do a little hack which is to rmmod memdisk before searching for /boot/grub/grub.cfg or else it just loops infinitely finding the grub.cfg in the memdisk. I have a feeling that the same thing might apply to debian/grub-firmware-qemu_grub.cfg. Ian. On Mon, 2014-07-28 at 18:50 +0100, Ian Campbell wrote: > Any thoughts on providing something like this, something like the patch > below? My hope is that the xen-utils package can eventually Recommend: > it. > > I wasn't sure whether to go for a static binary built at build time or a > grub-mkimage invocation in a postinst. I went for the former in the end > since I couldn't really think of a good reason to do the more dynamic > thing. > > One thing I'm not sure about is the proper content for > debian/grub-xen-host_grub.cfg. I copied the qemu one but it has a few > issues, namely that the "Search & source /boot/grub/grub.cfg" just ends > up finding the builtin grub.cfg in the memdisk over again. I suspect the > same would happen with the qemu version (although I've not tried it). > Adding "rmmod memdisk" solves that issue, at which point selecting the > search menu item appends the standard debian stuff to the list where I > would expect it to replace the menu. > > Perhaps a better option would be a script which first searches > for /boot/..../core.img (produced by the grub-xen package) and if found > chainloads it otherwise searches for /boot/grub/grub.cfg and loads it. > Thoughts? > > Ian. > > -------------------------- > > From ffec013d9a220844811a705f6af4441347ddbef5 Mon Sep 17 00:00:00 2001 > From: Ian Campbell <i...@hellion.org.uk> > Date: Sun, 27 Jul 2014 18:48:01 +0100 > Subject: [PATCH] Provide prebuilt grub-xen binaries for host use in a new > grub-xen-host package. > > These can be referenced via kernel= in guest cfg to boot a guest using grub2. > > debian/grub-xen-host_grub.cfg is the same as the qemu-firmware variant, > although I'm not sure what the best content is so it's more of a placeholder > for now. > --- > debian/changelog | 8 ++++++++ > debian/control | 17 +++++++++++++++++ > debian/grub-xen-host.dirs | 1 + > debian/grub-xen-host.install | 2 ++ > debian/grub-xen-host_grub.cfg | 37 +++++++++++++++++++++++++++++++++++++ > debian/rules | 37 +++++++++++++++++++++++++++++++++---- > 6 files changed, 98 insertions(+), 4 deletions(-) > create mode 100644 debian/grub-xen-host.dirs > create mode 100644 debian/grub-xen-host.install > create mode 100644 debian/grub-xen-host_grub.cfg > > diff --git a/debian/changelog b/debian/changelog > index 5e45a82..80e8022 100644 > --- a/debian/changelog > +++ b/debian/changelog > @@ -1,3 +1,11 @@ > +grub2 (2.02~beta2-12) UNRELEASED; urgency=medium > + > + [ Ian Campbell ] > + * Provide prebuilt grub-xen binaries for host use in a new grub-xen-host > + package. > + > + -- Colin Watson <cjwat...@debian.org> Sun, 27 Jul 2014 18:43:57 +0100 > + > grub2 (2.02~beta2-11) unstable; urgency=medium > > * Force grub-pc/mixed_legacy_and_grub2 to be reshown, rather than failing > diff --git a/debian/control b/debian/control > index 22c7fc2..1578702 100644 > --- a/debian/control > +++ b/debian/control > @@ -632,6 +632,23 @@ Description: GRand Unified Bootloader, version 2 (Xen > version) > This package contains a version of GRUB that has been built for use with > the Xen hypervisor (i.e. PV-GRUB). > > +Package: grub-xen-host > +Architecture: i386 amd64 > +Depends: ${shlibs:Depends}, ${misc:Depends}, grub-xen-bin (= > ${binary:Version}) > +Multi-Arch: foreign > +Description: GRand Unified Bootloader, version 2 (Xen host version) > + GRUB is a portable, powerful bootloader. This version of GRUB is based on a > + cleaner design than its predecessors, and provides the following new > features: > + . > + - Scripting in grub.cfg using BASH-like syntax. > + - Support for modern partition maps such as GPT. > + - Modular generation of grub.cfg via update-grub. Packages providing GRUB > + add-ons can plug in their own script rules and trigger updates by > invoking > + update-grub. > + . > + This package arranges for GRUB binary images which can be used to boot a Xen > + guest (i.e. PV-GRUB) to be present in the control domain filesystem. > + > Package: grub-yeeloong-bin > Architecture: any-mipsel > Depends: ${shlibs:Depends}, ${misc:Depends}, grub-common (= > ${binary:Version}) > diff --git a/debian/grub-xen-host.dirs b/debian/grub-xen-host.dirs > new file mode 100644 > index 0000000..a8dc877 > --- /dev/null > +++ b/debian/grub-xen-host.dirs > @@ -0,0 +1 @@ > +usr/lib/grub-xen > diff --git a/debian/grub-xen-host.install b/debian/grub-xen-host.install > new file mode 100644 > index 0000000..43c7506 > --- /dev/null > +++ b/debian/grub-xen-host.install > @@ -0,0 +1,2 @@ > +obj/grub-xen-host-i386/grub-i386-xen.bin usr/lib/grub-xen > +obj/grub-xen-host-amd64/grub-x86_64-xen.bin usr/lib/grub-xen > diff --git a/debian/grub-xen-host_grub.cfg b/debian/grub-xen-host_grub.cfg > new file mode 100644 > index 0000000..d23f22a > --- /dev/null > +++ b/debian/grub-xen-host_grub.cfg > @@ -0,0 +1,37 @@ > +set default=0 > +set fallback=1 > +set timeout=10 > + > +menuentry "Search & load /boot/multiboot.img" { > + search -s -f /boot/multiboot.img > + if multiboot /boot/multiboot.img ; then > + boot > + fi > + unset timeout > +} > + > +# For separate /boot partition. > +menuentry "Search & load /multiboot.img" { > + search -s -f /multiboot.img > + if multiboot /multiboot.img ; then > + boot > + fi > + unset timeout > +} > + > +menuentry "Search & source /boot/grub/grub.cfg" { > + search -s -f /boot/grub/grub.cfg > + source /boot/grub/grub.cfg > + unset timeout > +} > + > +# For separate /boot partition. > +menuentry "Search & source /grub/grub.cfg" { > + search -s -f /grub/grub.cfg > + source /grub/grub.cfg > + unset timeout > +} > + > +menuentry "Reboot" { > + reboot > +} > diff --git a/debian/rules b/debian/rules > index f478e94..b5d3d68 100755 > --- a/debian/rules > +++ b/debian/rules > @@ -35,7 +35,7 @@ confflags = PACKAGE_VERSION="$(deb_version)" > PACKAGE_STRING="GRUB $(deb_version) > AUTOGEN_DEB_FILES = config templates preinst postinst postrm dirs install > links maintscript > > BUILD_PACKAGES := $(strip $(shell dh_listpackages)) > -REAL_PACKAGES = grub-emu grub-pc grub-coreboot grub-efi-ia32 grub-efi-amd64 > grub-efi-ia64 grub-efi-arm grub-efi-arm64 grub-ieee1275 grub-firmware-qemu > grub-uboot grub-xen grub-yeeloong > +REAL_PACKAGES = grub-emu grub-pc grub-coreboot grub-efi-ia32 grub-efi-amd64 > grub-efi-ia64 grub-efi-arm grub-efi-arm64 grub-ieee1275 grub-firmware-qemu > grub-uboot grub-xen grub-xen-host grub-yeeloong > > ifneq (,$(filter i386 amd64,$(DEB_HOST_ARCH_CPU))) > COMMON_PLATFORM := pc > @@ -177,6 +177,35 @@ debian/stamps/build-grub-efi-ia32 > debian/stamps/build-grub-efi-amd64 debian/stam > dh_auto_build > touch $@ > > +debian/stamps/configure-grub-xen-host: > + touch $@ > + > +debian/stamps/configure-grub-xen-host-%: > + touch $@ > + > +debian/stamps/build-grub-xen-host-i386: GRUB_TARGET := i386-xen > +debian/stamps/build-grub-xen-host-amd64: GRUB_TARGET := x86_64-xen > +debian/stamps/build-grub-xen-host-%: debian/stamps/build-grub-xen-% > + target=$(subst debian/stamps/build-grub-xen-host-,,$@) ; \ > + obj_dir=$(CURDIR)/obj/grub-xen-$${target} ; \ > + grub_dir=`mktemp -d` ; \ > + grub_memdisk=`mktemp` ; \ > + trap "rm -rf $${grub_dir} $${grub_memdisk}" EXIT HUP INT QUIT TERM ; \ > + mkdir -p $${grub_dir}/boot/grub ; \ > + mkdir -p $(CURDIR)/obj/$(package) ; \ > + cp debian/grub-xen-host_grub.cfg $${grub_dir}/boot/grub/grub.cfg ; \ > + tar -cf - -C $${grub_dir} boot > $${grub_memdisk} ; \ > + $${obj_dir}/grub-mkimage \ > + -O $(GRUB_TARGET) \ > + -d $${obj_dir}/grub-core \ > + $${obj_dir}/grub-core/*.mod \ > + -m $${grub_memdisk} \ > + -o $(CURDIR)/obj/$(package)/grub-$(GRUB_TARGET).bin > + touch $@ > + > +debian/stamps/build-grub-xen-host: debian/stamps/build-grub-xen-host-i386 > debian/stamps/build-grub-xen-host-amd64 > + touch $@ > + > debian/stamps/build-grub-pc: debian/stamps/configure-grub-pc > dh_auto_build > ifeq ($(with_check), yes) > @@ -356,7 +385,7 @@ ifeq (yes,$(shell dpkg-vendor --derives-from Ubuntu && > echo yes)) > endif > > override_dh_install: > - dh_install -pgrub2 -pgrub-linuxbios -pgrub-efi -pgrub-rescue-pc > -pgrub-firmware-qemu > + dh_install -pgrub2 -pgrub-linuxbios -pgrub-efi -pgrub-rescue-pc > -pgrub-firmware-qemu -pgrub-xen-host > dh_install -pgrub-common -pgrub2-common -pgrub-theme-starfield > -pgrub-mount-udeb --sourcedir=debian/tmp-grub-$(COMMON_PLATFORM) > rm -f debian/grub2-common/usr/share/info/dir* > rm -f > debian/grub-theme-starfield/usr/share/grub/themes/starfield/COPYING.CC-BY-SA-3.0 > @@ -383,8 +412,8 @@ endif > endif > > override_dh_installdocs: > - dh_installdocs -pgrub-common -pgrub-rescue-pc -pgrub-firmware-qemu -A > AUTHORS NEWS README THANKS TODO > - dh_installdocs -Ngrub-common -Ngrub-rescue-pc -Ngrub-firmware-qemu > --link-doc=grub-common > + dh_installdocs -pgrub-common -pgrub-rescue-pc -pgrub-firmware-qemu > -pgrub-xen-host -A AUTHORS NEWS README THANKS TODO > + dh_installdocs -Ngrub-common -Ngrub-rescue-pc -Ngrub-firmware-qemu > -pgrub-xen-host --link-doc=grub-common > > ifeq (yes,$(shell dpkg-vendor --derives-from Ubuntu && echo yes)) > override_dh_installinit:
From 1991990214fed29e3383c24d1857432ea0086971 Mon Sep 17 00:00:00 2001 From: Ian Campbell <i...@hellion.org.uk> Date: Sun, 27 Jul 2014 18:48:01 +0100 Subject: [PATCH] Provide prebuilt grub-xen binaries for host use in a new grub-xen-host package. These can be referenced via kernel= in guest cfg to boot a guest using grub2. debian/grub-xen-host_grub.cfg is the same as the qemu-firmware variant, although I'm not sure what the best content is so it's more of a placeholder for now. --- v2: Include a usable grub.cfg --- debian/changelog | 5 +++++ debian/control | 17 +++++++++++++++++ debian/grub-xen-host.dirs | 1 + debian/grub-xen-host.install | 2 ++ debian/grub-xen-host_grub.cfg | 25 +++++++++++++++++++++++++ debian/rules | 39 +++++++++++++++++++++++++++++++++++---- 6 files changed, 85 insertions(+), 4 deletions(-) create mode 100644 debian/grub-xen-host.dirs create mode 100644 debian/grub-xen-host.install create mode 100644 debian/grub-xen-host_grub.cfg diff --git a/debian/changelog b/debian/changelog index 3babeee..70efa0a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,7 +1,12 @@ grub2 (2.02~beta2-12) UNRELEASED; urgency=medium + [ Colin Watson ] * Point Vcs-* fields back at master. + [ Ian Campbell ] + * Provide prebuilt grub-xen binaries for host use in a new grub-xen-host + package. + -- Colin Watson <cjwat...@debian.org> Tue, 19 Aug 2014 13:19:40 +0100 grub2 (2.02~beta2-11) unstable; urgency=medium diff --git a/debian/control b/debian/control index bb4540d..b6dec59 100644 --- a/debian/control +++ b/debian/control @@ -632,6 +632,23 @@ Description: GRand Unified Bootloader, version 2 (Xen version) This package contains a version of GRUB that has been built for use with the Xen hypervisor (i.e. PV-GRUB). +Package: grub-xen-host +Architecture: i386 amd64 +Depends: ${shlibs:Depends}, ${misc:Depends}, grub-xen-bin (= ${binary:Version}) +Multi-Arch: foreign +Description: GRand Unified Bootloader, version 2 (Xen host version) + GRUB is a portable, powerful bootloader. This version of GRUB is based on a + cleaner design than its predecessors, and provides the following new features: + . + - Scripting in grub.cfg using BASH-like syntax. + - Support for modern partition maps such as GPT. + - Modular generation of grub.cfg via update-grub. Packages providing GRUB + add-ons can plug in their own script rules and trigger updates by invoking + update-grub. + . + This package arranges for GRUB binary images which can be used to boot a Xen + guest (i.e. PV-GRUB) to be present in the control domain filesystem. + Package: grub-yeeloong-bin Architecture: any-mipsel Depends: ${shlibs:Depends}, ${misc:Depends}, grub-common (= ${binary:Version}) diff --git a/debian/grub-xen-host.dirs b/debian/grub-xen-host.dirs new file mode 100644 index 0000000..a8dc877 --- /dev/null +++ b/debian/grub-xen-host.dirs @@ -0,0 +1 @@ +usr/lib/grub-xen diff --git a/debian/grub-xen-host.install b/debian/grub-xen-host.install new file mode 100644 index 0000000..43c7506 --- /dev/null +++ b/debian/grub-xen-host.install @@ -0,0 +1,2 @@ +obj/grub-xen-host-i386/grub-i386-xen.bin usr/lib/grub-xen +obj/grub-xen-host-amd64/grub-x86_64-xen.bin usr/lib/grub-xen diff --git a/debian/grub-xen-host_grub.cfg b/debian/grub-xen-host_grub.cfg new file mode 100644 index 0000000..1ad895c --- /dev/null +++ b/debian/grub-xen-host_grub.cfg @@ -0,0 +1,25 @@ +# First search for a suitable grub to chainload +search -s -f /boot/grub/@@TARGET@@/core.elf +if multiboot /boot/grub/@@TARGET@@/core.elf ; then + echo "Chainloading (${root})/boot/grub/@@TARGET@@/core.elf" + boot +fi + +search -s -f /grub/@@TARGET@@/core.elf +if multiboot /grub/@@TARGET@@/core.elf ; then + echo "Chainloading (${root})/grub/@@TARGET@@/core.elf" + boot +fi + +# Second try looking for grub.cfg + +# Ensure we don't find this file again... +rmmod memdisk + +search -s -f /boot/grub/grub.cfg +echo "Trying (${root})/boot/grub/grub.cfg" +configfile /boot/grub/grub.cfg + +search -s -f /grub/grub.cfg +echo "Trying (${root})/grub/grub.cfg" +configfile /grub/grub.cfg diff --git a/debian/rules b/debian/rules index f478e94..18f4776 100755 --- a/debian/rules +++ b/debian/rules @@ -35,7 +35,7 @@ confflags = PACKAGE_VERSION="$(deb_version)" PACKAGE_STRING="GRUB $(deb_version) AUTOGEN_DEB_FILES = config templates preinst postinst postrm dirs install links maintscript BUILD_PACKAGES := $(strip $(shell dh_listpackages)) -REAL_PACKAGES = grub-emu grub-pc grub-coreboot grub-efi-ia32 grub-efi-amd64 grub-efi-ia64 grub-efi-arm grub-efi-arm64 grub-ieee1275 grub-firmware-qemu grub-uboot grub-xen grub-yeeloong +REAL_PACKAGES = grub-emu grub-pc grub-coreboot grub-efi-ia32 grub-efi-amd64 grub-efi-ia64 grub-efi-arm grub-efi-arm64 grub-ieee1275 grub-firmware-qemu grub-uboot grub-xen grub-xen-host grub-yeeloong ifneq (,$(filter i386 amd64,$(DEB_HOST_ARCH_CPU))) COMMON_PLATFORM := pc @@ -177,6 +177,37 @@ debian/stamps/build-grub-efi-ia32 debian/stamps/build-grub-efi-amd64 debian/stam dh_auto_build touch $@ +debian/stamps/configure-grub-xen-host: + touch $@ + +debian/stamps/configure-grub-xen-host-%: + touch $@ + +debian/stamps/build-grub-xen-host-i386: GRUB_TARGET := i386-xen +debian/stamps/build-grub-xen-host-amd64: GRUB_TARGET := x86_64-xen +debian/stamps/build-grub-xen-host-%: debian/stamps/build-grub-xen-% + target=$(subst debian/stamps/build-grub-xen-host-,,$@) ; \ + obj_dir=$(CURDIR)/obj/grub-xen-$${target} ; \ + grub_dir=`mktemp -d` ; \ + grub_memdisk=`mktemp` ; \ + trap "rm -rf $${grub_dir} $${grub_memdisk}" EXIT HUP INT QUIT TERM ; \ + mkdir -p $${grub_dir}/boot/grub ; \ + mkdir -p $(CURDIR)/obj/$(package) ; \ + sed -e "s/@@TARGET@@/$(GRUB_TARGET)/g" \ + <debian/grub-xen-host_grub.cfg \ + >$${grub_dir}/boot/grub/grub.cfg ; \ + tar -cf - -C $${grub_dir} boot > $${grub_memdisk} ; \ + $${obj_dir}/grub-mkimage \ + -O $(GRUB_TARGET) \ + -d $${obj_dir}/grub-core \ + $${obj_dir}/grub-core/*.mod \ + -m $${grub_memdisk} \ + -o $(CURDIR)/obj/$(package)/grub-$(GRUB_TARGET).bin + touch $@ + +debian/stamps/build-grub-xen-host: debian/stamps/build-grub-xen-host-i386 debian/stamps/build-grub-xen-host-amd64 + touch $@ + debian/stamps/build-grub-pc: debian/stamps/configure-grub-pc dh_auto_build ifeq ($(with_check), yes) @@ -356,7 +387,7 @@ ifeq (yes,$(shell dpkg-vendor --derives-from Ubuntu && echo yes)) endif override_dh_install: - dh_install -pgrub2 -pgrub-linuxbios -pgrub-efi -pgrub-rescue-pc -pgrub-firmware-qemu + dh_install -pgrub2 -pgrub-linuxbios -pgrub-efi -pgrub-rescue-pc -pgrub-firmware-qemu -pgrub-xen-host dh_install -pgrub-common -pgrub2-common -pgrub-theme-starfield -pgrub-mount-udeb --sourcedir=debian/tmp-grub-$(COMMON_PLATFORM) rm -f debian/grub2-common/usr/share/info/dir* rm -f debian/grub-theme-starfield/usr/share/grub/themes/starfield/COPYING.CC-BY-SA-3.0 @@ -383,8 +414,8 @@ endif endif override_dh_installdocs: - dh_installdocs -pgrub-common -pgrub-rescue-pc -pgrub-firmware-qemu -A AUTHORS NEWS README THANKS TODO - dh_installdocs -Ngrub-common -Ngrub-rescue-pc -Ngrub-firmware-qemu --link-doc=grub-common + dh_installdocs -pgrub-common -pgrub-rescue-pc -pgrub-firmware-qemu -pgrub-xen-host -A AUTHORS NEWS README THANKS TODO + dh_installdocs -Ngrub-common -Ngrub-rescue-pc -Ngrub-firmware-qemu -pgrub-xen-host --link-doc=grub-common ifeq (yes,$(shell dpkg-vendor --derives-from Ubuntu && echo yes)) override_dh_installinit: -- 2.0.1