def start(cls): Tools.ProcessArguments(Modules) call(["clear"]) Tools.PrintHeader() Core.PrintMenuAndGetDesiredFeatures() if var.kernel or Modules.GetFiles(): Core.GetDesiredKernel() Core.VerifySupportedArchitecture() Tools.Clean() Core.VerifyPreliminaryBinaries() Core.CreateBaselayout() Core.VerifyBinaries() Core.CopyBinaries() Core.CopyManPages() Core.CopyModules() Core.CopyFirmware() # Dependencies must be copied before we create links since the commands inside of # the create links (i.e chroot) function require that the libraries are already # in our chroot environment. Core.CopyDependencies() Core.CreateLinks() Core.LastSteps() Core.CreateInitramfs() Tools.CleanAndExit(var.initrd)
def CopyModules(cls): moddeps = set() # Build the list of module dependencies Tools.Info("Copying modules ...") # Checks to see if all the modules in the list exist (if any) for file in Modules.GetFiles(): try: cmd = ("find " + var.modules + ' -iname "' + file + '.ko" | grep ' + file + ".ko") result = check_output(cmd, universal_newlines=True, shell=True).strip() cls._modset.add(result) except CalledProcessError: Tools.ModuleDoesntExist(file) # If a kernel has been set, try to update the module dependencies # database before searching it if var.kernel: try: result = call(["depmod", var.kernel]) if result: Tools.Fail("Error updating module dependency database!") except FileNotFoundError: # This should never occur because the application checks # that root is the user that is running the application. # Non-administraative users normally don't have access # to the 'depmod' command. Tools.Fail("The 'depmod' command wasn't found.") # Get the dependencies for all the modules in our set for file in cls._modset: # Get only the name of the module match = re.search("(?<=/)[a-zA-Z0-9_-]+.ko", file) if match: sFile = match.group().split(".")[0] cmd = ("modprobe -S " + var.kernel + " --show-depends " + sFile + " | awk -F ' ' '{print $2}'") results = check_output(cmd, shell=True, universal_newlines=True).strip() for i in results.split("\n"): moddeps.add(i.strip()) # Copy the modules/dependencies if moddeps: for module in moddeps: Tools.Copy(module) # Update module dependency database inside the initramfs cls.GenerateModprobeInfo()
def LastSteps(cls): Tools.Info("Performing finishing steps ...") # Create mtab file call(["touch", var.temp + "/etc/mtab"]) if not os.path.isfile(var.temp + "/etc/mtab"): Tools.Fail("Error creating the mtab file. Exiting.") cls.CreateLibraryLinks() # Copy the init script Tools.SafeCopy(var.files_dir + "/init", var.temp) # Give execute permissions to the script cr = call(["chmod", "u+x", var.temp + "/init"]) if cr != 0: Tools.Fail("Failed to give executive privileges to " + var.temp + "/init") # Sets initramfs script version number cmd = f"echo {var.version} > {var.temp}/version.bliss" call(cmd, shell=True) # Copy all of the modprobe configurations if os.path.isdir("/etc/modprobe.d/"): shutil.copytree("/etc/modprobe.d/", var.temp + "/etc/modprobe.d/") cls.CopyUdevAndSupportFiles() cls.DumpSystemKeymap() # Any last substitutions or additions/modifications should be done here if Luks.IsEnabled(): # Copy over our keyfile if the user activated it if Luks.IsKeyfileEnabled(): Tools.Flag("Embedding our keyfile into the initramfs...") Tools.SafeCopy(Luks.GetKeyfilePath(), var.temp + "/etc", "keyfile") # Copy over our detached header if the user activated it if Luks.IsDetachedHeaderEnabled(): Tools.Flag( "Embedding our detached header into the initramfs...") Tools.SafeCopy(Luks.GetDetachedHeaderPath(), var.temp + "/etc", "header") # Add any modules needed into the initramfs requiredModules = ",".join(Modules.GetFiles()) cmd = f"echo {requiredModules} > {var.temp}/modules.bliss" call(cmd, shell=True) cls.CopyLibGccLibrary()
def LastSteps(cls): """Performes any last minute steps like copying zfs.conf, giving init execute permissions, setting up symlinks, etc. """ Tools.Info("Performing finishing steps ...") # Create mtab file call(["touch", var.temp + "/etc/mtab"]) if not os.path.isfile(var.temp + "/etc/mtab"): Tools.Fail("Error creating the mtab file. Exiting.") cls.CreateLibraryLinks() # Copy the init script Tools.SafeCopy(var.filesDirectory + "/init", var.temp) # Give execute permissions to the script cr = call(["chmod", "u+x", var.temp + "/init"]) if cr != 0: Tools.Fail("Failed to give executive privileges to " + var.temp + "/init") # Sets initramfs script version number cmd = f"echo {var.version} > {var.temp}/version.bliss" call(cmd, shell=True) # Copy all of the modprobe configurations if os.path.isdir(var.modprobeDirectory): Tools.CopyTree(var.modprobeDirectory, var.temp + var.modprobeDirectory) cls.CopyUdevAndSupportFiles() cls.DumpSystemKeymap() # Any last substitutions or additions/modifications should be done here # Add any modules needed into the initramfs requiredModules = ",".join(Modules.GetFiles()) cmd = f"echo {requiredModules} > {var.temp}/modules.bliss" call(cmd, shell=True) cls.CopyLibGccLibrary()