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

Bug#770039: marked as done (unblock: grub2/2.02~beta2-16)



Your message dated Thu, 20 Nov 2014 18:57:29 +0000
with message-id <20141120185729.GS6216@lupin.home.powdarrmonkey.net>
and subject line Re: Bug#770039: unblock: grub2/2.02~beta2-16
has caused the Debian Bug report #770039,
regarding unblock: grub2/2.02~beta2-16
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
770039: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=770039
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: unblock

grub2 2.02~beta2-16 finishes off Xen host/guest integration.  GRUB has
had most of this for a while, but the packaging work to make it possible
to install grub-xen-host in the host, grub-xen in the guest, and then
automatically boot GRUB in the guest wasn't present.

I know this is a bit more than your standard unblock request, and indeed
we're still waiting for this to pass through NEW.  But we're
anticipating this being *really* useful for administrators of Xen
hosting setups - it beats the messes that were PV-GRUB Legacy and
PyGrub, or even keeping track of kernel versions by hand - and it would
be fantastic to have this in jessie.

Here's a tidied-up version of the relevant git diff.

diff --git a/debian/changelog b/debian/changelog
index a75c97b..40db9e9 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,12 @@
+grub2 (2.02~beta2-16) unstable; urgency=medium
+
+  [ Ian Campbell ]
+  * Provide prebuilt grub-xen binaries for host use in a new grub-xen-host
+    package.
+  * Build/Install binaries into /boot/xen when installing grub-xen.
+
+ -- Ian Campbell <ijc@debian.org>  Thu, 06 Nov 2014 13:32:01 +0000
+
 grub2 (2.02~beta2-15) unstable; urgency=medium
 
   * Disable nvram installation again on chrp_ibm machines that are emulated
diff --git a/debian/control b/debian/control
index 5563214..dedd1c5 100644
--- a/debian/control
+++ b/debian/control
@@ -634,6 +634,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.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.lintian-overrides b/debian/grub-xen-host.lintian-overrides
new file mode 100644
index 0000000..4f482a1
--- /dev/null
+++ b/debian/grub-xen-host.lintian-overrides
@@ -0,0 +1,2 @@
+grub-xen-host: statically-linked-binary usr/lib/grub-xen/grub-i386-xen.bin
+grub-xen-host: statically-linked-binary usr/lib/grub-xen/grub-x86_64-xen.bin
diff --git a/debian/grub-xen-host_grub-bootstrap.cfg b/debian/grub-xen-host_grub-bootstrap.cfg
new file mode 100644
index 0000000..e988314
--- /dev/null
+++ b/debian/grub-xen-host_grub-bootstrap.cfg
@@ -0,0 +1 @@
+normal (memdisk)/grub.cfg
diff --git a/debian/grub-xen-host_grub.cfg b/debian/grub-xen-host_grub.cfg
new file mode 100644
index 0000000..319c3b3
--- /dev/null
+++ b/debian/grub-xen-host_grub.cfg
@@ -0,0 +1,24 @@
+# First search for a suitable grub to chainload
+if search -s -f /boot/xen/pvboot-@@PVBOOT_ARCH@@.elf ; then
+	echo "Chainloading (${root})/boot/xen/pvboot-@@PVBOOT_ARCH@@.elf"
+	multiboot /boot/xen/pvboot-@@PVBOOT_ARCH@@.elf"
+	boot
+fi
+
+if search -s -f /xen/pvboot-@@PVBOOT_ARCH@@.elf ; then
+	echo "Chainloading (${root})/xen/pvboot-@@PVBOOT_ARCH@@.elf"
+	multiboot /xen/pvboot-@@PVBOOT_ARCH@@.elf"
+	boot
+fi
+
+# Second try looking for grub.cfg
+
+if search -s -f /boot/grub/grub.cfg ; then
+	echo "Reading (${root})/boot/grub/grub.cfg"
+	configfile /boot/grub/grub.cfg
+fi
+
+if search -s -f /grub/grub.cfg ; then
+	echo "Reading (${root})/grub/grub.cfg"
+	configfile /grub/grub.cfg
+fi
diff --git a/debian/patches/grub-install-pvxen-paths.patch b/debian/patches/grub-install-pvxen-paths.patch
new file mode 100644
index 0000000..6fdeb64
--- /dev/null
+++ b/debian/patches/grub-install-pvxen-paths.patch
@@ -0,0 +1,71 @@
+From c211ee1c228bc978ffc4b399155ebfeb7524d2e0 Mon Sep 17 00:00:00 2001
+From: Ian Campbell <ijc@hellion.org.uk>
+Date: Sat, 6 Sep 2014 12:20:12 +0100
+Subject: grub-install: Install PV Xen binaries into the upstream specified
+ path
+
+Upstream have defined a specification for where guests ought to place their
+xenpv grub binaries in order to facilitate chainloading from a stage 1 grub
+loaded from dom0.
+
+http://xenbits.xen.org/docs/unstable-staging/misc/x86-xenpv-bootloader.html
+
+The spec calls for installation into /boot/xen/pvboot-i386.elf or
+/boot/xen/pvboot-x86_64.elf.
+
+Signed-off-by: Ian Campbell <ijc@hellion.org.uk>
+
+Bug-Debian: https://bugs.debian.org/762307
+Forwarded: http://lists.gnu.org/archive/html/grub-devel/2014-10/msg00041.html
+Last-Update: 2014-10-24
+
+Patch-Name: grub-install-pvxen-paths.patch
+
+---
+v2: Respect bootdir, create /boot/xen as needed.
+---
+ util/grub-install.c | 24 ++++++++++++++++++++++--
+ 1 file changed, 22 insertions(+), 2 deletions(-)
+
+diff --git a/util/grub-install.c b/util/grub-install.c
+index 70f514c..7a7734e 100644
+--- a/util/grub-install.c
++++ b/util/grub-install.c
+@@ -1979,6 +1979,28 @@ main (int argc, char *argv[])
+ 	}
+       break;
+ 
++    case GRUB_INSTALL_PLATFORM_I386_XEN:
++      {
++	char *path = grub_util_path_concat (2, bootdir, "xen");
++	char *dst = grub_util_path_concat (2, path, "pvboot-i386.elf");
++	grub_install_mkdir_p (path);
++	grub_install_copy_file (imgfile, dst, 1);
++	free (dst);
++	free (path);
++      }
++      break;
++
++    case GRUB_INSTALL_PLATFORM_X86_64_XEN:
++      {
++	char *path = grub_util_path_concat (2, bootdir, "xen");
++	char *dst = grub_util_path_concat (2, path, "pvboot-x86_64.elf");
++	grub_install_mkdir_p (path);
++	grub_install_copy_file (imgfile, dst, 1);
++	free (dst);
++	free (path);
++      }
++      break;
++
+     case GRUB_INSTALL_PLATFORM_MIPSEL_LOONGSON:
+     case GRUB_INSTALL_PLATFORM_MIPSEL_QEMU_MIPS:
+     case GRUB_INSTALL_PLATFORM_MIPS_QEMU_MIPS:
+@@ -1987,8 +2009,6 @@ main (int argc, char *argv[])
+     case GRUB_INSTALL_PLATFORM_MIPSEL_ARC:
+     case GRUB_INSTALL_PLATFORM_ARM_UBOOT:
+     case GRUB_INSTALL_PLATFORM_I386_QEMU:
+-    case GRUB_INSTALL_PLATFORM_I386_XEN:
+-    case GRUB_INSTALL_PLATFORM_X86_64_XEN:
+       grub_util_warn ("%s",
+ 		      _("WARNING: no platform-specific install was performed"));
+       break;
diff --git a/debian/patches/series b/debian/patches/series
index b68e230..e675322 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -60,3 +60,4 @@ platform-none.patch
 mips-abiflags.patch
 ieee1275-clear-reset.patch
 ppc64el-disable-vsx.patch
+grub-install-pvxen-paths.patch
diff --git a/debian/postinst.in b/debian/postinst.in
index 94c200c..30e6947 100644
--- a/debian/postinst.in
+++ b/debian/postinst.in
@@ -722,6 +722,17 @@ case "$1" in
       grub-yeeloong)
         grub-install --target=mipsel-loongson
       ;;
+
+      grub-xen)
+        # Install for x86_64 regardless of arch, since a 32-bit userspace can still boot with a 64-bit kernel.
+	mkdir -p /boot/xen
+        grub-install --target=x86_64-xen
+        case $(dpkg --print-architecture) in
+          i386)
+            grub-install --target=i386-xen
+          ;;
+        esac
+      ;;
     esac
 
     # If grub.cfg has been generated, update it.
diff --git a/debian/rules b/debian/rules
index f6daa0c..5264310 100755
--- a/debian/rules
+++ b/debian/rules
@@ -36,7 +36,11 @@ substvars =
 AUTOGEN_DEB_FILES = config templates preinst postinst postrm dirs install links maintscript
 
 BUILD_PACKAGES := $(strip $(shell dh_listpackages))
+# REAL_PACKAGES build an actual grub variant (and therefore have both configure
+# and build stages). EXTRA_PACKAGES do not build grub but may depend on a
+# REAL_PACKAGE (and therefore only have a build stage)
 REAL_PACKAGES = grub-common 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
+EXTRA_PACKAGES = grub-rescue-pc grub-xen-host
 
 ifneq (,$(filter i386 amd64,$(DEB_HOST_ARCH_CPU)))
 COMMON_PLATFORM := pc
@@ -109,7 +113,7 @@ override_dh_auto_build: $(patsubst %,build/%,$(BUILD_PACKAGES))
 override_dh_auto_install: $(patsubst %,install/%,$(BUILD_PACKAGES))
 
 $(patsubst %,configure/%,$(REAL_PACKAGES)) :: configure/% : debian/stamps/configure-%
-$(patsubst %,build/%,$(REAL_PACKAGES) grub-rescue-pc) :: build/% : debian/stamps/build-%
+$(patsubst %,build/%,$(REAL_PACKAGES) $(EXTRA_PACKAGES)) :: build/% : debian/stamps/build-%
 
 debian/stamps/configure-%: package = $(subst debian/stamps/configure-,,$@)
 debian/stamps/configure-%: export DH_OPTIONS = -p$(package) -Bobj/$(package)
@@ -176,6 +180,32 @@ debian/stamps/build-grub-none debian/stamps/build-grub-efi-ia32 debian/stamps/bu
 	dh_auto_build
 	touch $@
 
+debian/stamps/build-grub-xen-host-i386: PVBOOT_ARCH := i386
+debian/stamps/build-grub-xen-host-amd64: PVBOOT_ARCH := x86_64
+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/@@PVBOOT_ARCH@@/$(PVBOOT_ARCH)/g" \
+	    <debian/grub-xen-host_grub.cfg \
+	    >$${grub_dir}/grub.cfg ; \
+	tar -cf - -C $${grub_dir} grub.cfg > $${grub_memdisk} ; \
+	$${obj_dir}/grub-mkimage \
+		-O $(PVBOOT_ARCH)-xen \
+		-c $(CURDIR)/debian/grub-xen-host_grub-bootstrap.cfg \
+		-d $${obj_dir}/grub-core \
+		$${obj_dir}/grub-core/*.mod \
+		-m $${grub_memdisk} \
+		-o $(CURDIR)/obj/$(package)/grub-$(PVBOOT_ARCH)-xen.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)
@@ -371,7 +401,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
@@ -400,8 +430,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 -Ngrub-xen-host --link-doc=grub-common
 
 ifeq ($(FLICKER_FREE_BOOT),yes)
 override_dh_installinit:

unblock grub2/2.02~beta2-16

Thanks,

-- 
Colin Watson                                       [cjwatson@debian.org]

--- End Message ---
--- Begin Message ---
On Tue, Nov 18, 2014 at 02:47:22PM +0000, Colin Watson wrote:
> grub2 2.02~beta2-16 finishes off Xen host/guest integration.  GRUB has
> had most of this for a while, but the packaging work to make it possible
> to install grub-xen-host in the host, grub-xen in the guest, and then
> automatically boot GRUB in the guest wasn't present.
> 
> I know this is a bit more than your standard unblock request, and indeed
> we're still waiting for this to pass through NEW.  But we're
> anticipating this being *really* useful for administrators of Xen
> hosting setups - it beats the messes that were PV-GRUB Legacy and
> PyGrub, or even keeping track of kernel versions by hand - and it would
> be fantastic to have this in jessie.

I nudged ftp masters, and it's now in sid (thanks, ftp!)

Unblocked, but aged to 10 days to catch bugs.


-- 
Jonathan Wiltshire                                      jmw@debian.org
Debian Developer                         http://people.debian.org/~jmw

4096R: 0xD3524C51 / 0A55 B7C5 1223 3942 86EC  74C3 5394 479D D352 4C51

Attachment: signature.asc
Description: Digital signature


--- End Message ---

Reply to: