From: Gang Wei <gang.wei(a)intel.com>
If tboot package installed, create multiboot entries in GRUB config for kernels.
Signed-off-by: Gang Wei <gang.wei(a)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