diff --git a/i18n/cl_builder_ru.mo b/i18n/cl_builder_ru.mo index 99256d9..d95ab0e 100644 Binary files a/i18n/cl_builder_ru.mo and b/i18n/cl_builder_ru.mo differ diff --git a/pym/cl_builder.py b/pym/cl_builder.py index 3c5cbfc..c3fccd7 100644 --- a/pym/cl_builder.py +++ b/pym/cl_builder.py @@ -23,7 +23,8 @@ import sys import traceback from os import path from cl_utils import process,pathJoin,getRunCommands,getTupleVersion,\ - childMounts,_toUNICODE,isMount + childMounts,_toUNICODE,isMount,typeFile, \ + removeDir from subprocess import STDOUT,PIPE from cl_print import color_print from cl_datavars import DataVars @@ -158,6 +159,59 @@ class cl_builder(color_print): self.printERROR(failMessage) self.startMessage = "" + def _getCommand(self,commandlist): + return " ".join(map(lambda x:'"%s"'%x if " " in x else x,commandlist)) + + def runChroot(self,chroot,command): + """Run command in chroot specified by cl_assemble_path""" + try: + envdict = {'CHROOT':"on"} + envdict.update(os.environ) + commandLine = ["chroot",chroot, + "/bin/bash","-c",command] + chrootCommand = process(*commandLine,stderr=PIPE, + stdout=PIPE,envdict=envdict) + except KeyboardInterrupt: + chrootCommand.kill() + raise BuilderError( + _("An interrupt occurred during the command executing")+ + ":\n %s"%self._getCommand(chrootCommand.command)) + return chrootCommand + + def cleanNeedlessKernelData(self, distrPath): + """Cleaning needless kernel files from /boot,/lib/modules,/usr/src""" + self.printMessageForTest(_("Cleaning %s directory")% "/boot") + bootDir = path.join(distrPath, "boot") + modulesDir = path.join(distrPath, "lib/modules") + reTrash =re.compile("^(?:config|initramfs|vmlinuz|System.map)") + rightKernelFiles = \ + [self.clVars.Get('cl_builder_initrd_install'), + self.clVars.Get('cl_builder_kernel'), + self.clVars.Get('cl_builder_kernel_config'), + self.clVars.Get('cl_builder_kernel_systemmap')] + delFiles = filter(lambda x: not x in rightKernelFiles, + filter(reTrash.search, + os.listdir(bootDir))) + map(lambda x:os.unlink(path.join(bootDir,x)),delFiles) + self.printByResult(True) + self.printMessageForTest(_("Cleaning %s directory") % "/lib/modules") + reKernelVer = re.compile(" version (\S+)\s",re.S) + ftype = typeFile(magic=0x4).getMType + resReg = reKernelVer.search(ftype(path.join(bootDir, + self.clVars.Get('cl_builder_kernel')))) + if resReg: + kernelVersion = resReg.groups()[0] + map(lambda x:removeDir(path.join(modulesDir,x)), + filter(lambda x:x != kernelVersion, + os.listdir(modulesDir))) + self.printByResult(True) + self.printMessageForTest(_("Cleaning %s directory")% "/usr/src") + removeKernelSources = filter(lambda x:x and x != "/usr/src/linux", + self.runChroot(distrPath,"qfile -o /usr/src/*")) + map(lambda x:removeDir(path.join(distrPath,x)), + removeKernelSources) + self.printByResult(True) + def prepareSourceDistributive(self,distr): """Unmount all bind,proc mount points from source distribute""" mp = self.clVars.Get('cl_builder_path') @@ -168,7 +222,9 @@ class cl_builder(color_print): if umountProcess.failed(): raise AssembleError(_("Can not umount %s")%target) self.printByResult(True) - self.applyTemplatesForSquash(distr.convertToDirectory().getDirectory()) + distrPath = distr.convertToDirectory().getDirectory() + self.cleanNeedlessKernelData(distrPath) + self.applyTemplatesForSquash(distrPath) def isoPrepacking(self,directory): self.printByResult(True)