From 38b6fce4e5c3cf1ded525307d710e0cd91939248 Mon Sep 17 00:00:00 2001 From: Martin Gracik Date: Thu, 25 Feb 2010 10:54:02 +0100 Subject: [PATCH] Make sure we have at least one kernel If the only kernel we have is a PAE or xen kernel, make sure we copy it to the isolinux directory, and create the efi images. --- src/pylorax/__init__.py | 97 +++++++++++++++++++++++++++++------------ 1 file changed, 68 insertions(+), 29 deletions(-) diff --git a/src/pylorax/__init__.py b/src/pylorax/__init__.py index 338661da..006f207c 100644 --- a/src/pylorax/__init__.py +++ b/src/pylorax/__init__.py @@ -174,46 +174,85 @@ class Lorax(BaseLoraxClass): initrd = images.InitRD(self.installtree, modules, initrd_template, self.workdir) + # get all kernels and initrds + kernel_normal, kernel_pae, kernel_xen = [], [], [] for kernel, initrd in initrd.create(): + if kernel.is_pae: + kernel_pae.append((kernel, initrd)) + elif kernel.is_xen: + kernel_xen.append((kernel, initrd)) + else: + kernel_normal.append((kernel, initrd)) + + # if we have a normal kernel, set it as the main kernel + kernels = [] + try: + kernels.append(kernel_normal.pop(0)) + except IndexError: + pass + + # add pae and xen kernels to the list of kernels + kernels.extend(kernel_pae) + kernels.extend(kernel_xen) + + # check if we have at least one kernel + if not kernels: + self.pcritical("no kernel images found") + sys.exit(1) + + # main kernel + kernel, initrd = kernels.pop(0) + kernelfile = "vmlinuz" + initrdfile = "initrd.img" + + # add images section to treeinfo + section = "images-{0}".format(self.conf.basearch) + data = {"kernel": "images/pxeboot/{0}".format(kernelfile), + "initrd": "images/pxeboot/{0}".format(initrdfile)} + self.treeinfo_add_section(self.conf.treeinfo, section, data) + + # copy the kernel and initrd image to the isolinux directory + kdst = os.path.join(self.conf.isodir, kernelfile) + idst = os.path.join(self.conf.isodir, initrdfile) + shutil.copy2(kernel.path, kdst) + shutil.copy2(initrd, idst) + + # copy the kernel and initrd image to the pxe directory + kdst = os.path.join(self.conf.pxedir, kernelfile) + idst = os.path.join(self.conf.pxedir, initrdfile) + shutil.copy2(kernel.path, kdst) + shutil.copy2(initrd, idst) + + # create the efi images + if self.installtree.do_efi: + efi = images.EFI(self.installtree, kernel, initrd, + self.product, self.version, self.workdir) + + efiboot, efidisk = efi.create() + + # copy the efi images to the images directory + shutil.copy2(efiboot, self.conf.imgdir) + shutil.copy2(efidisk, self.conf.imgdir) + + # other kernels + for kernel, initrd in kernels: if kernel.is_pae: kernelfile = "vmlinuz-PAE" initrdfile = "initrd-PAE.img" - - # add images section to treeinfo + # XXX add images section to treeinfo section = "images-xen" - data = {"kernel": "images/pxeboot/vmlinuz-PAE", - "initrd": "images/pxeboot/initrd-PAE.img"} + data = {"kernel": "images/pxeboot/{0}".format(kernelfile), + "initrd": "images/pxeboot/{0}".format(initrdfile)} self.treeinfo_add_section(self.conf.treeinfo, section, data) elif kernel.is_xen: kernelfile = "vmlinuz-xen" initrdfile = "initrd-xen.img" - else: - kernelfile = "vmlinuz" - initrdfile = "initrd.img" - - # add images section to treeinfo - section = "images-{0}".format(self.conf.basearch) - data = {"kernel": "images/pxeboot/vmlinuz", - "initrd": "images/pxeboot/initrd.img"} + # XXX add images section to treeinfo + section = "images-xen" + data = {"kernel": "images/pxeboot/{0}".format(kernelfile), + "initrd": "images/pxeboot/{0}".format(initrdfile)} self.treeinfo_add_section(self.conf.treeinfo, section, data) - # copy the kernel and initrd image to the isolinux directory - kdst = os.path.join(self.conf.isodir, kernelfile) - idst = os.path.join(self.conf.isodir, initrdfile) - shutil.copy2(kernel.path, kdst) - shutil.copy2(initrd, idst) - - # create the efi images - if self.installtree.do_efi: - efi = images.EFI(self.installtree, kernel, initrd, - self.product, self.version, self.workdir) - - efiboot, efidisk = efi.create() - - # copy the efi images to the images directory - shutil.copy2(efiboot, self.conf.imgdir) - shutil.copy2(efidisk, self.conf.imgdir) - # copy the kernel and initrd image to the pxe directory kdst = os.path.join(self.conf.pxedir, kernelfile) idst = os.path.join(self.conf.pxedir, initrdfile)