diff --git a/pym/cl_fill.py b/pym/cl_fill.py index 9068caf..68cf24d 100644 --- a/pym/cl_fill.py +++ b/pym/cl_fill.py @@ -558,19 +558,7 @@ class fillVars(varsShare): def get_cl_kernel_uid(self): """Get UID of symlink kernel, initramfs and System.map""" - uuidpath = '/dev/disk/by-uuid' - if not os.access(uuidpath,os.R_OK): - return "" - uuidDevs = filter(path.islink,map(lambda x: path.join(uuidpath,x), - os.listdir(uuidpath))) - mapDevUuid = dict(map(lambda x:(path.normpath(path.join(uuidpath, - os.readlink(x))), - path.basename(x)), - uuidDevs)) - if self.Get('os_root_dev') in mapDevUuid: - return mapDevUuid[self.Get('os_root_dev')][:8] - else: - return "" + return self.getKernelUid(self.Get('os_root_dev')) def get_cl_chroot_status(self): """Detect chroot mode by mtab content""" diff --git a/pym/cl_utils.py b/pym/cl_utils.py index 0d72762..7d2e281 100644 --- a/pym/cl_utils.py +++ b/pym/cl_utils.py @@ -221,7 +221,10 @@ class process: else: stdin=kwarg["stdin"].getStdout self.stdout = kwarg.get("stdout",PIPE) - self.envdict = kwarg.get("envdict",None) + self.envdict = kwarg.get("envdict",{}) + if "lang" in kwarg: + self.envdict["LANG"] = kwarg.get('lang') + self.langc = "langc" in kwarg self.stderr = kwarg.get("stderr",PIPE) self.command = [command] + list(params) @@ -364,7 +367,7 @@ class processProgress(process): pass def runOsCommand(cmd,in_str=None, env_dict=None): - """Выполняет внешнюю программу + """Run system command Параметры: cmd внешняя программа @@ -392,30 +395,17 @@ def runOsCommand(cmd,in_str=None, env_dict=None): return retcode, res def genpassword(passlen=9): - '''Вернуть случайный набор символов указанной длины - - Параметры: - passlen длина пароля который нужно сгенерировать - - Возвращаемые параметры: - Сгенерированный пароль указанной длины - ''' - res=''.join([choice(string.ascii_letters+string.digits)\ - for i in xrange(passlen)]) - return res + """Return random charset specified lenght (passlen)""" + return ''.join(map(lambda x:choice(string.ascii_letters+string.digits), + xrange(0,passlen))) def getpathenv(): - """Вернуть пути для запуска утилит""" - bindir=['/sbin','/bin','/usr/sbin','/usr/bin'] + """Return path for run utilities""" + bindir=set(filter(path.exists, + ['/sbin','/bin','/usr/sbin','/usr/bin'])) env=os.environ - if env and env.has_key('PATH'): - lpath=env['PATH'].split(":") - npath=[] - for dirname in bindir: - if path.exists(dirname) and dirname not in lpath: - npath.append(dirname) - lpath=npath+lpath - return ":".join(lpath) + envPath = set(env.get('PATH','').split(":")) | bindir + return ":".join(envPath) class MultiReplace: """MultiReplace function object @@ -627,7 +617,6 @@ def isFstabMount(pathname,mapDevUuid={},listFstab=[]): absPath = "swap" else: absPath = path.abspath(pathname) - devuuid = '/dev/disk/by-uuid' if not mapDevUuid: mapDevUuid.update(getUUIDDict()) # convert fstab to @@ -844,8 +833,7 @@ def readFile(filename): return open(filename,'r').read() except (OSError,IOError): pass - finally: - return "" + return "" def getUUIDDict(revers=False): """Get dict UUID -> dev""" @@ -893,7 +881,7 @@ def getProgPath(progname): return False def checkUtils(*utils): - """Check utils and exit if it not found""" + """Check utils, exit if it not found and return fullpath""" retval = [] for util in utils: utilPath = getProgPath(util) diff --git a/pym/cl_vars_share.py b/pym/cl_vars_share.py index 71cadd8..29274c5 100644 --- a/pym/cl_vars_share.py +++ b/pym/cl_vars_share.py @@ -16,7 +16,7 @@ import os import sys -from cl_utils import getpathenv, runOsCommand, typeFile +from cl_utils import getpathenv, runOsCommand, typeFile,process import re from os import path, R_OK try: @@ -528,6 +528,16 @@ class varsShare: if reRes: return reRes[0] + def selectVar(self,selField,where="",eq=""): + """Select value from matrix variables + + Example: + selectVar("os_disk_dev",where="os_disk_mount",eq="/")""" + res = filter(lambda x:x[1] == eq, + zip(self.Get(selField), + self.Get(where))) or [("","")] + return res[0][0] + def getVersionFromGentooFiles(self,systemroot): """Get version from gentoo files""" gentooFile = path.join(systemroot,"etc/gentoo-release") @@ -607,3 +617,13 @@ class varsShare: return defaultDriver[hr_video] else: return "vesa" + + def getKernelUid(self,device): + """Get Kernel UID by UUID of device""" + blkidProcess = process('/sbin/blkid','-c','/dev/null','-s','UUID', + '-o','value',device) + res = blkidProcess.read().strip() + if res: + return res[:8] + else: + return "no_uid"