From b669c3c29cc35ea0852d09965c13b2582f968aca Mon Sep 17 00:00:00 2001 From: David Abdurachmanov Date: Jun 13 2018 11:51:58 +0000 Subject: Improve no-bootloader support In Fedora/RISC-V case kernel and bootloader (BBL - Berkeley Boot Loader) are external to the image. The image only delivers rootfs. Thus our kickstart has `bootloader --location=none --disabled`. If user disabled bootloader: - Allow user to pick partition layout (i.e. do not ignore it). - Do not write GRUB Legacy config The changes were successfully used for Fedora RISC-V (riscv64) disk images. Signed-off-by: David Abdurachmanov --- diff --git a/appcreate/appliance.py b/appcreate/appliance.py index 34971a3..639073d 100644 --- a/appcreate/appliance.py +++ b/appcreate/appliance.py @@ -165,22 +165,29 @@ class ApplianceImageCreator(ImageCreator): packages = kickstart.get_packages(self.ks) # make this the default partition_layout = 'msdos' - # check for extlinux in kickstart then grub2 and falling back to grub - if hasattr(self.ks.handler.bootloader, "extlinux"): - if 'syslinux-extlinux' in packages: - self.bootloader = 'extlinux' - elif 'extlinux-bootloader' in packages: - self.bootloader = 'extlinux-bootloader' + if (not hasattr(self.ks.handler.bootloader, "disabled")) or \ + (hasattr(self.ks.handler.bootloader, "disabled") and self.ks.handler.bootloader.disabled is False): + # check for extlinux in kickstart then grub2 and falling back to grub + if hasattr(self.ks.handler.bootloader, "extlinux"): + if 'syslinux-extlinux' in packages: + self.bootloader = 'extlinux' + elif 'extlinux-bootloader' in packages: + self.bootloader = 'extlinux-bootloader' + else: + logging.warning("WARNING! syslinux-extlinux package not found.") else: - logging.warning("WARNING! syslinux-extlinux package not found.") + if 'grub2' in packages: + self.bootloader = 'grub2' + partition_layout = 'gpt' + elif 'grub' in packages: + self.bootloader = 'grub' + else: + logging.warning("WARNING! grub package not found.") else: - if 'grub2' in packages: - self.bootloader = 'grub2' - partition_layout = 'gpt' - elif 'grub' in packages: - self.bootloader = 'grub' - else: - logging.warning("WARNING! grub package not found.") + # user explicitly disabled bootloader (i.e. not part of the image) + if hasattr(self.ks.handler.clearpart, "disklabel"): + logging.debug("Using user set default disk label: {}".format(self.ks.handler.clearpart.disklabel)) + partition_layout = self.ks.handler.clearpart.disklabel self.__instloop = PartitionedMount(self.__disks, self._instroot, @@ -516,9 +523,12 @@ class ApplianceImageCreator(ImageCreator): def _create_bootconfig(self): logging.debug("Writing kickstart file.") self._write_kickstart() - # For EC2 lets always make a grub Legacy config file - logging.debug("Writing GRUB Legacy config.") - self._create_grub_config() + # For EC2 lets make a grub Legacy config file + # (only if bootloader is enabled) + if (hasattr(self.ks.handler.bootloader, "disabled") and self.ks.handler.bootloader.disabled is False) and \ + (hasattr(self.ks.handler.bootloader, "location") and self.ks.handler.bootloader.location != "none"): + logging.debug("Writing GRUB Legacy config.") + self._create_grub_config() if self.bootloader == 'grub2': # We have GRUB2 package installed