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

[PATCH] add multiboot support for tboot



From: Gang Wei <gang wei intel com>

If tboot package installed, create multiboot entries in GRUB config for kernels.

Signed-off-by: Gang Wei <gang wei intel com>
---
 pyanaconda/bootloader.py |   72 ++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 60 insertions(+), 12 deletions(-)

diff --git a/pyanaconda/bootloader.py b/pyanaconda/bootloader.py
index 6df0107..02940f3 100644
--- a/pyanaconda/bootloader.py
+++ b/pyanaconda/bootloader.py
@@ -114,6 +114,25 @@ class LinuxBootLoaderImage(BootLoaderImage):
             filename = "initramfs-%s.img" % self.version
         return filename
 
+class MultibootLinuxBootLoaderImage(LinuxBootLoaderImage):
+    def __init__(self, device=None, label=None, short=None, version=None,
+                 multiboot=None, mbargs=None, args=None):
+        super(MultibootLinuxBootLoaderImage, self).__init__(
+                                                    device=device, label=label,
+                                                    short=short, version=version)
+        self._multiboot = multiboot      # filename string
+        self._mbargs = mbargs
+        self._args = args
+
+    @property
+    def multiboot(self):
+        return self._multiboot
+
+    def mbargs(self):
+        return self._mbargs
+
+    def args(self):
+        return self._args
 
 class BootLoader(object):
     """TODO:
@@ -1123,15 +1142,30 @@ class GRUB(BootLoader):
                 grub_root = self.grub_device_name(self.stage2_device)
                 args.update(["ro", "root=%s" % image.device.fstabSpec])
                 args.update(self.boot_args)
-                stanza = ("title %(label)s (%(version)s)\n"
-                          "\troot %(grub_root)s\n"
-                          "\tkernel %(prefix)s/%(kernel)s %(args)s\n"
-                          "\tinitrd %(prefix)s/%(initrd)s\n"
-                          % {"label": image.label, "version": image.version,
-                             "grub_root": grub_root,
-                             "kernel": image.kernel, "initrd": image.initrd,
-                             "args": args,
-                             "prefix": self.boot_prefix})
+                if isinstance(image, MultibootLinuxBootLoaderImage):
+                    args.update(image.args)
+                    stanza = ("title %(label)s (%(version)s)\n"
+                              "\troot %(grub_root)s\n"
+                              "\tkernel %(prefix)s/%(multiboot)s %(mbargs)s\n"
+                              "\tmodule %(prefix)s/%(kernel)s %(args)s\n"
+                              "\tmodule %(prefix)s/%(initrd)s\n"
+                              % {"label": image.label, "version": image.version,
+                                 "grub_root": grub_root,
+                                 "multiboot": image.multiboot,
+                                 "mbargs": image.mbargs,
+                                 "kernel": image.kernel, "initrd": image.initrd,
+                                 "args": args,
+                                 "prefix": self.boot_prefix})
+                else:
+                    stanza = ("title %(label)s (%(version)s)\n"
+                              "\troot %(grub_root)s\n"
+                              "\tkernel %(prefix)s/%(kernel)s %(args)s\n"
+                              "\tinitrd %(prefix)s/%(initrd)s\n"
+                              % {"label": image.label, "version": image.version,
+                                 "grub_root": grub_root,
+                                 "kernel": image.kernel, "initrd": image.initrd,
+                                 "args": args,
+                                 "prefix": self.boot_prefix})
             else:
                 stanza = ("title %(label)s\n"
                           "\trootnoverify %(grub_root)s\n"
@@ -1905,6 +1939,11 @@ def writeSysconfigKernel(anaconda, default_kernel):
     f.write("DEFAULTKERNEL=%s\n" % default_kernel)
     f.close()
 
+def is_trusted_boot(anaconda):
+    if anaconda.backend.ayum.isPackageInstalled(name="tboot"):
+        return True
+    else:
+        return False
 
 def writeBootloader(anaconda):
     """ Write bootloader configuration to disk.
@@ -1971,9 +2010,18 @@ def writeBootloader(anaconda):
         used.append(nick)
         label = "%s-%s" % (base_label, nick)
         short = "%s-%s" % (base_short, nick)
-        image = LinuxBootLoaderImage(device=anaconda.storage.rootDevice,
-                                     version=version,
-                                     label=label, short=short)
+        if is_trusted_boot(anaconda):
+            image = MultibootLinuxBootLoaderImage(
+                                         device=anaconda.storage.rootDevice,
+                                         version=version,
+                                         label=label, short=short,
+                                         multiboot="tboot.gz",
+                                         mbargs=["logging=vga,serial,memory"],
+                                         args=["intel_iommu=on"])
+        else:
+            image = LinuxBootLoaderImage(device=anaconda.storage.rootDevice,
+                                         version=version,
+                                         label=label, short=short)
         anaconda.bootloader.add_image(image)
 
     # write out /etc/sysconfig/kernel
-- 
1.7.5.1



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