Rebuild initramfs if it is missing

There's no reason to require the initramfs when we can rebuild it using
the version from the kernel. This adds handling of missing initramfs so
that lmc kickstarts can remove it from the squashfs, saving about 40M on
the iso.
This commit is contained in:
Brian C. Lane 2016-05-04 10:35:31 -07:00
parent 9559acfcb0
commit 50b15d72b5
1 changed files with 14 additions and 7 deletions

View File

@ -261,27 +261,34 @@ class TreeBuilder(object):
If backup is empty, the existing initrd files will be overwritten. If backup is empty, the existing initrd files will be overwritten.
If suffix is specified, the existing initrd is untouched and a new If suffix is specified, the existing initrd is untouched and a new
image is built with the filename "${prefix}-${kernel.version}.img" image is built with the filename "${prefix}-${kernel.version}.img"
If the initrd doesn't exist its name will be created based on the
name of the kernel.
''' '''
add_args = add_args or [] add_args = add_args or []
dracut = ["dracut", "--nomdadmconf", "--nolvmconf"] + add_args dracut = ["dracut", "--nomdadmconf", "--nolvmconf"] + add_args
if not backup: if not backup:
dracut.append("--force") dracut.append("--force")
kernels = [kernel for kernel in self.kernels if hasattr(kernel, "initrd")] if not self.kernels:
if not kernels: raise Exception("No kernels found, cannot rebuild_initrds")
raise Exception("No initrds found, cannot rebuild_initrds")
# Hush some dracut warnings. TODO: bind-mount proc in place? # Hush some dracut warnings. TODO: bind-mount proc in place?
open(joinpaths(self.vars.inroot,"/proc/modules"),"w") open(joinpaths(self.vars.inroot,"/proc/modules"),"w")
for kernel in kernels: for kernel in self.kernels:
if prefix: if prefix:
idir = os.path.dirname(kernel.initrd.path) idir = os.path.dirname(kernel.path)
outfile = joinpaths(idir, prefix+'-'+kernel.version+'.img') outfile = joinpaths(idir, prefix+'-'+kernel.version+'.img')
else: elif hasattr(kernel, "initrd"):
# If there is an existing initrd, use that
outfile = kernel.initrd.path outfile = kernel.initrd.path
else:
# Construct an initrd from the kernel name
outfile = kernel.path.replace("vmlinuz-", "initrd-") + ".img"
logger.info("rebuilding %s", outfile) logger.info("rebuilding %s", outfile)
if backup: if backup:
initrd = joinpaths(self.vars.inroot, outfile) initrd = joinpaths(self.vars.inroot, outfile)
if os.path.exists(initrd):
os.rename(initrd, initrd + backup) os.rename(initrd, initrd + backup)
cmd = dracut + [outfile, kernel.version] cmd = dracut + [outfile, kernel.version]
runcmd(cmd, root=self.vars.inroot) runcmd(cmd, root=self.vars.inroot)