diff --git a/pym/install/variables/system.py b/pym/install/variables/system.py index 011137f..4e03e85 100644 --- a/pym/install/variables/system.py +++ b/pym/install/variables/system.py @@ -36,6 +36,7 @@ import calculate.lib.variables.env as libenv from calculate.lib.encrypt import get_shadow_hash, get_grub_hash from calculate.core.server.admin import Admins import calculate.lib.cl_ini_parser as cl_ini_parser +from calculate.lib.cl_template import SystemIni from calculate.lib.cl_lang import setLocalTranslate, _ @@ -711,7 +712,23 @@ class VariableOsNvidiaMask(ReadonlyVariable): Get nvidia card mask versions """ - def get(self): + def get_cards_id(self): + category = "0300" + vendor = "10de:" + lsPciProg = getProgPath("/usr/sbin/lspci") + nvidiacards = filter(lambda x: " %s: " % category in x, + process(lsPciProg, "-d", vendor, "-n")) + cardsid = \ + map(lambda x: x.groups()[0], + filter(lambda x: x, + map(lambda x: re.search( + "[0-9a-fA-F]{4}:([0-9a-fA-F]{4})", x), + nvidiacards))) + if not cardsid: + return set() + return set(cardsid) + + def get_legacy(self): image = self.Get('cl_image') try: if image: @@ -723,22 +740,11 @@ class VariableOsNvidiaMask(ReadonlyVariable): 'usr/portage/eclass/nvidia-driver.eclass') if not os.access(nvidiaeclass, os.R_OK): return "" - category = "0300" - vendor = "10de:" - lsPciProg = getProgPath("/usr/sbin/lspci") - nvidiacards = filter(lambda x: " %s: " % category in x, - process(lsPciProg, "-d", vendor, "-n")) if not nvidiacards: return "" - cardsid = \ - map(lambda x: x.groups()[0], - filter(lambda x: x, - map(lambda x: re.search( - "[0-9a-fA-F]{4}:([0-9a-fA-F]{4})", x), - nvidiacards))) + cardsid = self.get_cards_id() if not cardsid: return "" - cardsid = set(cardsid) eclassdata = readFile(nvidiaeclass) reBlock = re.compile( r"if has \$\{nvidia_gpu\}\s+\\([^;]+);\s*then(.*?)fi", re.S) @@ -758,6 +764,22 @@ class VariableOsNvidiaMask(ReadonlyVariable): image.close() return "" + def get_new(self, ini): + cardsid = self.get_cards_id() + for nvidia_serie in ini.getKeys('nvidia'): + nvidia_ids = set(ini.getVar('nvidia', nvidia_serie).split(',')) + if cardsid & nvidia_ids: + if nvidia_serie.isdigit(): + return ">=x11-drivers/nvidia-drivers-{}".format(int(nvidia_serie)+1) + return "" + + def get(self): + ini = SystemIni(self.parent) + if ini.getKeys('nvidia'): + return self.get_new(ini) + else: + return self.get_legacy() + class VariableOsInstallLvmSet(ReadonlyVariable): """