def createSkeletonSiteAttrs(self): self.getSiteDotAttrs() if os.path.exists('/tmp/site.attrs'): return file = open('/tmp/site.attrs', 'w') # # set the language # cmdline = open('/proc/cmdline', 'r') args = string.split(cmdline.readline()) cmdline.close() # # the default language # lang = 'en_US' langsupport = 'en_US' for arg in args: if arg.count('lang='): a = string.split(arg, '=') if len(a) > 1 and a[1] == 'ko': lang = 'ko_KR' langsupport = string.join( ['ko_KR.UTF-8', 'ko_KR', 'ko', 'en_US.UTF-8', 'en_US']) file.write('Kickstart_Lang:%s\n' % lang) file.write('Kickstart_Langsupport:%s\n' % langsupport) file.close() return
def createPopt(self, dir=None): if dir == None: dir = self.rootdir if not os.path.exists(dir): os.system('mkdir -p %s' % (dir)) filename = os.path.join(dir, '.popt') if not os.path.exists(filename): file = open(filename, 'w') file.write("rpm alias --dbpath --define '_dbpath !#:+'") file.write("\n") file.close() return
def createPopt(self, dir=None): if dir is None: dir = self.rootdir if not os.path.exists(dir): os.system('mkdir -p %s' % (dir)) filename = os.path.join(dir, '.popt') if not os.path.exists(filename): file = open(filename, 'w') file.write("rpm alias --dbpath --define '_dbpath !#:+'") file.write("\n") file.close() return
def createSkeletonSiteAttrs(self): self.getSiteDotAttrs() if os.path.exists('/tmp/site.attrs'): return file = open('/tmp/site.attrs', 'w') # # set the language # cmdline = open('/proc/cmdline', 'r') args = string.split(cmdline.readline()) cmdline.close() # # the default language # lang = 'en_US' langsupport = 'en_US' for arg in args: if arg.count('lang='): a = string.split(arg, '=') if len(a) > 1 and a[1] == 'ko': lang = 'ko_KR' langsupport = string.join([ 'ko_KR.UTF-8', 'ko_KR', 'ko', 'en_US.UTF-8', 'en_US' ]) file.write('Kickstart_Lang:%s\n' % lang) file.write('Kickstart_Langsupport:%s\n' % langsupport) file.close() return
def getExternalRPMS(self): import stack.roll import stack.redhat.gen attrs = {} for row in self.call('list.host.attr', ['localhost']): attrs[row['attr']] = row['value'] xml = self.command('list.node.xml', ['everything', 'eval=n', 'attrs=%s' % attrs]) # # make sure the XML string is ASCII and not unicode, # otherwise, the parser will fail # xmlinput = xml.encode('ascii', 'ignore') generator = stack.redhat.gen.Generator() generator.setProfileType('native') generator.setArch(self.arch) generator.setOS('redhat') generator.parse(xmlinput) # call the getPackages, for just enabled packages and flatten it rpms = [ pkg for node_pkgs in generator.packageSet.getPackages() ['enabled'].values() for pkg in node_pkgs ] # create a yum.conf file that contains only repos from the # default-all box # cwd = os.getcwd() yumconf = os.path.join(cwd, 'yum.conf') file = open(yumconf, 'w') file.write('[main]\n') file.write('cachedir=%s/cache\n' % cwd) file.write('keepcache=0\n') file.write('debuglevel=2\n') file.write('logfile=%s/yum.log\n' % cwd) file.write('pkgpolicy=newest\n') file.write('distroverpkg=os-release\n') file.write('tolerant=1\n') file.write('exactarch=1\n') file.write('obsoletes=1\n') file.write('gpgcheck=0\n') file.write('plugins=0\n') file.write('metadata_expire=1800\n') file.write('reposdir=%s\n' % cwd) for o in self.call('list.pallet', []): boxes = o['boxes'].split() if 'default-all' in boxes: file.write('[%s]\n' % o['name']) file.write('name=%s\n' % o['name']) file.write( 'baseurl=file:///export/stack/pallets/%s/%s/%s/redhat/%s\n' % (o['name'], o['version'], o['release'], o['arch'])) file.close() # Use system python (2.x) cmd = ['/usr/bin/python', '/opt/stack/sbin/yumresolver', yumconf] cmd.extend(rpms) proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) stdout, stdrr = proc.communicate() try: selected = json.loads(stdout) except ValueError: raise CommandError(self, 'Unable to parse yum dependency resolution') # # copy all the selected files into the pallet but before we # do that, rewrite the yum.conf file to include only the # 'default-os' box which will ensure that we only put # os-related packages in the os pallet (otherwise, packages # from the 'stacki' pallet would leak into the os pallet # file = open(yumconf, 'w') file.write('[main]\n') file.write('cachedir=%s/cache\n' % cwd) file.write('keepcache=0\n') file.write('debuglevel=2\n') file.write('logfile=%s/yum.log\n' % cwd) file.write('pkgpolicy=newest\n') file.write('distroverpkg=os-release\n') file.write('tolerant=1\n') file.write('exactarch=1\n') file.write('obsoletes=1\n') file.write('gpgcheck=0\n') file.write('plugins=0\n') file.write('metadata_expire=1800\n') file.write('reposdir=%s\n' % cwd) for o in self.call('list.pallet', []): boxes = o['boxes'].split() if 'default-os' in boxes: file.write('[%s]\n' % o['name']) file.write('name=%s\n' % o['name']) file.write( 'baseurl=file:///export/stack/pallets/%s/%s/%s/redhat/%s\n' % (o['name'], o['version'], o['release'], o['arch'])) file.close() destdir = os.path.join(cwd, 'RPMS') cmd = ['yumdownloader', '--destdir=%s' % destdir, '-y', '-c', yumconf] cmd.extend(selected) subprocess.call(cmd, stdin=None) stacki = [] nonstacki = [] tree = stack.file.Tree(destdir) for rpm in tree.getFiles(): if rpm.getBaseName() in selected: stacki.append(rpm) else: nonstacki.append(rpm) return (stacki, nonstacki)
def getExternalRPMS(self): import stack.roll import stack.redhat.gen xml = self.command('list.node.xml', ['everything', 'eval=n']) # # make sure the XML string is ASCII and not unicode, # otherwise, the parser will fail # xmlinput = xml.encode('ascii', 'ignore') generator = stack.redhat.gen.Generator() generator.setArch(self.arch) generator.setOS('redhat') generator.parse(xmlinput) rpms = [] for line in generator.generate('packages'): if len(line) and line[0] not in ['#', '%']: rpms.append(line) # # use yum to resolve dependencies # if stack.release == '7.x': pythonver = '2.7' else: pythonver = '2.6' sys.path.append('/usr/lib/python%s/site-packages' % pythonver) sys.path.append('/usr/lib64/python%s/site-packages' % pythonver) sys.path.append('/usr/lib/python%s/lib-dynload' % pythonver) sys.path.append('/usr/lib64/python%s/lib-dynload' % pythonver) import yum # # create a yum.conf file that contains only repos from the # default-all box # cwd = os.getcwd() yumconf = os.path.join(cwd, 'yum.conf') file = open(yumconf, 'w') file.write('[main]\n') file.write('cachedir=%s/cache\n' % cwd) file.write('keepcache=0\n') file.write('debuglevel=2\n') file.write('logfile=%s/yum.log\n' % cwd) file.write('pkgpolicy=newest\n') file.write('distroverpkg=redhat-release\n') file.write('tolerant=1\n') file.write('exactarch=1\n') file.write('obsoletes=1\n') file.write('gpgcheck=0\n') file.write('plugins=0\n') file.write('metadata_expire=1800\n') file.write('reposdir=%s\n' % cwd) for o in self.call('list.pallet', []): boxes = o['boxes'].split() if 'default-all' in boxes: file.write('[%s]\n' % o['name']) file.write('name=%s\n' % o['name']) file.write( 'baseurl=file:///export/stack/pallets/%s/%s/%s/redhat/%s\n' % (o['name'], o['version'], o['release'], o['arch'])) file.close() a = yum.YumBase() a.doConfigSetup(fn='%s' % yumconf, init_plugins=False) a.conf.cache = 0 a.doTsSetup() a.doRepoSetup() a.doRpmDBSetup() a.doSackSetup() a.doGroupSetup() selected = [] for rpm in rpms + ['@base', '@core']: if rpm[0] == '@': group = a.comps.return_group(rpm[1:].encode('utf-8')) for r in group.mandatory_packages.keys() + \ group.default_packages.keys(): if r not in selected: selected.append(r) elif rpm not in selected: selected.append(rpm) pkgs = [] avail = a.pkgSack.returnNewestByNameArch() for p in avail: if p.name in selected: pkgs.append(p) done = 0 while not done: done = 1 results = a.findDeps(pkgs) for pkg in results.keys(): for req in results[pkg].keys(): reqlist = results[pkg][req] for r in reqlist: if r.name not in selected: selected.append(r.name) pkgs.append(r) done = 0 # # copy all the selected files into the pallet but before we # do that, rewrite the yum.conf file to include only the # 'default-os' box which will ensure that we only put # os-related packages in the os pallet (otherwise, packages # from the 'stacki' pallet would leak into the os pallet # file = open(yumconf, 'w') file.write('[main]\n') file.write('cachedir=%s/cache\n' % cwd) file.write('keepcache=0\n') file.write('debuglevel=2\n') file.write('logfile=%s/yum.log\n' % cwd) file.write('pkgpolicy=newest\n') file.write('distroverpkg=redhat-release\n') file.write('tolerant=1\n') file.write('exactarch=1\n') file.write('obsoletes=1\n') file.write('gpgcheck=0\n') file.write('plugins=0\n') file.write('metadata_expire=1800\n') file.write('reposdir=%s\n' % cwd) for o in self.call('list.pallet', []): boxes = o['boxes'].split() if 'default-os' in boxes: file.write('[%s]\n' % o['name']) file.write('name=%s\n' % o['name']) file.write( 'baseurl=file:///export/stack/pallets/%s/%s/%s/redhat/%s\n' % (o['name'], o['version'], o['release'], o['arch'])) file.close() destdir = os.path.join(cwd, 'RPMS') for s in selected: subprocess.call( ['yumdownloader', '--destdir=%s' % destdir, '-c', yumconf, s], stdin=None, stdout=None, stderr=None) stacki = [] nonstacki = [] tree = stack.file.Tree(destdir) for rpm in tree.getFiles(): if rpm.getBaseName() in selected: stacki.append(rpm) else: nonstacki.append(rpm) return (stacki, nonstacki)
def getExternalRPMS(self): import stack.roll import stack.gen xml = self.command('list.node.xml', [ 'everything', 'eval=n' ] ) # # make sure the XML string is ASCII and not unicode, # otherwise, the parser will fail # xmlinput = xml.encode('ascii', 'ignore') generator = stack.gen.Generator_redhat() generator.setArch(self.arch) generator.setOS('redhat') generator.parse(xmlinput) rpms = [] for line in generator.generate('packages'): if len(line) and line[0] not in [ '#', '%' ]: rpms.append(line) # # use yum to resolve dependencies # if stack.release == '7.x': pythonver = '2.7' else: pythonver = '2.6' sys.path.append('/usr/lib/python%s/site-packages' % pythonver) sys.path.append('/usr/lib64/python%s/site-packages' % pythonver) sys.path.append('/usr/lib/python%s/lib-dynload' % pythonver) sys.path.append('/usr/lib64/python%s/lib-dynload' % pythonver) import yum # # create a yum.conf file that contains only repos from the # default-all box # cwd = os.getcwd() yumconf = os.path.join(cwd, 'yum.conf') file = open(yumconf, 'w') file.write('[main]\n') file.write('cachedir=%s/cache\n' % cwd) file.write('keepcache=0\n') file.write('debuglevel=2\n') file.write('logfile=%s/yum.log\n' % cwd) file.write('pkgpolicy=newest\n') file.write('distroverpkg=redhat-release\n') file.write('tolerant=1\n') file.write('exactarch=1\n') file.write('obsoletes=1\n') file.write('gpgcheck=0\n') file.write('plugins=0\n') file.write('metadata_expire=1800\n') file.write('reposdir=%s\n' % cwd) for o in self.call('list.pallet', []): boxes = o['boxes'].split() if 'default-all' in boxes: file.write('[%s]\n' % o['name']) file.write('name=%s\n' % o['name']) file.write('baseurl=file:///export/stack/pallets/%s/%s/redhat/%s\n' % (o['name'], o['version'], o['arch'])) file.close() a = yum.YumBase() a.doConfigSetup(fn='%s' % yumconf, init_plugins=False) a.conf.cache = 0 a.doTsSetup() a.doRepoSetup() a.doRpmDBSetup() a.doSackSetup() a.doGroupSetup() selected = [] for rpm in rpms + [ '@base', '@core' ]: if rpm[0] == '@': group = a.comps.return_group( rpm[1:].encode('utf-8')) for r in group.mandatory_packages.keys() + \ group.default_packages.keys(): if r not in selected: selected.append(r) elif rpm not in selected: selected.append(rpm) pkgs = [] avail = a.pkgSack.returnNewestByNameArch() for p in avail: if p.name in selected: pkgs.append(p) done = 0 while not done: done = 1 results = a.findDeps(pkgs) for pkg in results.keys(): for req in results[pkg].keys(): reqlist = results[pkg][req] for r in reqlist: if r.name not in selected: selected.append(r.name) pkgs.append(r) done = 0 # # copy all the selected files into the pallet but before we # do that, rewrite the yum.conf file to include only the # 'default-os' box which will ensure that we only put # os-related packages in the os pallet (otherwise, packages # from the 'stacki' pallet would leak into the os pallet # file = open(yumconf, 'w') file.write('[main]\n') file.write('cachedir=%s/cache\n' % cwd) file.write('keepcache=0\n') file.write('debuglevel=2\n') file.write('logfile=%s/yum.log\n' % cwd) file.write('pkgpolicy=newest\n') file.write('distroverpkg=redhat-release\n') file.write('tolerant=1\n') file.write('exactarch=1\n') file.write('obsoletes=1\n') file.write('gpgcheck=0\n') file.write('plugins=0\n') file.write('metadata_expire=1800\n') file.write('reposdir=%s\n' % cwd) for o in self.call('list.pallet', []): boxes = o['boxes'].split() if 'default-os' in boxes: file.write('[%s]\n' % o['name']) file.write('name=%s\n' % o['name']) file.write('baseurl=file:///export/stack/pallets/%s/%s/redhat/%s\n' % (o['name'], o['version'], o['arch'])) file.close() destdir = os.path.join(cwd, 'RPMS') for s in selected: subprocess.call([ 'yumdownloader', '--destdir=%s' % destdir, '-c', yumconf, s ], stdin = None, stdout = None, stderr = None) stacki = [] nonstacki = [] tree = stack.file.Tree(destdir) for rpm in tree.getFiles(): if rpm.getBaseName() in selected: stacki.append(rpm) else: nonstacki.append(rpm) return (stacki, nonstacki)
def getExternalRPMS(self): import stack.roll import stack.redhat.gen attrs = {} for row in self.call('list.host.attr', [ 'localhost' ]): attrs[row['attr']] = row['value'] xml = self.command('list.node.xml', [ 'everything', 'eval=n', 'attrs=%s' % attrs ] ) # # make sure the XML string is ASCII and not unicode, # otherwise, the parser will fail # xmlinput = xml.encode('ascii', 'ignore') generator = stack.redhat.gen.Generator() generator.setProfileType('native') generator.setArch(self.arch) generator.setOS('redhat') generator.parse(xmlinput) # call the getPackages, for just enabled packages and flatten it rpms = [pkg for node_pkgs in generator.packageSet.getPackages()['enabled'].values() for pkg in node_pkgs] # create a yum.conf file that contains only repos from the # default-all box # cwd = os.getcwd() yumconf = os.path.join(cwd, 'yum.conf') file = open(yumconf, 'w') file.write('[main]\n') file.write('cachedir=%s/cache\n' % cwd) file.write('keepcache=0\n') file.write('debuglevel=2\n') file.write('logfile=%s/yum.log\n' % cwd) file.write('pkgpolicy=newest\n') file.write('distroverpkg=os-release\n') file.write('tolerant=1\n') file.write('exactarch=1\n') file.write('obsoletes=1\n') file.write('gpgcheck=0\n') file.write('plugins=0\n') file.write('metadata_expire=1800\n') file.write('reposdir=%s\n' % cwd) for o in self.call('list.pallet', []): boxes = o['boxes'].split() if 'default-all' in boxes: file.write('[%s]\n' % o['name']) file.write('name=%s\n' % o['name']) file.write('baseurl=file:///export/stack/pallets/%s/%s/%s/redhat/%s\n' % (o['name'], o['version'], o['release'], o['arch'])) file.close() # Use system python (2.x) cmd = ['/usr/bin/python', '/opt/stack/sbin/yumresolver', yumconf] cmd.extend(rpms) proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) stdout, stdrr = proc.communicate() try: selected = json.loads(stdout) except ValueError: raise CommandError(self, 'Unable to parse yum dependency resolution') # # copy all the selected files into the pallet but before we # do that, rewrite the yum.conf file to include only the # 'default-os' box which will ensure that we only put # os-related packages in the os pallet (otherwise, packages # from the 'stacki' pallet would leak into the os pallet # file = open(yumconf, 'w') file.write('[main]\n') file.write('cachedir=%s/cache\n' % cwd) file.write('keepcache=0\n') file.write('debuglevel=2\n') file.write('logfile=%s/yum.log\n' % cwd) file.write('pkgpolicy=newest\n') file.write('distroverpkg=os-release\n') file.write('tolerant=1\n') file.write('exactarch=1\n') file.write('obsoletes=1\n') file.write('gpgcheck=0\n') file.write('plugins=0\n') file.write('metadata_expire=1800\n') file.write('reposdir=%s\n' % cwd) for o in self.call('list.pallet', []): boxes = o['boxes'].split() if 'default-os' in boxes: file.write('[%s]\n' % o['name']) file.write('name=%s\n' % o['name']) file.write('baseurl=file:///export/stack/pallets/%s/%s/%s/redhat/%s\n' % (o['name'], o['version'], o['release'], o['arch'])) file.close() destdir = os.path.join(cwd, 'RPMS') cmd = [ 'yumdownloader', '--destdir=%s' % destdir, '-y', '-c', yumconf ] cmd.extend(selected) subprocess.call(cmd, stdin=None) stacki = [] nonstacki = [] tree = stack.file.Tree(destdir) for rpm in tree.getFiles(): if rpm.getBaseName() in selected: stacki.append(rpm) else: nonstacki.append(rpm) return (stacki, nonstacki)