コード例 #1
0
    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
コード例 #2
0
ファイル: installcgi.py プロジェクト: bsanders/stacki
	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
コード例 #3
0
    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
コード例 #4
0
ファイル: installcgi.py プロジェクト: bsanders/stacki
	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
コード例 #5
0
ファイル: __init__.py プロジェクト: sukhbir148/stacki
    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)
コード例 #6
0
    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)
コード例 #7
0
ファイル: __init__.py プロジェクト: bsanders/stacki
	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)
コード例 #8
0
ファイル: __init__.py プロジェクト: StackIQ/stacki
	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)