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

[Xen-devel] [OSSTEST PATCH 27/35] netboot: UEFI grub: Do it more like pxe



* Abolish setup_grub_efi_bootcfg and use setup_netboot_bootcfg
  instead.  The latter function now expects to be given a config file
  for the host's bootloader.  For a UEFI host, that's a grub config
  file, which it will write to the configured NetGrub location for the
  specific host.

* Consequently, we no longer copy an actual grub image around every
  time we do a bootloader setup.  Instead, we expect that the tftp
  server will be configured to point relevant hosts at a suitable
  fixed image, which will go to our config file.

* Also, consequently, write the NetGrubTemplate path when we want to
  setup the bootloader, rather than the ad-hoc grub-%ether%.

* Update mg-netgrub-loader-update jessie so that it writes the
  NetGrubTemplateReal from the config into the grub.cfg so that the
  grub image will read that file and then read the file created by
  setup_netboot_bootcfg.

* Document this in its head comment.

Currently this new mg-netgrub-loader-update is untested because jessie
i386 grub (which is what we would run on the osstest controllers) does
not understand the arm64-efi target.  But the new Netgrub.cfg location
is in use.

Signed-off-by: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>
---
 Osstest/TestSupport.pm   | 19 ++-----------------
 mg-netgrub-loader-update | 17 +++++++++++++++++
 2 files changed, 19 insertions(+), 17 deletions(-)

diff --git a/Osstest/TestSupport.pm b/Osstest/TestSupport.pm
index 9be40a2..ed70579 100644
--- a/Osstest/TestSupport.pm
+++ b/Osstest/TestSupport.pm
@@ -2457,25 +2457,10 @@ END
 sub setup_netboot_di_uboot ($$$$$;%) { return &setup_netboot_di_bios; }
 sub setup_netboot_local_uboot ($) { return &setup_netboot_local_bios; }
 
-sub setup_grub_efi_bootcfg ($$) {
-    my ($ho, $bootfile) = @_;
-    my $f = "grub.cfg-$ho->{Ether}";
-    my $grub= $ho->{Tftp}{Path}.'/'.$ho->{Tftp}{GrubBase}.'/'.
-       $c{TftpGrubVersion}."/pxegrub-$r{arch}.efi";
-    my $img=$ho->{Tftp}{Path}.'/'.hostnamepath($ho).'/pxe.img';
-
-    logm("Copy $grub => $img");
-    copy($grub, $img) or die "Copy $grub to $img failed: $!";
-
-    logm("grub_efi bootcfg into $f");
-    file_link_contents("$ho->{Tftp}{Path}$ho->{Tftp}{TmpDir}$f",
-                      $bootfile,  hostnamepath($ho)."-pxegrub.cfg");
-}
-
 # UEFI systems netboot using grub.efi
 sub setup_netboot_di_uefi ($$$$$;%) {
     my ($ho,$kern,$initrd,$dicmd,$hocmd,%xopts) = @_;
-    setup_grub_efi_bootcfg($ho, <<END);
+    setup_netboot_bootcfg($ho, <<END);
 set default=0
 set timeout=5
 menuentry 'overwrite' {
@@ -2493,7 +2478,7 @@ sub setup_netboot_local_uefi ($) {
                        i386  IA32);
     die "EFI arch" unless $efi_archs{ $r{arch} };
     my $efi = $efi_archs{ $r{arch} };
-    setup_grub_efi_bootcfg($ho, <<END);
+    setup_netboot_bootcfg($ho, <<END);
 set default=0
 set timeout=5
 menuentry 'local' {
diff --git a/mg-netgrub-loader-update b/mg-netgrub-loader-update
index ec6dfd3..21157a2 100755
--- a/mg-netgrub-loader-update
+++ b/mg-netgrub-loader-update
@@ -3,6 +3,12 @@
 #   ./mg-netgrub-loader-update jessie
 #
 # Requires grub-mkimage (Debian package: grub-common)
+#
+# Creates $c{TftpPath}/$c{TftpGrubBase}/YYYY-MM-DD/grub/*.efi
+# which expect to load .../YYYY-MM-DD/grub/grub.cfg
+# which in turn loads .../Netgrub.cfg/EE:EE:EE:EE:EE:EE
+# (where EE:EE:EE:EE:EE:EE is the MAC address)
+# (or whatever else is specified in TftpNetGrubTemplates).
 
 # This is part of "osstest", an automated testing framework for Xen.
 # Copyright (C) 2015 Citrix Inc.
@@ -40,6 +46,17 @@ dst=$date
 
 grubpfx=$grubbase/$date/grub
 
+grubcfg=$(perl -e '
+       use Osstest;
+       use Osstest::TestSupport;
+       readglobalconfig;
+        my $k = qw(TftpNetGrubTemplatesReal);
+       my $file = subst_netboot_template $c{$k},
+           { ether => qw(${net_default_mac}) },
+            $k;
+       print $file, "\n" or die $!;
+')
+
 mkdir -p $dstroot
 cd $dstroot
 mkdir -p $dst
-- 
2.1.4


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.