first add files
This commit is contained in:
178
sbin/sunyums
Executable file
178
sbin/sunyums
Executable file
@@ -0,0 +1,178 @@
|
||||
#!/usr/bin/python
|
||||
#coding:utf-8
|
||||
import os, sys
|
||||
import yum, pickle
|
||||
import tempfile
|
||||
usages = \
|
||||
"""
|
||||
Usage: sunyums [OPTION]... [FILE]...
|
||||
Output and match all dependent installation packages
|
||||
|
||||
Example:
|
||||
sunyums packname1 packname2
|
||||
sunyums packname1 packname2 --config=file --comps=comps.xml
|
||||
sunyums packname1 packname2 --mandatory=1 --default=1 --options=0
|
||||
|
||||
Options:
|
||||
--config=file.conf supply an yum config file, default: optional
|
||||
--comps=comps.xml supply an parsed comps.xml default: optional
|
||||
--mandatory=True include mandatory packages default: True
|
||||
--default=True include mandatory packages default: True
|
||||
--options=False include mandatory packages default: False
|
||||
"""
|
||||
class Application(object):
|
||||
|
||||
def __init__(self, args):
|
||||
self.args = args[1:]
|
||||
self.yums = yum.YumBase()
|
||||
self.comps = None
|
||||
self.config = None
|
||||
self.groups = []
|
||||
self.mandatory = True
|
||||
self.default = True
|
||||
self.options = False
|
||||
|
||||
self.basePacks = []
|
||||
self.origPacks = []
|
||||
self.packages = []
|
||||
|
||||
def str2bool(self, s):
|
||||
"""Converts an on/off, yes/no, true/false string to 1/0."""
|
||||
if s and s.upper() in [ 'ON', 'YES', 'Y', 'TRUE', '1', 'ENABLED', 'ENABLE']:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
def usages(self):
|
||||
print usages
|
||||
sys.exit(0)
|
||||
|
||||
def parseArgs(self):
|
||||
|
||||
if not self.args:
|
||||
self.usages()
|
||||
|
||||
for arg in self.args:
|
||||
if arg in [ '-h', '--help']:
|
||||
self.usages()
|
||||
|
||||
elif arg.startswith('--comps='):
|
||||
self.comps = arg.split('=')[1]
|
||||
|
||||
elif arg.startswith('--config='):
|
||||
self.config = arg.split('=')[1]
|
||||
|
||||
elif arg.startswith('--mandatory='):
|
||||
self.mandatory = self.str2bool(arg.split('=')[1])
|
||||
|
||||
elif arg.startswith('--default='):
|
||||
self.default = self.str2bool(arg.split('=')[1])
|
||||
|
||||
elif arg.startswith('--options='):
|
||||
self.options = self.str2bool(arg.split('=')[1])
|
||||
|
||||
else:
|
||||
self.groups.append(arg)
|
||||
|
||||
def depends(self):
|
||||
pkgs = []
|
||||
avail = self.yums.pkgSack.returnNewestByNameArch()
|
||||
for p in avail:
|
||||
if p.name in self.basePacks:
|
||||
pkgs.append(p)
|
||||
|
||||
done = 0
|
||||
while not done:
|
||||
done = 1
|
||||
results = self.yums.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 self.basePacks:
|
||||
self.basePacks.append(r.name)
|
||||
pkgs.append(r)
|
||||
done = 0
|
||||
|
||||
def allgroups(self):
|
||||
for grp in self.yums.comps.groups:
|
||||
self.packages.extend(grp.packages)
|
||||
|
||||
def handerPackages(self, name):
|
||||
if not self.packages:
|
||||
self.allgroups()
|
||||
|
||||
if name in self.packages and \
|
||||
name not in self.basePacks:
|
||||
self.basePacks.append(name)
|
||||
|
||||
if name not in self.origPacks:
|
||||
self.origPacks.append(name)
|
||||
|
||||
def handerGroups(self, name):
|
||||
groups = []
|
||||
if not self.yums.comps.has_group(name):
|
||||
return
|
||||
|
||||
valid_groups = self.yums.comps.return_group(name.encode('utf-8'))
|
||||
if self.mandatory:
|
||||
groups.extend(valid_groups.mandatory_packages.keys())
|
||||
if self.default:
|
||||
groups.extend(valid_groups.default_packages.keys())
|
||||
if self.options:
|
||||
groups.extend(valid_groups.options_packages.keys())
|
||||
|
||||
for package in groups:
|
||||
self.handerPackages(package)
|
||||
|
||||
def handerEnviron(self, name):
|
||||
groups = []
|
||||
if not self.yums.comps.has_environment(name):
|
||||
return
|
||||
|
||||
valid_environ = self.yums.comps.return_environment(name)
|
||||
for grp in valid_environ.groups:
|
||||
self.handerGroups(grp)
|
||||
|
||||
def run(self):
|
||||
|
||||
if self.comps and os.path.exists(self.comps):
|
||||
self.yums.comps.add(self.comps)
|
||||
|
||||
if self.config and os.path.exists(self.config):
|
||||
self.yums.doConfigSetup(fn=self.config, init_plugins=False)
|
||||
|
||||
self.yums.conf.cache = 0
|
||||
for rpm in self.groups:
|
||||
if rpm[0] == '@':
|
||||
self.handerGroups(rpm[1:])
|
||||
|
||||
elif rpm[0] == '^':
|
||||
self.handerEnviron(rpm[1:])
|
||||
|
||||
else:
|
||||
self.handerPackages(rpm)
|
||||
|
||||
self.depends()
|
||||
|
||||
for o in self.origPacks:
|
||||
if o not in self.basePacks:
|
||||
print '#%s' % o
|
||||
|
||||
for p in self.basePacks:
|
||||
print p
|
||||
|
||||
if __name__ == "__main__":
|
||||
app = Application(sys.argv)
|
||||
app.parseArgs()
|
||||
app.allgroups()
|
||||
app.run()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user