From: wangbiao Date: Thu, 7 Dec 2023 06:07:29 +0000 (+0900) Subject: fixing install error info: struct.error: argument for 's' must be a bytes object X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f99eb8983d90edb323372bfd787576e4599a0162;p=tools%2Fmic.git fixing install error info: struct.error: argument for 's' must be a bytes object Because mic package is py3 version, During apt-get install mic, after mic is installed, it will call py3compile binary to build *.py file, but the python file in mic_py2 directory is py2, it will have show error info. Now we use compress them to a tar.gz, then decompress it to /usr/lib/mic in post install step. Change-Id: I8a242b566b5215d213606e18edbf74d97194e8fe Signed-off-by: wangbiao --- diff --git a/debian/mic.postinst b/debian/mic.postinst new file mode 100755 index 0000000..9570966 --- /dev/null +++ b/debian/mic.postinst @@ -0,0 +1,9 @@ +#!/bin/sh -e + +if [ -e /usr/lib/mic/mic_py2.tar.gz ]; then + cd /usr/lib/mic/ + tar -zxvf /usr/lib/mic/mic_py2.tar.gz > /dev/null + rm -rf /usr/lib/mic/mic_py2.tar.gz +fi + + diff --git a/debian/rules b/debian/rules index a1dc75a..ebf1a1d 100755 --- a/debian/rules +++ b/debian/rules @@ -16,8 +16,7 @@ override_dh_auto_install: install -m755 etc/zsh_completion.d/_mic $(CURDIR)/debian/tmp/etc/zsh_completion.d/_mic python3 setup.py install --root=$(CURDIR)/debian/tmp --prefix=/usr # Installing mic py2 code - mkdir -p $(CURDIR)/debian/tmp/usr/lib/mic/mic_py2 - cp -rp mic_py2/* $(CURDIR)/debian/tmp/usr/lib/mic/mic_py2 + cp -rp mic_py2.tar.gz $(CURDIR)/debian/tmp/usr/lib/mic override_dh_installchangelogs: dh_installchangelogs ChangeLog override_dh_auto_test: diff --git a/mic/rt_util.py b/mic/rt_util.py index df7e163..3ff7d6b 100644 --- a/mic/rt_util.py +++ b/mic/rt_util.py @@ -220,8 +220,8 @@ def sync_mic(bootstrap, binpth = '/usr/bin/mic', 'pylib': get_mic_modpath(), 'conf': '/etc/mic/mic.conf', } - print("True or False: %s\n" % mic_py2_in_mic_bootstrap(_path(binpth))) if (mic_py2_in_mic_bootstrap(_path(binpth))): + msger.info("mic in bootstrap is python2 version") mic_py2_path = get_mic_libpath() + '/mic_py2' pylib = '/usr/lib/python2.7/site-packages' diff --git a/mic_py2.tar.gz b/mic_py2.tar.gz new file mode 100644 index 0000000..967f36c Binary files /dev/null and b/mic_py2.tar.gz differ diff --git a/mic_py2/etc/mic/mic.conf b/mic_py2/etc/mic/mic.conf deleted file mode 100644 index a544168..0000000 --- a/mic_py2/etc/mic/mic.conf +++ /dev/null @@ -1,36 +0,0 @@ -[common] -; general settings -distro_name = Tizen - -plugin_dir = /usr/lib/mic/plugins - -[create] -; settings for create subcommand -tmpdir= /var/tmp/mic -cachedir= /var/tmp/mic/cache -outdir= ./mic-output -runtime=bootstrap -#use_mic_in_bootstrap = yes - -pkgmgr = auto - -# to set global proxy for repos -#proxy = http://proxy.yourcompany.com:8080/ -#no_proxy = localhost,127.0.0.0/8,.yourcompany.com - -# prefix will be added in front of generated files -#name_prefix = output - -# to skip all ssl verification for repos -#ssl_verify = no - -[convert] -; settings for convert subcommand - -[chroot] -; settings for chroot subcommand - -[bootstrap] -rootdir=/var/tmp/mic-bootstrap -packages=mic-bootstrap-x86-arm - diff --git a/mic_py2/usr/bin/mic b/mic_py2/usr/bin/mic deleted file mode 100755 index e40d3da..0000000 --- a/mic_py2/usr/bin/mic +++ /dev/null @@ -1,317 +0,0 @@ -#! /usr/bin/python2 - -#Copyright (c) 2011 Intel, Inc. -# -#This program is free software; you can redistribute it and/or modify it -#under the terms of the GNU General Public License as published by the Free -#Software Foundation; version 2 of the License -# -#This program is distributed in the hope that it will be useful, but -#WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., 59 -# Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# pylint: disable-msg=E0611, E1101, R0201 -# E0611: no name in module, some attributes are set during running, so ignore it -# E1101: %s %r has no %r member, some attributes are set during running, -# so ignore it -# R0201: Method could be a function - -""" - This mudule is entry for mic. - It defines a class named MicCmd inheriting Cmdln, and supplies interfaces like - 'create, chroot, convert' and also some parameters for command 'mic'. -""" -import os -import signal -import sys -import errno - -from argparse import ArgumentParser, SUPPRESS - -from mic import msger, __version__ as VERSION -from mic.utils import misc, errors -from mic.conf import configmgr -from mic.plugin import pluginmgr -from mic.helpformat import MICHelpFormatter, subparser - - -@subparser -def chroot_parser(parser): - """chroot into an image - - Examples: - mic chroot platform.img - mic chroot platform.img ls - """ - parser.add_argument('imagefile', help='Path of image file') - parser.add_argument('-s', '--saveto', action = 'store', dest = 'saveto', default = None, - help = "Save the unpacked image to specified dir") - parser.add_argument('-c', '--cmd', dest = 'cmd', default = None, - help = "command which will be executed in chroot environment") - parser.set_defaults(alias="ch") - return parser - -@subparser -def create_parser(parser): - """create an image - Examples: - $ mic -d -v create auto handset_blackbay.ks - $ mic -d -v cr loop handset_blackbay.ks --logfile=mic.log - """ - - parent_parser = ArgumentParser(add_help=False) - parent_parser.add_argument('ksfile', help='Path of ksfile') - parent_parser.add_argument('--logfile', dest='logfile', default=None, - help='Path of logfile') - parent_parser.add_argument('-c', '--config', dest='config', default=None, - help='Specify config file for mic') - parent_parser.add_argument('-k', '--cachedir', action='store', - dest='cachedir', default=None, - help='Cache directory to store the downloaded') - parent_parser.add_argument('-o', '--outdir', action='store', dest='outdir', - default=None, help='Output directory') - parent_parser.add_argument('-A', '--arch', dest='arch', default=None, - help='Specify repo architecture') - parent_parser.add_argument('--release', dest='release', default=None, metavar='RID', - help='Generate a release of RID with all necessary' - ' files, when @BUILD_ID@ is contained in ' - 'kickstart file, it will be replaced by RID') - parent_parser.add_argument("--record-pkgs", dest="record_pkgs", default=None, - help='Record the info of installed packages, ' - 'multiple values can be specified which ' - 'joined by ",", valid values: "name", ' - '"content", "license", "vcs"') - parent_parser.add_argument('--pkgmgr', dest='pkgmgr', default=None, - help='Specify backend package manager') - parent_parser.add_argument('--local-pkgs-path', dest='local_pkgs_path', default=None, - help='Path for local pkgs(rpms) to be installed') - parent_parser.add_argument('--runtime', dest='runtime', default=None, - help='Specify runtime mode, avaiable: bootstrap') - # --taring-to is alias to --pack-to - parent_parser.add_argument('--taring-to', dest='pack_to', default=None, - help=SUPPRESS) - parent_parser.add_argument('--pack-to', dest='pack_to', default=None, - help='Pack the images together into the specified' - ' achive, extension supported: .zip, .tar, ' - '.tar.gz, .tar.bz2, etc. by default, .tar ' - 'will be used') - parent_parser.add_argument('--copy-kernel', action='store_true', dest='copy_kernel', - help='Copy kernel files from image /boot directory' - ' to the image output directory.') - parent_parser.add_argument('--install-pkgs', action='store', dest='install_pkgs', default=None, - help='Specify what type of packages to be installed,' - ' valid: source, debuginfo, debugsource') - parent_parser.add_argument('--check-pkgs', action='store', dest='check_pkgs', default=[], - help='Check if given packages would be installed, ' - 'packages should be separated by comma') - parent_parser.add_argument('--tmpfs', action='store_true', dest='enabletmpfs', - help='Setup tmpdir as tmpfs to accelerate, experimental' - ' feature, use it if you have more than 4G memory') - parent_parser.add_argument('--repourl', action='append', dest='repourl', default=[], - help=SUPPRESS) - parent_parser.add_argument('-R', '--repo', action='append', - dest='repo', default=[], - help=SUPPRESS) - parent_parser.add_argument('--ignore-ksrepo', action='store_true', - dest='ignore_ksrepo', default=False, - help=SUPPRESS) - parent_parser.add_argument('--strict-mode', action='store_true', - dest='strict_mode', default=False, - help='Abort creation of image, if there are some errors' - ' during rpm installation. ') - parent_parser.add_argument('--use-mic-in-bootstrap', action='store_true', - dest='use_mic_in_bootstrap', default=False, - help='This option works in bootstrap runtime mode,' - ' Use mic in bootstrap to create image.' - ' By default, copy host mic to bootstrap and use it.') - - parent_parser.add_argument('-d', '--debug', action='store_true', - help='debug output') - parent_parser.add_argument('-v', '--verbose', action='store_true', - help='verbose output') - parent_parser.add_argument('-i', '--interactive', action='store_true', - dest='interactive', default=True, - help='interactive output') - parent_parser.add_argument('--run_script', action='store', dest='run_script', - default=None, help='Run script on local PC after image created') - parent_parser.add_argument('--tpk_install', action='store', dest='tpk_install', - default=None, help='Copy tpk file to /usr/apps/.preload-tpk') - parent_parser.add_argument('--rpm-debug', action='store_true', dest='rpm_debug', help='Set debug mode for rpm install') - parent_parser.add_argument('--skip-set-hosts', action='store_true', dest='skip_set_hosts', default=False, help='choose to skip set hosts by mic') - parent_parser.add_argument('--postscripts-maxruntime', dest='postscripts_maxruntime', default=120, help='max run time for post scripts') - parent_parser.add_argument('--block-recommends', action='store_true', dest='block_recommends', default=False, help='Do not install recommended packages') - - parser.set_defaults(alias="cr") - - subparsers = parser.add_subparsers(title='Subcommands', dest='subcommand') - auto_parser = subparsers.add_parser('auto', parents=[parent_parser], help='auto detect image type from magic header') - - fs_parser = subparsers.add_parser('fs', parents=[parent_parser], - help='create fs image') - fs_parser.add_argument("--include-src", dest = "include_src",action = "store_true", - default = False, help = "Generate a image with source rpms included") - - loop_parser = subparsers.add_parser('loop', parents=[parent_parser], help='create loop image') - - loop_parser.add_argument("--compress-disk-image", dest="compress_image", - choices=("gz", "bz2"), default=None, - help="Same with --compress-image") - # alias to compress-image for compatibility - loop_parser.add_argument("--compress-image", dest="compress_image", - choices=("gz", "bz2"), default=None, - help="Compress all loop images with 'gz' or 'bz2'") - loop_parser.add_argument("--shrink", action='store_true', default=False, - help="Whether to shrink loop images to minimal size") - - qcow_parser = subparsers.add_parser('qcow', parents=[parent_parser], help='create qcow image') - - raw_parser = subparsers.add_parser('raw', parents=[parent_parser], help='create raw image') - - raw_parser.add_argument("--compress-disk-image", dest="compress_image", - choices=("gz", "bz2"), default=None, - help="Same with --compress-image") - raw_parser.add_argument("--compress-image", dest="compress_image", - choices=("gz", "bz2"), default = None, - help="Compress all raw images before package") - raw_parser.add_argument("--generate-bmap", action="store_true", default = None, - help="also generate the block map file") - raw_parser.add_argument("--fstab-entry", dest="fstab_entry", choices=("name", "uuid"), default="uuid", - help="Set fstab entry, 'name' means using device names, " - "'uuid' means using filesystem uuid") - return parser - -def main(argv): - """Script entry point.""" - - def print_version(): - """log name, verion, hostname""" - - name = 'mic' - msger.raw("%s %s (%s)" % (name, - VERSION, - misc.get_hostname_distro_str())) - - def has_parameter(arg, arglist): - """ - Helper function. - Check if argument requires parameter by analyzing - its action. Parameter is required only for 'store' and 'append' actions - """ - if arg.startswith('-'): - for args in arglist: - if arg in (args['short'], args['long']): - if args.get('action') in (None, 'store', 'append'): - return True - return False - - def sigterm_handler(signal, frame): - raise errors.Abort('\nSIGTERM catched, program aborted.') - - # Add SIGTERM handler for exit gracefully - signal.signal(signal.SIGTERM, sigterm_handler) - - # Create top level parser - epilog = "Try 'mic SUBCOMMAND --help' for help on a specific subcommand." - description = "mic - the Image Creation tool" - parser = ArgumentParser(description=description, epilog=epilog, - formatter_class=MICHelpFormatter) - - # List of global arguments - # The main purpose of this structure is to contain arguments - # of add_argument. This is used to do aliasing properly - # (see code under the comment 'replace aliases with real commands') - global_args = [{'short': '-V', 'long': '--version', 'action': 'version', - 'version': '%(prog)s ' + VERSION}, - {'short': '-d', 'long': '--debug', 'action': 'store_true', - 'help': 'debug output'}, - {'short': '-v', 'long': '--verbose', 'action': 'store_true', - 'help': 'verbose output'}, - {'short': '-i', 'long': '--interactive', 'action': 'store_true', - 'dest': 'interactive', 'default': 'True', 'help': 'interactive output'}, - {'short': '', 'long': '--non-interactive', 'action': 'store_false', - 'dest': 'interactive', 'default': 'True', 'help': 'non-interactive output'}, - ] - - for args in global_args: - parser_kwargs = {} - for key in ('action', 'help', 'version', 'default', 'dest'): - if key in args: - parser_kwargs[key] = args[key] - - if args['short'] is '': - parser.add_argument(args['long'], **parser_kwargs) - else: - parser.add_argument(args['short'], args['long'], **parser_kwargs) - - # hacked by the request of cmdln lovers - parser.format_usage = parser.format_help - - # Create parsers for subcommands - subparsers = parser.add_subparsers(title='subcommands') - - # collect aliases - aliases = {} - for name, obj in globals().iteritems(): - if name.endswith('_parser') and callable(obj): - aliases[obj(subparsers).get_default('alias')] = name.split('_')[0] - - # replace aliases with real commands - for i, arg in enumerate(argv[1:]): - if not arg.startswith('-'): - # argv[i] is previous argument to arg - if not has_parameter(argv[i], global_args) and arg in aliases: - argv[i+1] = aliases[arg] - break - - # Parse arguments - args = parser.parse_args(argv[1:]) - - if args.interactive: - msger.enable_interactive() - else: - msger.disable_interactive() - - if args.verbose: - msger.set_loglevel('VERBOSE') - - if args.debug: - try: - import rpm - rpm.setVerbosity(rpm.RPMLOG_DEBUG) - except ImportError: - pass - - msger.set_loglevel('DEBUG') - - print_version() - - # Import target module and call 'main' from it - module = __import__("mic.%s" % args.module, fromlist=[args.module]) - return module.main(parser, args, argv[1:]) - - -if __name__ == "__main__": - try: - sys.exit(main(sys.argv)) - except KeyboardInterrupt: - msger.error('\n^C catched, program aborted.') - except IOError as ioerr: - # catch 'no space left' exception, etc - if ioerr.errno == errno.ENOSPC: - msger.error('\nNo space left on device') - raise - except errors.Usage as usage: - msger.error(str(usage)) - except errors.Abort as msg: - msger.info(str(msg)) - except errors.CreatorError as err: - if msger.get_loglevel() == 'DEBUG': - import traceback - msger.error(traceback.format_exc()) - else: - msger.error(str(err)) diff --git a/mic_py2/usr/lib/mic/plugins/backend/yumpkgmgr.py b/mic_py2/usr/lib/mic/plugins/backend/yumpkgmgr.py deleted file mode 100644 index d63c592..0000000 --- a/mic_py2/usr/lib/mic/plugins/backend/yumpkgmgr.py +++ /dev/null @@ -1,509 +0,0 @@ -#!/usr/bin/python -tt -# -# Copyright (c) 2007 Red Hat Inc. -# Copyright (c) 2010, 2011 Intel, Inc. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free -# Software Foundation; version 2 of the License -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., 59 -# Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -import os -import tempfile -import glob -from string import Template - -import rpmUtils -import yum - -from mic import msger -from mic.kickstart import ksparser -from mic.utils import misc, rpmmisc -from mic.utils.grabber import TextProgress -from mic.utils.proxy import get_proxy_for -from mic.utils.errors import CreatorError -from mic.utils.safeurl import SafeURL - - -YUMCONF_TEMP = """[main] -installroot=$installroot -cachedir=/var/cache/yum -persistdir=/var/lib/yum -plugins=0 -reposdir= -failovermethod=priority -http_caching=packages -sslverify=1 -""" - -class MyYumRepository(yum.yumRepo.YumRepository): - def __init__(self, repoid, nocache): - super(MyYumRepository, self).__init__(repoid) - self.nocache = nocache - - def __del__(self): - pass - - def dirSetup(self): - super(MyYumRepository, self).dirSetup() - # relocate package dir - pkgdir = os.path.join(self.basecachedir, 'packages', self.id) - self.setAttribute('_dir_setup_pkgdir', pkgdir) - self._dirSetupMkdir_p(self.pkgdir) - - def _getFile(self, url=None, - relative=None, - local=None, - start=None, - end=None, - copy_local=None, - checkfunc=None, - text=None, - reget='simple', - cache=True, - size=None): - - m2c_connection = None - if not self.sslverify: - try: - import M2Crypto - m2c_connection = M2Crypto.SSL.Connection.clientPostConnectionCheck - M2Crypto.SSL.Connection.clientPostConnectionCheck = None - except ImportError as err: - raise CreatorError("%s, please try to install python-m2crypto" % str(err)) - - proxy = None - if url: - proxy = get_proxy_for(url) - else: - proxy = get_proxy_for(self.urls[0]) - - if proxy: - self.proxy = str(proxy) - - size = int(size) if size else None - rvalue = super(MyYumRepository, self)._getFile(url, - relative, - local, - start, - end, - copy_local, - checkfunc, - text, - reget, - cache, - size) - - if m2c_connection and \ - not M2Crypto.SSL.Connection.clientPostConnectionCheck: - M2Crypto.SSL.Connection.clientPostConnectionCheck = m2c_connection - - return rvalue - -from mic.pluginbase import BackendPlugin -class Yum(BackendPlugin, yum.YumBase): - name = 'yum' - - def __init__(self, target_arch, instroot, cachedir, strict_mode = False): - yum.YumBase.__init__(self) - - self.cachedir = cachedir - self.instroot = instroot - self.target_arch = target_arch - self.strict_mode = strict_mode - - if self.target_arch: - if not rpmUtils.arch.arches.has_key(self.target_arch): - rpmUtils.arch.arches["armv7hl"] = "noarch" - rpmUtils.arch.arches["armv7tnhl"] = "armv7nhl" - rpmUtils.arch.arches["armv7tnhl"] = "armv7thl" - rpmUtils.arch.arches["armv7thl"] = "armv7hl" - rpmUtils.arch.arches["armv7nhl"] = "armv7hl" - self.arch.setup_arch(self.target_arch) - - self.__pkgs_license = {} - self.__pkgs_content = {} - self.__pkgs_vcsinfo = {} - self.check_pkgs = [] - - self.install_debuginfo = False - - def doFileLogSetup(self, uid, logfile): - # don't do the file log for the livecd as it can lead to open fds - # being left and an inability to clean up after ourself - pass - - def close(self): - try: - os.unlink(self.confpath) - os.unlink(self.conf.installroot + "/yum.conf") - except: - pass - - if self.ts: - self.ts.close() - self._delRepos() - self._delSacks() - yum.YumBase.close(self) - self.closeRpmDB() - - def __del__(self): - pass - - def _writeConf(self, confpath, installroot): - conf = Template(YUMCONF_TEMP).safe_substitute(installroot=installroot) - - f = file(confpath, "w+") - f.write(conf) - f.close() - - os.chmod(confpath, 0o644) - - def _cleanupRpmdbLocks(self, installroot): - # cleans up temporary files left by bdb so that differing - # versions of rpm don't cause problems - for f in glob.glob(installroot + "/var/lib/rpm/__db*"): - os.unlink(f) - - def setup(self): - # create yum.conf - (fn, self.confpath) = tempfile.mkstemp(dir=self.cachedir, - prefix='yum.conf-') - os.close(fn) - self._writeConf(self.confpath, self.instroot) - self._cleanupRpmdbLocks(self.instroot) - # do setup - self.doConfigSetup(fn = self.confpath, root = self.instroot) - self.conf.cache = 0 - self.doTsSetup() - self.doRpmDBSetup() - self.doRepoSetup() - self.doSackSetup() - - def preInstall(self, pkg): - # FIXME: handle pre-install package - return None - - def checkPackage(self, pkg): - self.check_pkgs.append(pkg) - - def selectPackage(self, pkg): - """Select a given package. - Can be specified with name.arch or name* - """ - - try: - self.install(pattern = pkg) - return None - except yum.Errors.InstallError: - return "No package(s) available to install" - except yum.Errors.RepoError as e: - raise CreatorError("Unable to download from repo : %s" % (e,)) - except yum.Errors.YumBaseError as e: - raise CreatorError("Unable to install: %s" % (e,)) - - def deselectPackage(self, pkg): - """Deselect package. Can be specified as name.arch or name* - """ - - sp = pkg.rsplit(".", 2) - txmbrs = [] - if len(sp) == 2: - txmbrs = self.tsInfo.matchNaevr(name=sp[0], arch=sp[1]) - - if len(txmbrs) == 0: - exact, match, unmatch = yum.packages.parsePackages( - self.pkgSack.returnPackages(), - [pkg], - casematch=1) - for p in exact + match: - txmbrs.append(p) - - if len(txmbrs) > 0: - for x in txmbrs: - self.tsInfo.remove(x.pkgtup) - # we also need to remove from the conditionals - # dict so that things don't get pulled back in as a result - # of them. yes, this is ugly. conditionals should die. - for req, pkgs in self.tsInfo.conditionals.iteritems(): - if x in pkgs: - pkgs.remove(x) - self.tsInfo.conditionals[req] = pkgs - else: - msger.warning("No such package %s to remove" %(pkg,)) - - def selectGroup(self, grp, include = ksparser.GROUP_DEFAULT): - try: - yum.YumBase.selectGroup(self, grp) - if include == ksparser.GROUP_REQUIRED: - for p in grp.default_packages.keys(): - self.deselectPackage(p) - - elif include == ksparser.GROUP_ALL: - for p in grp.optional_packages.keys(): - self.selectPackage(p) - - return None - except (yum.Errors.InstallError, yum.Errors.GroupsError) as e: - return e - except yum.Errors.RepoError as e: - raise CreatorError("Unable to download from repo : %s" % (e,)) - except yum.Errors.YumBaseError as e: - raise CreatorError("Unable to install: %s" % (e,)) - - def addRepository(self, name, url = None, mirrorlist = None, proxy = None, - proxy_username = None, proxy_password = None, - inc = None, exc = None, ssl_verify=True, nocache=False, - cost = None, priority=None): - # TODO: Handle priority attribute for repos - def _varSubstitute(option): - # takes a variable and substitutes like yum configs do - option = option.replace("$basearch", rpmUtils.arch.getBaseArch()) - option = option.replace("$arch", rpmUtils.arch.getCanonArch()) - return option - repo = MyYumRepository(name, nocache) - - # Set proxy - repo.proxy = proxy - repo.proxy_username = proxy_username - repo.proxy_password = proxy_password - - if url: - repo.baseurl.append(_varSubstitute(url.full)) - - if mirrorlist: - repo.mirrorlist = _varSubstitute(mirrorlist) - - conf = yum.config.RepoConf() - for k, v in conf.iteritems(): - if v or not hasattr(repo, k): - repo.setAttribute(k, v) - - repo.sslverify = ssl_verify - - repo.basecachedir = self.cachedir - repo.base_persistdir = self.conf.persistdir - repo.failovermethod = "priority" - repo.metadata_expire = 0 - # Enable gpg check for verifying corrupt packages - repo.gpgcheck = 1 - repo.enable() - repo.setup(0) - self.repos.add(repo) - if cost: - repo.cost = cost - - msger.verbose('repo: %s was added' % name) - return repo - - def installLocal(self, pkg, po=None, updateonly=False): - ts = rpmUtils.transaction.initReadOnlyTransaction() - try: - hdr = rpmUtils.miscutils.hdrFromPackage(ts, pkg) - except rpmUtils.RpmUtilsError as e: - raise yum.Errors.MiscError \ - ('Could not open local rpm file: %s: %s' % (pkg, e)) - - self.deselectPackage(hdr['name']) - yum.YumBase.installLocal(self, pkg, po, updateonly) - - def installHasFile(self, file): - provides_pkg = self.whatProvides(file, None, None) - dlpkgs = map( - lambda x: x.po, - filter( - lambda txmbr: txmbr.ts_state in ("i", "u"), - self.tsInfo.getMembers())) - - for p in dlpkgs: - for q in provides_pkg: - if (p == q): - return True - - return False - - def runInstall(self, checksize = 0): - os.environ["HOME"] = "/" - os.environ["LD_PRELOAD"] = "" - try: - (res, resmsg) = self.buildTransaction() - except yum.Errors.RepoError as e: - raise CreatorError("Unable to download from repo : %s" %(e,)) - - if res != 2: - raise CreatorError("Failed to build transaction : %s" \ - % str.join("\n", resmsg)) - - dlpkgs = map( - lambda x: x.po, - filter( - lambda txmbr: txmbr.ts_state in ("i", "u"), - self.tsInfo.getMembers())) - - # record all pkg and the content - for pkg in dlpkgs: - pkg_long_name = misc.RPM_FMT % { - 'name': pkg.name, - 'arch': pkg.arch, - 'version': pkg.version, - 'release': pkg.release - } - self.__pkgs_content[pkg_long_name] = pkg.files - license = pkg.license - if license in self.__pkgs_license.keys(): - self.__pkgs_license[license].append(pkg_long_name) - else: - self.__pkgs_license[license] = [pkg_long_name] - - if pkg.name in self.check_pkgs: - self.check_pkgs.remove(pkg.name) - - if self.check_pkgs: - raise CreatorError('Packages absent in image: %s' % ','.join(self.check_pkgs)) - - total_count = len(dlpkgs) - cached_count = 0 - download_total_size = sum(map(lambda x: int(x.packagesize), dlpkgs)) - - msger.info("\nChecking packages cached ...") - for po in dlpkgs: - local = po.localPkg() - repo = filter(lambda r: r.id == po.repoid, self.repos.listEnabled())[0] - if repo.nocache and os.path.exists(local): - os.unlink(local) - if not os.path.exists(local): - continue - if not self.verifyPkg(local, po, False): - msger.warning("Package %s is damaged: %s" \ - % (os.path.basename(local), local)) - else: - download_total_size -= int(po.packagesize) - cached_count += 1 - - cache_avail_size = misc.get_filesystem_avail(self.cachedir) - if cache_avail_size < download_total_size: - raise CreatorError("No enough space used for downloading.") - - # record the total size of installed pkgs - pkgs_total_size = 0 - for x in dlpkgs: - if hasattr(x, 'installedsize'): - pkgs_total_size += int(x.installedsize) - else: - pkgs_total_size += int(x.size) - - # check needed size before actually download and install - if checksize and pkgs_total_size > checksize: - raise CreatorError("No enough space used for installing, " - "please resize partition size in ks file") - - msger.info("Packages: %d Total, %d Cached, %d Missed" \ - % (total_count, cached_count, total_count - cached_count)) - - try: - repos = self.repos.listEnabled() - for repo in repos: - repo.setCallback(TextProgress(total_count - cached_count)) - - self.downloadPkgs(dlpkgs) - # FIXME: sigcheck? - - self.initActionTs() - self.populateTs(keepold=0) - - deps = self.ts.check() - if len(deps) != 0: - # This isn't fatal, Ubuntu has this issue but it is ok. - msger.debug(deps) - msger.warning("Dependency check failed!") - - rc = self.ts.order() - if rc != 0: - raise CreatorError("ordering packages for installation failed") - - # FIXME: callback should be refactored a little in yum - cb = rpmmisc.RPMInstallCallback(self.ts) - cb.tsInfo = self.tsInfo - cb.filelog = False - - msger.warning('\nCaution, do NOT interrupt the installation, ' - 'else mic cannot finish the cleanup.') - - installlogfile = "%s/__catched_stderr.buf" % (self.instroot) - msger.enable_logstderr(installlogfile) - transactionResult = self.runTransaction(cb) - if transactionResult.return_code != 0 and self.strict_mode: - raise CreatorError("mic failes to install some packages") - self._cleanupRpmdbLocks(self.conf.installroot) - - except rpmUtils.RpmUtilsError as e: - raise CreatorError("mic does NOT support delta rpm: %s" % e) - except yum.Errors.RepoError as e: - raise CreatorError("Unable to download from repo : %s" % e) - except yum.Errors.YumBaseError as e: - raise CreatorError("Unable to install: %s" % e) - finally: - msger.disable_logstderr() - - def getVcsInfo(self): - if self.__pkgs_vcsinfo: - return self.__pkgs_vcsinfo - if not self.ts: - self.__initialize_transaction() - mi = self.ts.dbMatch() - for hdr in mi: - lname = misc.RPM_FMT % { - 'name': hdr['name'], - 'arch': hdr['arch'], - 'version': hdr['version'], - 'release': hdr['release'] - } - try: - self.__pkgs_vcsinfo[lname] = hdr['VCS'] - except ValueError as KeyError: - self.__pkgs_vcsinfo[lname] = None - - return self.__pkgs_vcsinfo - - def getAllContent(self): - return self.__pkgs_content - - def getPkgsLicense(self): - return self.__pkgs_license - - def getFilelist(self, pkgname): - if not pkgname: - return None - - pkg = filter(lambda txmbr: txmbr.po.name == pkgname, self.tsInfo.getMembers()) - if not pkg: - return None - return pkg[0].po.filelist - - def package_url(self, pkgname): - pkgs = self.pkgSack.searchNevra(name=pkgname) - if pkgs: - pkg = pkgs[0] - - repo = pkg.repo - url = SafeURL(repo.baseurl[0]).join(pkg.remote_path) - - proxy = repo.proxy - if not proxy: - proxy = get_proxy_for(url) - if proxy: - proxies = {str(url.split(':')[0]): str(proxy)} - else: - proxies = None - - return (url, proxies) - - return (None, None) diff --git a/mic_py2/usr/lib/mic/plugins/backend/zypppkgmgr.py b/mic_py2/usr/lib/mic/plugins/backend/zypppkgmgr.py deleted file mode 100644 index 950c1af..0000000 --- a/mic_py2/usr/lib/mic/plugins/backend/zypppkgmgr.py +++ /dev/null @@ -1,1034 +0,0 @@ -#!/usr/bin/python -tt -# -# Copyright (c) 2010, 2011 Intel, Inc. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free -# Software Foundation; version 2 of the License -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., 59 -# Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -import os -import shutil -import urlparse -import rpm -import glob - -import zypp #pylint: disable=import-error -if not hasattr(zypp, 'PoolQuery') or \ - not hasattr(zypp.RepoManager, 'loadSolvFile'): - raise ImportError("python-zypp in host system cannot support PoolQuery or " - "loadSolvFile interface, please update it to enhanced " - "version which can be found in download.tizen.org/tools") - -from mic import msger -from mic.kickstart import ksparser -from mic.utils import misc, rpmmisc, runner, fs_related -from mic.utils.grabber import myurlgrab, TextProgress -from mic.utils.proxy import get_proxy_for -from mic.utils.errors import CreatorError, RepoError, RpmError -from mic.conf import configmgr - -class RepositoryStub: - def __init__(self): - self.name = None - self.baseurl = [] - self.mirrorlist = None - self.proxy = None - self.proxy_username = None - self.proxy_password = None - self.nocache = False - - self.enabled = True - self.autorefresh = True - self.keeppackages = True - self.priority = None - -from mic.pluginbase import BackendPlugin -class Zypp(BackendPlugin): - name = 'zypp' - - def __init__(self, target_arch, instroot, cachedir, strict_mode = False): - self.cachedir = cachedir - self.instroot = instroot - self.target_arch = target_arch - self.strict_mode = strict_mode - - self.__pkgs_license = {} - self.__pkgs_content = {} - self.__pkgs_vcsinfo = {} - self.repos = [] - self.to_deselect = [] - self.localpkgs = {} - self.repo_manager = None - self.repo_manager_options = None - self.Z = None - self.ts = None - self.ts_pre = None - self.pkgs_bak = [] - self.incpkgs = {} - self.excpkgs = {} - self.pre_pkgs = [] - self.check_pkgs = [] - self.probFilterFlags = [ rpm.RPMPROB_FILTER_OLDPACKAGE, - rpm.RPMPROB_FILTER_REPLACEPKG ] - - self.has_prov_query = True - self.install_debuginfo = False - # this can't be changed, it is used by zypp - self.tmp_file_path = '/var/tmp' - - def doFileLogSetup(self, uid, logfile): - # don't do the file log for the livecd as it can lead to open fds - # being left and an inability to clean up after ourself - pass - - def closeRpmDB(self): - pass - - def close(self): - if self.ts: - self.ts.closeDB() - self.ts = None - - if self.ts_pre: - self.ts_pre.closeDB() - self.ts_pre = None - - self.pkgs_bak = [] - - self.closeRpmDB() - - def __del__(self): - self.close() - - def _cleanupRpmdbLocks(self, installroot): - # cleans up temporary files left by bdb so that differing - # versions of rpm don't cause problems - for f in glob.glob(installroot + "/var/lib/rpm/__db*"): - os.unlink(f) - - def _cleanupZyppJunk(self, installroot): - try: - shutil.rmtree(os.path.join(installroot, '.zypp')) - except: - pass - - def setup(self): - self._cleanupRpmdbLocks(self.instroot) - # '/var/tmp' is used by zypp to build cache, so make sure - # if it exists - if not os.path.exists(self.tmp_file_path ): - os.makedirs(self.tmp_file_path) - - def whatObsolete(self, pkg): - query = zypp.PoolQuery() - query.addKind(zypp.ResKind.package) - query.addDependency(zypp.SolvAttr.obsoletes, pkg.name(), pkg.edition()) - query.setMatchExact() - for pi in query.queryResults(self.Z.pool()): - return pi - return None - - def _zyppQueryPackage(self, pkg): - query = zypp.PoolQuery() - query.addKind(zypp.ResKind.package) - query.addAttribute(zypp.SolvAttr.name, pkg) - query.setMatchExact() - for pi in query.queryResults(self.Z.pool()): - return pi - return None - - def _splitPkgString(self, pkg): - sp = pkg.rsplit(".", 1) - name = sp[0] - arch = None - if len(sp) == 2: - arch = sp[1] - sysarch = zypp.Arch(self.target_arch) - if not zypp.Arch(arch).compatible_with (sysarch): - arch = None - name = ".".join(sp) - return name, arch - - def selectPackage(self, pkg): - """Select a given package or package pattern, can be specified - with name.arch or name* or *name - """ - - if not self.Z: - self.__initialize_zypp() - - def markPoolItem(obs, pi): - if obs == None: - pi.status().setToBeInstalled (zypp.ResStatus.USER) - else: - obs.status().setToBeInstalled (zypp.ResStatus.USER) - - def cmpEVR(p1, p2): - # compare criterion: arch compatibility first, then repo - # priority, and version last - a1 = p1.arch() - a2 = p2.arch() - if str(a1) != str(a2): - if a1.compatible_with(a2): - return -1 - else: - return 1 - # Priority of a repository is an integer value between 0 (the - # highest priority) and 99 (the lowest priority) - pr1 = int(p1.repoInfo().priority()) - pr2 = int(p2.repoInfo().priority()) - if pr1 > pr2: - return -1 - elif pr1 < pr2: - return 1 - - ed1 = p1.edition() - ed2 = p2.edition() - (e1, v1, r1) = map(str, [ed1.epoch(), ed1.version(), ed1.release()]) - (e2, v2, r2) = map(str, [ed2.epoch(), ed2.version(), ed2.release()]) - return rpm.labelCompare((e1, v1, r1), (e2, v2, r2)) - - found = False - startx = pkg.startswith("*") - endx = pkg.endswith("*") - ispattern = startx or endx - name, arch = self._splitPkgString(pkg) - - q = zypp.PoolQuery() - q.addKind(zypp.ResKind.package) - - if ispattern: - if startx and not endx: - pattern = '%s$' % (pkg[1:]) - if endx and not startx: - pattern = '^%s' % (pkg[0:-1]) - if endx and startx: - pattern = '%s' % (pkg[1:-1]) - q.setMatchRegex() - q.addAttribute(zypp.SolvAttr.name, pattern) - - elif arch: - q.setMatchExact() - q.addAttribute(zypp.SolvAttr.name, name) - - else: - q.setMatchExact() - q.addAttribute(zypp.SolvAttr.name, pkg) - - for pitem in sorted( - q.queryResults(self.Z.pool()), - cmp=lambda x,y: cmpEVR(zypp.asKindPackage(x), zypp.asKindPackage(y)), - reverse=True): - item = zypp.asKindPackage(pitem) - if item.name() in self.excpkgs.keys() and \ - self.excpkgs[item.name()] == item.repoInfo().name(): - continue - if item.name() in self.incpkgs.keys() and \ - self.incpkgs[item.name()] != item.repoInfo().name(): - continue - - found = True - obspkg = self.whatObsolete(item) - if arch: - if arch == str(item.arch()): - pitem.status().setToBeInstalled (zypp.ResStatus.USER) - else: - markPoolItem(obspkg, pitem) - if not ispattern: - break - - # Can't match using package name, then search from packge - # provides infomation - if found == False and not ispattern: - q.addAttribute(zypp.SolvAttr.provides, pkg) - q.addAttribute(zypp.SolvAttr.name,'') - - for pitem in sorted( - q.queryResults(self.Z.pool()), - cmp=lambda x,y: cmpEVR(zypp.asKindPackage(x), zypp.asKindPackage(y)), - reverse=True): - item = zypp.asKindPackage(pitem) - if item.name() in self.excpkgs.keys() and \ - self.excpkgs[item.name()] == item.repoInfo().name(): - continue - if item.name() in self.incpkgs.keys() and \ - self.incpkgs[item.name()] != item.repoInfo().name(): - continue - - found = True - obspkg = self.whatObsolete(item) - markPoolItem(obspkg, pitem) - break - - if found: - return None - else: - raise CreatorError("Unable to find package: %s" % (pkg,)) - - def inDeselectPackages(self, pitem): - """check if specified pacakges are in the list of inDeselectPackages - """ - item = zypp.asKindPackage(pitem) - name = item.name() - for pkg in self.to_deselect: - startx = pkg.startswith("*") - endx = pkg.endswith("*") - ispattern = startx or endx - pkgname, pkgarch = self._splitPkgString(pkg) - if not ispattern: - if pkgarch: - if name == pkgname and str(item.arch()) == pkgarch: - return True - else: - if name == pkgname: - return True - else: - if startx and name.endswith(pkg[1:]): - return True - if endx and name.startswith(pkg[:-1]): - return True - - return False - - def deselectPackage(self, pkg): - """collect packages should not be installed""" - self.to_deselect.append(pkg) - - def selectGroup(self, grp, include = ksparser.GROUP_DEFAULT): - def compareGroup(pitem): - item = zypp.asKindPattern(pitem) - return item.repoInfo().priority() - if not self.Z: - self.__initialize_zypp() - found = False - q = zypp.PoolQuery() - q.addKind(zypp.ResKind.pattern) - for pitem in sorted(q.queryResults(self.Z.pool()), key=compareGroup): - item = zypp.asKindPattern(pitem) - summary = "%s" % item.summary() - name = "%s" % item.name() - if name == grp or summary == grp: - found = True - pitem.status().setToBeInstalled (zypp.ResStatus.USER) - break - - if found: - if include == ksparser.GROUP_REQUIRED: - map( - lambda p: self.deselectPackage(p), - grp.default_packages.keys()) - - return None - else: - raise CreatorError("Unable to find pattern: %s" % (grp,)) - - def addRepository(self, name, - url = None, - mirrorlist = None, - proxy = None, - proxy_username = None, - proxy_password = None, - inc = None, - exc = None, - ssl_verify = True, - nocache = False, - cost=None, - priority=None): - # TODO: Handle cost attribute for repos - - if not self.repo_manager: - self.__initialize_repo_manager() - - if not proxy and url: - proxy = get_proxy_for(url) - - repo = RepositoryStub() - repo.name = name - repo.id = name - repo.proxy = proxy - repo.proxy_username = proxy_username - repo.proxy_password = proxy_password - repo.ssl_verify = ssl_verify - repo.nocache = nocache - repo.baseurl.append(url) - if inc: - for pkg in inc: - self.incpkgs[pkg] = name - if exc: - for pkg in exc: - self.excpkgs[pkg] = name - - if mirrorlist: - repo.mirrorlist = mirrorlist - - # Enable gpg check for verifying corrupt packages - repo.gpgcheck = 1 - if priority is not None: - # priority 0 has issue in RepoInfo.setPriority - repo.priority = priority + 1 - - try: - repo_info = zypp.RepoInfo() - repo_info.setAlias(repo.name) - repo_info.setName(repo.name) - repo_info.setEnabled(repo.enabled) - repo_info.setAutorefresh(repo.autorefresh) - repo_info.setKeepPackages(repo.keeppackages) - baseurl = zypp.Url(repo.baseurl[0].full) - if not ssl_verify: - baseurl.setQueryParam("ssl_verify", "no") - if proxy: - host = urlparse.urlparse(proxy)[1] - # scheme, host, path, parm, query, frag = urlparse.urlparse(proxy) - - proxyinfo = host.rsplit(":", 1) - host = proxyinfo[0] - - port = "80" - if len(proxyinfo) > 1: - port = proxyinfo[1] - - if proxy.startswith("socks") and len(proxy.rsplit(':', 1)) == 2: - host = proxy.rsplit(':', 1)[0] - port = proxy.rsplit(':', 1)[1] - - # parse user/pass from proxy host - proxyinfo = host.rsplit("@", 1) - if len(proxyinfo) == 2: - host = proxyinfo[1] - # Known Issue: If password contains ":", which should be - # quoted, for example, use '123%3Aabc' instead of 123:abc - userpassinfo = proxyinfo[0].rsplit(":", 1) - if len(userpassinfo) == 2: - proxy_username = userpassinfo[0] - proxy_password = userpassinfo[1] - elif len(userpassinfo) == 1: - proxy_username = userpassinfo[0] - - baseurl.setQueryParam ("proxy", host) - baseurl.setQueryParam ("proxyport", port) - if proxy_username: - baseurl.setQueryParam ("proxyuser", proxy_username) - if proxy_password: - baseurl.setQueryParam ("proxypass", proxy_password) - else: - baseurl.setQueryParam ("proxy", "_none_") - - self.repos.append(repo) - - repo_info.addBaseUrl(baseurl) - - if repo.priority is not None: - repo_info.setPriority(repo.priority) - - # this hack is used to change zypp credential file location - # the default one is $HOME/.zypp, which cause conflicts when - # installing some basic packages, and the location doesn't - # have any interface actually, so use a tricky way anyway - homedir = None - if 'HOME' in os.environ: - homedir = os.environ['HOME'] - os.environ['HOME'] = '/' - else: - os.environ['HOME'] = '/' - - self.repo_manager.addRepository(repo_info) - - # save back the $HOME env - if homedir: - os.environ['HOME'] = homedir - else: - del os.environ['HOME'] - - self.__build_repo_cache(name) - - except RuntimeError as e: - raise CreatorError(str(e)) - - msger.verbose('repo: %s was added' % name) - return repo - - def installHasFile(self, file): - return False - - def preInstall(self, pkg): - self.pre_pkgs.append(pkg) - - def checkPackage(self, pkg): - self.check_pkgs.append(pkg) - - def _get_local_packages(self): - """Return a list of rpm path to be local installed. - This is the hook where subclasses may specify a set of rpms which - it requires to be installed locally. - This returns an empty list by default. - Note, subclasses should usually chain up to the base class - implementation of this hook. - """ - cropts = configmgr.create - if cropts['local_pkgs_path']: - if os.path.isdir(cropts['local_pkgs_path']): - return glob.glob( - os.path.join(cropts['local_pkgs_path'], '*.rpm')) - elif os.path.splitext(cropts['local_pkgs_path'])[-1] == '.rpm': - return [cropts['local_pkgs_path']] - return [] - def __localinst_packages(self): - for rpm_path in self._get_local_packages(): - self.installLocal(rpm_path) - def runInstall(self, checksize = 0): - os.environ["HOME"] = "/" - os.environ["LD_PRELOAD"] = "" - self.buildTransaction() - self.__localinst_packages() - - todo = zypp.GetResolvablesToInsDel(self.Z.pool()) - installed_pkgs = todo._toInstall - dlpkgs = [] - - for pitem in installed_pkgs: - if not zypp.isKindPattern(pitem) and \ - not self.inDeselectPackages(pitem): - item = zypp.asKindPackage(pitem) - dlpkgs.append(item) - - if item.name() in self.check_pkgs: - self.check_pkgs.remove(item.name()) - - if not self.install_debuginfo or str(item.arch()) == "noarch": - continue - - dipkg = self._zyppQueryPackage("%s-debuginfo" % item.name()) - if dipkg: - ditem = zypp.asKindPackage(dipkg) - dlpkgs.append(ditem) - else: - msger.warning("No debuginfo rpm found for: %s" \ - % item.name()) - - if self.check_pkgs: - raise CreatorError('Packages absent in image: %s' % ','.join(self.check_pkgs)) - - # record all pkg and the content - localpkgs = self.localpkgs.keys() - for pkg in dlpkgs: - license = '' - if pkg.name() in localpkgs: - hdr = rpmmisc.readRpmHeader(self.ts, self.localpkgs[pkg.name()]) - pkg_long_name = misc.RPM_FMT % { - 'name': hdr['name'], - 'arch': hdr['arch'], - 'version': hdr['version'], - 'release': hdr['release'] - } - license = hdr['license'] - - else: - pkg_long_name = misc.RPM_FMT % { - 'name': pkg.name(), - 'arch': pkg.arch(), - 'version': pkg.edition().version(), - 'release': pkg.edition().release() - } - - license = pkg.license() - - if license in self.__pkgs_license.keys(): - self.__pkgs_license[license].append(pkg_long_name) - else: - self.__pkgs_license[license] = [pkg_long_name] - - total_count = len(dlpkgs) - cached_count = 0 - download_total_size = sum(map(lambda x: int(x.downloadSize()), dlpkgs)) - localpkgs = self.localpkgs.keys() - - msger.info("Checking packages cached ...") - for po in dlpkgs: - # Check if it is cached locally - if po.name() in localpkgs: - cached_count += 1 - else: - local = self.getLocalPkgPath(po) - name = str(po.repoInfo().name()) - try: - repo = filter(lambda r: r.name == name, self.repos)[0] - except IndexError: - repo = None - nocache = repo.nocache if repo else False - - if os.path.exists(local): - if nocache or self.checkPkg(local) !=0: - os.unlink(local) - else: - download_total_size -= int(po.downloadSize()) - cached_count += 1 - cache_avail_size = misc.get_filesystem_avail(self.cachedir) - if cache_avail_size < download_total_size: - raise CreatorError("No enough space used for downloading.") - - # record the total size of installed pkgs - install_total_size = sum(map(lambda x: int(x.installSize()), dlpkgs)) - # check needed size before actually download and install - - # FIXME: for multiple partitions for loop type, check fails - # skip the check temporarily - #if checksize and install_total_size > checksize: - # raise CreatorError("No enough space used for installing, " - # "please resize partition size in ks file") - - download_count = total_count - cached_count - msger.info("Packages: %d Total, %d Cached, %d Missed" \ - % (total_count, cached_count, download_count)) - - try: - if download_count > 0: - msger.info("Downloading packages ...") - self.downloadPkgs(dlpkgs, download_count) - except CreatorError as e: - raise CreatorError("Package download failed: %s" %(e,)) - - try: - self.installPkgs(dlpkgs) - except (RepoError, RpmError): - raise - except Exception as e: - raise CreatorError("Package installation failed: %s" % (e,)) - - def getVcsInfo(self): - if self.__pkgs_vcsinfo: - return - - if not self.ts: - self.__initialize_transaction() - - mi = self.ts.dbMatch() - for hdr in mi: - lname = misc.RPM_FMT % { - 'name': hdr['name'], - 'arch': hdr['arch'], - 'version': hdr['version'], - 'release': hdr['release'] - } - try: - self.__pkgs_vcsinfo[lname] = hdr['VCS'] - except ValueError: - # if rpm not support VCS, set to None - self.__pkgs_vcsinfo[lname] = None - - return self.__pkgs_vcsinfo - - def getAllContent(self): - if self.__pkgs_content: - return self.__pkgs_content - - if not self.ts: - self.__initialize_transaction() - - mi = self.ts.dbMatch() - for hdr in mi: - lname = misc.RPM_FMT % { - 'name': hdr['name'], - 'arch': hdr['arch'], - 'version': hdr['version'], - 'release': hdr['release'] - } - self.__pkgs_content[lname] = hdr['FILENAMES'] - - return self.__pkgs_content - - def getPkgsLicense(self): - return self.__pkgs_license - - def getFilelist(self, pkgname): - if not pkgname: - return None - - if not self.ts: - self.__initialize_transaction() - - mi = self.ts.dbMatch('name', pkgname) - for header in mi: - return header['FILENAMES'] - - def __initialize_repo_manager(self): - if self.repo_manager: - return - - # Clean up repo metadata - shutil.rmtree(self.cachedir + "/etc", ignore_errors = True) - shutil.rmtree(self.cachedir + "/solv", ignore_errors = True) - shutil.rmtree(self.cachedir + "/raw", ignore_errors = True) - - zypp.KeyRing.setDefaultAccept( zypp.KeyRing.ACCEPT_UNSIGNED_FILE - | zypp.KeyRing.ACCEPT_VERIFICATION_FAILED - | zypp.KeyRing.ACCEPT_UNKNOWNKEY - | zypp.KeyRing.TRUST_KEY_TEMPORARILY - ) - - self.repo_manager_options = \ - zypp.RepoManagerOptions(zypp.Pathname(self.instroot)) - - self.repo_manager_options.knownReposPath = \ - zypp.Pathname(self.cachedir + "/etc/zypp/repos.d") - - self.repo_manager_options.repoCachePath = \ - zypp.Pathname(self.cachedir) - - self.repo_manager_options.repoRawCachePath = \ - zypp.Pathname(self.cachedir + "/raw") - - self.repo_manager_options.repoSolvCachePath = \ - zypp.Pathname(self.cachedir + "/solv") - - self.repo_manager_options.repoPackagesCachePath = \ - zypp.Pathname(self.cachedir + "/packages") - - self.repo_manager = zypp.RepoManager(self.repo_manager_options) - - def __build_repo_cache(self, name): - repo = self.repo_manager.getRepositoryInfo(name) - if self.repo_manager.isCached(repo) or not repo.enabled(): - return - - msger.info('Refreshing repository: %s ...' % name) - self.repo_manager.buildCache(repo, zypp.RepoManager.BuildIfNeeded) - - def __initialize_zypp(self): - if self.Z: - return - - zconfig = zypp.ZConfig_instance() - - # Set system architecture - if self.target_arch: - zconfig.setSystemArchitecture(zypp.Arch(self.target_arch)) - - msger.info("zypp architecture is <%s>" % zconfig.systemArchitecture()) - - # repoPackagesCachePath is corrected by this - self.repo_manager = zypp.RepoManager(self.repo_manager_options) - repos = self.repo_manager.knownRepositories() - for repo in repos: - if not repo.enabled(): - continue - self.repo_manager.loadFromCache(repo) - - self.Z = zypp.ZYppFactory_instance().getZYpp() - if configmgr.create['block_recommends']: - msger.info("zypp not install recommend packages") - self.Z.resolver().setOnlyRequires(True) - self.Z.initializeTarget(zypp.Pathname(self.instroot)) - self.Z.target().load() - - def buildTransaction(self): - if not self.Z.resolver().resolvePool(): - probs = self.Z.resolver().problems() - - for problem in probs: - msger.warning("repo problem: %s, %s" \ - % (problem.description().decode("utf-8"), - problem.details().decode("utf-8"))) - - raise RepoError("found %d resolver problem, abort!" \ - % len(probs)) - - def getLocalPkgPath(self, po): - repoinfo = po.repoInfo() - cacheroot = repoinfo.packagesPath() - location = po.location() - rpmpath = str(location.filename()) - pkgpath = "%s/%s" % (cacheroot, os.path.basename(rpmpath)) - return pkgpath - - def installLocal(self, pkg, po=None, updateonly=False): - if not self.ts: - self.__initialize_transaction() - - solvfile = "%s/.solv" % (self.cachedir) - - rc, out = runner.runtool([fs_related.find_binary_path("rpms2solv"), - pkg]) - if rc == 0: - f = open(solvfile, "w+") - f.write(out) - f.close() - - warnmsg = self.repo_manager.loadSolvFile(solvfile, - os.path.basename(pkg)) - if warnmsg: - msger.warning(warnmsg) - - os.unlink(solvfile) - else: - msger.warning('Can not get %s solv data.' % pkg) - - hdr = rpmmisc.readRpmHeader(self.ts, pkg) - arch = zypp.Arch(hdr['arch']) - sysarch = zypp.Arch(self.target_arch) - - if arch.compatible_with (sysarch): - pkgname = hdr['name'] - self.localpkgs[pkgname] = pkg - self.selectPackage(pkgname) - msger.info("Marking %s to be installed" % (pkg)) - - else: - msger.warning("Cannot add package %s to transaction. " - "Not a compatible architecture: %s" \ - % (pkg, hdr['arch'])) - - def downloadPkgs(self, package_objects, count): - localpkgs = self.localpkgs.keys() - progress_obj = TextProgress(count) - - for po in package_objects: - if po.name() in localpkgs: - continue - - filename = self.getLocalPkgPath(po) - if os.path.exists(filename): - if self.checkPkg(filename) == 0: - continue - - dirn = os.path.dirname(filename) - if not os.path.exists(dirn): - os.makedirs(dirn) - - url = self.get_url(po) - proxies = self.get_proxies(po) - - try: - filename = myurlgrab(url.full, filename, proxies, progress_obj) - except CreatorError: - self.close() - raise - - def preinstallPkgs(self): - if not self.ts_pre: - self.__initialize_transaction() - - self.ts_pre.order() - cb = rpmmisc.RPMInstallCallback(self.ts_pre) - cb.headmsg = "Preinstall" - installlogfile = "%s/__catched_stderr.buf" % (self.instroot) - - # start to catch stderr output from librpm - msger.enable_logstderr(installlogfile) - - errors = self.ts_pre.run(cb.callback, '') - # stop catch - msger.disable_logstderr() - self.ts_pre.closeDB() - self.ts_pre = None - - if errors is not None: - if len(errors) == 0: - msger.warning('scriptlet or other non-fatal errors occurred ' - 'during transaction.') - - else: - for e in errors: - msger.warning(e[0]) - raise RepoError('Could not run transaction.') - def show_unresolved_dependencies_msg(self, unresolved_dependencies): - for pkg, need, needflags, sense, key in unresolved_dependencies: - - package = '-'.join(pkg) - - if needflags == rpm.RPMSENSE_LESS: - deppkg = ' < '.join(need) - elif needflags == rpm.RPMSENSE_EQUAL: - deppkg = ' = '.join(need) - elif needflags == rpm.RPMSENSE_GREATER: - deppkg = ' > '.join(need) - else: - deppkg = '-'.join(need) - - if sense == rpm.RPMDEP_SENSE_REQUIRES: - msger.warning("[%s] Requires [%s], which is not provided" \ - % (package, deppkg)) - - elif sense == rpm.RPMDEP_SENSE_CONFLICTS: - msger.warning("[%s] Conflicts with [%s]" % (package, deppkg)) - - def installPkgs(self, package_objects): - if not self.ts: - self.__initialize_transaction() - - # clean rpm lock - self._cleanupRpmdbLocks(self.instroot) - self._cleanupZyppJunk(self.instroot) - # Set filters - probfilter = 0 - for flag in self.probFilterFlags: - probfilter |= flag - self.ts.setProbFilter(probfilter) - self.ts_pre.setProbFilter(probfilter) - - localpkgs = self.localpkgs.keys() - - for po in package_objects: - pkgname = po.name() - if pkgname in localpkgs: - rpmpath = self.localpkgs[pkgname] - else: - rpmpath = self.getLocalPkgPath(po) - - if not os.path.exists(rpmpath): - # Maybe it is a local repo - rpmuri = self.get_url(po) - if rpmuri.startswith("file:/"): - rpmpath = rpmuri[5:] - - if not os.path.exists(rpmpath): - raise RpmError("Error: %s doesn't exist" % rpmpath) - - h = rpmmisc.readRpmHeader(self.ts, rpmpath) - - if pkgname in self.pre_pkgs: - msger.verbose("pre-install package added: %s" % pkgname) - self.ts_pre.addInstall(h, rpmpath, 'u') - - #for rpm4.14 vesion, need to split addInstall for these two transactionSet. - #addInstall for self.ts should be after self.ts_pre done. - self.pkgs_bak.append({"header": h, "rpmpath": rpmpath}) - - unresolved_dependencies = self.ts.check() - if not unresolved_dependencies: - if self.pre_pkgs: - self.preinstallPkgs() - - for pkg_bak in self.pkgs_bak: - self.ts.addInstall(pkg_bak["header"], pkg_bak["rpmpath"], 'u') - self.ts.order() - cb = rpmmisc.RPMInstallCallback(self.ts) - installlogfile = "%s/__catched_stderr.buf" % (self.instroot) - - # start to catch stderr output from librpm - msger.enable_logstderr(installlogfile) - - errors = self.ts.run(cb.callback, '') - # stop catch - msger.disable_logstderr() - self.ts.closeDB() - self.ts = None - self.pkgs_bak = [] - - if errors is not None: - if len(errors) == 0: - msger.warning('scriptlet or other non-fatal errors occurred ' - 'during transaction.') - if self.strict_mode: - raise CreatorError("mic failes to install some packages") - else: - for e in errors: - msger.warning(e[0]) - raise RepoError('Could not run transaction.') - - else: - self.show_unresolved_dependencies_msg(unresolved_dependencies) - raise RepoError("Unresolved dependencies, transaction failed.") - - def __initialize_transaction(self): - if not self.ts: - self.ts = rpm.TransactionSet(self.instroot) - # Set to not verify DSA signatures. - self.ts.setVSFlags(rpm._RPMVSF_NOSIGNATURES|rpm._RPMVSF_NODIGESTS) - - if not self.ts_pre: - self.ts_pre = rpm.TransactionSet(self.instroot) - # Just unpack the files, don't run scripts - self.ts_pre.setFlags(rpm.RPMTRANS_FLAG_ALLFILES | rpm.RPMTRANS_FLAG_NOSCRIPTS) - # Set to not verify DSA signatures. - self.ts_pre.setVSFlags(rpm._RPMVSF_NOSIGNATURES|rpm._RPMVSF_NODIGESTS) - - def checkPkg(self, pkg): - ret = 1 - if not os.path.exists(pkg): - return ret - ret = rpmmisc.checkRpmIntegrity('rpm', pkg) - if ret != 0: - msger.warning("package %s is damaged: %s" \ - % (os.path.basename(pkg), pkg)) - - return ret - - def _add_prob_flags(self, *flags): - for flag in flags: - if flag not in self.probFilterFlags: - self.probFilterFlags.append(flag) - - def get_proxies(self, pobj): - if not pobj: - return None - - proxy = None - proxies = None - repoinfo = pobj.repoInfo() - reponame = "%s" % repoinfo.name() - repos = filter(lambda r: r.name == reponame, self.repos) - repourl = str(repoinfo.baseUrls()[0]) - - if repos: - proxy = repos[0].proxy - if not proxy: - proxy = get_proxy_for(repourl) - if proxy: - proxies = {str(repourl.split(':')[0]): str(proxy)} - - return proxies - - def get_url(self, pobj): - if not pobj: - return None - - name = str(pobj.repoInfo().name()) - try: - repo = filter(lambda r: r.name == name, self.repos)[0] - except IndexError: - return None - - location = pobj.location() - location = str(location.filename()) - if location.startswith("./"): - location = location[2:] - - return repo.baseurl[0].join(location) - - def package_url(self, pkgname): - - def cmpEVR(p1, p2): - ed1 = p1.edition() - ed2 = p2.edition() - (e1, v1, r1) = map(str, [ed1.epoch(), ed1.version(), ed1.release()]) - (e2, v2, r2) = map(str, [ed2.epoch(), ed2.version(), ed2.release()]) - return rpm.labelCompare((e1, v1, r1), (e2, v2, r2)) - - if not self.Z: - self.__initialize_zypp() - - q = zypp.PoolQuery() - q.addKind(zypp.ResKind.package) - q.setMatchExact() - q.addAttribute(zypp.SolvAttr.name, pkgname) - items = sorted(q.queryResults(self.Z.pool()), - cmp=lambda x,y: cmpEVR(zypp.asKindPackage(x), zypp.asKindPackage(y)), - reverse=True) - - if items: - item = zypp.asKindPackage(items[0]) - url = self.get_url(item) - proxies = self.get_proxies(item) - return (url, proxies) - - return (None, None) diff --git a/mic_py2/usr/lib/mic/plugins/imager/fs_plugin.py b/mic_py2/usr/lib/mic/plugins/imager/fs_plugin.py deleted file mode 100755 index 21bb544..0000000 --- a/mic_py2/usr/lib/mic/plugins/imager/fs_plugin.py +++ /dev/null @@ -1,98 +0,0 @@ -#! /usr/bin/python2 -# -# Copyright (c) 2011 Intel, Inc. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free -# Software Foundation; version 2 of the License -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., 59 -# Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -import subprocess -from mic import chroot, msger, rt_util -from mic.utils import misc, errors, fs_related, runner -from mic.imager import fs -from mic.plugin import pluginmgr - -from mic.pluginbase import ImagerPlugin -class FsPlugin(ImagerPlugin): - name = 'fs' - - @classmethod - def do_create(self, args): - """${cmd_name}: create fs image - - """ - creatoropts, pkgmgr, recording_pkgs = rt_util.prepare_create(args) - - creator = fs.FsImageCreator(creatoropts, pkgmgr) - creator._include_src = args.include_src - - if len(recording_pkgs) > 0: - creator._recording_pkgs = recording_pkgs - - self.check_image_exists(creator.destdir, - creator.pack_to, - [creator.name], - creatoropts['release']) - - try: - creator.check_depend_tools() - creator.mount(None, creatoropts["cachedir"]) - creator.install() - creator.tpkinstall() - #Download the source packages ###private options - if args.include_src: - installed_pkgs = creator.get_installed_packages() - msger.info('Generating the image with source rpms included ...') - if not misc.SrcpkgsDownload(installed_pkgs, creatoropts["repomd"], - creator._instroot, creatoropts["cachedir"]): - msger.warning("Source packages can't be downloaded") - - creator.configure(creatoropts["repomd"]) - creator.copy_kernel() - creator.unmount() - creator.package(creatoropts["destdir"]) - creator.create_manifest() - if creatoropts['release'] is not None: - creator.release_output(args.ksfile, creatoropts['destdir'], - creatoropts['release']) - creator.print_outimage_info() - except errors.CreatorError: - raise - finally: - creator.cleanup() - - #Run script of --run_script after image created - if creatoropts['run_script']: - cmd = creatoropts['run_script'] - try: - runner.show(cmd) - except OSError as err: - msger.warning(str(err)) - - - msger.info("Finished.") - return 0 - - @classmethod - def do_chroot(self, target, cmd=[]):#chroot.py parse opts&args - try: - if len(cmd) != 0: - cmdline = ' '.join(cmd) - else: - cmdline = "/bin/bash" - envcmd = fs_related.find_binary_inchroot("env", target) - if envcmd: - cmdline = "%s HOME=/root %s" % (envcmd, cmdline) - chroot.chroot(target, None, cmdline) - finally: - chroot.cleanup_after_chroot("dir", None, None, None) - return 1 diff --git a/mic_py2/usr/lib/mic/plugins/imager/loop_plugin.py b/mic_py2/usr/lib/mic/plugins/imager/loop_plugin.py deleted file mode 100755 index d451422..0000000 --- a/mic_py2/usr/lib/mic/plugins/imager/loop_plugin.py +++ /dev/null @@ -1,210 +0,0 @@ -#! /usr/bin/python2 -# -# Copyright (c) 2011 Intel, Inc. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free -# Software Foundation; version 2 of the License -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., 59 -# Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -import os -import subprocess -import shutil -import tempfile - -from mic import chroot, msger, rt_util -from mic.utils import misc, fs_related, errors, runner -from mic.plugin import pluginmgr -from mic.imager.loop import LoopImageCreator, load_mountpoints - -from mic.pluginbase import ImagerPlugin -class LoopPlugin(ImagerPlugin): - name = 'loop' - - @classmethod - def do_create(self, args): - """${cmd_name}: create loop image - """ - - creatoropts, pkgmgr, recording_pkgs = rt_util.prepare_create(args) - - creator = LoopImageCreator(creatoropts, - pkgmgr, - args.compress_image, - args.shrink) - - if len(recording_pkgs) > 0: - creator._recording_pkgs = recording_pkgs - - image_names = [creator.name + ".img"] - image_names.extend(creator.get_image_names()) - self.check_image_exists(creator.destdir, - creator.pack_to, - image_names, - creatoropts['release']) - - try: - creator.check_depend_tools() - creator.mount(None, creatoropts["cachedir"]) - creator.install() - creator.tpkinstall() - creator.configure(creatoropts["repomd"]) - creator.copy_kernel() - creator.create_cpio_image() - creator.unmount() - creator.copy_cpio_image() - creator.package(creatoropts["destdir"]) - creator.create_manifest() - - if creatoropts['release'] is not None: - creator.release_output(args.ksfile, - creatoropts['destdir'], - creatoropts['release']) - creator.print_outimage_info() - - except errors.CreatorError: - raise - finally: - creator.cleanup() - - #Run script of --run_script after image created - if creatoropts['run_script']: - cmd = creatoropts['run_script'] - try: - runner.show(cmd) - except OSError as err: - msger.warning(str(err)) - - msger.info("Finished.") - return 0 - - @classmethod - def _do_chroot_tar(cls, target, cmd=[]): - mountfp_xml = os.path.splitext(target)[0] + '.xml' - if not os.path.exists(mountfp_xml): - raise errors.CreatorError("No mount point file found for this tar " - "image, please check %s" % mountfp_xml) - - import tarfile - tar = tarfile.open(target, 'r') - tmpdir = misc.mkdtemp() - tar.extractall(path=tmpdir) - tar.close() - - mntdir = misc.mkdtemp() - - loops = [] - for (mp, label, name, size, fstype) in load_mountpoints(mountfp_xml): - if fstype in ("ext2", "ext3", "ext4"): - myDiskMount = fs_related.ExtDiskMount - elif fstype == "btrfs": - myDiskMount = fs_related.BtrfsDiskMount - elif fstype in ("vfat", "msdos"): - myDiskMount = fs_related.VfatDiskMount - else: - raise errors.CreatorError("Cannot support fstype: %s" % fstype) - - name = os.path.join(tmpdir, name) - size = size * 1024 * 1024 - loop = myDiskMount(fs_related.SparseLoopbackDisk(name, size), - os.path.join(mntdir, mp.lstrip('/')), - fstype, size, label) - - try: - msger.verbose("Mount %s to %s" % (mp, mntdir + mp)) - fs_related.makedirs(os.path.join(mntdir, mp.lstrip('/'))) - loop.mount() - - except: - loop.cleanup() - for lp in reversed(loops): - chroot.cleanup_after_chroot("img", lp, None, mntdir) - - shutil.rmtree(tmpdir, ignore_errors=True) - raise - - loops.append(loop) - - try: - if len(cmd) != 0: - cmdline = "/usr/bin/env HOME=/root " + ' '.join(cmd) - else: - cmdline = "/usr/bin/env HOME=/root /bin/bash" - chroot.chroot(mntdir, None, cmdline) - except: - raise errors.CreatorError("Failed to chroot to %s." % target) - finally: - for loop in reversed(loops): - chroot.cleanup_after_chroot("img", loop, None, mntdir) - - shutil.rmtree(tmpdir, ignore_errors=True) - - @classmethod - def do_chroot(cls, target, cmd=[]): - if target.endswith('.tar'): - import tarfile - if tarfile.is_tarfile(target): - LoopPlugin._do_chroot_tar(target, cmd) - return - else: - raise errors.CreatorError("damaged tarball for loop images") - - img = target - imgsize = misc.get_file_size(img) * 1024 * 1024 - imgtype = misc.get_image_type(img) - if imgtype == "btrfsimg": - fstype = "btrfs" - myDiskMount = fs_related.BtrfsDiskMount - elif imgtype in ("ext3fsimg", "ext4fsimg"): - fstype = imgtype[:4] - myDiskMount = fs_related.ExtDiskMount - elif imgtype == "f2fsimg": - fstype = "f2fs" - myDiskMount = fs_related.F2fsDiskMount - else: - raise errors.CreatorError("Unsupported filesystem type: %s" \ - % imgtype) - - extmnt = misc.mkdtemp() - extloop = myDiskMount(fs_related.SparseLoopbackDisk(img, imgsize), - extmnt, - fstype, - 4096, - "%s label" % fstype) - try: - extloop.mount() - - except errors.MountError: - extloop.cleanup() - shutil.rmtree(extmnt, ignore_errors=True) - raise - - try: - if cmd is not None: - cmdline = cmd - else: - cmdline = "/bin/bash" - envcmd = fs_related.find_binary_inchroot("env", extmnt) - if envcmd: - cmdline = "%s HOME=/root %s" % (envcmd, cmdline) - chroot.chroot(extmnt, None, cmdline) - except: - raise errors.CreatorError("Failed to chroot to %s." % img) - finally: - chroot.cleanup_after_chroot("img", extloop, None, extmnt) - - @classmethod - def do_unpack(cls, srcimg): - image = os.path.join(tempfile.mkdtemp(dir="/var/tmp", prefix="tmp"), - "target.img") - msger.info("Copying file system ...") - shutil.copyfile(srcimg, image) - return image diff --git a/mic_py2/usr/lib/mic/plugins/imager/qcow_plugin.py b/mic_py2/usr/lib/mic/plugins/imager/qcow_plugin.py deleted file mode 100755 index 2329958..0000000 --- a/mic_py2/usr/lib/mic/plugins/imager/qcow_plugin.py +++ /dev/null @@ -1,92 +0,0 @@ -# -# Copyright (c) 2014 Intel, Inc. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free -# Software Foundation; version 2 of the License -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., 59 -# Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -import os -import subprocess -import shutil - -from mic import msger, rt_util -from mic.plugin import pluginmgr -from mic.pluginbase import ImagerPlugin -from mic.imager.qcow import QcowImageCreator -from mic.utils import errors, runner - -class QcowPlugin(ImagerPlugin): - name = 'qcow' - - @classmethod - def do_create(cls, args): - """${cmd_name}: create qcow image - """ - - creatoropts, pkgmgr, recording_pkgs = rt_util.prepare_create(args) - - creator = QcowImageCreator(creatoropts, - pkgmgr) - - if len(recording_pkgs) > 0: - creator._recording_pkgs = recording_pkgs - - image_names = [creator.name + ".img"] - image_names.extend(creator.get_image_names()) - cls.check_image_exists(creator.destdir, - creator.pack_to, - image_names, - creatoropts['release']) - - try: - creator.check_depend_tools() - creator.mount(None, creatoropts["cachedir"]) - creator.install() - creator.tpkinstall() - creator.configure(creatoropts["repomd"]) - creator.copy_kernel() - creator.create_cpio_image() - creator.unmount() - creator.copy_cpio_image() - creator.package(creatoropts["destdir"]) - creator.create_manifest() - - if creatoropts['release'] is not None: - creator.release_output(args.ksfile, - creatoropts['destdir'], - creatoropts['release']) - creator.print_outimage_info() - - except errors.CreatorError: - raise - finally: - creator.cleanup() - - #Run script of --run_script after image created - if creatoropts['run_script']: - cmd = creatoropts['run_script'] - try: - runner.show(cmd) - except OSError as err: - msger.warning(str(err)) - - - msger.info("Finished.") - return 0 - - @classmethod - def do_chroot(cls, target, cmd=[]): - pass - - @classmethod - def do_unpack(cls, srcimg): - pass diff --git a/mic_py2/usr/lib/mic/plugins/imager/raw_plugin.py b/mic_py2/usr/lib/mic/plugins/imager/raw_plugin.py deleted file mode 100755 index dd97b18..0000000 --- a/mic_py2/usr/lib/mic/plugins/imager/raw_plugin.py +++ /dev/null @@ -1,228 +0,0 @@ -#! /usr/bin/python2 -# -# Copyright (c) 2011 Intel, Inc. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free -# Software Foundation; version 2 of the License -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., 59 -# Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -import os -import subprocess -import shutil -import re -import tempfile - -from mic import chroot, msger, rt_util -from mic.utils import misc, fs_related, errors, runner -from mic.plugin import pluginmgr -from mic.utils.partitionedfs import PartitionedMount - -import mic.imager.raw as raw - -from mic.pluginbase import ImagerPlugin -class RawPlugin(ImagerPlugin): - name = 'raw' - - @classmethod - def do_create(self, args): - """${cmd_name}: create raw image - """ - - creatoropts, pkgmgr, recording_pkgs = rt_util.prepare_create(args) - - creator = raw.RawImageCreator(creatoropts, pkgmgr, args.compress_image, - args.generate_bmap, args.fstab_entry) - - if len(recording_pkgs) > 0: - creator._recording_pkgs = recording_pkgs - - images = ["%s-%s.raw" % (creator.name, disk_name) - for disk_name in creator.get_disk_names()] - self.check_image_exists(creator.destdir, - creator.pack_to, - images, - creatoropts['release']) - - try: - creator.check_depend_tools() - creator.mount(None, creatoropts["cachedir"]) - creator.install() - creator.tpkinstall() - creator.configure(creatoropts["repomd"]) - creator.copy_kernel() - creator.unmount() - creator.generate_bmap() - creator.package(creatoropts["destdir"]) - creator.create_manifest() - if creatoropts['release'] is not None: - creator.release_output(args.ksfile, creatoropts['destdir'], creatoropts['release']) - creator.print_outimage_info() - - except errors.CreatorError: - raise - finally: - creator.cleanup() - - #Run script of --run_script after image created - if creatoropts['run_script']: - cmd = creatoropts['run_script'] - try: - runner.show(cmd) - except OSError as err: - msger.warning(str(err)) - - - msger.info("Finished.") - return 0 - - @classmethod - def do_chroot(cls, target, cmd=[]): - img = target - imgsize = misc.get_file_size(img) * 1024 * 1024 - partedcmd = fs_related.find_binary_path("parted") - disk = fs_related.SparseLoopbackDisk(img, imgsize) - imgmnt = misc.mkdtemp() - imgloop = PartitionedMount(imgmnt, skipformat = True) - imgloop.add_disk('/dev/sdb', disk) - img_fstype = "ext3" - - msger.info("Partition Table:") - partnum = [] - for line in runner.outs([partedcmd, "-s", img, "print"]).splitlines(): - # no use strip to keep line output here - if "Number" in line: - msger.raw(line) - if line.strip() and line.strip()[0].isdigit(): - partnum.append(line.strip()[0]) - msger.raw(line) - - rootpart = None - if len(partnum) > 1: - rootpart = msger.choice("please choose root partition", partnum) - - # Check the partitions from raw disk. - # if choose root part, the mark it as mounted - if rootpart: - root_mounted = True - else: - root_mounted = False - partition_mounts = 0 - for line in runner.outs([ partedcmd, "-s", img, "unit", "B", "print" ]).splitlines(): - line = line.strip() - - # Lines that start with number are the partitions, - # because parted can be translated we can't refer to any text lines. - if not line or not line[0].isdigit(): - continue - - # Some vars have extra , as list seperator. - line = line.replace(",","") - - # Example of parted output lines that are handled: - # Number Start End Size Type File system Flags - # 1 512B 3400000511B 3400000000B primary - # 2 3400531968B 3656384511B 255852544B primary linux-swap(v1) - # 3 3656384512B 3720347647B 63963136B primary fat16 boot, lba - - partition_info = re.split("\s+", line) - - size = partition_info[3].split("B")[0] - - if len(partition_info) < 6 or partition_info[5] in ["boot"]: - # No filesystem can be found from partition line. Assuming - # btrfs, because that is the only MeeGo fs that parted does - # not recognize properly. - # TODO: Can we make better assumption? - fstype = "btrfs" - elif partition_info[5] in [ "ext2", "ext3", "ext4", "btrfs", "f2fs" ]: - fstype = partition_info[5] - elif partition_info[5] in [ "fat16", "fat32" ]: - fstype = "vfat" - elif "swap" in partition_info[5]: - fstype = "swap" - else: - raise errors.CreatorError("Could not recognize partition fs type '%s'." % - partition_info[5]) - - if rootpart and rootpart == line[0]: - mountpoint = '/' - elif not root_mounted and fstype in [ "ext2", "ext3", "ext4", "btrfs", "f2fs" ]: - # TODO: Check that this is actually the valid root partition from /etc/fstab - mountpoint = "/" - root_mounted = True - elif fstype == "swap": - mountpoint = "swap" - else: - # TODO: Assing better mount points for the rest of the partitions. - partition_mounts += 1 - mountpoint = "/media/partition_%d" % partition_mounts - - if "boot" in partition_info: - boot = True - else: - boot = False - - msger.verbose("Size: %s Bytes, fstype: %s, mountpoint: %s, boot: %s" % - (size, fstype, mountpoint, boot)) - # TODO: add_partition should take bytes as size parameter. - imgloop.add_partition((int)(size)/1024/1024, "/dev/sdb", mountpoint, - fstype = fstype, boot = boot) - - try: - imgloop.mount() - - except errors.MountError: - imgloop.cleanup() - raise - - try: - if len(cmd) != 0: - cmdline = ' '.join(cmd) - else: - cmdline = "/bin/bash" - envcmd = fs_related.find_binary_inchroot("env", imgmnt) - if envcmd: - cmdline = "%s HOME=/root %s" % (envcmd, cmdline) - chroot.chroot(imgmnt, None, cmdline) - except: - raise errors.CreatorError("Failed to chroot to %s." %img) - finally: - chroot.cleanup_after_chroot("img", imgloop, None, imgmnt) - - @classmethod - def do_unpack(cls, srcimg): - srcimgsize = (misc.get_file_size(srcimg)) * 1024 * 1024 - srcmnt = misc.mkdtemp("srcmnt") - disk = fs_related.SparseLoopbackDisk(srcimg, srcimgsize) - srcloop = PartitionedMount(srcmnt, skipformat = True) - - srcloop.add_disk('/dev/sdb', disk) - srcloop.add_partition(srcimgsize/1024/1024, "/dev/sdb", "/", "ext3", boot=False) - try: - srcloop.mount() - - except errors.MountError: - srcloop.cleanup() - raise - - image = os.path.join(tempfile.mkdtemp(dir = "/var/tmp", prefix = "tmp"), "target.img") - args = ['dd', "if=%s" % srcloop.partitions[0]['device'], "of=%s" % image] - - msger.info("`dd` image ...") - rc = runner.show(args) - srcloop.cleanup() - shutil.rmtree(os.path.dirname(srcmnt), ignore_errors = True) - - if rc != 0: - raise errors.CreatorError("Failed to dd") - else: - return image diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/__init__.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/base.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/base.py deleted file mode 100644 index 75ce249..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/base.py +++ /dev/null @@ -1,467 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2006, 2007, 2008 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -""" -Base classes for creating commands and syntax version object. - -This module exports several important base classes: - - BaseData - The base abstract class for all data objects. Data objects - are contained within a BaseHandler object. - - BaseHandler - The base abstract class from which versioned kickstart - handler are derived. Subclasses of BaseHandler hold - BaseData and KickstartCommand objects. - - DeprecatedCommand - An abstract subclass of KickstartCommand that should - be further subclassed by users of this module. When - a subclass is used, a warning message will be - printed. - - KickstartCommand - The base abstract class for all kickstart commands. - Command objects are contained within a BaseHandler - object. -""" -import gettext -gettext.textdomain("pykickstart") -_ = lambda x: gettext.ldgettext("pykickstart", x) - -import types -import warnings -from pykickstart.errors import * -from pykickstart.ko import * -from pykickstart.parser import Packages,TpkPackages -from pykickstart.version import versionToString - -### -### COMMANDS -### -class KickstartCommand(KickstartObject): - """The base class for all kickstart commands. This is an abstract class.""" - removedKeywords = [] - removedAttrs = [] - - def __init__(self, writePriority=0, *args, **kwargs): - """Create a new KickstartCommand instance. This method must be - provided by all subclasses, but subclasses must call - KickstartCommand.__init__ first. Instance attributes: - - currentCmd -- The name of the command in the input file that - caused this handler to be run. - currentLine -- The current unprocessed line from the input file - that caused this handler to be run. - handler -- A reference to the BaseHandler subclass this - command is contained withing. This is needed to - allow referencing of Data objects. - lineno -- The current line number in the input file. - writePriority -- An integer specifying when this command should be - printed when iterating over all commands' __str__ - methods. The higher the number, the later this - command will be written. All commands with the - same priority will be written alphabetically. - """ - - # We don't want people using this class by itself. - if self.__class__ is KickstartCommand: - raise TypeError ("KickstartCommand is an abstract class.") - - KickstartObject.__init__(self, *args, **kwargs) - - self.writePriority = writePriority - - # These will be set by the dispatcher. - self.currentCmd = "" - self.currentLine = "" - self.handler = None - self.lineno = 0 - - # If a subclass provides a removedKeywords list, remove all the - # members from the kwargs list before we start processing it. This - # ensures that subclasses don't continue to recognize arguments that - # were removed. - for arg in filter(kwargs.has_key, self.removedKeywords): - kwargs.pop(arg) - - def __call__(self, *args, **kwargs): - """Set multiple attributes on a subclass of KickstartCommand at once - via keyword arguments. Valid attributes are anything specified in - a subclass, but unknown attributes will be ignored. - """ - for (key, val) in kwargs.items(): - # Ignore setting attributes that were removed in a subclass, as - # if they were unknown attributes. - if key in self.removedAttrs: - continue - - if hasattr(self, key): - setattr(self, key, val) - - def __str__(self): - """Return a string formatted for output to a kickstart file. This - method must be provided by all subclasses. - """ - return KickstartObject.__str__(self) - - def parse(self, args): - """Parse the list of args and set data on the KickstartCommand object. - This method must be provided by all subclasses. - """ - raise TypeError ("parse() not implemented for KickstartCommand") - - def apply(self, instroot="/"): - """Write out the configuration related to the KickstartCommand object. - Subclasses which do not provide this method will not have their - configuration written out. - """ - return - - def dataList(self): - """For commands that can occur multiple times in a single kickstart - file (like network, part, etc.), return the list that we should - append more data objects to. - """ - return None - - def deleteRemovedAttrs(self): - """Remove all attributes from self that are given in the removedAttrs - list. This method should be called from __init__ in a subclass, - but only after the superclass's __init__ method has been called. - """ - for attr in filter(lambda k: hasattr(self, k), self.removedAttrs): - delattr(self, attr) - - # Set the contents of the opts object (an instance of optparse.Values - # returned by parse_args) as attributes on the KickstartCommand object. - # It's useful to call this from KickstartCommand subclasses after parsing - # the arguments. - def _setToSelf(self, optParser, opts): - self._setToObj(optParser, opts, self) - - # Sets the contents of the opts object (an instance of optparse.Values - # returned by parse_args) as attributes on the provided object obj. It's - # useful to call this from KickstartCommand subclasses that handle lists - # of objects (like partitions, network devices, etc.) and need to populate - # a Data object. - def _setToObj(self, optParser, opts, obj): - for key in filter (lambda k: getattr(opts, k) != None, optParser.keys()): - setattr(obj, key, getattr(opts, key)) - -class DeprecatedCommand(KickstartCommand): - """Specify that a command is deprecated and no longer has any function. - Any command that is deprecated should be subclassed from this class, - only specifying an __init__ method that calls the superclass's __init__. - This is an abstract class. - """ - def __init__(self, writePriority=None, *args, **kwargs): - # We don't want people using this class by itself. - if self.__class__ is KickstartCommand: - raise TypeError ("DeprecatedCommand is an abstract class.") - - # Create a new DeprecatedCommand instance. - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - - def __str__(self): - """Placeholder since DeprecatedCommands don't work anymore.""" - return "" - - def parse(self, args): - """Print a warning message if the command is seen in the input file.""" - mapping = {"lineno": self.lineno, "cmd": self.currentCmd} - warnings.warn(_("Ignoring deprecated command on line %(lineno)s: The %(cmd)s command has been deprecated and no longer has any effect. It may be removed from future releases, which will result in a fatal error from kickstart. Please modify your kickstart file to remove this command.") % mapping, DeprecationWarning) - - -### -### HANDLERS -### -class BaseHandler(KickstartObject): - """Each version of kickstart syntax is provided by a subclass of this - class. These subclasses are what users will interact with for parsing, - extracting data, and writing out kickstart files. This is an abstract - class. - - version -- The version this syntax handler supports. This is set by - a class attribute of a BaseHandler subclass and is used to - set up the command dict. It is for read-only use. - """ - version = None - - def __init__(self, mapping=None, dataMapping=None, commandUpdates=None, - dataUpdates=None, *args, **kwargs): - """Create a new BaseHandler instance. This method must be provided by - all subclasses, but subclasses must call BaseHandler.__init__ first. - - mapping -- A custom map from command strings to classes, - useful when creating your own handler with - special command objects. It is otherwise unused - and rarely needed. If you give this argument, - the mapping takes the place of the default one - and so must include all commands you want - recognized. - dataMapping -- This is the same as mapping, but for data - objects. All the same comments apply. - commandUpdates -- This is similar to mapping, but does not take - the place of the defaults entirely. Instead, - this mapping is applied after the defaults and - updates it with just the commands you want to - modify. - dataUpdates -- This is the same as commandUpdates, but for - data objects. - - - Instance attributes: - - commands -- A mapping from a string command to a KickstartCommand - subclass object that handles it. Multiple strings can - map to the same object, but only one instance of the - command object should ever exist. Most users should - never have to deal with this directly, as it is - manipulated internally and called through dispatcher. - currentLine -- The current unprocessed line from the input file - that caused this handler to be run. - packages -- An instance of pykickstart.parser.Packages which - describes the packages section of the input file. - platform -- A string describing the hardware platform, which is - needed only by system-config-kickstart. - scripts -- A list of pykickstart.parser.Script instances, which is - populated by KickstartParser.addScript and describes the - %pre/%post/%traceback script section of the input file. - """ - - # We don't want people using this class by itself. - if self.__class__ is BaseHandler: - raise TypeError ("BaseHandler is an abstract class.") - - KickstartObject.__init__(self, *args, **kwargs) - - # This isn't really a good place for these, but it's better than - # everything else I can think of. - self.scripts = [] - self.packages = Packages() - self.tpk_packages = TpkPackages() - self.platform = "" - - # These will be set by the dispatcher. - self.commands = {} - self.currentLine = 0 - - # A dict keyed by an integer priority number, with each value being a - # list of KickstartCommand subclasses. This dict is maintained by - # registerCommand and used in __str__. No one else should be touching - # it. - self._writeOrder = {} - - self._registerCommands(mapping, dataMapping, commandUpdates, dataUpdates) - - def __str__(self): - """Return a string formatted for output to a kickstart file.""" - retval = "" - - if self.platform != "": - retval += "#platform=%s\n" % self.platform - - retval += "#version=%s\n" % versionToString(self.version) - - lst = self._writeOrder.keys() - lst.sort() - - for prio in lst: - for obj in self._writeOrder[prio]: - retval += obj.__str__() - - for script in self.scripts: - retval += script.__str__() - - retval += self.packages.__str__() - - return retval - - def _insertSorted(self, lst, obj): - length = len(lst) - i = 0 - - while i < length: - # If the two classes have the same name, it's because we are - # overriding an existing class with one from a later kickstart - # version, so remove the old one in favor of the new one. - if obj.__class__.__name__ > lst[i].__class__.__name__: - i += 1 - elif obj.__class__.__name__ == lst[i].__class__.__name__: - lst[i] = obj - return - elif obj.__class__.__name__ < lst[i].__class__.__name__: - break - - if i >= length: - lst.append(obj) - else: - lst.insert(i, obj) - - def _setCommand(self, cmdObj): - # Add an attribute on this version object. We need this to provide a - # way for clients to access the command objects. We also need to strip - # off the version part from the front of the name. - if cmdObj.__class__.__name__.find("_") != -1: - name = unicode(cmdObj.__class__.__name__.split("_", 1)[1]) - else: - name = unicode(cmdObj.__class__.__name__).lower() - - setattr(self, name.lower(), cmdObj) - - # Also, add the object into the _writeOrder dict in the right place. - if cmdObj.writePriority is not None: - if self._writeOrder.has_key(cmdObj.writePriority): - self._insertSorted(self._writeOrder[cmdObj.writePriority], cmdObj) - else: - self._writeOrder[cmdObj.writePriority] = [cmdObj] - - def _registerCommands(self, mapping=None, dataMapping=None, commandUpdates=None, - dataUpdates=None): - if mapping == {} or mapping == None: - from pykickstart.handlers.control import commandMap - cMap = commandMap[self.version] - else: - cMap = mapping - - if dataMapping == {} or dataMapping == None: - from pykickstart.handlers.control import dataMap - dMap = dataMap[self.version] - else: - dMap = dataMapping - - if type(commandUpdates) == types.DictType: - cMap.update(commandUpdates) - - if type(dataUpdates) == types.DictType: - dMap.update(dataUpdates) - - for (cmdName, cmdClass) in cMap.iteritems(): - # First make sure we haven't instantiated this command handler - # already. If we have, we just need to make another mapping to - # it in self.commands. - cmdObj = None - - for (key, val) in self.commands.iteritems(): - if val.__class__.__name__ == cmdClass.__name__: - cmdObj = val - break - - # If we didn't find an instance in self.commands, create one now. - if cmdObj == None: - cmdObj = cmdClass() - self._setCommand(cmdObj) - - # Finally, add the mapping to the commands dict. - self.commands[cmdName] = cmdObj - self.commands[cmdName].handler = self - - # We also need to create attributes for the various data objects. - # No checks here because dMap is a bijection. At least, that's what - # the comment says. Hope no one screws that up. - for (dataName, dataClass) in dMap.iteritems(): - setattr(self, dataName, dataClass) - - def dispatcher(self, args, lineno): - """Call the appropriate KickstartCommand handler for the current line - in the kickstart file. A handler for the current command should - be registered, though a handler of None is not an error. Returns - the data object returned by KickstartCommand.parse. - - args -- A list of arguments to the current command - lineno -- The line number in the file, for error reporting - """ - cmd = args[0] - - if not self.commands.has_key(cmd): - raise KickstartParseError (formatErrorMsg(lineno, msg=_("Unknown command: %s" % cmd))) - elif self.commands[cmd] != None: - self.commands[cmd].currentCmd = cmd - self.commands[cmd].currentLine = self.currentLine - self.commands[cmd].lineno = lineno - - # The parser returns the data object that was modified. This could - # be a BaseData subclass that should be put into a list, or it - # could be the command handler object itself. - obj = self.commands[cmd].parse(args[1:]) - lst = self.commands[cmd].dataList() - if lst is not None: - lst.append(obj) - - return obj - - def maskAllExcept(self, lst): - """Set all entries in the commands dict to None, except the ones in - the lst. All other commands will not be processed. - """ - self._writeOrder = {} - - for (key, val) in self.commands.iteritems(): - if not key in lst: - self.commands[key] = None - - def hasCommand(self, cmd): - """Return true if there is a handler for the string cmd.""" - return hasattr(self, cmd) - - -### -### DATA -### -class BaseData(KickstartObject): - """The base class for all data objects. This is an abstract class.""" - removedKeywords = [] - removedAttrs = [] - - def __init__(self, *args, **kwargs): - """Create a new BaseData instance. - - lineno -- Line number in the ks-file where this object was defined - """ - - # We don't want people using this class by itself. - if self.__class__ is BaseData: - raise TypeError ("BaseData is an abstract class.") - - KickstartObject.__init__(self, *args, **kwargs) - self.lineno = 0 - - def __str__(self): - """Return a string formatted for output to a kickstart file.""" - return "" - - def __call__(self, *args, **kwargs): - """Set multiple attributes on a subclass of BaseData at once via - keyword arguments. Valid attributes are anything specified in a - subclass, but unknown attributes will be ignored. - """ - for (key, val) in kwargs.items(): - # Ignore setting attributes that were removed in a subclass, as - # if they were unknown attributes. - if key in self.removedAttrs: - continue - - if hasattr(self, key): - setattr(self, key, val) - - def deleteRemovedAttrs(self): - """Remove all attributes from self that are given in the removedAttrs - list. This method should be called from __init__ in a subclass, - but only after the superclass's __init__ method has been called. - """ - for attr in filter(lambda k: hasattr(self, k), self.removedAttrs): - delattr(self, attr) diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/__init__.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/__init__.py deleted file mode 100644 index da48ff5..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/__init__.py +++ /dev/null @@ -1,26 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2009 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -import authconfig, autopart, autostep, bootloader, clearpart, device -import deviceprobe, displaymode, dmraid, driverdisk, fcoe, firewall, firstboot -import group, ignoredisk, interactive, iscsi, iscsiname, key, keyboard, lang -import langsupport, lilocheck, logging, logvol, mediacheck, method, monitor -import mouse, multipath, network, partition, raid, reboot, repo, rescue, rootpw -import selinux, services, skipx, sshpw, timezone, updates, upgrade, user, vnc -import volgroup, xconfig, zerombr, zfcp diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/authconfig.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/authconfig.py deleted file mode 100644 index 9af9c0f..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/authconfig.py +++ /dev/null @@ -1,40 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2005, 2006, 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * - -class FC3_Authconfig(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - KickstartCommand.__init__(self, *args, **kwargs) - self.authconfig = kwargs.get("authconfig", "") - - def __str__(self): - retval = KickstartCommand.__str__(self) - - if self.authconfig: - retval += "# System authorization information\nauth %s\n" % self.authconfig - - return retval - - def parse(self, args): - self.authconfig = self.currentLine[len(self.currentCmd):].strip() - return self diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/autopart.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/autopart.py deleted file mode 100644 index 22c3b66..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/autopart.py +++ /dev/null @@ -1,119 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2005, 2006, 2007, 2008 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.errors import * -from pykickstart.options import * - -import gettext -_ = lambda x: gettext.ldgettext("pykickstart", x) - -class FC3_AutoPart(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=100, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.autopart = kwargs.get("autopart", False) - - def __str__(self): - retval = KickstartCommand.__str__(self) - - if self.autopart: - retval += "autopart\n" - - return retval - - def parse(self, args): - if len(args) > 0: - raise KickstartValueError (formatErrorMsg(self.lineno, msg=_("Kickstart command %s does not take any arguments") % "autopart")) - - self.autopart = True - return self - -class F9_AutoPart(FC3_AutoPart): - removedKeywords = FC3_AutoPart.removedKeywords - removedAttrs = FC3_AutoPart.removedAttrs - - def __init__(self, writePriority=100, *args, **kwargs): - FC3_AutoPart.__init__(self, writePriority=writePriority, *args, **kwargs) - self.encrypted = kwargs.get("encrypted", False) - self.passphrase = kwargs.get("passphrase", "") - - self.op = self._getParser() - - def __str__(self): - retval = KickstartCommand.__str__(self) - - if self.autopart: - retval += "autopart" - - if self.encrypted: - retval += " --encrypted" - - if self.passphrase != "": - retval += " --passphrase=\"%s\""% self.passphrase - - if retval != "": - retval += "\n" - - return retval - - def _getParser(self): - op = KSOptionParser() - op.add_option("--encrypted", action="store_true", default=False) - op.add_option("--passphrase") - return op - - def parse(self, args): - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - self._setToSelf(self.op, opts) - self.autopart = True - return self - -class F12_AutoPart(F9_AutoPart): - removedKeywords = F9_AutoPart.removedKeywords - removedAttrs = F9_AutoPart.removedAttrs - - def __init__(self, writePriority=100, *args, **kwargs): - F9_AutoPart.__init__(self, writePriority=writePriority, *args, **kwargs) - - self.escrowcert = kwargs.get("escrowcert", "") - self.backuppassphrase = kwargs.get("backuppassphrase", False) - - def __str__(self): - retval = F9_AutoPart.__str__(self) - - if self.encrypted and self.escrowcert != "": - retval = retval.strip() - - retval += " --escrowcert=\"%s\"" % self.escrowcert - - if self.backuppassphrase: - retval += " --backuppassphrase" - - retval += "\n" - - return retval - - def _getParser(self): - op = F9_AutoPart._getParser(self) - op.add_option("--escrowcert") - op.add_option("--backuppassphrase", action="store_true", default=False) - return op diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/autostep.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/autostep.py deleted file mode 100644 index e6ae71c..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/autostep.py +++ /dev/null @@ -1,55 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2005, 2006, 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.options import * - -class FC3_AutoStep(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - - self.autostep = kwargs.get("autostep", False) - self.autoscreenshot = kwargs.get("autoscreenshot", False) - - def __str__(self): - retval = KickstartCommand.__str__(self) - - if self.autostep: - if self.autoscreenshot: - retval += "autostep --autoscreenshot\n" - else: - retval += "autostep\n" - - return retval - - def _getParser(self): - op = KSOptionParser() - op.add_option("--autoscreenshot", dest="autoscreenshot", - action="store_true", default=False) - return op - - def parse(self, args): - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - self._setToSelf(self.op, opts) - self.autostep = True - return self diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/bootloader.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/bootloader.py deleted file mode 100644 index b227fac..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/bootloader.py +++ /dev/null @@ -1,265 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.options import * - -class FC3_Bootloader(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=10, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - - self.driveorder = kwargs.get("driveorder", []) - self.appendLine = kwargs.get("appendLine", "") - self.forceLBA = kwargs.get("forceLBA", False) - self.linear = kwargs.get("linear", True) - self.location = kwargs.get("location", "") - self.md5pass = kwargs.get("md5pass", "") - self.password = kwargs.get("password", "") - self.upgrade = kwargs.get("upgrade", False) - self.useLilo = kwargs.get("useLilo", False) - - self.deleteRemovedAttrs() - - def _getArgsAsStr(self): - retval = "" - - if self.appendLine != "": - retval += " --append=\"%s\"" % self.appendLine - if self.linear: - retval += " --linear" - if self.location: - retval += " --location=%s" % self.location - if hasattr(self, "forceLBA") and self.forceLBA: - retval += " --lba32" - if self.password != "": - retval += " --password=\"%s\"" % self.password - if self.md5pass != "": - retval += " --md5pass=\"%s\"" % self.md5pass - if self.upgrade: - retval += " --upgrade" - if self.useLilo: - retval += " --useLilo" - if len(self.driveorder) > 0: - retval += " --driveorder=\"%s\"" % ",".join(self.driveorder) - - return retval - - def __str__(self): - retval = KickstartCommand.__str__(self) - - if self.location != "": - retval += "# System bootloader configuration\nbootloader" - retval += self._getArgsAsStr() + "\n" - - return retval - - def _getParser(self): - def driveorder_cb (option, opt_str, value, parser): - for d in value.split(','): - parser.values.ensure_value(option.dest, []).append(d) - - op = KSOptionParser() - op.add_option("--append", dest="appendLine") - op.add_option("--linear", dest="linear", action="store_true", - default=True) - op.add_option("--nolinear", dest="linear", action="store_false") - op.add_option("--location", dest="location", type="choice", - default="mbr", - choices=["mbr", "partition", "none", "boot"]) - op.add_option("--lba32", dest="forceLBA", action="store_true", - default=False) - op.add_option("--password", dest="password", default="") - op.add_option("--md5pass", dest="md5pass", default="") - op.add_option("--upgrade", dest="upgrade", action="store_true", - default=False) - op.add_option("--useLilo", dest="useLilo", action="store_true", - default=False) - op.add_option("--driveorder", dest="driveorder", action="callback", - callback=driveorder_cb, nargs=1, type="string") - return op - - def parse(self, args): - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - self._setToSelf(self.op, opts) - - if self.currentCmd == "lilo": - self.useLilo = True - - return self - -class FC4_Bootloader(FC3_Bootloader): - removedKeywords = FC3_Bootloader.removedKeywords + ["linear", "useLilo"] - removedAttrs = FC3_Bootloader.removedAttrs + ["linear", "useLilo"] - - def __init__(self, writePriority=10, *args, **kwargs): - FC3_Bootloader.__init__(self, writePriority, *args, **kwargs) - - def _getArgsAsStr(self): - retval = "" - if self.appendLine != "": - retval += " --append=\"%s\"" % self.appendLine - if self.location: - retval += " --location=%s" % self.location - if hasattr(self, "forceLBA") and self.forceLBA: - retval += " --lba32" - if self.password != "": - retval += " --password=\"%s\"" % self.password - if self.md5pass != "": - retval += " --md5pass=\"%s\"" % self.md5pass - if self.upgrade: - retval += " --upgrade" - if len(self.driveorder) > 0: - retval += " --driveorder=\"%s\"" % ",".join(self.driveorder) - return retval - - def _getParser(self): - op = FC3_Bootloader._getParser(self) - op.remove_option("--linear") - op.remove_option("--nolinear") - op.remove_option("--useLilo") - return op - - def parse(self, args): - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - self._setToSelf(self.op, opts) - return self - -class F8_Bootloader(FC4_Bootloader): - removedKeywords = FC4_Bootloader.removedKeywords - removedAttrs = FC4_Bootloader.removedAttrs - - def __init__(self, writePriority=10, *args, **kwargs): - FC4_Bootloader.__init__(self, writePriority, *args, **kwargs) - - self.timeout = kwargs.get("timeout", None) - self.default = kwargs.get("default", "") - - def _getArgsAsStr(self): - ret = FC4_Bootloader._getArgsAsStr(self) - - if self.timeout is not None: - ret += " --timeout=%d" %(self.timeout,) - if self.default: - ret += " --default=%s" %(self.default,) - - return ret - - def _getParser(self): - op = FC4_Bootloader._getParser(self) - op.add_option("--timeout", dest="timeout", type="int") - op.add_option("--default", dest="default") - return op - -class F12_Bootloader(F8_Bootloader): - removedKeywords = F8_Bootloader.removedKeywords - removedAttrs = F8_Bootloader.removedAttrs - - def _getParser(self): - op = F8_Bootloader._getParser(self) - op.add_option("--lba32", dest="forceLBA", deprecated=1, action="store_true") - return op - -class F14_Bootloader(F12_Bootloader): - removedKeywords = F12_Bootloader.removedKeywords + ["forceLBA"] - removedAttrs = F12_Bootloader.removedKeywords + ["forceLBA"] - - def _getParser(self): - op = F12_Bootloader._getParser(self) - op.remove_option("--lba32") - return op - -class F15_Bootloader(F14_Bootloader): - removedKeywords = F14_Bootloader.removedKeywords - removedAttrs = F14_Bootloader.removedAttrs - - def __init__(self, writePriority=10, *args, **kwargs): - F14_Bootloader.__init__(self, writePriority, *args, **kwargs) - - self.isCrypted = kwargs.get("isCrypted", False) - - def _getArgsAsStr(self): - ret = F14_Bootloader._getArgsAsStr(self) - - if self.isCrypted: - ret += " --iscrypted" - - return ret - - def _getParser(self): - def password_cb(option, opt_str, value, parser): - parser.values.isCrypted = True - parser.values.password = value - - op = F14_Bootloader._getParser(self) - op.add_option("--iscrypted", dest="isCrypted", action="store_true", default=False) - op.add_option("--md5pass", action="callback", callback=password_cb, nargs=1, type="string") - return op - -class RHEL5_Bootloader(FC4_Bootloader): - removedKeywords = FC4_Bootloader.removedKeywords - removedAttrs = FC4_Bootloader.removedAttrs - - def __init__(self, writePriority=10, *args, **kwargs): - FC4_Bootloader.__init__(self, writePriority, *args, **kwargs) - - self.hvArgs = kwargs.get("hvArgs", "") - - def _getArgsAsStr(self): - ret = FC4_Bootloader._getArgsAsStr(self) - - if self.hvArgs: - ret += " --hvargs=\"%s\"" %(self.hvArgs,) - - return ret - - def _getParser(self): - op = FC4_Bootloader._getParser(self) - op.add_option("--hvargs", dest="hvArgs", type="string") - return op - -class RHEL6_Bootloader(F12_Bootloader): - removedKeywords = F12_Bootloader.removedKeywords - removedAttrs = F12_Bootloader.removedAttrs - - def __init__(self, writePriority=10, *args, **kwargs): - F12_Bootloader.__init__(self, writePriority, *args, **kwargs) - - self.isCrypted = kwargs.get("isCrypted", False) - - def _getArgsAsStr(self): - ret = F12_Bootloader._getArgsAsStr(self) - - if self.isCrypted: - ret += " --iscrypted" - - return ret - - def _getParser(self): - def password_cb(option, opt_str, value, parser): - parser.values.isCrypted = True - parser.values.password = value - - op = F12_Bootloader._getParser(self) - op.add_option("--iscrypted", dest="isCrypted", action="store_true", default=False) - op.add_option("--md5pass", action="callback", callback=password_cb, nargs=1, type="string") - return op diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/clearpart.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/clearpart.py deleted file mode 100644 index a8089fc..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/clearpart.py +++ /dev/null @@ -1,86 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2005, 2006, 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.constants import * -from pykickstart.errors import * -from pykickstart.options import * - -class FC3_ClearPart(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=120, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - - self.drives = kwargs.get("drives", []) - self.initAll = kwargs.get("initAll", False) - self.type = kwargs.get("type", None) - - def __str__(self): - retval = KickstartCommand.__str__(self) - - if self.type is None: - return retval - - if self.type == CLEARPART_TYPE_NONE: - clearstr = "--none" - elif self.type == CLEARPART_TYPE_LINUX: - clearstr = "--linux" - elif self.type == CLEARPART_TYPE_ALL: - clearstr = "--all" - else: - clearstr = "" - - if self.initAll: - initstr = "--initlabel" - else: - initstr = "" - - if len(self.drives) > 0: - drivestr = "--drives=" + ",".join(self.drives) - else: - drivestr = "" - - retval += "# Partition clearing information\nclearpart %s %s %s\n" % (clearstr, initstr, drivestr) - return retval - - def _getParser(self): - def drive_cb (option, opt_str, value, parser): - for d in value.split(','): - parser.values.ensure_value(option.dest, []).append(d) - - op = KSOptionParser() - op.add_option("--all", dest="type", action="store_const", - const=CLEARPART_TYPE_ALL) - op.add_option("--drives", dest="drives", action="callback", - callback=drive_cb, nargs=1, type="string") - op.add_option("--initlabel", dest="initAll", action="store_true", - default=False) - op.add_option("--linux", dest="type", action="store_const", - const=CLEARPART_TYPE_LINUX) - op.add_option("--none", dest="type", action="store_const", - const=CLEARPART_TYPE_NONE) - return op - - def parse(self, args): - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - self._setToSelf(self.op, opts) - return self diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/device.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/device.py deleted file mode 100644 index afed26c..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/device.py +++ /dev/null @@ -1,125 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2005, 2006, 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.options import * - -import gettext -import warnings -_ = lambda x: gettext.ldgettext("pykickstart", x) - -class F8_DeviceData(BaseData): - removedKeywords = BaseData.removedKeywords - removedAttrs = BaseData.removedAttrs - - def __init__(self, *args, **kwargs): - BaseData.__init__(self, *args, **kwargs) - self.moduleName = kwargs.get("moduleName", "") - self.moduleOpts = kwargs.get("moduleOpts", "") - - def __eq__(self, y): - return self.moduleName == y.moduleName - - def __str__(self): - retval = BaseData.__str__(self) - - if self.moduleName != "": - retval += "device %s" % self.moduleName - - if self.moduleOpts != "": - retval += " --opts=\"%s\"" % self.moduleOpts - - return retval + "\n" - -class FC3_Device(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - - self.type = kwargs.get("type", "") - self.moduleName = kwargs.get("moduleName", "") - self.moduleOpts = kwargs.get("moduleOpts", "") - - def __eq__(self, y): - return self.moduleName == y.moduleName - - def __str__(self): - retval = KickstartCommand.__str__(self) - - if self.moduleName != "": - retval += "device %s %s" % (self.type, self.moduleName) - - if self.moduleOpts != "": - retval += " --opts=\"%s\"" % self.moduleOpts - - return retval + "\n" - - def _getParser(self): - op = KSOptionParser() - op.add_option("--opts", dest="moduleOpts", default="") - return op - - def parse(self, args): - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - - if len(extra) != 2: - raise KickstartValueError (formatErrorMsg(self.lineno, msg=_("device command requires two arguments: module type and name"))) - - self.moduleOpts = opts.moduleOpts - self.type = extra[0] - self.moduleName = extra[1] - return self - -class F8_Device(FC3_Device): - removedKeywords = FC3_Device.removedKeywords - removedAttrs = FC3_Device.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - FC3_Device.__init__(self, writePriority, *args, **kwargs) - self.deviceList = kwargs.get("deviceList", []) - - def __str__(self): - retval = "" - for device in self.deviceList: - retval += device.__str__() - - return retval - - def parse(self, args): - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - - if len(extra) != 1: - raise KickstartValueError (formatErrorMsg(self.lineno, msg=_("%s command requires a single argument: %s") % ("device", "module name"))) - - dd = F8_DeviceData() - self._setToObj(self.op, opts, dd) - dd.lineno = self.lineno - dd.moduleName = extra[0] - - # Check for duplicates in the data list. - if dd in self.dataList(): - warnings.warn(_("A module with the name %s has already been defined.") % dd.moduleName) - - return dd - - def dataList(self): - return self.deviceList diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/deviceprobe.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/deviceprobe.py deleted file mode 100644 index 9f462fd..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/deviceprobe.py +++ /dev/null @@ -1,40 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2005, 2006, 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * - -class FC3_DeviceProbe(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.deviceprobe = kwargs.get("deviceprobe", "") - - def __str__(self): - retval = KickstartCommand.__str__(self) - - if self.deviceprobe != "": - retval += "deviceprobe %s\n" % self.deviceprobe - - return retval - - def parse(self, args): - self.deviceprobe = " ".join(args) - return self diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/displaymode.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/displaymode.py deleted file mode 100644 index afd58ea..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/displaymode.py +++ /dev/null @@ -1,68 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2005, 2006, 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.constants import * -from pykickstart.options import * - -import gettext -_ = lambda x: gettext.ldgettext("pykickstart", x) - -class FC3_DisplayMode(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - self.displayMode = kwargs.get("displayMode", None) - - def __str__(self): - retval = KickstartCommand.__str__(self) - - if self.displayMode is None: - return retval - - if self.displayMode == DISPLAY_MODE_CMDLINE: - retval += "cmdline\n" - elif self.displayMode == DISPLAY_MODE_GRAPHICAL: - retval += "# Use graphical install\ngraphical\n" - elif self.displayMode == DISPLAY_MODE_TEXT: - retval += "# Use text mode install\ntext\n" - - return retval - - def _getParser(self): - op = KSOptionParser() - return op - - def parse(self, args): - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - - if len(extra) > 0: - raise KickstartParseError (formatErrorMsg(self.lineno, msg=_("Kickstart command %s does not take any arguments") % self.currentCmd)) - - if self.currentCmd == "cmdline": - self.displayMode = DISPLAY_MODE_CMDLINE - elif self.currentCmd == "graphical": - self.displayMode = DISPLAY_MODE_GRAPHICAL - elif self.currentCmd == "text": - self.displayMode = DISPLAY_MODE_TEXT - - return self diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/dmraid.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/dmraid.py deleted file mode 100644 index 993575a..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/dmraid.py +++ /dev/null @@ -1,91 +0,0 @@ -# -# Chris Lumens -# Peter Jones -# -# Copyright 2006, 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.errors import * -from pykickstart.options import * - -import gettext -import warnings -_ = lambda x: gettext.ldgettext("pykickstart", x) - -class FC6_DmRaidData(BaseData): - removedKeywords = BaseData.removedKeywords - removedAttrs = BaseData.removedAttrs - - def __init__(self, *args, **kwargs): - BaseData.__init__(self, *args, **kwargs) - - self.name = kwargs.get("name", "") - self.devices = kwargs.get("devices", []) - self.dmset = kwargs.get("dmset", None) - - def __eq__(self, y): - return self.name == y.name and self.devices == y.devices - - def __str__(self): - retval = BaseData.__str__(self) - retval += "dmraid --name=%s" % self.name - - for dev in self.devices: - retval += " --dev=\"%s\"" % dev - - return retval + "\n" - -class FC6_DmRaid(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=60, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - - self.dmraids = kwargs.get("dmraids", []) - - def __str__(self): - retval = "" - for dm in self.dmraids: - retval += dm.__str__() - - return retval - - def _getParser(self): - op = KSOptionParser() - op.add_option("--name", dest="name", action="store", type="string", - required=1) - op.add_option("--dev", dest="devices", action="append", type="string", - required=1) - return op - - def parse(self, args): - dm = FC6_DmRaidData() - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - dm.name = dm.name.split('/')[-1] - self._setToObj(self.op, opts, dm) - dm.lineno = self.lineno - - # Check for duplicates in the data list. - if dm in self.dataList(): - warnings.warn(_("A DM RAID device with the name %s and devices %s has already been defined.") % (dm.name, dm.devices)) - - return dm - - def dataList(self): - return self.dmraids diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/driverdisk.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/driverdisk.py deleted file mode 100644 index 43d6259..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/driverdisk.py +++ /dev/null @@ -1,184 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2005, 2006, 2007, 2008 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.options import * - -import gettext -_ = lambda x: gettext.ldgettext("pykickstart", x) - -class FC3_DriverDiskData(BaseData): - removedKeywords = BaseData.removedKeywords - removedAttrs = BaseData.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - BaseData.__init__(self, *args, **kwargs) - - self.partition = kwargs.get("partition", "") - self.source = kwargs.get("source", "") - self.type = kwargs.get("type", "") - - def _getArgsAsStr(self): - retval = "" - - if self.partition: - retval += "%s" % self.partition - - if hasattr(self, "type") and self.type: - retval += " --type=%s" % self.type - elif self.source: - retval += "--source=%s" % self.source - return retval - - def __str__(self): - retval = BaseData.__str__(self) - retval += "driverdisk %s\n" % self._getArgsAsStr() - return retval - -class FC4_DriverDiskData(FC3_DriverDiskData): - removedKeywords = FC3_DriverDiskData.removedKeywords - removedAttrs = FC3_DriverDiskData.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - FC3_DriverDiskData.__init__(self, *args, **kwargs) - self.deleteRemovedAttrs() - - self.biospart = kwargs.get("biospart", "") - - def _getArgsAsStr(self): - retval = "" - - if self.partition: - retval += "%s" % self.partition - - if hasattr(self, "type") and self.type: - retval += " --type=%s" % self.type - elif self.source: - retval += "--source=%s" % self.source - elif self.biospart: - retval += "--biospart=%s" % self.biospart - - return retval - -class F12_DriverDiskData(FC4_DriverDiskData): - removedKeywords = FC4_DriverDiskData.removedKeywords + ["type"] - removedAttrs = FC4_DriverDiskData.removedAttrs + ["type"] - - def __init__(self, *args, **kwargs): - FC4_DriverDiskData.__init__(self, *args, **kwargs) - self.deleteRemovedAttrs() - -F14_DriverDiskData = F12_DriverDiskData - -class FC3_DriverDisk(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - - self.driverdiskList = kwargs.get("driverdiskList", []) - - def __str__(self): - retval = "" - for dd in self.driverdiskList: - retval += dd.__str__() - - return retval - - def _getParser(self): - op = KSOptionParser() - op.add_option("--source") - op.add_option("--type") - return op - - def parse(self, args): - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - - if len(extra) > 1: - raise KickstartValueError (formatErrorMsg(self.lineno, msg=_("Only one partition may be specified for driverdisk command."))) - - if len(extra) == 1 and opts.source: - raise KickstartValueError (formatErrorMsg(self.lineno, msg=_("Only one of --source and partition may be specified for driverdisk command."))) - - if not extra and not opts.source: - raise KickstartValueError (formatErrorMsg(self.lineno, msg=_("One of --source or partition must be specified for driverdisk command."))) - - ddd = self.handler.DriverDiskData() - self._setToObj(self.op, opts, ddd) - ddd.lineno = self.lineno - if len(extra) == 1: - ddd.partition = extra[0] - - return ddd - - def dataList(self): - return self.driverdiskList - -class FC4_DriverDisk(FC3_DriverDisk): - removedKeywords = FC3_DriverDisk.removedKeywords - removedAttrs = FC3_DriverDisk.removedKeywords - - def _getParser(self): - op = FC3_DriverDisk._getParser(self) - op.add_option("--biospart") - return op - - def parse(self, args): - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - - if len(extra) > 1: - raise KickstartValueError (formatErrorMsg(self.lineno, msg=_("Only one partition may be specified for driverdisk command."))) - - if len(extra) == 1 and opts.source: - raise KickstartValueError (formatErrorMsg(self.lineno, msg=_("Only one of --source and partition may be specified for driverdisk command."))) - elif len(extra) == 1 and opts.biospart: - raise KickstartValueError (formatErrorMsg(self.lineno, msg=_("Only one of --biospart and partition may be specified for driverdisk command."))) - elif opts.source and opts.biospart: - raise KickstartValueError (formatErrorMsg(self.lineno, msg=_("Only one of --biospart and --source may be specified for driverdisk command."))) - - if not extra and not opts.source and not opts.biospart: - raise KickstartValueError (formatErrorMsg(self.lineno, msg=_("One of --source, --biospart, or partition must be specified for driverdisk command."))) - - ddd = self.handler.DriverDiskData() - self._setToObj(self.op, opts, ddd) - ddd.lineno = self.lineno - if len(extra) == 1: - ddd.partition = extra[0] - - return ddd - -class F12_DriverDisk(FC4_DriverDisk): - removedKeywords = FC4_DriverDisk.removedKeywords - removedAttrs = FC4_DriverDisk.removedKeywords - - def _getParser(self): - op = FC4_DriverDisk._getParser(self) - op.add_option("--type", deprecated=1) - return op - -class F14_DriverDisk(F12_DriverDisk): - removedKeywords = F12_DriverDisk.removedKeywords - removedAttrs = F12_DriverDisk.removedKeywords - - def _getParser(self): - op = F12_DriverDisk._getParser(self) - op.remove_option("--type") - return op diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/fcoe.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/fcoe.py deleted file mode 100644 index 2f4b492..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/fcoe.py +++ /dev/null @@ -1,114 +0,0 @@ -# -# Hans de Goede -# -# Copyright 2009 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.options import * - -import gettext -import warnings -_ = lambda x: gettext.ldgettext("pykickstart", x) - -class F12_FcoeData(BaseData): - removedKeywords = BaseData.removedKeywords - removedAttrs = BaseData.removedAttrs - - def __init__(self, *args, **kwargs): - BaseData.__init__(self, *args, **kwargs) - self.nic = kwargs.get("nic", None) - - def __eq__(self, y): - return self.nic == y.nic - - def _getArgsAsStr(self): - retval = "" - - if self.nic: - retval += " --nic=%s" % self.nic - - return retval - - def __str__(self): - retval = BaseData.__str__(self) - retval += "fcoe%s\n" % self._getArgsAsStr() - return retval - -class F13_FcoeData(F12_FcoeData): - removedKeywords = F12_FcoeData.removedKeywords - removedAttrs = F12_FcoeData.removedAttrs - - def __init__(self, *args, **kwargs): - F12_FcoeData.__init__(self, *args, **kwargs) - self.dcb = kwargs.get("dcb", False) - - def _getArgsAsStr(self): - retval = F12_FcoeData._getArgsAsStr(self) - - if self.dcb: - retval += " --dcb" - - return retval - -class F12_Fcoe(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=71, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - self.fcoe = kwargs.get("fcoe", []) - - def __str__(self): - retval = "" - for fcoe in self.fcoe: - retval += fcoe.__str__() - - return retval - - def _getParser(self): - op = KSOptionParser() - op.add_option("--nic", dest="nic", required=1) - return op - - def parse(self, args): - zd = self.handler.FcoeData() - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - if len(extra) > 0: - mapping = {"command": "fcoe", "options": extra} - raise KickstartValueError (formatErrorMsg(self.lineno, msg=_("Unexpected arguments to %(command)s command: %(options)s") % mapping)) - - self._setToObj(self.op, opts, zd) - zd.lineno = self.lineno - - # Check for duplicates in the data list. - if zd in self.dataList(): - warnings.warn(_("A FCOE device with the name %s has already been defined.") % zd.nic) - - return zd - - def dataList(self): - return self.fcoe - -class F13_Fcoe(F12_Fcoe): - removedKeywords = F12_Fcoe.removedKeywords - removedAttrs = F12_Fcoe.removedAttrs - - def _getParser(self): - op = F12_Fcoe._getParser(self) - op.add_option("--dcb", dest="dcb", action="store_true", default=False) - return op diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/firewall.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/firewall.py deleted file mode 100644 index 1d21759..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/firewall.py +++ /dev/null @@ -1,193 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2005, 2006, 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.errors import * -from pykickstart.options import * - -import gettext -_ = lambda x: gettext.ldgettext("pykickstart", x) - -class FC3_Firewall(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - - self.enabled = kwargs.get("enabled", None) - self.ports = kwargs.get("ports", []) - self.trusts = kwargs.get("trusts", []) - - def __str__(self): - extra = [] - filteredPorts = [] - - retval = KickstartCommand.__str__(self) - - if self.enabled is None: - return retval - - if self.enabled: - # It's possible we have words in the ports list instead of - # port:proto (s-c-kickstart may do this). So, filter those - # out into their own list leaving what we expect. - for port in self.ports: - if port == "ssh": - extra.append(" --ssh") - elif port == "telnet": - extra.append(" --telnet") - elif port == "smtp": - extra.append(" --smtp") - elif port == "http": - extra.append(" --http") - elif port == "ftp": - extra.append(" --ftp") - else: - filteredPorts.append(port) - - # All the port:proto strings go into a comma-separated list. - portstr = ",".join(filteredPorts) - if len(portstr) > 0: - portstr = " --port=" + portstr - else: - portstr = "" - - extrastr = "".join(extra) - truststr = ",".join(self.trusts) - - if len(truststr) > 0: - truststr = " --trust=" + truststr - - # The output port list consists only of port:proto for - # everything that we don't recognize, and special options for - # those that we do. - retval += "# Firewall configuration\nfirewall --enabled%s%s%s\n" % (extrastr, portstr, truststr) - else: - retval += "# Firewall configuration\nfirewall --disabled\n" - - return retval - - def _getParser(self): - def firewall_port_cb (option, opt_str, value, parser): - for p in value.split(","): - p = p.strip() - if p.find(":") == -1: - p = "%s:tcp" % p - parser.values.ensure_value(option.dest, []).append(p) - - op = KSOptionParser(mapping={"ssh":["22:tcp"], "telnet":["23:tcp"], - "smtp":["25:tcp"], "http":["80:tcp", "443:tcp"], - "ftp":["21:tcp"]}) - - op.add_option("--disable", "--disabled", dest="enabled", - action="store_false") - op.add_option("--enable", "--enabled", dest="enabled", - action="store_true", default=True) - op.add_option("--ftp", "--http", "--smtp", "--ssh", "--telnet", - dest="ports", action="map_extend") - op.add_option("--high", deprecated=1) - op.add_option("--medium", deprecated=1) - op.add_option("--port", dest="ports", action="callback", - callback=firewall_port_cb, nargs=1, type="string") - op.add_option("--trust", dest="trusts", action="append") - return op - - def parse(self, args): - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - - if len(extra) != 0: - mapping = {"command": "firewall", "options": extra} - raise KickstartValueError (formatErrorMsg(self.lineno, msg=_("Unexpected arguments to %(command)s command: %(options)s") % mapping)) - - self._setToSelf(self.op, opts) - return self - -class F9_Firewall(FC3_Firewall): - removedKeywords = FC3_Firewall.removedKeywords - removedAttrs = FC3_Firewall.removedAttrs - - def _getParser(self): - op = FC3_Firewall._getParser(self) - op.remove_option("--high") - op.remove_option("--medium") - return op - -class F10_Firewall(F9_Firewall): - removedKeywords = F9_Firewall.removedKeywords - removedAttrs = F9_Firewall.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - F9_Firewall.__init__(self, writePriority, *args, **kwargs) - self.services = kwargs.get("services", []) - - def __str__(self): - if self.enabled is None: - return "" - - retval = F9_Firewall.__str__(self) - if self.enabled: - retval = retval.strip() - - svcstr = ",".join(self.services) - if len(svcstr) > 0: - svcstr = " --service=" + svcstr - else: - svcstr = "" - - return retval + "%s\n" % svcstr - else: - return retval - - def _getParser(self): - def service_cb (option, opt_str, value, parser): - # python2.4 does not support action="append_const" that we were - # using for these options. Instead, we have to fake it by - # appending whatever the option string is to the service list. - if not value: - parser.values.ensure_value(option.dest, []).append(opt_str[2:]) - return - - for p in value.split(","): - p = p.strip() - parser.values.ensure_value(option.dest, []).append(p) - - op = F9_Firewall._getParser(self) - op.add_option("--service", dest="services", action="callback", - callback=service_cb, nargs=1, type="string") - op.add_option("--ftp", dest="services", action="callback", - callback=service_cb) - op.add_option("--http", dest="services", action="callback", - callback=service_cb) - op.add_option("--smtp", dest="services", action="callback", - callback=service_cb) - op.add_option("--ssh", dest="services", action="callback", - callback=service_cb) - op.add_option("--telnet", deprecated=1) - return op - -class F14_Firewall(F10_Firewall): - removedKeywords = F10_Firewall.removedKeywords + ["telnet"] - removedAttrs = F10_Firewall.removedAttrs + ["telnet"] - - def _getParser(self): - op = F10_Firewall._getParser(self) - op.remove_option("--telnet") - return op diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/firstboot.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/firstboot.py deleted file mode 100644 index 05c0ac1..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/firstboot.py +++ /dev/null @@ -1,62 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2005, 2006, 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.constants import * -from pykickstart.options import * - -class FC3_Firstboot(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - - self.firstboot = kwargs.get("firstboot", None) - - def __str__(self): - retval = KickstartCommand.__str__(self) - - if self.firstboot is None: - return retval - - if self.firstboot == FIRSTBOOT_SKIP: - retval += "firstboot --disable\n" - elif self.firstboot == FIRSTBOOT_DEFAULT: - retval += "# Run the Setup Agent on first boot\nfirstboot --enable\n" - elif self.firstboot == FIRSTBOOT_RECONFIG: - retval += "# Run the Setup Agent on first boot\nfirstboot --reconfig\n" - - return retval - - def _getParser(self): - op = KSOptionParser() - op.add_option("--disable", "--disabled", dest="firstboot", - action="store_const", const=FIRSTBOOT_SKIP) - op.add_option("--enable", "--enabled", dest="firstboot", - action="store_const", const=FIRSTBOOT_DEFAULT) - op.add_option("--reconfig", dest="firstboot", action="store_const", - const=FIRSTBOOT_RECONFIG) - return op - - def parse(self, args): - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - self.firstboot = opts.firstboot - return self diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/group.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/group.py deleted file mode 100644 index 80ba5bd..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/group.py +++ /dev/null @@ -1,88 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2009 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.constants import * -from pykickstart.errors import * -from pykickstart.options import * - -import gettext -import warnings -_ = lambda x: gettext.ldgettext("pykickstart", x) - -class F12_GroupData(BaseData): - removedKeywords = BaseData.removedKeywords - removedAttrs = BaseData.removedAttrs - - def __init__(self, *args, **kwargs): - BaseData.__init__(self, *args, **kwargs) - self.name = kwargs.get("name", "") - self.gid = kwargs.get("gid", None) - - def __eq__(self, y): - return self.name == y.name - - def __str__(self): - retval = BaseData.__str__(self) - retval += "group" - - if self.name: - retval += " --name=%s" % self.name - if self.gid: - retval += " --gid=%s" % self.gid - - return retval + "\n" - -class F12_Group(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - - self.groupList = kwargs.get("groupList", []) - - def __str__(self): - retval = "" - for user in self.groupList: - retval += user.__str__() - - return retval - - def _getParser(self): - op = KSOptionParser() - op.add_option("--name", required=1) - op.add_option("--gid", type="int") - return op - - def parse(self, args): - gd = self.handler.GroupData() - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - self._setToObj(self.op, opts, gd) - gd.lineno = self.lineno - - # Check for duplicates in the data list. - if gd in self.dataList(): - warnings.warn(_("A group with the name %s has already been defined.") % gd.name) - - return gd - - def dataList(self): - return self.groupList diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/ignoredisk.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/ignoredisk.py deleted file mode 100644 index 48f281d..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/ignoredisk.py +++ /dev/null @@ -1,139 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2005, 2006, 2007, 2009 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.options import * - -import gettext -_ = lambda x: gettext.ldgettext("pykickstart", x) - -class FC3_IgnoreDisk(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - - self.ignoredisk = kwargs.get("ignoredisk", []) - - def __str__(self): - retval = KickstartCommand.__str__(self) - - if len(self.ignoredisk) > 0: - retval += "ignoredisk --drives=%s\n" % ",".join(self.ignoredisk) - - return retval - - def _getParser(self): - def drive_cb (option, opt_str, value, parser): - for d in value.split(','): - parser.values.ensure_value(option.dest, []).append(d) - - op = KSOptionParser() - op.add_option("--drives", dest="ignoredisk", action="callback", - callback=drive_cb, nargs=1, type="string", required=1) - return op - - def parse(self, args): - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - self._setToSelf(self.op, opts) - return self - -class F8_IgnoreDisk(FC3_IgnoreDisk): - removedKeywords = FC3_IgnoreDisk.removedKeywords - removedAttrs = FC3_IgnoreDisk.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - FC3_IgnoreDisk.__init__(self, writePriority, *args, **kwargs) - - self.onlyuse = kwargs.get("onlyuse", []) - - def __str__(self): - retval = KickstartCommand.__str__(self) - - if len(self.ignoredisk) > 0: - retval += "ignoredisk --drives=%s\n" % ",".join(self.ignoredisk) - elif len(self.onlyuse) > 0: - retval += "ignoredisk --only-use=%s\n" % ",".join(self.onlyuse) - - return retval - - def parse(self, args, errorCheck=True): - retval = FC3_IgnoreDisk.parse(self, args) - - if errorCheck: - if (len(self.ignoredisk) == 0 and len(self.onlyuse) == 0) or (len(self.ignoredisk) > 0 and (len(self.onlyuse) > 0)): - raise KickstartValueError (formatErrorMsg(self.lineno, msg=_("One of --drives or --only-use must be specified for ignoredisk command."))) - - return retval - - def _getParser(self): - def drive_cb (option, opt_str, value, parser): - for d in value.split(','): - parser.values.ensure_value(option.dest, []).append(d) - - op = FC3_IgnoreDisk._getParser(self) - op.add_option("--drives", dest="ignoredisk", action="callback", - callback=drive_cb, nargs=1, type="string") - op.add_option("--only-use", dest="onlyuse", action="callback", - callback=drive_cb, nargs=1, type="string") - return op - -class RHEL6_IgnoreDisk(F8_IgnoreDisk): - removedKeywords = F8_IgnoreDisk.removedKeywords - removedAttrs = F8_IgnoreDisk.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - F8_IgnoreDisk.__init__(self, writePriority, *args, **kwargs) - - self.interactive = kwargs.get("interactive", False) - if self.interactive: - self.ignoredisk = [] - - def __str__(self): - retval = F8_IgnoreDisk.__str__(self) - - if self.interactive: - retval = "ignoredisk --interactive\n" - - return retval - - def parse(self, args): - retval = F8_IgnoreDisk.parse(self, args, errorCheck=False) - - howmany = 0 - if len(self.ignoredisk) > 0: - howmany += 1 - if len(self.onlyuse) > 0: - howmany += 1 - if self.interactive: - howmany += 1 - if howmany != 1: - raise KickstartValueError (formatErrorMsg(self.lineno, msg=_("One of --drives , --only-use , or --interactive must be specified for ignoredisk command."))) - - return retval - - def _getParser(self): - op = F8_IgnoreDisk._getParser(self) - op.add_option("--interactive", dest="interactive", action="store_true", - default=False) - return op - -F14_IgnoreDisk = RHEL6_IgnoreDisk diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/interactive.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/interactive.py deleted file mode 100644 index b4e286b..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/interactive.py +++ /dev/null @@ -1,58 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2005, 2006, 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.errors import * -from pykickstart.options import * - -import gettext -_ = lambda x: gettext.ldgettext("pykickstart", x) - -class FC3_Interactive(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - self.interactive = kwargs.get("interactive", False) - - def __str__(self): - retval = KickstartCommand.__str__(self) - - if self.interactive: - retval += "# Use interactive kickstart installation method\ninteractive\n" - - return retval - - def _getParser(self): - op = KSOptionParser() - return op - - def parse(self, args): - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - if len(extra) > 0: - raise KickstartValueError (formatErrorMsg(self.lineno, msg=_("Kickstart command %s does not take any arguments") % "interactive")) - - self.interactive = True - return self - -class F14_Interactive(DeprecatedCommand): - def __init__(self): - DeprecatedCommand.__init__(self) diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/iscsi.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/iscsi.py deleted file mode 100644 index 9c25111..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/iscsi.py +++ /dev/null @@ -1,133 +0,0 @@ -# -# Chris Lumens -# Peter Jones -# -# Copyright 2005, 2006, 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.errors import * -from pykickstart.options import * - -import gettext -_ = lambda x: gettext.ldgettext("pykickstart", x) - -class FC6_IscsiData(BaseData): - removedKeywords = BaseData.removedKeywords - removedAttrs = BaseData.removedAttrs - - def __init__(self, *args, **kwargs): - BaseData.__init__(self, *args, **kwargs) - self.ipaddr = kwargs.get("ipaddr", "") - self.port = kwargs.get("port", "3260") - self.target = kwargs.get("target", "") - self.user = kwargs.get("user", None) - self.password = kwargs.get("password", None) - - def _getArgsAsStr(self): - retval = "" - - if self.target != "": - retval += " --target=%s" % self.target - if self.ipaddr != "": - retval += " --ipaddr=%s" % self.ipaddr - if self.port != "3260": - retval += " --port=%s" % self.port - if self.user is not None: - retval += " --user=%s" % self.user - if self.password is not None: - retval += " --password=%s" % self.password - - return retval - - def __str__(self): - retval = BaseData.__str__(self) - retval += "iscsi%s\n" % self._getArgsAsStr() - return retval - -class F10_IscsiData(FC6_IscsiData): - removedKeywords = FC6_IscsiData.removedKeywords - removedAttrs = FC6_IscsiData.removedAttrs - - def __init__(self, *args, **kwargs): - FC6_IscsiData.__init__(self, *args, **kwargs) - self.user_in = kwargs.get("user_in", None) - self.password_in = kwargs.get("password_in", None) - - def _getArgsAsStr(self): - retval = FC6_IscsiData._getArgsAsStr(self) - - if self.user_in is not None: - retval += " --reverse-user=%s" % self.user_in - if self.password_in is not None: - retval += " --reverse-password=%s" % self.password_in - - return retval - -class FC6_Iscsi(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=71, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - - self.iscsi = kwargs.get("iscsi", []) - - def __str__(self): - retval = "" - for iscsi in self.iscsi: - retval += iscsi.__str__() - - return retval - - def _getParser(self): - op = KSOptionParser() - op.add_option("--target", dest="target", action="store", type="string") - op.add_option("--ipaddr", dest="ipaddr", action="store", type="string", - required=1) - op.add_option("--port", dest="port", action="store", type="string") - op.add_option("--user", dest="user", action="store", type="string") - op.add_option("--password", dest="password", action="store", - type="string") - return op - - def parse(self, args): - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - - if len(extra) != 0: - mapping = {"command": "iscsi", "options": extra} - raise KickstartValueError (formatErrorMsg(self.lineno, msg=_("Unexpected arguments to %(command)s command: %(options)s") % mapping)) - - dd = self.handler.IscsiData() - self._setToObj(self.op, opts, dd) - dd.lineno = self.lineno - return dd - - def dataList(self): - return self.iscsi - -class F10_Iscsi(FC6_Iscsi): - removedKeywords = FC6_Iscsi.removedKeywords - removedAttrs = FC6_Iscsi.removedAttrs - - def _getParser(self): - op = FC6_Iscsi._getParser(self) - op.add_option("--reverse-user", dest="user_in", action="store", - type="string") - op.add_option("--reverse-password", dest="password_in", action="store", - type="string") - return op diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/iscsiname.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/iscsiname.py deleted file mode 100644 index ccfbe5f..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/iscsiname.py +++ /dev/null @@ -1,54 +0,0 @@ -# -# Chris Lumens -# Peter Jones -# -# Copyright 2006, 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.errors import * -from pykickstart.options import * - -import gettext -_ = lambda x: gettext.ldgettext("pykickstart", x) - -class FC6_IscsiName(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=70, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - self.iscsiname = kwargs.get("iscsiname", "") - - def __str__(self): - retval = KickstartCommand.__str__(self) - - if self.iscsiname != "": - retval += "iscsiname %s\n" % self.iscsiname - - return retval - - def _getParser(self): - op = KSOptionParser() - return op - - def parse(self, args): - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - if len(extra) != 1: - raise KickstartValueError (formatErrorMsg(self.lineno, msg=_("Kickstart command %s requires one argument") % "iscsiname")) - self.iscsiname = extra[0] - return self diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/key.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/key.py deleted file mode 100644 index cfeb62e..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/key.py +++ /dev/null @@ -1,64 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.constants import * -from pykickstart.errors import * -from pykickstart.options import * - -import gettext -_ = lambda x: gettext.ldgettext("pykickstart", x) - -class RHEL5_Key(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - self.key = kwargs.get("key", "") - self.skip = kwargs.get("skip", False) - - def __str__(self): - retval = KickstartCommand.__str__(self) - - if self.key == KS_INSTKEY_SKIP: - retval += "key --skip\n" - elif self.key != "": - retval += "key %s\n" % self.key - - return retval - - def _getParser(self): - op = KSOptionParser() - op.add_option("--skip", action="store_true", default=False) - return op - - def parse(self, args): - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - self._setToSelf(self.op, opts) - - if self.skip: - self.key = KS_INSTKEY_SKIP - elif len(extra) != 1: - raise KickstartValueError (formatErrorMsg(self.lineno, msg=_("Kickstart command %s requires one argument") % "key")) - else: - self.key = extra[0] - - return self diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/keyboard.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/keyboard.py deleted file mode 100644 index 90379c4..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/keyboard.py +++ /dev/null @@ -1,55 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2005, 2006, 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.errors import * -from pykickstart.options import * - -import gettext -_ = lambda x: gettext.ldgettext("pykickstart", x) - -class FC3_Keyboard(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - self.keyboard = kwargs.get("keyboard", "") - - def __str__(self): - retval = KickstartCommand.__str__(self) - - if self.keyboard != "": - retval += "# System keyboard\nkeyboard %s\n" % self.keyboard - - return retval - - def _getParser(self): - op = KSOptionParser() - return op - - def parse(self, args): - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - - if len(extra) != 1: - raise KickstartValueError (formatErrorMsg(self.lineno, msg=_("Kickstart command %s requires one argument") % "keyboard")) - - self.keyboard = extra[0] - return self diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/lang.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/lang.py deleted file mode 100644 index 846a356..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/lang.py +++ /dev/null @@ -1,60 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2005, 2006, 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.errors import * -from pykickstart.options import * - -import gettext -_ = lambda x: gettext.ldgettext("pykickstart", x) - -class FC3_Lang(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - self.lang = kwargs.get("lang", "") - - def __str__(self): - retval = KickstartCommand.__str__(self) - - if self.lang != "": - retval += "# System language\nlang %s\n" % self.lang - - return retval - - def _getParser(self): - op = KSOptionParser() - return op - - def parse(self, args): - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - if len(extra) != 1: - raise KickstartValueError (formatErrorMsg(self.lineno, msg=_("Kickstart command %s requires one argument") % "lang")) - - self.lang = extra[0] - return self - - def apply(self, instroot="/"): - if self.lang == "": return - f = open(instroot + "/etc/sysconfig/i18n", "w+") - f.write("LANG=\"%s\"\n" %(self.lang,)) - f.close() diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/langsupport.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/langsupport.py deleted file mode 100644 index 73a9e53..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/langsupport.py +++ /dev/null @@ -1,58 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2005, 2006, 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.options import * - -class FC3_LangSupport(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - - self.deflang = kwargs.get("deflang", "") - self.supported = kwargs.get("supported", []) - - def __str__(self): - retval = KickstartCommand.__str__(self) - - if self.deflang: - retval += "langsupport --default=%s" % self.deflang - - if self.supported: - retval += " %s" % " ".join(self.supported) - - return retval + "\n" - - def _getParser(self): - op = KSOptionParser() - op.add_option("--default", dest="deflang", default="en_US.UTF-8") - return op - - def parse(self, args): - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - self._setToSelf(self.op, opts) - self.supported = extra - return self - -class FC5_LangSupport(DeprecatedCommand): - def __init__(self): - DeprecatedCommand.__init__(self) diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/lilocheck.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/lilocheck.py deleted file mode 100644 index 754a32c..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/lilocheck.py +++ /dev/null @@ -1,54 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2005, 2006, 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.errors import * -from pykickstart.options import * - -import gettext -_ = lambda x: gettext.ldgettext("pykickstart", x) - -class FC3_LiloCheck(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - self.check = kwargs.get("check", False) - - def __str__(self): - retval = KickstartCommand.__str__(self) - - if self.check: - retval += "lilocheck\n" - - return retval - - def _getParser(self): - op = KSOptionParser() - return op - - def parse(self, args): - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - if len(extra) > 0: - raise KickstartValueError (formatErrorMsg(self.lineno, msg=_("Kickstart command %s does not take any arguments") % "lilocheck")) - - self.check = True - return self diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/logging.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/logging.py deleted file mode 100644 index 0708f77..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/logging.py +++ /dev/null @@ -1,66 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2007, 2009 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.errors import * -from pykickstart.options import * - -import gettext -_ = lambda x: gettext.ldgettext("pykickstart", x) - -class FC6_Logging(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - - self.host = kwargs.get("host", "") - self.level = kwargs.get("level", "info") - self.port = kwargs.get("port", "") - - def __str__(self): - retval = KickstartCommand.__str__(self) - retval += "# Installation logging level\nlogging --level=%s" % self.level - - if self.host != "": - retval += " --host=%s" % self.host - - if self.port != "": - retval += " --port=%s" % self.port - - return retval + "\n" - - def _getParser(self): - op = KSOptionParser() - op.add_option("--host") - op.add_option("--level", type="choice", default="info", - choices=["debug", "info", "warning", "error", "critical"]) - op.add_option("--port") - return op - - def parse(self, args): - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - - if opts.port and not opts.host: - raise KickstartParseError (formatErrorMsg(self.lineno, msg=_("Can't specify --port without --host."))) - - self._setToSelf(self.op, opts) - return self diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/logvol.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/logvol.py deleted file mode 100644 index 08bbf14..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/logvol.py +++ /dev/null @@ -1,304 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2005, 2006, 2007, 2008 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.errors import * -from pykickstart.options import * - -import gettext -import warnings -_ = lambda x: gettext.ldgettext("pykickstart", x) - -class FC3_LogVolData(BaseData): - removedKeywords = BaseData.removedKeywords - removedAttrs = BaseData.removedAttrs - - def __init__(self, *args, **kwargs): - BaseData.__init__(self, *args, **kwargs) - self.fstype = kwargs.get("fstype", "") - self.grow = kwargs.get("grow", False) - self.maxSizeMB = kwargs.get("maxSizeMB", 0) - self.name = kwargs.get("name", "") - self.format = kwargs.get("format", True) - self.percent = kwargs.get("percent", 0) - self.recommended = kwargs.get("recommended", False) - self.size = kwargs.get("size", None) - self.preexist = kwargs.get("preexist", False) - self.vgname = kwargs.get("vgname", "") - self.mountpoint = kwargs.get("mountpoint", "") - - def __eq__(self, y): - return self.vgname == y.vgname and self.name == y.name - - def _getArgsAsStr(self): - retval = "" - - if self.fstype != "": - retval += " --fstype=\"%s\"" % self.fstype - if self.grow: - retval += " --grow" - if self.maxSizeMB > 0: - retval += " --maxsize=%d" % self.maxSizeMB - if not self.format: - retval += " --noformat" - if self.percent > 0: - retval += " --percent=%d" % self.percent - if self.recommended: - retval += " --recommended" - if self.size > 0: - retval += " --size=%d" % self.size - if self.preexist: - retval += " --useexisting" - - return retval - - def __str__(self): - retval = BaseData.__str__(self) - retval += "logvol %s %s --name=%s --vgname=%s\n" % (self.mountpoint, self._getArgsAsStr(), self.name, self.vgname) - return retval - -class FC4_LogVolData(FC3_LogVolData): - removedKeywords = FC3_LogVolData.removedKeywords - removedAttrs = FC3_LogVolData.removedAttrs - - def __init__(self, *args, **kwargs): - FC3_LogVolData.__init__(self, *args, **kwargs) - self.bytesPerInode = kwargs.get("bytesPerInode", 4096) - self.fsopts = kwargs.get("fsopts", "") - - def _getArgsAsStr(self): - retval = FC3_LogVolData._getArgsAsStr(self) - - if hasattr(self, "bytesPerInode") and self.bytesPerInode != 0: - retval += " --bytes-per-inode=%d" % self.bytesPerInode - if self.fsopts != "": - retval += " --fsoptions=\"%s\"" % self.fsopts - - return retval - -class RHEL5_LogVolData(FC4_LogVolData): - removedKeywords = FC4_LogVolData.removedKeywords - removedAttrs = FC4_LogVolData.removedAttrs - - def __init__(self, *args, **kwargs): - FC4_LogVolData.__init__(self, *args, **kwargs) - self.encrypted = kwargs.get("encrypted", False) - self.passphrase = kwargs.get("passphrase", "") - - def _getArgsAsStr(self): - retval = FC4_LogVolData._getArgsAsStr(self) - - if self.encrypted: - retval += " --encrypted" - - if self.passphrase != "": - retval += " --passphrase=\"%s\"" % self.passphrase - - return retval - -class F9_LogVolData(FC4_LogVolData): - removedKeywords = FC4_LogVolData.removedKeywords + ["bytesPerInode"] - removedAttrs = FC4_LogVolData.removedAttrs + ["bytesPerInode"] - - def __init__(self, *args, **kwargs): - FC4_LogVolData.__init__(self, *args, **kwargs) - self.deleteRemovedAttrs() - - self.fsopts = kwargs.get("fsopts", "") - self.fsprofile = kwargs.get("fsprofile", "") - self.encrypted = kwargs.get("encrypted", False) - self.passphrase = kwargs.get("passphrase", "") - - def _getArgsAsStr(self): - retval = FC4_LogVolData._getArgsAsStr(self) - - if self.fsprofile != "": - retval += " --fsprofile=\"%s\"" % self.fsprofile - if self.encrypted: - retval += " --encrypted" - - if self.passphrase != "": - retval += " --passphrase=\"%s\"" % self.passphrase - - return retval - -class F12_LogVolData(F9_LogVolData): - removedKeywords = F9_LogVolData.removedKeywords - removedAttrs = F9_LogVolData.removedAttrs - - def __init__(self, *args, **kwargs): - F9_LogVolData.__init__(self, *args, **kwargs) - self.deleteRemovedAttrs() - - self.escrowcert = kwargs.get("escrowcert", "") - self.backuppassphrase = kwargs.get("backuppassphrase", False) - - def _getArgsAsStr(self): - retval = F9_LogVolData._getArgsAsStr(self) - - if self.encrypted and self.escrowcert != "": - retval += " --escrowcert=\"%s\"" % self.escrowcert - - if self.backuppassphrase: - retval += " --backuppassphrase" - - return retval - -F14_LogVolData = F12_LogVolData - -class F15_LogVolData(F14_LogVolData): - removedKeywords = F14_LogVolData.removedKeywords - removedAttrs = F14_LogVolData.removedAttrs - - def __init__(self, *args, **kwargs): - F14_LogVolData.__init__(self, *args, **kwargs) - self.label = kwargs.get("label", "") - - def _getArgsAsStr(self): - retval = F14_LogVolData._getArgsAsStr(self) - - if self.label != "": - retval += " --label=\"%s\"" % self.label - - return retval - -class FC3_LogVol(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=133, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - - self.lvList = kwargs.get("lvList", []) - - def __str__(self): - retval = "" - - for part in self.lvList: - retval += part.__str__() - - return retval - - def _getParser(self): - def lv_cb (option, opt_str, value, parser): - parser.values.format = False - parser.values.preexist = True - - op = KSOptionParser() - op.add_option("--fstype", dest="fstype") - op.add_option("--grow", dest="grow", action="store_true", - default=False) - op.add_option("--maxsize", dest="maxSizeMB", action="store", type="int", - nargs=1) - op.add_option("--name", dest="name", required=1) - op.add_option("--noformat", action="callback", callback=lv_cb, - dest="format", default=True, nargs=0) - op.add_option("--percent", dest="percent", action="store", type="int", - nargs=1) - op.add_option("--recommended", dest="recommended", action="store_true", - default=False) - op.add_option("--size", dest="size", action="store", type="int", - nargs=1) - op.add_option("--useexisting", dest="preexist", action="store_true", - default=False) - op.add_option("--vgname", dest="vgname", required=1) - return op - - def parse(self, args): - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - - if len(extra) == 0: - raise KickstartValueError (formatErrorMsg(self.lineno, msg=_("Mount point required for %s") % "logvol")) - - lvd = self.handler.LogVolData() - self._setToObj(self.op, opts, lvd) - lvd.lineno = self.lineno - lvd.mountpoint=extra[0] - - # Check for duplicates in the data list. - if lvd in self.dataList(): - warnings.warn(_("A logical volume with the name %s has already been defined in volume group %s.") % (lvd.device, lvd.vgname)) - - return lvd - - def dataList(self): - return self.lvList - -class FC4_LogVol(FC3_LogVol): - removedKeywords = FC3_LogVol.removedKeywords - removedAttrs = FC3_LogVol.removedAttrs - - def _getParser(self): - op = FC3_LogVol._getParser(self) - op.add_option("--bytes-per-inode", dest="bytesPerInode", action="store", - type="int", nargs=1) - op.add_option("--fsoptions", dest="fsopts") - return op - -class RHEL5_LogVol(FC4_LogVol): - removedKeywords = FC4_LogVol.removedKeywords - removedAttrs = FC4_LogVol.removedAttrs - - def _getParser(self): - op = FC4_LogVol._getParser(self) - op.add_option("--encrypted", action="store_true", default=False) - op.add_option("--passphrase") - return op - -class F9_LogVol(FC4_LogVol): - removedKeywords = FC4_LogVol.removedKeywords - removedAttrs = FC4_LogVol.removedAttrs - - def _getParser(self): - op = FC4_LogVol._getParser(self) - op.add_option("--bytes-per-inode", deprecated=1) - op.add_option("--fsprofile", dest="fsprofile", action="store", - type="string", nargs=1) - op.add_option("--encrypted", action="store_true", default=False) - op.add_option("--passphrase") - return op - -class F12_LogVol(F9_LogVol): - removedKeywords = F9_LogVol.removedKeywords - removedAttrs = F9_LogVol.removedAttrs - - def _getParser(self): - op = F9_LogVol._getParser(self) - op.add_option("--escrowcert") - op.add_option("--backuppassphrase", action="store_true", default=False) - return op - -class F14_LogVol(F12_LogVol): - removedKeywords = F12_LogVol.removedKeywords - removedAttrs = F12_LogVol.removedAttrs - - def _getParser(self): - op = F12_LogVol._getParser(self) - op.remove_option("--bytes-per-inode") - return op - -class F15_LogVol(F14_LogVol): - removedKeywords = F14_LogVol.removedKeywords - removedAttrs = F14_LogVol.removedAttrs - - def _getParser(self): - op = F14_LogVol._getParser(self) - op.add_option("--label") - return op diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/mediacheck.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/mediacheck.py deleted file mode 100644 index 9a785d8..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/mediacheck.py +++ /dev/null @@ -1,53 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.errors import * -from pykickstart.options import * - -import gettext -_ = lambda x: gettext.ldgettext("pykickstart", x) - -class FC4_MediaCheck(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - self.mediacheck = kwargs.get("mediacheck", False) - - def __str__(self): - retval = KickstartCommand.__str__(self) - if self.mediacheck: - retval += "mediacheck\n" - - return retval - - def _getParser(self): - op = KSOptionParser() - return op - - def parse(self, args): - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - if len(extra) > 0: - raise KickstartValueError (formatErrorMsg(self.lineno, msg=_("Kickstart command %s does not take any arguments") % "mediacheck")) - - self.mediacheck = True - return self diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/method.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/method.py deleted file mode 100644 index 3b384c1..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/method.py +++ /dev/null @@ -1,186 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2007, 2009 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.errors import * -from pykickstart.options import * - -import gettext -_ = lambda x: gettext.ldgettext("pykickstart", x) - -class FC3_Method(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.method = kwargs.get("method", "") - - # Set all these attributes so calls to this command's __call__ - # method can set them. However we don't want to provide them as - # arguments to __init__ because method is special. - self.biospart = None - self.partition = None - self.server = None - self.dir = None - self.url = None - - def __str__(self): - retval = KickstartCommand.__str__(self) - - if self.method == "cdrom": - retval += "# Use CDROM installation media\ncdrom\n" - elif self.method == "harddrive": - msg = "# Use hard drive installation media\nharddrive --dir=%s" % self.dir - - if self.biospart is not None: - retval += msg + " --biospart=%s\n" % self.biospart - else: - retval += msg + " --partition=%s\n" % self.partition - elif self.method == "nfs": - retval += "# Use NFS installation media\nnfs --server=%s --dir=%s\n" % (self.server, self.dir) - elif self.method == "url": - retval += "# Use network installation\nurl --url=\"%s\"\n" % self.url - - return retval - - def _getParser(self): - op = KSOptionParser() - - # method = "cdrom" falls through to the return - if self.currentCmd == "harddrive": - op.add_option("--biospart", dest="biospart") - op.add_option("--partition", dest="partition") - op.add_option("--dir", dest="dir", required=1) - elif self.currentCmd == "nfs": - op.add_option("--server", dest="server", required=1) - op.add_option("--dir", dest="dir", required=1) - elif self.currentCmd == "url": - op.add_option("--url", dest="url", required=1) - - return op - - def parse(self, args): - self.method = self.currentCmd - - op = self._getParser() - (opts, extra) = op.parse_args(args=args, lineno=self.lineno) - self._setToSelf(op, opts) - - if self.currentCmd == "harddrive": - if self.biospart is None and self.partition is None or \ - self.biospart is not None and self.partition is not None: - raise KickstartValueError (formatErrorMsg(self.lineno, msg=_("One of biospart or partition options must be specified."))) - - return self - -class FC6_Method(FC3_Method): - removedKeywords = FC3_Method.removedKeywords - removedAttrs = FC3_Method.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - FC3_Method.__init__(self, writePriority, *args, **kwargs) - - # Same reason for this attribute as the comment in FC3_Method. - self.opts = None - - def __str__(self): - retval = KickstartCommand.__str__(self) - - if self.method == "cdrom": - retval += "# Use CDROM installation media\ncdrom\n" - elif self.method == "harddrive": - msg = "# Use hard drive installation media\nharddrive --dir=%s" % self.dir - - if self.biospart is not None: - retval += msg + " --biospart=%s\n" % self.biospart - else: - retval += msg + " --partition=%s\n" % self.partition - elif self.method == "nfs": - retval += "# Use NFS installation media\nnfs --server=%s --dir=%s" % (self.server, self.dir) - if self.opts is not None: - retval += " --opts=\"%s\"" % self.opts - retval += "\n" - elif self.method == "url": - retval += "# Use network installation\nurl --url=\"%s\"\n" % self.url - - return retval - - def _getParser(self): - op = FC3_Method._getParser(self) - - if self.currentCmd == "nfs": - op.add_option("--opts", dest="opts") - - return op - -class F13_Method(FC6_Method): - removedKeywords = FC6_Method.removedKeywords - removedAttrs = FC6_Method.removedAttrs - - def __init__(self, *args, **kwargs): - FC6_Method.__init__(self, *args, **kwargs) - - # And same as all the other __init__ methods. - self.proxy = "" - - def __str__(self): - retval = FC6_Method.__str__(self) - - if self.method == "url" and self.proxy: - retval = retval.strip() - retval += " --proxy=\"%s\"\n" % self.proxy - - return retval - - def _getParser(self): - op = FC6_Method._getParser(self) - - if self.currentCmd == "url": - op.add_option("--proxy") - - return op - -class F14_Method(F13_Method): - removedKeywords = F13_Method.removedKeywords - removedAttrs = F13_Method.removedAttrs - - def __init__(self, *args, **kwargs): - F13_Method.__init__(self, *args, **kwargs) - - self.noverifyssl = False - - def __str__(self): - retval = F13_Method.__str__(self) - - if self.method == "url" and self.noverifyssl: - retval = retval.strip() - retval += " --noverifyssl\n" - - return retval - - def _getParser(self): - op = F13_Method._getParser(self) - - if self.currentCmd == "url": - op.add_option("--noverifyssl", action="store_true", default=False) - - return op - -RHEL6_Method = F14_Method diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/monitor.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/monitor.py deleted file mode 100644 index 57f1e51..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/monitor.py +++ /dev/null @@ -1,106 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2005, 2006, 2007, 2008 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.errors import * -from pykickstart.options import * - -import gettext -_ = lambda x: gettext.ldgettext("pykickstart", x) - -class FC3_Monitor(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - - self.hsync = kwargs.get("hsync", "") - self.monitor = kwargs.get("monitor", "") - self.vsync = kwargs.get("vsync", "") - - def __str__(self): - retval = KickstartCommand.__str__(self) - retval += "monitor" - - if self.hsync != "": - retval += " --hsync=%s" % self.hsync - if self.monitor != "": - retval += " --monitor=\"%s\"" % self.monitor - if self.vsync != "": - retval += " --vsync=%s" % self.vsync - - if retval != "monitor": - return retval + "\n" - else: - return "" - - def _getParser(self): - op = KSOptionParser() - op.add_option("--hsync") - op.add_option("--monitor") - op.add_option("--vsync") - return op - - def parse(self, args): - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - - if extra: - mapping = {"cmd": "monitor", "options": extra} - raise KickstartValueError (formatErrorMsg(self.lineno, msg=_("Unexpected arguments to %(cmd)s command: %(options)s") % mapping)) - - self._setToSelf(self.op, opts) - return self - -class FC6_Monitor(FC3_Monitor): - removedKeywords = FC3_Monitor.removedKeywords - removedAttrs = FC3_Monitor.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - FC3_Monitor.__init__(self, writePriority, *args, **kwargs) - self.probe = kwargs.get("probe", True) - - def __str__(self): - retval = KickstartCommand.__str__(self) - retval += "monitor" - - if self.hsync != "": - retval += " --hsync=%s" % self.hsync - if self.monitor != "": - retval += " --monitor=\"%s\"" % self.monitor - if not self.probe: - retval += " --noprobe" - if self.vsync != "": - retval += " --vsync=%s" % self.vsync - - if retval != "monitor": - return retval + "\n" - else: - return "" - - def _getParser(self): - op = FC3_Monitor._getParser(self) - op.add_option("--noprobe", dest="probe", action="store_false", - default=True) - return op - -class F10_Monitor(DeprecatedCommand): - def __init__(self): - DeprecatedCommand.__init__(self) diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/mouse.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/mouse.py deleted file mode 100644 index d7ad1ae..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/mouse.py +++ /dev/null @@ -1,70 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2005, 2006, 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.errors import * -from pykickstart.options import * - -import gettext -_ = lambda x: gettext.ldgettext("pykickstart", x) - -class RHEL3_Mouse(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - - self.device = kwargs.get("device", "") - self.emulthree = kwargs.get("emulthree", False) - self.mouse = kwargs.get("mouse", "") - - def __str__(self): - retval = KickstartCommand.__str__(self) - - opts = "" - if self.device: - opts += "--device=%s " % self.device - if self.emulthree: - opts += "--emulthree " - - if self.mouse: - retval += "# System mouse\nmouse %s%s\n" % (opts, self.mouse) - return retval - - def _getParser(self): - op = KSOptionParser() - op.add_option("--device", dest="device", default="") - op.add_option("--emulthree", dest="emulthree", default=False, action="store_true") - return op - - def parse(self, args): - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - self._setToSelf(self.op, opts) - - if len(extra) != 1: - raise KickstartValueError (formatErrorMsg(self.lineno, msg=_("Kickstart command %s requires one argument") % "mouse")) - - self.mouse = extra[0] - return self - -class FC3_Mouse(DeprecatedCommand): - def __init__(self): - DeprecatedCommand.__init__(self) diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/multipath.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/multipath.py deleted file mode 100644 index 4d5b26b..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/multipath.py +++ /dev/null @@ -1,111 +0,0 @@ -# -# Chris Lumens -# Peter Jones -# -# Copyright 2006, 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.errors import * -from pykickstart.options import * - -import gettext -_ = lambda x: gettext.ldgettext("pykickstart", x) - -class FC6_MpPathData(BaseData): - removedKeywords = BaseData.removedKeywords - removedAttrs = BaseData.removedAttrs - - def __init__(self, *args, **kwargs): - BaseData.__init__(self, *args, **kwargs) - self.mpdev = kwargs.get("mpdev", "") - self.device = kwargs.get("device", "") - self.rule = kwargs.get("rule", "") - - def __str__(self): - return " --device=%s --rule=\"%s\"" % (self.device, self.rule) - -class FC6_MultiPathData(BaseData): - removedKeywords = BaseData.removedKeywords - removedAttrs = BaseData.removedAttrs - - def __init__(self, *args, **kwargs): - BaseData.__init__(self, *args, **kwargs) - self.name = kwargs.get("name", "") - self.paths = kwargs.get("paths", []) - - def __str__(self): - retval = BaseData.__str__(self) - - for path in self.paths: - retval += "multipath --mpdev=%s %s\n" % (self.name, path.__str__()) - - return retval - -class FC6_MultiPath(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=50, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - - self.mpaths = kwargs.get("mpaths", []) - - def __str__(self): - retval = "" - for mpath in self.mpaths: - retval += mpath.__str__() - - return retval - - def _getParser(self): - op = KSOptionParser() - op.add_option("--name", dest="name", action="store", type="string", - required=1) - op.add_option("--device", dest="device", action="store", type="string", - required=1) - op.add_option("--rule", dest="rule", action="store", type="string", - required=1) - return op - - def parse(self, args): - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - dd = FC6_MpPathData() - self._setToObj(self.op, opts, dd) - dd.lineno = self.lineno - dd.mpdev = dd.mpdev.split('/')[-1] - - parent = None - for x in range(0, len(self.mpaths)): - mpath = self.mpaths[x] - for path in mpath.paths: - if path.device == dd.device: - mapping = {"device": path.device, "multipathdev": path.mpdev} - raise KickstartValueError (formatErrorMsg(self.lineno, msg=_("Device '%(device)s' is already used in multipath '%(multipathdev)s'") % mapping)) - if mpath.name == dd.mpdev: - parent = x - - if parent is None: - mpath = FC6_MultiPathData() - return mpath - else: - mpath = self.mpaths[parent] - - return dd - - def dataList(self): - return self.mpaths diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/network.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/network.py deleted file mode 100644 index 9b67f92..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/network.py +++ /dev/null @@ -1,363 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2005, 2006, 2007, 2008 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.constants import * -from pykickstart.errors import * -from pykickstart.options import * - -import gettext -import warnings -_ = lambda x: gettext.ldgettext("pykickstart", x) - -class FC3_NetworkData(BaseData): - removedKeywords = BaseData.removedKeywords - removedAttrs = BaseData.removedAttrs - - def __init__(self, *args, **kwargs): - BaseData.__init__(self, *args, **kwargs) - self.bootProto = kwargs.get("bootProto", BOOTPROTO_DHCP) - self.dhcpclass = kwargs.get("dhcpclass", "") - self.device = kwargs.get("device", "") - self.essid = kwargs.get("essid", "") - self.ethtool = kwargs.get("ethtool", "") - self.gateway = kwargs.get("gateway", "") - self.hostname = kwargs.get("hostname", "") - self.ip = kwargs.get("ip", "") - self.mtu = kwargs.get("mtu", "") - self.nameserver = kwargs.get("nameserver", "") - self.netmask = kwargs.get("netmask", "") - self.nodns = kwargs.get("nodns", False) - self.onboot = kwargs.get("onboot", True) - self.wepkey = kwargs.get("wepkey", "") - - def __eq__(self, y): - return self.device and self.device == y.device - - def _getArgsAsStr(self): - retval = "" - - if self.bootProto != "": - retval += " --bootproto=%s" % self.bootProto - if self.dhcpclass != "": - retval += " --dhcpclass=%s" % self.dhcpclass - if self.device != "": - retval += " --device=%s" % self.device - if self.essid != "": - retval += " --essid=\"%s\"" % self.essid - if self.ethtool != "": - retval += " --ethtool=\"%s\"" % self.ethtool - if self.gateway != "": - retval += " --gateway=%s" % self.gateway - if self.hostname != "": - retval += " --hostname=%s" % self.hostname - if self.ip != "": - retval += " --ip=%s" % self.ip - if self.mtu != "": - retval += " --mtu=%s" % self.mtu - if self.nameserver != "": - retval += " --nameserver=%s" % self.nameserver - if self.netmask != "": - retval += " --netmask=%s" % self.netmask - if self.nodns: - retval += " --nodns" - if not self.onboot: - retval += " --onboot=off" - if self.wepkey != "": - retval += " --wepkey=%s" % self.wepkey - - return retval - - def __str__(self): - retval = BaseData.__str__(self) - retval += "network %s\n" % self._getArgsAsStr() - return retval - -class FC4_NetworkData(FC3_NetworkData): - removedKeywords = FC3_NetworkData.removedKeywords - removedAttrs = FC3_NetworkData.removedAttrs - - def __init__(self, *args, **kwargs): - FC3_NetworkData.__init__(self, *args, **kwargs) - self.notksdevice = kwargs.get("notksdevice", False) - - def _getArgsAsStr(self): - retval = FC3_NetworkData._getArgsAsStr(self) - - if self.notksdevice: - retval += " --notksdevice" - - return retval - -class FC6_NetworkData(FC4_NetworkData): - removedKeywords = FC4_NetworkData.removedKeywords - removedAttrs = FC4_NetworkData.removedAttrs - - def __init__(self, *args, **kwargs): - FC4_NetworkData.__init__(self, *args, **kwargs) - self.noipv4 = kwargs.get("noipv4", False) - self.noipv6 = kwargs.get("noipv6", False) - - def _getArgsAsStr(self): - retval = FC4_NetworkData._getArgsAsStr(self) - - if self.noipv4: - retval += " --noipv4" - if self.noipv6: - retval += " --noipv6" - - return retval - -class F8_NetworkData(FC6_NetworkData): - removedKeywords = FC6_NetworkData.removedKeywords - removedAttrs = FC6_NetworkData.removedAttrs - - def __init__(self, *args, **kwargs): - FC6_NetworkData.__init__(self, *args, **kwargs) - self.ipv6 = kwargs.get("ipv6", "") - - def _getArgsAsStr(self): - retval = FC6_NetworkData._getArgsAsStr(self) - - if self.ipv6 != "": - retval += " --ipv6" % self.ipv6 - - return retval - -class F16_NetworkData(F8_NetworkData): - removedKeywords = F8_NetworkData.removedKeywords - removedAttrs = F8_NetworkData.removedAttrs - - def __init__(self, *args, **kwargs): - F8_NetworkData.__init__(self, *args, **kwargs) - self.activate = kwargs.get("activate", False) - self.nodefroute = kwargs.get("nodefroute", False) - self.wpakey = kwargs.get("wpakey", "") - - def _getArgsAsStr(self): - retval = F8_NetworkData._getArgsAsStr(self) - - if self.activate: - retval += " --activate" - if self.nodefroute: - retval += " --nodefroute" - if self.wpakey != "": - retval += "--wpakey=%s" % self.wpakey - - return retval - -class RHEL4_NetworkData(FC3_NetworkData): - removedKeywords = FC3_NetworkData.removedKeywords - removedAttrs = FC3_NetworkData.removedAttrs - - def __init__(self, *args, **kwargs): - FC3_NetworkData.__init__(self, *args, **kwargs) - self.notksdevice = kwargs.get("notksdevice", False) - - def _getArgsAsStr(self): - retval = FC3_NetworkData._getArgsAsStr(self) - - if self.notksdevice: - retval += " --notksdevice" - - return retval - -class RHEL6_NetworkData(F8_NetworkData): - removedKeywords = F8_NetworkData.removedKeywords - removedAttrs = F8_NetworkData.removedAttrs - - def __init__(self, *args, **kwargs): - F8_NetworkData.__init__(self, *args, **kwargs) - self.activate = kwargs.get("activate", False) - self.nodefroute = kwargs.get("nodefroute", False) - - def _getArgsAsStr(self): - retval = F8_NetworkData._getArgsAsStr(self) - - if self.activate: - retval += " --activate" - if self.nodefroute: - retval += " --nodefroute" - - return retval - -class FC3_Network(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.bootprotoList = [BOOTPROTO_DHCP, BOOTPROTO_BOOTP, - BOOTPROTO_STATIC] - - self.op = self._getParser() - - self.network = kwargs.get("network", []) - - def __str__(self): - retval = "" - - for nic in self.network: - retval += nic.__str__() - - if retval != "": - return "# Network information\n" + retval - else: - return "" - - def _getParser(self): - op = KSOptionParser() - op.add_option("--bootproto", dest="bootProto", - default=BOOTPROTO_DHCP, - choices=self.bootprotoList) - op.add_option("--dhcpclass", dest="dhcpclass") - op.add_option("--device", dest="device") - op.add_option("--essid", dest="essid") - op.add_option("--ethtool", dest="ethtool") - op.add_option("--gateway", dest="gateway") - op.add_option("--hostname", dest="hostname") - op.add_option("--ip", dest="ip") - op.add_option("--mtu", dest="mtu") - op.add_option("--nameserver", dest="nameserver") - op.add_option("--netmask", dest="netmask") - op.add_option("--nodns", dest="nodns", action="store_true", - default=False) - op.add_option("--onboot", dest="onboot", action="store", - type="ksboolean") - op.add_option("--wepkey", dest="wepkey") - return op - - def parse(self, args): - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - nd = self.handler.NetworkData() - self._setToObj(self.op, opts, nd) - nd.lineno = self.lineno - - # Check for duplicates in the data list. - if nd in self.dataList(): - warnings.warn(_("A network device with the name %s has already been defined.") % nd.device) - - return nd - - def dataList(self): - return self.network - -class FC4_Network(FC3_Network): - removedKeywords = FC3_Network.removedKeywords - removedAttrs = FC3_Network.removedAttrs - - def _getParser(self): - op = FC3_Network._getParser(self) - op.add_option("--notksdevice", dest="notksdevice", action="store_true", - default=False) - return op - -class FC6_Network(FC4_Network): - removedKeywords = FC4_Network.removedKeywords - removedAttrs = FC4_Network.removedAttrs - - def _getParser(self): - op = FC4_Network._getParser(self) - op.add_option("--noipv4", dest="noipv4", action="store_true", - default=False) - op.add_option("--noipv6", dest="noipv6", action="store_true", - default=False) - return op - -class F8_Network(FC6_Network): - removedKeywords = FC6_Network.removedKeywords - removedAttrs = FC6_Network.removedAttrs - - def _getParser(self): - op = FC6_Network._getParser(self) - op.add_option("--ipv6", dest="ipv6") - return op - -class F9_Network(F8_Network): - removedKeywords = F8_Network.removedKeywords - removedAttrs = F8_Network.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - F8_Network.__init__(self, writePriority, *args, **kwargs) - self.bootprotoList.append(BOOTPROTO_QUERY) - - def _getParser(self): - op = F8_Network._getParser(self) - op.add_option("--bootproto", dest="bootProto", - default=BOOTPROTO_DHCP, - choices=self.bootprotoList) - return op - -class F16_Network(F9_Network): - removedKeywords = F9_Network.removedKeywords - removedAttrs = F9_Network.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - F9_Network.__init__(self, writePriority, *args, **kwargs) - self.bootprotoList.append(BOOTPROTO_IBFT) - - def _getParser(self): - op = F9_Network._getParser(self) - op.add_option("--activate", dest="activate", action="store_true", - default=False) - op.add_option("--nodefroute", dest="nodefroute", action="store_true", - default=False) - op.add_option("--wpakey", dest="wpakey", action="store", default="") - return op - -class RHEL4_Network(FC3_Network): - removedKeywords = FC3_Network.removedKeywords - removedAttrs = FC3_Network.removedAttrs - - def _getParser(self): - op = FC3_Network._getParser(self) - op.add_option("--notksdevice", dest="notksdevice", action="store_true", - default=False) - return op - -class RHEL5_Network(FC6_Network): - removedKeywords = FC6_Network.removedKeywords - removedAttrs = FC6_Network.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - FC6_Network.__init__(self, writePriority, *args, **kwargs) - self.bootprotoList.append(BOOTPROTO_QUERY) - - def _getParser(self): - op = FC6_Network._getParser(self) - op.add_option("--bootproto", dest="bootProto", - default=BOOTPROTO_DHCP, - choices=self.bootprotoList) - return op - -class RHEL6_Network(F9_Network): - removedKeywords = F9_Network.removedKeywords - removedAttrs = F9_Network.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - F9_Network.__init__(self, writePriority, *args, **kwargs) - self.bootprotoList.append(BOOTPROTO_IBFT) - - def _getParser(self): - op = F9_Network._getParser(self) - op.add_option("--activate", dest="activate", action="store_true", - default=False) - op.add_option("--nodefroute", dest="nodefroute", action="store_true", - default=False) - return op diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/partition.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/partition.py deleted file mode 100644 index 5dbd4d4..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/partition.py +++ /dev/null @@ -1,357 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2005, 2006, 2007, 2008 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.errors import * -from pykickstart.options import * - -import gettext -import warnings -_ = lambda x: gettext.ldgettext("pykickstart", x) - -class FC3_PartData(BaseData): - removedKeywords = BaseData.removedKeywords - removedAttrs = BaseData.removedAttrs - - def __init__(self, *args, **kwargs): - BaseData.__init__(self, *args, **kwargs) - self.active = kwargs.get("active", False) - self.primOnly = kwargs.get("primOnly", False) - self.end = kwargs.get("end", 0) - self.fstype = kwargs.get("fstype", "") - self.grow = kwargs.get("grow", False) - self.maxSizeMB = kwargs.get("maxSizeMB", 0) - self.format = kwargs.get("format", True) - self.onbiosdisk = kwargs.get("onbiosdisk", "") - self.disk = kwargs.get("disk", "") - self.onPart = kwargs.get("onPart", "") - self.recommended = kwargs.get("recommended", False) - self.size = kwargs.get("size", None) - self.start = kwargs.get("start", 0) - self.mountpoint = kwargs.get("mountpoint", "") - - def __eq__(self, y): - if self.mountpoint: - return self.mountpoint == y.mountpoint - else: - return False - - def _getArgsAsStr(self): - retval = "" - - if self.active: - retval += " --active" - if self.primOnly: - retval += " --asprimary" - if hasattr(self, "end") and self.end != 0: - retval += " --end=%s" % self.end - if self.fstype != "": - retval += " --fstype=\"%s\"" % self.fstype - if self.grow: - retval += " --grow" - if self.maxSizeMB > 0: - retval += " --maxsize=%d" % self.maxSizeMB - if not self.format: - retval += " --noformat" - if self.onbiosdisk != "": - retval += " --onbiosdisk=%s" % self.onbiosdisk - if self.disk != "": - retval += " --ondisk=%s" % self.disk - if self.onPart != "": - retval += " --onpart=%s" % self.onPart - if self.recommended: - retval += " --recommended" - if self.size and self.size != 0: - retval += " --size=%s" % self.size - if hasattr(self, "start") and self.start != 0: - retval += " --start=%s" % self.start - - return retval - - def __str__(self): - retval = BaseData.__str__(self) - if self.mountpoint: - mountpoint_str = "%s" % self.mountpoint - else: - mountpoint_str = "(No mount point)" - retval += "part %s%s\n" % (mountpoint_str, self._getArgsAsStr()) - return retval - -class FC4_PartData(FC3_PartData): - removedKeywords = FC3_PartData.removedKeywords - removedAttrs = FC3_PartData.removedAttrs - - def __init__(self, *args, **kwargs): - FC3_PartData.__init__(self, *args, **kwargs) - self.bytesPerInode = kwargs.get("bytesPerInode", 4096) - self.fsopts = kwargs.get("fsopts", "") - self.label = kwargs.get("label", "") - self.fslabel = kwargs.get("fslabel", "") - - def _getArgsAsStr(self): - retval = FC3_PartData._getArgsAsStr(self) - - if hasattr(self, "bytesPerInode") and self.bytesPerInode != 0: - retval += " --bytes-per-inode=%d" % self.bytesPerInode - if self.fsopts != "": - retval += " --fsoptions=\"%s\"" % self.fsopts - if self.label != "": - retval += " --label=%s" % self.label - if self.fslabel != "": - retval += " --fslabel=%s" % self.fslabel - - return retval - -class RHEL5_PartData(FC4_PartData): - removedKeywords = FC4_PartData.removedKeywords - removedAttrs = FC4_PartData.removedAttrs - - def __init__(self, *args, **kwargs): - FC4_PartData.__init__(self, *args, **kwargs) - self.encrypted = kwargs.get("encrypted", False) - self.passphrase = kwargs.get("passphrase", "") - - def _getArgsAsStr(self): - retval = FC4_PartData._getArgsAsStr(self) - - if self.encrypted: - retval += " --encrypted" - - if self.passphrase != "": - retval += " --passphrase=\"%s\"" % self.passphrase - - return retval - -class F9_PartData(FC4_PartData): - removedKeywords = FC4_PartData.removedKeywords + ["bytesPerInode"] - removedAttrs = FC4_PartData.removedAttrs + ["bytesPerInode"] - - def __init__(self, *args, **kwargs): - FC4_PartData.__init__(self, *args, **kwargs) - self.deleteRemovedAttrs() - - self.fsopts = kwargs.get("fsopts", "") - self.label = kwargs.get("label", "") - self.fsprofile = kwargs.get("fsprofile", "") - self.encrypted = kwargs.get("encrypted", False) - self.passphrase = kwargs.get("passphrase", "") - - def _getArgsAsStr(self): - retval = FC4_PartData._getArgsAsStr(self) - - if self.fsprofile != "": - retval += " --fsprofile=\"%s\"" % self.fsprofile - if self.encrypted: - retval += " --encrypted" - - if self.passphrase != "": - retval += " --passphrase=\"%s\"" % self.passphrase - - return retval - -class F11_PartData(F9_PartData): - removedKeywords = F9_PartData.removedKeywords + ["start", "end"] - removedAttrs = F9_PartData.removedAttrs + ["start", "end"] - -class F12_PartData(F11_PartData): - removedKeywords = F11_PartData.removedKeywords - removedAttrs = F11_PartData.removedAttrs - - def __init__(self, *args, **kwargs): - F11_PartData.__init__(self, *args, **kwargs) - - self.escrowcert = kwargs.get("escrowcert", "") - self.backuppassphrase = kwargs.get("backuppassphrase", False) - - def _getArgsAsStr(self): - retval = F11_PartData._getArgsAsStr(self) - - if self.encrypted and self.escrowcert != "": - retval += " --escrowcert=\"%s\"" % self.escrowcert - - if self.backuppassphrase: - retval += " --backuppassphrase" - - return retval - -F14_PartData = F12_PartData - -class FC3_Partition(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=130, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - - self.partitions = kwargs.get("partitions", []) - - def __str__(self): - retval = "" - - for part in self.partitions: - retval += part.__str__() - - if retval != "": - return "# Disk partitioning information\n" + retval - else: - return "" - - def _getParser(self): - def part_cb (option, opt_str, value, parser): - if value.startswith("/dev/"): - parser.values.ensure_value(option.dest, value[5:]) - else: - parser.values.ensure_value(option.dest, value) - - op = KSOptionParser() - op.add_option("--active", dest="active", action="store_true", - default=False) - op.add_option("--asprimary", dest="primOnly", action="store_true", - default=False) - op.add_option("--end", dest="end", action="store", type="int", - nargs=1) - op.add_option("--fstype", "--type", dest="fstype") - op.add_option("--grow", dest="grow", action="store_true", default=False) - op.add_option("--maxsize", dest="maxSizeMB", action="store", type="int", - nargs=1) - op.add_option("--noformat", dest="format", action="store_false", - default=True) - op.add_option("--onbiosdisk", dest="onbiosdisk") - op.add_option("--ondisk", "--ondrive", dest="disk") - op.add_option("--onpart", "--usepart", dest="onPart", action="callback", - callback=part_cb, nargs=1, type="string") - op.add_option("--recommended", dest="recommended", action="store_true", - default=False) - op.add_option("--size", dest="size", action="store", type="int", - nargs=1) - op.add_option("--start", dest="start", action="store", type="int", - nargs=1) - return op - - def parse(self, args): - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - - pd = self.handler.PartData() - self._setToObj(self.op, opts, pd) - pd.lineno = self.lineno - if extra: - pd.mountpoint = extra[0] - if pd in self.dataList(): - warnings.warn(_("A partition with the mountpoint %s has already been defined.") % pd.mountpoint) - else: - pd.mountpoint = None - - return pd - - def dataList(self): - return self.partitions - -class FC4_Partition(FC3_Partition): - removedKeywords = FC3_Partition.removedKeywords - removedAttrs = FC3_Partition.removedAttrs - - def __init__(self, writePriority=130, *args, **kwargs): - FC3_Partition.__init__(self, writePriority, *args, **kwargs) - - def part_cb (option, opt_str, value, parser): - if value.startswith("/dev/"): - parser.values.ensure_value(option.dest, value[5:]) - else: - parser.values.ensure_value(option.dest, value) - - def _getParser(self): - op = FC3_Partition._getParser(self) - op.add_option("--bytes-per-inode", dest="bytesPerInode", action="store", - type="int", nargs=1) - op.add_option("--fsoptions", dest="fsopts") - op.add_option("--label", dest="label") - op.add_option("--fslabel", dest="fslabel") - return op - -class RHEL5_Partition(FC4_Partition): - removedKeywords = FC4_Partition.removedKeywords - removedAttrs = FC4_Partition.removedAttrs - - def __init__(self, writePriority=130, *args, **kwargs): - FC4_Partition.__init__(self, writePriority, *args, **kwargs) - - def part_cb (option, opt_str, value, parser): - if value.startswith("/dev/"): - parser.values.ensure_value(option.dest, value[5:]) - else: - parser.values.ensure_value(option.dest, value) - - def _getParser(self): - op = FC4_Partition._getParser(self) - op.add_option("--encrypted", action="store_true", default=False) - op.add_option("--passphrase") - return op - -class F9_Partition(FC4_Partition): - removedKeywords = FC4_Partition.removedKeywords - removedAttrs = FC4_Partition.removedAttrs - - def __init__(self, writePriority=130, *args, **kwargs): - FC4_Partition.__init__(self, writePriority, *args, **kwargs) - - def part_cb (option, opt_str, value, parser): - if value.startswith("/dev/"): - parser.values.ensure_value(option.dest, value[5:]) - else: - parser.values.ensure_value(option.dest, value) - - def _getParser(self): - op = FC4_Partition._getParser(self) - op.add_option("--bytes-per-inode", deprecated=1) - op.add_option("--fsprofile") - op.add_option("--encrypted", action="store_true", default=False) - op.add_option("--passphrase") - return op - -class F11_Partition(F9_Partition): - removedKeywords = F9_Partition.removedKeywords - removedAttrs = F9_Partition.removedAttrs - - def _getParser(self): - op = F9_Partition._getParser(self) - op.add_option("--start", deprecated=1) - op.add_option("--end", deprecated=1) - return op - -class F12_Partition(F11_Partition): - removedKeywords = F11_Partition.removedKeywords - removedAttrs = F11_Partition.removedAttrs - - def _getParser(self): - op = F11_Partition._getParser(self) - op.add_option("--escrowcert") - op.add_option("--backuppassphrase", action="store_true", default=False) - return op - -class F14_Partition(F12_Partition): - removedKeywords = F12_Partition.removedKeywords - removedAttrs = F12_Partition.removedAttrs - - def _getParser(self): - op = F12_Partition._getParser(self) - op.remove_option("--bytes-per-inode") - op.remove_option("--start") - op.remove_option("--end") - return op diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/raid.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/raid.py deleted file mode 100644 index adf3524..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/raid.py +++ /dev/null @@ -1,365 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2005, 2006, 2007, 2008, 2011 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.errors import * -from pykickstart.options import * - -import gettext -import warnings -_ = lambda x: gettext.ldgettext("pykickstart", x) - -class FC3_RaidData(BaseData): - removedKeywords = BaseData.removedKeywords - removedAttrs = BaseData.removedAttrs - - def __init__(self, *args, **kwargs): - BaseData.__init__(self, *args, **kwargs) - self.device = kwargs.get("device", None) - self.fstype = kwargs.get("fstype", "") - self.level = kwargs.get("level", "") - self.format = kwargs.get("format", True) - self.spares = kwargs.get("spares", 0) - self.preexist = kwargs.get("preexist", False) - self.mountpoint = kwargs.get("mountpoint", "") - self.members = kwargs.get("members", []) - - def __eq__(self, y): - return self.device == y.device - - def _getArgsAsStr(self): - retval = "" - - if self.device != "": - retval += " --device=%s" % self.device - if self.fstype != "": - retval += " --fstype=\"%s\"" % self.fstype - if self.level != "": - retval += " --level=%s" % self.level - if not self.format: - retval += " --noformat" - if self.spares != 0: - retval += " --spares=%d" % self.spares - if self.preexist: - retval += " --useexisting" - - return retval - - def __str__(self): - retval = BaseData.__str__(self) - retval += "raid %s%s %s\n" % (self.mountpoint, self._getArgsAsStr(), - " ".join(self.members)) - return retval - -class FC4_RaidData(FC3_RaidData): - removedKeywords = FC3_RaidData.removedKeywords - removedAttrs = FC3_RaidData.removedAttrs - - def __init__(self, *args, **kwargs): - FC3_RaidData.__init__(self, *args, **kwargs) - self.fsopts = kwargs.get("fsopts", "") - - def _getArgsAsStr(self): - retval = FC3_RaidData._getArgsAsStr(self) - - if self.fsopts != "": - retval += " --fsoptions=\"%s\"" % self.fsopts - - return retval - -class FC5_RaidData(FC4_RaidData): - removedKeywords = FC4_RaidData.removedKeywords - removedAttrs = FC4_RaidData.removedAttrs - - def __init__(self, *args, **kwargs): - FC4_RaidData.__init__(self, *args, **kwargs) - self.bytesPerInode = kwargs.get("bytesPerInode", 4096) - - def _getArgsAsStr(self): - retval = FC4_RaidData._getArgsAsStr(self) - - if hasattr(self, "bytesPerInode") and self.bytesPerInode != 0: - retval += " --bytes-per-inode=%d" % self.bytesPerInode - - return retval - -class RHEL5_RaidData(FC5_RaidData): - removedKeywords = FC5_RaidData.removedKeywords - removedAttrs = FC5_RaidData.removedAttrs - - def __init__(self, *args, **kwargs): - FC5_RaidData.__init__(self, *args, **kwargs) - self.encrypted = kwargs.get("encrypted", False) - self.passphrase = kwargs.get("passphrase", "") - - def _getArgsAsStr(self): - retval = FC5_RaidData._getArgsAsStr(self) - - if self.encrypted: - retval += " --encrypted" - - if self.passphrase != "": - retval += " --passphrase=\"%s\"" % self.passphrase - - return retval - -F7_RaidData = FC5_RaidData - -class F9_RaidData(FC5_RaidData): - removedKeywords = FC5_RaidData.removedKeywords + ["bytesPerInode"] - removedAttrs = FC5_RaidData.removedAttrs + ["bytesPerInode"] - - def __init__(self, *args, **kwargs): - FC5_RaidData.__init__(self, *args, **kwargs) - self.deleteRemovedAttrs() - - self.fsprofile = kwargs.get("fsprofile", "") - self.encrypted = kwargs.get("encrypted", False) - self.passphrase = kwargs.get("passphrase", "") - - def _getArgsAsStr(self): - retval = FC5_RaidData._getArgsAsStr(self) - - if self.fsprofile != "": - retval += " --fsprofile=\"%s\"" % self.fsprofile - if self.encrypted: - retval += " --encrypted" - - if self.passphrase != "": - retval += " --passphrase=\"%s\"" % self.passphrase - - return retval - -class F12_RaidData(F9_RaidData): - removedKeywords = F9_RaidData.removedKeywords - removedAttrs = F9_RaidData.removedAttrs - - def __init__(self, *args, **kwargs): - F9_RaidData.__init__(self, *args, **kwargs) - self.deleteRemovedAttrs() - - self.escrowcert = kwargs.get("escrowcert", "") - self.backuppassphrase = kwargs.get("backuppassphrase", False) - - def _getArgsAsStr(self): - retval = F9_RaidData._getArgsAsStr(self) - - if self.encrypted and self.escrowcert != "": - retval += " --escrowcert=\"%s\"" % self.escrowcert - - if self.backuppassphrase: - retval += " --backuppassphrase" - return retval - -F13_RaidData = F12_RaidData - -F14_RaidData = F13_RaidData - -class F15_RaidData(F14_RaidData): - removedKeywords = F14_RaidData.removedKeywords - removedAttrs = F14_RaidData.removedAttrs - - def __init__(self, *args, **kwargs): - F14_RaidData.__init__(self, *args, **kwargs) - self.deleteRemovedAttrs() - - self.label = kwargs.get("label", "") - - def _getArgsAsStr(self): - retval = F14_RaidData._getArgsAsStr(self) - - if self.label != "": - retval += " --label=%s" % self.label - - return retval - -class FC3_Raid(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=131, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - - # A dict of all the RAID levels we support. This means that if we - # support more levels in the future, subclasses don't have to - # duplicate too much. - self.levelMap = { "RAID0": "RAID0", "0": "RAID0", - "RAID1": "RAID1", "1": "RAID1", - "RAID5": "RAID5", "5": "RAID5", - "RAID6": "RAID6", "6": "RAID6" } - - self.raidList = kwargs.get("raidList", []) - - def __str__(self): - retval = "" - - for raid in self.raidList: - retval += raid.__str__() - - return retval - - def _getParser(self): - def raid_cb (option, opt_str, value, parser): - parser.values.format = False - parser.values.preexist = True - - def device_cb (option, opt_str, value, parser): - if value[0:2] == "md": - parser.values.ensure_value(option.dest, value[2:]) - else: - parser.values.ensure_value(option.dest, value) - - def level_cb (option, opt_str, value, parser): - if self.levelMap.has_key(value): - parser.values.ensure_value(option.dest, self.levelMap[value]) - - op = KSOptionParser() - op.add_option("--device", action="callback", callback=device_cb, - dest="device", type="string", nargs=1, required=1) - op.add_option("--fstype", dest="fstype") - op.add_option("--level", dest="level", action="callback", - callback=level_cb, type="string", nargs=1) - op.add_option("--noformat", action="callback", callback=raid_cb, - dest="format", default=True, nargs=0) - op.add_option("--spares", dest="spares", action="store", type="int", - nargs=1, default=0) - op.add_option("--useexisting", dest="preexist", action="store_true", - default=False) - return op - - def parse(self, args): - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - - if len(extra) == 0: - raise KickstartValueError (formatErrorMsg(self.lineno, msg=_("Mount point required for %s") % "raid")) - if len(extra) == 1: - raise KickstartValueError (formatErrorMsg(self.lineno, msg=_("Partitions required for %s") % "raid")) - - rd = self.handler.RaidData() - self._setToObj(self.op, opts, rd) - rd.lineno = self.lineno - - # --device can't just take an int in the callback above, because it - # could be specificed as "mdX", which causes optparse to error when - # it runs int(). - rd.device = int(rd.device) - rd.mountpoint = extra[0] - rd.members = extra[1:] - - # Check for duplicates in the data list. - if rd in self.dataList(): - warnings.warn(_("A RAID device with the name %s has already been defined.") % rd.device) - - return rd - - def dataList(self): - return self.raidList - -class FC4_Raid(FC3_Raid): - removedKeywords = FC3_Raid.removedKeywords - removedAttrs = FC3_Raid.removedAttrs - - def _getParser(self): - op = FC3_Raid._getParser(self) - op.add_option("--fsoptions", dest="fsopts") - return op - -class FC5_Raid(FC4_Raid): - removedKeywords = FC4_Raid.removedKeywords - removedAttrs = FC4_Raid.removedAttrs - - def _getParser(self): - op = FC4_Raid._getParser(self) - op.add_option("--bytes-per-inode", dest="bytesPerInode", action="store", - type="int", nargs=1) - return op - -class RHEL5_Raid(FC5_Raid): - removedKeywords = FC5_Raid.removedKeywords - removedAttrs = FC5_Raid.removedAttrs - - def __init__(self, writePriority=131, *args, **kwargs): - FC5_Raid.__init__(self, writePriority, *args, **kwargs) - - self.levelMap.update({"RAID10": "RAID10", "10": "RAID10"}) - - def _getParser(self): - op = FC5_Raid._getParser(self) - op.add_option("--encrypted", action="store_true", default=False) - op.add_option("--passphrase") - return op - -class F7_Raid(FC5_Raid): - removedKeywords = FC5_Raid.removedKeywords - removedAttrs = FC5_Raid.removedAttrs - - def __init__(self, writePriority=131, *args, **kwargs): - FC5_Raid.__init__(self, writePriority, *args, **kwargs) - - self.levelMap.update({"RAID10": "RAID10", "10": "RAID10"}) - -class F9_Raid(F7_Raid): - removedKeywords = F7_Raid.removedKeywords - removedAttrs = F7_Raid.removedAttrs - - def _getParser(self): - op = F7_Raid._getParser(self) - op.add_option("--bytes-per-inode", deprecated=1) - op.add_option("--fsprofile") - op.add_option("--encrypted", action="store_true", default=False) - op.add_option("--passphrase") - return op - -class F12_Raid(F9_Raid): - removedKeywords = F9_Raid.removedKeywords - removedAttrs = F9_Raid.removedAttrs - - def _getParser(self): - op = F9_Raid._getParser(self) - op.add_option("--escrowcert") - op.add_option("--backuppassphrase", action="store_true", default=False) - return op - -class F13_Raid(F12_Raid): - removedKeywords = F12_Raid.removedKeywords - removedAttrs = F12_Raid.removedAttrs - - def __init__(self, writePriority=131, *args, **kwargs): - F12_Raid.__init__(self, writePriority, *args, **kwargs) - - self.levelMap.update({"RAID4": "RAID4", "4": "RAID4"}) - -class F14_Raid(F13_Raid): - removedKeywords = F13_Raid.removedKeywords - removedAttrs = F13_Raid.removedAttrs - - def _getParser(self): - op = F13_Raid._getParser(self) - op.remove_option("--bytes-per-inode") - return op - -class F15_Raid(F14_Raid): - removedKeywords = F14_Raid.removedKeywords - removedAttrs = F14_Raid.removedAttrs - - def _getParser(self): - op = F14_Raid._getParser(self) - op.add_option("--label") - return op diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/reboot.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/reboot.py deleted file mode 100644 index 391af14..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/reboot.py +++ /dev/null @@ -1,79 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2005, 2006, 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.constants import * -from pykickstart.errors import * -from pykickstart.options import * - -class FC3_Reboot(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.action = kwargs.get("action", None) - - def __str__(self): - retval = KickstartCommand.__str__(self) - - if self.action == KS_REBOOT: - retval += "# Reboot after installation\nreboot\n" - elif self.action == KS_SHUTDOWN: - retval += "# Shutdown after installation\nshutdown\n" - - return retval - - def parse(self, args): - if self.currentCmd == "reboot": - self.action = KS_REBOOT - else: - self.action = KS_SHUTDOWN - - return self - -class FC6_Reboot(FC3_Reboot): - removedKeywords = FC3_Reboot.removedKeywords - removedAttrs = FC3_Reboot.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - FC3_Reboot.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - - self.eject = kwargs.get("eject", False) - - def __str__(self): - retval = FC3_Reboot.__str__(self).rstrip() - - if self.eject: - retval += " --eject" - - return retval + "\n" - - def _getParser(self): - op = KSOptionParser() - op.add_option("--eject", dest="eject", action="store_true", - default=False) - return op - - def parse(self, args): - FC3_Reboot.parse(self, args) - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - self._setToSelf(self.op, opts) - return self diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/repo.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/repo.py deleted file mode 100644 index b673982..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/repo.py +++ /dev/null @@ -1,249 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2007, 2008, 2009 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.constants import * -from pykickstart.errors import * -from pykickstart.options import * - -import gettext -import warnings -_ = lambda x: gettext.ldgettext("pykickstart", x) - -class FC6_RepoData(BaseData): - removedKeywords = BaseData.removedKeywords - removedAttrs = BaseData.removedAttrs - - def __init__(self, *args, **kwargs): - BaseData.__init__(self, *args, **kwargs) - self.baseurl = kwargs.get("baseurl", "") - self.mirrorlist = kwargs.get("mirrorlist", None) - self.name = kwargs.get("name", "") - - def __eq__(self, y): - return self.name == y.name - - def _getArgsAsStr(self): - retval = "" - - if self.baseurl: - retval += "--baseurl=%s" % self.baseurl - elif self.mirrorlist: - retval += "--mirrorlist=%s" % self.mirrorlist - - return retval - - def __str__(self): - retval = BaseData.__str__(self) - retval += "repo --name=\"%s\" %s\n" % (self.name, self._getArgsAsStr()) - return retval - -class F8_RepoData(FC6_RepoData): - removedKeywords = FC6_RepoData.removedKeywords - removedAttrs = FC6_RepoData.removedAttrs - - def __init__(self, *args, **kwargs): - FC6_RepoData.__init__(self, *args, **kwargs) - self.cost = kwargs.get("cost", None) - self.includepkgs = kwargs.get("includepkgs", []) - self.excludepkgs = kwargs.get("excludepkgs", []) - - def _getArgsAsStr(self): - retval = FC6_RepoData._getArgsAsStr(self) - - if self.cost: - retval += " --cost=%s" % self.cost - if self.includepkgs: - retval += " --includepkgs=\"%s\"" % ",".join(self.includepkgs) - if self.excludepkgs: - retval += " --excludepkgs=\"%s\"" % ",".join(self.excludepkgs) - - return retval - -class F11_RepoData(F8_RepoData): - removedKeywords = F8_RepoData.removedKeywords - removedAttrs = F8_RepoData.removedAttrs - - def __init__(self, *args, **kwargs): - F8_RepoData.__init__(self, *args, **kwargs) - self.ignoregroups = kwargs.get("ignoregroups", None) - - def _getArgsAsStr(self): - retval = F8_RepoData._getArgsAsStr(self) - - if self.ignoregroups: - retval += " --ignoregroups=true" - return retval - -class F13_RepoData(F11_RepoData): - removedKeywords = F11_RepoData.removedKeywords - removedAttrs = F11_RepoData.removedAttrs - - def __init__(self, *args, **kwargs): - F11_RepoData.__init__(self, *args, **kwargs) - self.proxy = kwargs.get("proxy", "") - - def _getArgsAsStr(self): - retval = F11_RepoData._getArgsAsStr(self) - - if self.proxy: - retval += " --proxy=\"%s\"" % self.proxy - - return retval - -class F14_RepoData(F13_RepoData): - removedKeywords = F13_RepoData.removedKeywords - removedAttrs = F13_RepoData.removedAttrs - - def __init__(self, *args, **kwargs): - F13_RepoData.__init__(self, *args, **kwargs) - self.noverifyssl = kwargs.get("noverifyssl", False) - - def _getArgsAsStr(self): - retval = F13_RepoData._getArgsAsStr(self) - - if self.noverifyssl: - retval += " --noverifyssl" - - return retval - -RHEL6_RepoData = F14_RepoData - -F15_RepoData = F14_RepoData - -class FC6_Repo(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - urlRequired = True - - def __init__(self, writePriority=0, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - - self.repoList = kwargs.get("repoList", []) - - def __str__(self): - retval = "" - for repo in self.repoList: - retval += repo.__str__() - - return retval - - def _getParser(self): - op = KSOptionParser() - op.add_option("--name", dest="name", required=1) - op.add_option("--baseurl") - op.add_option("--mirrorlist") - return op - - def parse(self, args): - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - - if len(extra) != 0: - mapping = {"command": "repo", "options": extra} - raise KickstartValueError (formatErrorMsg(self.lineno, msg=_("Unexpected arguments to %(command)s command: %(options)s") % mapping)) - - # This is lame, but I can't think of a better way to make sure only - # one of these two is specified. - if opts.baseurl and opts.mirrorlist: - raise KickstartValueError (formatErrorMsg(self.lineno, msg=_("Only one of --baseurl and --mirrorlist may be specified for repo command."))) - - if self.urlRequired and not opts.baseurl and not opts.mirrorlist: - raise KickstartValueError (formatErrorMsg(self.lineno, msg=_("One of --baseurl or --mirrorlist must be specified for repo command."))) - - rd = self.handler.RepoData() - self._setToObj(self.op, opts, rd) - rd.lineno = self.lineno - - # Check for duplicates in the data list. - if rd in self.dataList(): - warnings.warn(_("A repo with the name %s has already been defined.") % rd.name) - - return rd - - def dataList(self): - return self.repoList - -class F8_Repo(FC6_Repo): - removedKeywords = FC6_Repo.removedKeywords - removedAttrs = FC6_Repo.removedAttrs - - def __str__(self): - retval = "" - for repo in self.repoList: - retval += repo.__str__() - - return retval - - def _getParser(self): - def list_cb (option, opt_str, value, parser): - for d in value.split(','): - parser.values.ensure_value(option.dest, []).append(d) - - op = FC6_Repo._getParser(self) - op.add_option("--cost", action="store", type="int") - op.add_option("--excludepkgs", action="callback", callback=list_cb, - nargs=1, type="string") - op.add_option("--includepkgs", action="callback", callback=list_cb, - nargs=1, type="string") - return op - - def methodToRepo(self): - if not self.handler.method.url: - raise KickstartError (formatErrorMsg(self.handler.method.lineno, msg=_("Method must be a url to be added to the repo list."))) - reponame = "ks-method-url" - repourl = self.handler.method.url - rd = self.handler.RepoData(name=reponame, baseurl=repourl) - return rd - -class F11_Repo(F8_Repo): - removedKeywords = F8_Repo.removedKeywords - removedAttrs = F8_Repo.removedAttrs - - def _getParser(self): - op = F8_Repo._getParser(self) - op.add_option("--ignoregroups", action="store", type="ksboolean") - return op - -class F13_Repo(F11_Repo): - removedKeywords = F11_Repo.removedKeywords - removedAttrs = F11_Repo.removedAttrs - - def _getParser(self): - op = F11_Repo._getParser(self) - op.add_option("--proxy") - return op - -class F14_Repo(F13_Repo): - removedKeywords = F13_Repo.removedKeywords - removedAttrs = F13_Repo.removedAttrs - - def _getParser(self): - op = F13_Repo._getParser(self) - op.add_option("--noverifyssl", action="store_true", default=False) - return op - -RHEL6_Repo = F14_Repo - -class F15_Repo(F14_Repo): - removedKeywords = F14_Repo.removedKeywords - removedAttrs = F14_Repo.removedAttrs - - urlRequired = False diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/rescue.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/rescue.py deleted file mode 100644 index 682fefa..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/rescue.py +++ /dev/null @@ -1,68 +0,0 @@ -# -# Alexander Todorov -# -# Copyright 2008 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.errors import * -from pykickstart.options import * - -import gettext -_ = lambda x: gettext.ldgettext("pykickstart", x) - -class F10_Rescue(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - - self.rescue = False - self.nomount = kwargs.get("nomount", False) - self.romount = kwargs.get("romount", False) - - def __str__(self): - retval = KickstartCommand.__str__(self) - - if self.rescue: - retval += "rescue" - - if self.nomount: - retval += " --nomount" - if self.romount: - retval += " --romount" - - retval = "# Start rescue mode\n%s\n" % retval - - return retval - - def _getParser(self): - op = KSOptionParser() - op.add_option("--nomount", dest="nomount", action="store_true", default=False) - op.add_option("--romount", dest="romount", action="store_true", default=False) - return op - - def parse(self, args): - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - - if opts.nomount and opts.romount: - raise KickstartValueError (formatErrorMsg(self.lineno, msg=_("Only one of --nomount and --romount may be specified for rescue command."))) - - self._setToSelf(self.op, opts) - self.rescue = True - return self diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/rootpw.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/rootpw.py deleted file mode 100644 index 4237db8..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/rootpw.py +++ /dev/null @@ -1,93 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2005, 2006, 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.errors import * -from pykickstart.options import * - -import gettext -_ = lambda x: gettext.ldgettext("pykickstart", x) - -class FC3_RootPw(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - - self.isCrypted = kwargs.get("isCrypted", False) - self.password = kwargs.get("password", "") - - def _getArgsAsStr(self): - retval = "" - - if self.isCrypted: - retval += " --iscrypted" - - return retval - - def __str__(self): - retval = KickstartCommand.__str__(self) - - if self.password != "": - retval += "# Root password\nrootpw%s %s\n" % (self._getArgsAsStr(), self.password) - - return retval - - def _getParser(self): - op = KSOptionParser() - op.add_option("--iscrypted", dest="isCrypted", action="store_true", - default=False) - return op - - def parse(self, args): - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - self._setToSelf(self.op, opts) - - if len(extra) != 1: - raise KickstartValueError ( formatErrorMsg(self.lineno, msg=_("A single argument is expected for the %s command") % "rootpw")) - - self.password = extra[0] - return self - -class F8_RootPw(FC3_RootPw): - removedKeywords = FC3_RootPw.removedKeywords - removedAttrs = FC3_RootPw.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - FC3_RootPw.__init__(self, writePriority, *args, **kwargs) - self.lock = kwargs.get("lock", False) - - def _getArgsAsStr(self): - retval = FC3_RootPw._getArgsAsStr(self) - - if self.lock: - retval += " --lock" - - if not self.isCrypted: - retval += " --plaintext" - - return retval - - def _getParser(self): - op = FC3_RootPw._getParser(self) - op.add_option("--lock", dest="lock", action="store_true", default=False) - op.add_option("--plaintext", dest="isCrypted", action="store_false") - return op diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/selinux.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/selinux.py deleted file mode 100644 index 9f8059c..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/selinux.py +++ /dev/null @@ -1,64 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2005, 2006, 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.constants import * -from pykickstart.options import * - -class FC3_SELinux(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - - self.selinux = kwargs.get("selinux", None) - - def __str__(self): - retval = KickstartCommand.__str__(self) - - if not retval and self.selinux is None: - return "" - - retval += "# SELinux configuration\n" - - if self.selinux == SELINUX_DISABLED: - retval += "selinux --disabled\n" - elif self.selinux == SELINUX_ENFORCING: - retval += "selinux --enforcing\n" - elif self.selinux == SELINUX_PERMISSIVE: - retval += "selinux --permissive\n" - - return retval - - def _getParser(self): - op = KSOptionParser() - op.add_option("--disabled", dest="selinux", action="store_const", - const=SELINUX_DISABLED) - op.add_option("--enforcing", dest="selinux", action="store_const", - const=SELINUX_ENFORCING) - op.add_option("--permissive", dest="selinux", action="store_const", - const=SELINUX_PERMISSIVE) - return op - - def parse(self, args): - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - self._setToSelf(self.op, opts) - return self diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/services.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/services.py deleted file mode 100644 index f640822..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/services.py +++ /dev/null @@ -1,71 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.errors import * -from pykickstart.options import * - -import gettext -_ = lambda x: gettext.ldgettext("pykickstart", x) - -class FC6_Services(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - - self.disabled = kwargs.get("disabled", []) - self.enabled = kwargs.get("enabled", []) - - def __str__(self): - retval = KickstartCommand.__str__(self) - args = "" - - if len(self.disabled) > 0: - args += " --disabled=\"%s\"" % ",".join(self.disabled) - if len(self.enabled) > 0: - args += " --enabled=\"%s\"" % ",".join(self.enabled) - - if args != "": - retval += "# System services\nservices%s\n" % args - - return retval - - def _getParser(self): - def services_cb (option, opt_str, value, parser): - for d in value.split(','): - parser.values.ensure_value(option.dest, []).append(d.strip()) - - op = KSOptionParser() - op.add_option("--disabled", dest="disabled", action="callback", - callback=services_cb, nargs=1, type="string") - op.add_option("--enabled", dest="enabled", action="callback", - callback=services_cb, nargs=1, type="string") - return op - - def parse(self, args): - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - self._setToSelf(self.op, opts) - - if len(self.disabled) == 0 and len(self.enabled) == 0: - raise KickstartParseError (formatErrorMsg(self.lineno, msg=_("One of --disabled or --enabled must be provided."))) - - return self diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/skipx.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/skipx.py deleted file mode 100644 index 2067df8..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/skipx.py +++ /dev/null @@ -1,54 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2005, 2006, 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.errors import * -from pykickstart.options import * - -import gettext -_ = lambda x: gettext.ldgettext("pykickstart", x) - -class FC3_SkipX(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - self.skipx = kwargs.get("skipx", False) - - def __str__(self): - retval = KickstartCommand.__str__(self) - - if self.skipx: - retval += "# Do not configure the X Window System\nskipx\n" - - return retval - - def _getParser(self): - op = KSOptionParser() - return op - - def parse(self, args): - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - if len(extra) > 0: - raise KickstartValueError (formatErrorMsg(self.lineno, msg=_("Kickstart command %s does not take any arguments") % "skipx")) - - self.skipx = True - return self diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/sshpw.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/sshpw.py deleted file mode 100644 index 759dbeb..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/sshpw.py +++ /dev/null @@ -1,105 +0,0 @@ -# -# Peter Jones -# -# Copyright 2009 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.errors import * -from pykickstart.options import * - -import gettext -_ = lambda x: gettext.ldgettext("pykickstart", x) - -class F13_SshPwData(BaseData): - removedKeywords = BaseData.removedKeywords - removedAttrs = BaseData.removedAttrs - - def __init__(self, *args, **kwargs): - BaseData.__init__(self, *args, **kwargs) - self.username = kwargs.get("username", None) - self.isCrypted = kwargs.get("isCrypted", False) - self.password = kwargs.get("password", "") - self.lock = kwargs.get("lock", False) - - def __eq__(self, y): - return self.username == y.username - - def __str__(self): - retval = BaseData.__str__(self) - - retval += "sshpw" - retval += self._getArgsAsStr() + '\n' - - return retval - - def _getArgsAsStr(self): - retval = "" - - retval += " --username=%s" % self.username - if self.lock: - retval += " --lock" - if self.isCrypted: - retval += " --iscrypted" - else: - retval += " --plaintext" - - retval += " %s" % self.password - return retval - -class F13_SshPw(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - - self.sshUserList = kwargs.get("sshUserList", []) - - def __str__(self): - retval = "" - for user in self.sshUserList: - retval += user.__str__() - - return retval - - def _getParser(self): - op = KSOptionParser() - op.add_option("--username", dest="username", required=True) - op.add_option("--iscrypted", dest="isCrypted", action="store_true", - default=False) - op.add_option("--plaintext", dest="isCrypted", action="store_false") - op.add_option("--lock", dest="lock", action="store_true", default=False) - return op - - def parse(self, args): - ud = self.handler.SshPwData() - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - self._setToObj(self.op, opts, ud) - ud.lineno = self.lineno - - if len(extra) != 1: - raise KickstartValueError (formatErrorMsg(self.lineno, msg=_("A single argument is expected for the %s command") % "sshpw")) - ud.password = extra[0] - - if ud in self.dataList(): - warnings.warn(_("An ssh user with the name %s has already been defined.") % ud.name) - - return ud - - def dataList(self): - return self.sshUserList diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/timezone.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/timezone.py deleted file mode 100644 index 06d09d6..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/timezone.py +++ /dev/null @@ -1,86 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2005, 2006, 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.errors import * -from pykickstart.options import * - -import gettext -_ = lambda x: gettext.ldgettext("pykickstart", x) - -class FC3_Timezone(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - - self.isUtc = kwargs.get("isUtc", False) - self.timezone = kwargs.get("timezone", "") - - def __str__(self): - retval = KickstartCommand.__str__(self) - - if self.timezone != "": - if self.isUtc: - utc = "--utc" - else: - utc = "" - - retval += "# System timezone\ntimezone %s %s\n" %(utc, self.timezone) - - return retval - - def _getParser(self): - op = KSOptionParser() - op.add_option("--utc", dest="isUtc", action="store_true", default=False) - return op - - def parse(self, args): - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - self._setToSelf(self.op, opts) - - if len(extra) != 1: - raise KickstartValueError (formatErrorMsg(self.lineno, msg=_("A single argument is expected for the %s command") % "timezone")) - - self.timezone = extra[0] - return self - -class FC6_Timezone(FC3_Timezone): - removedKeywords = FC3_Timezone.removedKeywords - removedAttrs = FC3_Timezone.removedAttrs - - def __str__(self): - retval = KickstartCommand.__str__(self) - - if self.timezone != "": - if self.isUtc: - utc = "--isUtc" - else: - utc = "" - - retval += "# System timezone\ntimezone %s %s\n" %(utc, self.timezone) - - return retval - - def _getParser(self): - op = FC3_Timezone._getParser(self) - op.add_option("--utc", "--isUtc", dest="isUtc", action="store_true", default=False) - return op diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/updates.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/updates.py deleted file mode 100644 index 6e18af9..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/updates.py +++ /dev/null @@ -1,60 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.errors import * -from pykickstart.options import * - -import gettext -_ = lambda x: gettext.ldgettext("pykickstart", x) - -class F7_Updates(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - self.url = kwargs.get("url", "") - - def __str__(self): - retval = KickstartCommand.__str__(self) - - if self.url == "floppy": - retval += "updates\n" - elif self.url != "": - retval += "updates %s\n" % self.url - - return retval - - def _getParser(self): - op = KSOptionParser() - return op - - def parse(self, args): - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - - if len(extra) > 1: - raise KickstartValueError (formatErrorMsg(self.lineno, msg=_("Kickstart command %s only takes one argument") % "updates")) - elif len(extra) == 0: - self.url = "floppy" - else: - self.url = extra[0] - - return self diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/upgrade.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/upgrade.py deleted file mode 100644 index 5f44ea1..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/upgrade.py +++ /dev/null @@ -1,106 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2005, 2006, 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.errors import * -from pykickstart.options import * - -import gettext -_ = lambda x: gettext.ldgettext("pykickstart", x) - -class FC3_Upgrade(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.upgrade = kwargs.get("upgrade", None) - self.op = self._getParser() - - def __str__(self): - retval = KickstartCommand.__str__(self) - - if self.upgrade is None: - return retval - - if self.upgrade: - retval += "# Upgrade existing installation\nupgrade\n" - else: - retval += "# Install OS instead of upgrade\ninstall\n" - - return retval - - def _getParser(self): - op = KSOptionParser() - return op - - def parse(self, args): - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - - if len(extra) > 0: - raise KickstartValueError (formatErrorMsg(self.lineno, msg=_("Kickstart command %s does not take any arguments") % "upgrade")) - - if self.currentCmd == "upgrade": - self.upgrade = True - else: - self.upgrade = False - - return self - -class F11_Upgrade(FC3_Upgrade): - removedKeywords = FC3_Upgrade.removedKeywords - removedAttrs = FC3_Upgrade.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - FC3_Upgrade.__init__(self, writePriority, *args, **kwargs) - - self.op = self._getParser() - self.root_device = kwargs.get("root_device", None) - - def __str__(self): - if self.upgrade and (self.root_device is not None): - retval = KickstartCommand.__str__(self) - retval += "# Upgrade existing installation\nupgrade --root-device=%s\n" % self.root_device - else: - retval = FC3_Upgrade.__str__(self) - - return retval - - def _getParser(self): - op = KSOptionParser() - op.add_option("--root-device", dest="root_device") - return op - - def parse(self, args): - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - - if len(extra) > 0: - raise KickstartValueError (formatErrorMsg(self.lineno, msg=_("Kickstart command %s does not take any arguments") % "upgrade")) - - if (opts.root_device is not None) and (opts.root_device == ""): - raise KickstartValueError (formatErrorMsg(self.lineno, msg=_("Kickstart command %s does not accept empty parameter %s") % ("upgrade", "--root-device"))) - else: - self.root_device = opts.root_device - - if self.currentCmd == "upgrade": - self.upgrade = True - else: - self.upgrade = False - - return self diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/user.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/user.py deleted file mode 100644 index 189dc75..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/user.py +++ /dev/null @@ -1,173 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.constants import * -from pykickstart.errors import * -from pykickstart.options import * - -import gettext -import warnings -_ = lambda x: gettext.ldgettext("pykickstart", x) - -class FC6_UserData(BaseData): - removedKeywords = BaseData.removedKeywords - removedAttrs = BaseData.removedAttrs - - def __init__(self, *args, **kwargs): - BaseData.__init__(self, *args, **kwargs) - self.groups = kwargs.get("groups", []) - self.homedir = kwargs.get("homedir", "") - self.isCrypted = kwargs.get("isCrypted", False) - self.name = kwargs.get("name", "") - self.password = kwargs.get("password", "") - self.shell = kwargs.get("shell", "") - self.uid = kwargs.get("uid", None) - - def __eq__(self, y): - return self.name == y.name - - def __str__(self): - retval = BaseData.__str__(self) - - if self.uid != "": - retval += "user" - retval += self._getArgsAsStr() + "\n" - - return retval - - def _getArgsAsStr(self): - retval = "" - - if len(self.groups) > 0: - retval += " --groups=%s" % ",".join(self.groups) - if self.homedir: - retval += " --homedir=%s" % self.homedir - if self.name: - retval += " --name=%s" % self.name - if self.password: - retval += " --password=%s" % self.password - if self.isCrypted: - retval += " --iscrypted" - if self.shell: - retval += " --shell=%s" % self.shell - if self.uid: - retval += " --uid=%s" % self.uid - - return retval - -class F8_UserData(FC6_UserData): - removedKeywords = FC6_UserData.removedKeywords - removedAttrs = FC6_UserData.removedAttrs - - def __init__(self, *args, **kwargs): - FC6_UserData.__init__(self, *args, **kwargs) - self.lock = kwargs.get("lock", False) - - def _getArgsAsStr(self): - retval = FC6_UserData._getArgsAsStr(self) - - if self.lock: - retval += " --lock" - - return retval - -class F12_UserData(F8_UserData): - removedKeywords = F8_UserData.removedKeywords - removedAttrs = F8_UserData.removedAttrs - - def __init__(self, *args, **kwargs): - F8_UserData.__init__(self, *args, **kwargs) - self.gecos = kwargs.get("gecos", "") - - def _getArgsAsStr(self): - retval = F8_UserData._getArgsAsStr(self) - - if self.gecos: - retval += " --gecos=\"%s\"" % (self.gecos,) - - return retval - -class FC6_User(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - - self.userList = kwargs.get("userList", []) - - def __str__(self): - retval = "" - for user in self.userList: - retval += user.__str__() - - return retval - - def _getParser(self): - def groups_cb (option, opt_str, value, parser): - for d in value.split(','): - parser.values.ensure_value(option.dest, []).append(d) - - op = KSOptionParser() - op.add_option("--groups", dest="groups", action="callback", - callback=groups_cb, nargs=1, type="string") - op.add_option("--homedir") - op.add_option("--iscrypted", dest="isCrypted", action="store_true", - default=False) - op.add_option("--name", required=1) - op.add_option("--password") - op.add_option("--shell") - op.add_option("--uid", type="int") - return op - - def parse(self, args): - ud = self.handler.UserData() - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - self._setToObj(self.op, opts, ud) - ud.lineno = self.lineno - - # Check for duplicates in the data list. - if ud in self.dataList(): - warnings.warn(_("A user with the name %s has already been defined.") % ud.name) - - return ud - - def dataList(self): - return self.userList - -class F8_User(FC6_User): - removedKeywords = FC6_User.removedKeywords - removedAttrs = FC6_User.removedAttrs - - def _getParser(self): - op = FC6_User._getParser(self) - op.add_option("--lock", action="store_true", default=False) - op.add_option("--plaintext", dest="isCrypted", action="store_false") - return op - -class F12_User(F8_User): - removedKeywords = F8_User.removedKeywords - removedAttrs = F8_User.removedAttrs - - def _getParser(self): - op = F8_User._getParser(self) - op.add_option("--gecos", type="string") - return op diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/vnc.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/vnc.py deleted file mode 100644 index 200ccfb..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/vnc.py +++ /dev/null @@ -1,114 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2005, 2006, 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.errors import * -from pykickstart.options import * - -class FC3_Vnc(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - - self.enabled = kwargs.get("enabled", False) - self.password = kwargs.get("password", "") - self.connect = kwargs.get("connect", "") - - def __str__(self): - retval = KickstartCommand.__str__(self) - - if not self.enabled: - return retval - - retval += "vnc" - - if self.connect != "": - retval += " --connect=%s" % self.connect - if self.password != "": - retval += " --password=%s" % self.password - - return retval + "\n" - - def _getParser(self): - op = KSOptionParser() - op.add_option("--connect") - op.add_option("--password", dest="password") - return op - - def parse(self, args): - self.enabled = True - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - self._setToSelf(self.op, opts) - return self - -class FC6_Vnc(FC3_Vnc): - removedKeywords = FC3_Vnc.removedKeywords + ["connect"] - removedAttrs = FC3_Vnc.removedAttrs + ["connect"] - - def __init__(self, writePriority=0, host="", port="", *args, **kwargs): - FC3_Vnc.__init__(self, writePriority, *args, **kwargs) - self.deleteRemovedAttrs() - - self.host = kwargs.get("host", "") - self.port = kwargs.get("port", "") - - def __str__(self): - retval = KickstartCommand.__str__(self) - - if not self.enabled: - return retval - - retval += "vnc" - - if self.host != "": - retval += " --host=%s" % self.host - - if self.port != "": - retval += " --port=%s" % self.port - if self.password != "": - retval += " --password=%s" % self.password - - return retval + "\n" - - def _getParser(self): - def connect_cb (option, opt_str, value, parser): - cargs = value.split(":") - parser.values.ensure_value("host", cargs[0]) - - if len(cargs) > 1: - parser.values.ensure_value("port", cargs[1]) - - op = FC3_Vnc._getParser(self) - op.add_option("--connect", action="callback", callback=connect_cb, - nargs=1, type="string") - op.add_option("--host", dest="host") - op.add_option("--port", dest="port") - return op - -class F9_Vnc(FC6_Vnc): - removedKeywords = FC6_Vnc.removedKeywords - removedAttrs = FC6_Vnc.removedAttrs - - def _getParser(self): - op = FC6_Vnc._getParser(self) - op.remove_option("--connect") - return op diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/volgroup.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/volgroup.py deleted file mode 100644 index 255c47f..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/volgroup.py +++ /dev/null @@ -1,102 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2005, 2006, 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.options import * - -import gettext -import warnings -_ = lambda x: gettext.ldgettext("pykickstart", x) - -class FC3_VolGroupData(BaseData): - removedKeywords = BaseData.removedKeywords - removedAttrs = BaseData.removedAttrs - - def __init__(self, *args, **kwargs): - BaseData.__init__(self, *args, **kwargs) - self.format = kwargs.get("format", True) - self.pesize = kwargs.get("pesize", 32768) - self.preexist = kwargs.get("preexist", False) - self.vgname = kwargs.get("vgname", "") - self.physvols = kwargs.get("physvols", []) - - def __eq__(self, y): - return self.vgname == y.vgname - - def __str__(self): - retval = BaseData.__str__(self) - retval += "volgroup %s" % self.vgname - - if not self.format: - retval += " --noformat" - if self.pesize != 0: - retval += " --pesize=%d" % self.pesize - if self.preexist: - retval += " --useexisting" - - return retval + " " + " ".join(self.physvols) + "\n" - -class FC3_VolGroup(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=132, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - - self.vgList = kwargs.get("vgList", []) - - def __str__(self): - retval = "" - for vg in self.vgList: - retval += vg.__str__() - - return retval - - def _getParser(self): - # Have to be a little more complicated to set two values. - def vg_cb (option, opt_str, value, parser): - parser.values.format = False - parser.values.preexist = True - - op = KSOptionParser() - op.add_option("--noformat", action="callback", callback=vg_cb, - dest="format", default=True, nargs=0) - op.add_option("--pesize", dest="pesize", type="int", nargs=1, - default=32768) - op.add_option("--useexisting", dest="preexist", action="store_true", - default=False) - return op - - def parse(self, args): - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - vg = self.handler.VolGroupData() - self._setToObj(self.op, opts, vg) - vg.lineno = self.lineno - vg.vgname = extra[0] - vg.physvols = extra[1:] - - # Check for duplicates in the data list. - if vg in self.dataList(): - warnings.warn(_("A volgroup with the name %s has already been defined.") % vg.vgname) - - return vg - - def dataList(self): - return self.vgList diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/xconfig.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/xconfig.py deleted file mode 100644 index bbde49f..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/xconfig.py +++ /dev/null @@ -1,184 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2005, 2006, 2007, 2008 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.errors import * -from pykickstart.options import * - -import gettext -_ = lambda x: gettext.ldgettext("pykickstart", x) - -class FC3_XConfig(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=0, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - - self.card = kwargs.get("card", "") - self.defaultdesktop = kwargs.get("defaultdesktop", "") - self.depth = kwargs.get("depth", 0) - self.hsync = kwargs.get("hsync", "") - self.monitor = kwargs.get("monitor", "") - self.noProbe = kwargs.get("noProbe", False) - self.resolution = kwargs.get("resolution", "") - self.server = kwargs.get("server", "") - self.startX = kwargs.get("startX", False) - self.videoRam = kwargs.get("videoRam", "") - self.vsync = kwargs.get("vsync", "") - - def __str__(self): - retval = KickstartCommand.__str__(self) - - if self.card != "": - retval += " --card=%s" % self.card - if self.defaultdesktop != "": - retval += " --defaultdesktop=%s" % self.defaultdesktop - if self.depth != 0: - retval += " --depth=%d" % self.depth - if self.hsync != "": - retval += " --hsync=%s" % self.hsync - if self.monitor != "": - retval += " --monitor=%s" % self.monitor - if self.noProbe: - retval += " --noprobe" - if self.resolution != "": - retval += " --resolution=%s" % self.resolution - if self.server != "": - retval += " --server=%s" % self.server - if self.startX: - retval += " --startxonboot" - if self.videoRam != "": - retval += " --videoram=%s" % self.videoRam - if self.vsync != "": - retval += " --vsync=%s" % self.vsync - - if retval != "": - retval = "# X Window System configuration information\nxconfig %s\n" % retval - - return retval - - def _getParser(self): - op = KSOptionParser() - op.add_option("--card") - op.add_option("--defaultdesktop") - op.add_option("--depth", action="store", type="int", nargs=1) - op.add_option("--hsync") - op.add_option("--monitor") - op.add_option("--noprobe", dest="noProbe", action="store_true", - default=False) - op.add_option("--resolution") - op.add_option("--server") - op.add_option("--startxonboot", dest="startX", action="store_true", - default=False) - op.add_option("--videoram", dest="videoRam") - op.add_option("--vsync") - return op - - def parse(self, args): - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - if extra: - mapping = {"command": "xconfig", "options": extra} - raise KickstartValueError (formatErrorMsg(self.lineno, msg=_("Unexpected arguments to %(command)s command: %(options)s") % mapping)) - - self._setToSelf(self.op, opts) - return self - -class FC6_XConfig(FC3_XConfig): - removedKeywords = FC3_XConfig.removedKeywords + ["card", "hsync", "monitor", "noProbe", "vsync"] - removedAttrs = FC3_XConfig.removedAttrs + ["card", "hsync", "monitor", "noProbe", "vsync"] - - def __init__(self, writePriority=0, *args, **kwargs): - FC3_XConfig.__init__(self, writePriority, *args, **kwargs) - self.deleteRemovedAttrs() - - self.driver = kwargs.get("driver", "") - - def __str__(self): - retval = KickstartCommand.__str__(self) - - if hasattr(self, "driver") and self.driver != "": - retval += " --driver=%s" % self.driver - if self.defaultdesktop != "": - retval += " --defaultdesktop=%s" % self.defaultdesktop - if self.depth != 0: - retval += " --depth=%d" % self.depth - if hasattr(self, "resolution") and self.resolution != "": - retval += " --resolution=%s" % self.resolution - if self.startX: - retval += " --startxonboot" - if hasattr(self, "videoRam") and self.videoRam != "": - retval += " --videoram=%s" % self.videoRam - - if retval != "": - retval = "# X Window System configuration information\nxconfig %s\n" % retval - - return retval - - def _getParser(self): - op = FC3_XConfig._getParser(self) - op.add_option("--card", deprecated=1) - op.add_option("--driver", dest="driver") - op.add_option("--hsync", deprecated=1) - op.add_option("--monitor", deprecated=1) - op.add_option("--noprobe", deprecated=1) - op.add_option("--vsync", deprecated=1) - return op - -class F9_XConfig(FC6_XConfig): - removedKeywords = FC6_XConfig.removedKeywords - removedAttrs = FC6_XConfig.removedAttrs - - def _getParser(self): - op = FC6_XConfig._getParser(self) - op.remove_option("--card") - op.remove_option("--hsync") - op.remove_option("--monitor") - op.remove_option("--noprobe") - op.remove_option("--vsync") - return op - -class F10_XConfig(F9_XConfig): - removedKeywords = F9_XConfig.removedKeywords + ["driver", "resolution", "videoRam"] - removedAttrs = F9_XConfig.removedAttrs + ["driver", "resolution", "videoRam"] - - def __init__(self, writePriority=0, *args, **kwargs): - F9_XConfig.__init__(self, writePriority, *args, **kwargs) - self.deleteRemovedAttrs() - - def _getParser(self): - op = F9_XConfig._getParser(self) - op.add_option("--driver", deprecated=1) - op.add_option("--depth", deprecated=1) - op.add_option("--resolution", deprecated=1) - op.add_option("--videoram", deprecated=1) - return op - -class F14_XConfig(F10_XConfig): - removedKeywords = F10_XConfig.removedKeywords - removedAttrs = F10_XConfig.removedAttrs - - def _getParser(self): - op = F10_XConfig._getParser(self) - op.remove_option("--driver") - op.remove_option("--depth") - op.remove_option("--resolution") - op.remove_option("--videoram") - return op diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/zerombr.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/zerombr.py deleted file mode 100644 index e99ea8d..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/zerombr.py +++ /dev/null @@ -1,69 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2005, 2006, 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -import warnings - -from pykickstart.base import * -from pykickstart.options import * - -import gettext -_ = lambda x: gettext.ldgettext("pykickstart", x) - -class FC3_ZeroMbr(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=110, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - self.zerombr = kwargs.get("zerombr", False) - - def __str__(self): - retval = KickstartCommand.__str__(self) - - if self.zerombr: - retval += "# Clear the Master Boot Record\nzerombr\n" - - return retval - - def _getParser(self): - op = KSOptionParser() - return op - - def parse(self, args): - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - - if len(extra) > 0: - warnings.warn(_("Ignoring deprecated option on line %s: The zerombr command no longer takes any options. In future releases, this will result in a fatal error from kickstart. Please modify your kickstart file to remove any options.") % self.lineno, DeprecationWarning) - - self.zerombr = True - return self - -class F9_ZeroMbr(FC3_ZeroMbr): - removedKeywords = FC3_ZeroMbr.removedKeywords - removedAttrs = FC3_ZeroMbr.removedAttrs - - def parse(self, args): - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - - if len(extra) > 0: - raise KickstartParseError (formatErrorMsg(self.lineno, msg=_("Kickstart command %s does not take any arguments") % "zerombr")) - - self.zerombr = True - return self diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/zfcp.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/zfcp.py deleted file mode 100644 index 1ed2694..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/commands/zfcp.py +++ /dev/null @@ -1,134 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2005, 2006, 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.options import * - -import gettext -import warnings -_ = lambda x: gettext.ldgettext("pykickstart", x) - -class FC3_ZFCPData(BaseData): - removedKeywords = BaseData.removedKeywords - removedAttrs = BaseData.removedAttrs - - def __init__(self, *args, **kwargs): - BaseData.__init__(self, *args, **kwargs) - self.devnum = kwargs.get("devnum", "") - self.wwpn = kwargs.get("wwpn", "") - self.fcplun = kwargs.get("fcplun", "") - self.scsiid = kwargs.get("scsiid", "") - self.scsilun = kwargs.get("scsilun", "") - - def __eq__(self, y): - return self.devnum == y.devnum and self.wwpn == y.wwpn and \ - self.fcplun == y.fcplun and self.scsiid == y.scsiid and \ - self.scsilun == y.scsilun - - def __str__(self): - retval = BaseData.__str__(self) - retval += "zfcp" - - if self.devnum != "": - retval += " --devnum=%s" % self.devnum - if self.wwpn != "": - retval += " --wwpn=%s" % self.wwpn - if self.fcplun != "": - retval += " --fcplun=%s" % self.fcplun - if hasattr(self, "scsiid") and self.scsiid != "": - retval += " --scsiid=%s" % self.scsiid - if hasattr(self, "scsilun") and self.scsilun != "": - retval += " --scsilun=%s" % self.scsilun - - return retval + "\n" - -class F12_ZFCPData(FC3_ZFCPData): - removedKeywords = FC3_ZFCPData.removedKeywords + ["scsiid", "scsilun"] - removedAttrs = FC3_ZFCPData.removedAttrs + ["scsiid", "scsilun"] - - def __init__(self, *args, **kwargs): - FC3_ZFCPData.__init__(self, *args, **kwargs) - self.deleteRemovedAttrs() - -F14_ZFCPData = F12_ZFCPData - -class FC3_ZFCP(KickstartCommand): - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, writePriority=71, *args, **kwargs): - KickstartCommand.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - - self.zfcp = kwargs.get("zfcp", []) - - def __str__(self): - retval = "" - for zfcp in self.zfcp: - retval += zfcp.__str__() - - return retval - - def _getParser(self): - op = KSOptionParser() - op.add_option("--devnum", dest="devnum", required=1) - op.add_option("--fcplun", dest="fcplun", required=1) - op.add_option("--scsiid", dest="scsiid", required=1) - op.add_option("--scsilun", dest="scsilun", required=1) - op.add_option("--wwpn", dest="wwpn", required=1) - return op - - def parse(self, args): - zd = self.handler.ZFCPData() - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - self._setToObj(self.op, opts, zd) - zd.lineno = self.lineno - - # Check for duplicates in the data list. - if zd in self.dataList(): - warnings.warn(_("A zfcp with this information has already been defined.")) - - return zd - - def dataList(self): - return self.zfcp - -class F12_ZFCP(FC3_ZFCP): - removedKeywords = FC3_ZFCP.removedKeywords - removedAttrs = FC3_ZFCP.removedAttrs + ["scsiid", "scsilun"] - - def __init__(self, *args, **kwargs): - FC3_ZFCP.__init__(self, *args, **kwargs) - self.deleteRemovedAttrs() - - def _getParser(self): - op = FC3_ZFCP._getParser(self) - op.add_option("--scsiid", deprecated=1) - op.add_option("--scsilun", deprecated=1) - return op - -class F14_ZFCP(F12_ZFCP): - removedKeywords = F12_ZFCP.removedKeywords - removedAttrs = F12_ZFCP.removedAttrs - - def _getParser(self): - op = F12_ZFCP._getParser(self) - op.remove_option("--scsiid") - op.remove_option("--scsilun") - return op diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/constants.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/constants.py deleted file mode 100644 index 050d124..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/constants.py +++ /dev/null @@ -1,59 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2005-2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -CLEARPART_TYPE_LINUX = 0 -CLEARPART_TYPE_ALL = 1 -CLEARPART_TYPE_NONE = 2 - -DISPLAY_MODE_CMDLINE = 0 -DISPLAY_MODE_GRAPHICAL = 1 -DISPLAY_MODE_TEXT = 2 - -FIRSTBOOT_DEFAULT = 0 -FIRSTBOOT_SKIP = 1 -FIRSTBOOT_RECONFIG = 2 - -KS_MISSING_PROMPT = 0 -KS_MISSING_IGNORE = 1 - -SELINUX_DISABLED = 0 -SELINUX_ENFORCING = 1 -SELINUX_PERMISSIVE = 2 - -KS_SCRIPT_PRE = 0 -KS_SCRIPT_POST = 1 -KS_SCRIPT_TRACEBACK = 2 -KS_SCRIPT_RUN = 3 -KS_SCRIPT_UMOUNT = 4 - -KS_WAIT = 0 -KS_REBOOT = 1 -KS_SHUTDOWN = 2 - -KS_INSTKEY_SKIP = -99 - -BOOTPROTO_DHCP = "dhcp" -BOOTPROTO_BOOTP = "bootp" -BOOTPROTO_STATIC = "static" -BOOTPROTO_QUERY = "query" -BOOTPROTO_IBFT = "ibft" - -GROUP_REQUIRED = 0 -GROUP_DEFAULT = 1 -GROUP_ALL = 2 diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/errors.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/errors.py deleted file mode 100644 index a234d99..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/errors.py +++ /dev/null @@ -1,103 +0,0 @@ -# -# errors.py: Kickstart error handling. -# -# Chris Lumens -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -""" -Error handling classes and functions. - -This module exports a single function: - - formatErrorMsg - Properly formats an error message. - -It also exports several exception classes: - - KickstartError - A generic exception class. - - KickstartParseError - An exception for errors relating to parsing. - - KickstartValueError - An exception for errors relating to option - processing. - - KickstartVersionError - An exception for errors relating to unsupported - syntax versions. -""" -import gettext -_ = lambda x: gettext.ldgettext("pykickstart", x) - -def formatErrorMsg(lineno, msg=""): - """Properly format the error message msg for inclusion in an exception.""" - if msg != "": - mapping = {"lineno": lineno, "msg": msg} - return _("The following problem occurred on line %(lineno)s of the kickstart file:\n\n%(msg)s\n") % mapping - else: - return _("There was a problem reading from line %s of the kickstart file") % lineno - -class KickstartError(Exception): - """A generic exception class for unspecific error conditions.""" - def __init__(self, val = ""): - """Create a new KickstartError exception instance with the descriptive - message val. val should be the return value of formatErrorMsg. - """ - Exception.__init__(self) - self.value = val - - def __str__ (self): - return self.value - -class KickstartParseError(KickstartError): - """An exception class for errors when processing the input file, such as - unknown options, commands, or sections. - """ - def __init__(self, msg): - """Create a new KickstartParseError exception instance with the - descriptive message val. val should be the return value of - formatErrorMsg. - """ - KickstartError.__init__(self, msg) - - def __str__(self): - return self.value - -class KickstartValueError(KickstartError): - """An exception class for errors when processing arguments to commands, - such as too many arguments, too few arguments, or missing required - arguments. - """ - def __init__(self, msg): - """Create a new KickstartValueError exception instance with the - descriptive message val. val should be the return value of - formatErrorMsg. - """ - KickstartError.__init__(self, msg) - - def __str__ (self): - return self.value - -class KickstartVersionError(KickstartError): - """An exception class for errors related to using an incorrect version of - kickstart syntax. - """ - def __init__(self, msg): - """Create a new KickstartVersionError exception instance with the - descriptive message val. val should be the return value of - formatErrorMsg. - """ - KickstartError.__init__(self, msg) - - def __str__ (self): - return self.value diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/__init__.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/control.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/control.py deleted file mode 100644 index 119e32f..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/control.py +++ /dev/null @@ -1,1310 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2007, 2008, 2009, 2010 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.version import * -from pykickstart.commands import * -from mic.kickstart.custom_commands.micrepo import * - -# This map is keyed on kickstart syntax version as provided by -# pykickstart.version. Within each sub-dict is a mapping from command name -# to the class that handles it. This is an onto mapping - that is, multiple -# command names can map to the same class. However, the Handler will ensure -# that only one instance of each class ever exists. -commandMap = { - FC3: { - "auth": authconfig.FC3_Authconfig, - "authconfig": authconfig.FC3_Authconfig, - "autopart": autopart.FC3_AutoPart, - "autostep": autostep.FC3_AutoStep, - "bootloader": bootloader.FC3_Bootloader, - "cdrom": method.FC3_Method, - "clearpart": clearpart.FC3_ClearPart, - "cmdline": displaymode.FC3_DisplayMode, - "device": device.FC3_Device, - "deviceprobe": deviceprobe.FC3_DeviceProbe, - "driverdisk": driverdisk.FC3_DriverDisk, - "firewall": firewall.FC3_Firewall, - "firstboot": firstboot.FC3_Firstboot, - "graphical": displaymode.FC3_DisplayMode, - "halt": reboot.FC3_Reboot, - "harddrive": method.FC3_Method, - "ignoredisk": ignoredisk.FC3_IgnoreDisk, - "install": upgrade.FC3_Upgrade, - "interactive": interactive.FC3_Interactive, - "keyboard": keyboard.FC3_Keyboard, - "lang": lang.FC3_Lang, - "langsupport": langsupport.FC3_LangSupport, - "lilo": bootloader.FC3_Bootloader, - "lilocheck": lilocheck.FC3_LiloCheck, - "logvol": logvol.FC3_LogVol, - "monitor": monitor.FC3_Monitor, - "mouse": mouse.FC3_Mouse, - "network": network.FC3_Network, - "nfs": method.FC3_Method, - "part": partition.FC3_Partition, - "partition": partition.FC3_Partition, - "poweroff": reboot.FC3_Reboot, - "raid": raid.FC3_Raid, - "reboot": reboot.FC3_Reboot, - "rootpw": rootpw.FC3_RootPw, - "selinux": selinux.FC3_SELinux, - "shutdown": reboot.FC3_Reboot, - "skipx": skipx.FC3_SkipX, - "text": displaymode.FC3_DisplayMode, - "timezone": timezone.FC3_Timezone, - "upgrade": upgrade.FC3_Upgrade, - "url": method.FC3_Method, - "vnc": vnc.FC3_Vnc, - "volgroup": volgroup.FC3_VolGroup, - "xconfig": xconfig.FC3_XConfig, - "zerombr": zerombr.FC3_ZeroMbr, - "zfcp": zfcp.FC3_ZFCP, - }, - - # based on fc3 - FC4: { - "auth": authconfig.FC3_Authconfig, - "authconfig": authconfig.FC3_Authconfig, - "autopart": autopart.FC3_AutoPart, - "autostep": autostep.FC3_AutoStep, - "bootloader": bootloader.FC4_Bootloader, - "cdrom": method.FC3_Method, - "clearpart": clearpart.FC3_ClearPart, - "cmdline": displaymode.FC3_DisplayMode, - "device": device.FC3_Device, - "deviceprobe": deviceprobe.FC3_DeviceProbe, - "driverdisk": driverdisk.FC4_DriverDisk, - "firewall": firewall.FC3_Firewall, - "firstboot": firstboot.FC3_Firstboot, - "graphical": displaymode.FC3_DisplayMode, - "halt": reboot.FC3_Reboot, - "harddrive": method.FC3_Method, - "ignoredisk": ignoredisk.FC3_IgnoreDisk, - "install": upgrade.FC3_Upgrade, - "interactive": interactive.FC3_Interactive, - "keyboard": keyboard.FC3_Keyboard, - "lang": lang.FC3_Lang, - "langsupport": langsupport.FC3_LangSupport, - "logvol": logvol.FC4_LogVol, - "mediacheck": mediacheck.FC4_MediaCheck, - "monitor": monitor.FC3_Monitor, - "mouse": mouse.FC3_Mouse, - "network": network.FC4_Network, - "nfs": method.FC3_Method, - "part": partition.FC4_Partition, - "partition": partition.FC4_Partition, - "poweroff": reboot.FC3_Reboot, - "raid": raid.FC4_Raid, - "reboot": reboot.FC3_Reboot, - "rootpw": rootpw.FC3_RootPw, - "selinux": selinux.FC3_SELinux, - "shutdown": reboot.FC3_Reboot, - "skipx": skipx.FC3_SkipX, - "text": displaymode.FC3_DisplayMode, - "timezone": timezone.FC3_Timezone, - "upgrade": upgrade.FC3_Upgrade, - "url": method.FC3_Method, - "vnc": vnc.FC3_Vnc, - "volgroup": volgroup.FC3_VolGroup, - "xconfig": xconfig.FC3_XConfig, - "zerombr": zerombr.FC3_ZeroMbr, - "zfcp": zfcp.FC3_ZFCP, - }, - - # based on fc4 - FC5: { - "auth": authconfig.FC3_Authconfig, - "authconfig": authconfig.FC3_Authconfig, - "autopart": autopart.FC3_AutoPart, - "autostep": autostep.FC3_AutoStep, - "bootloader": bootloader.FC4_Bootloader, - "cdrom": method.FC3_Method, - "clearpart": clearpart.FC3_ClearPart, - "cmdline": displaymode.FC3_DisplayMode, - "device": device.FC3_Device, - "deviceprobe": deviceprobe.FC3_DeviceProbe, - "driverdisk": driverdisk.FC4_DriverDisk, - "firewall": firewall.FC3_Firewall, - "firstboot": firstboot.FC3_Firstboot, - "graphical": displaymode.FC3_DisplayMode, - "halt": reboot.FC3_Reboot, - "harddrive": method.FC3_Method, - "ignoredisk": ignoredisk.FC3_IgnoreDisk, - "install": upgrade.FC3_Upgrade, - "interactive": interactive.FC3_Interactive, - "keyboard": keyboard.FC3_Keyboard, - "lang": lang.FC3_Lang, - "langsupport": langsupport.FC5_LangSupport, - "logvol": logvol.FC4_LogVol, - "mediacheck": mediacheck.FC4_MediaCheck, - "monitor": monitor.FC3_Monitor, - "mouse": mouse.FC3_Mouse, - "network": network.FC4_Network, - "nfs": method.FC3_Method, - "part": partition.FC4_Partition, - "partition": partition.FC4_Partition, - "poweroff": reboot.FC3_Reboot, - "raid": raid.FC5_Raid, - "reboot": reboot.FC3_Reboot, - "rootpw": rootpw.FC3_RootPw, - "selinux": selinux.FC3_SELinux, - "shutdown": reboot.FC3_Reboot, - "skipx": skipx.FC3_SkipX, - "text": displaymode.FC3_DisplayMode, - "timezone": timezone.FC3_Timezone, - "upgrade": upgrade.FC3_Upgrade, - "url": method.FC3_Method, - "vnc": vnc.FC3_Vnc, - "volgroup": volgroup.FC3_VolGroup, - "xconfig": xconfig.FC3_XConfig, - "zerombr": zerombr.FC3_ZeroMbr, - "zfcp": zfcp.FC3_ZFCP, - }, - - # based on fc5 - FC6: { - "auth": authconfig.FC3_Authconfig, - "authconfig": authconfig.FC3_Authconfig, - "autopart": autopart.FC3_AutoPart, - "autostep": autostep.FC3_AutoStep, - "bootloader": bootloader.FC4_Bootloader, - "cdrom": method.FC6_Method, - "clearpart": clearpart.FC3_ClearPart, - "cmdline": displaymode.FC3_DisplayMode, - "device": device.FC3_Device, - "deviceprobe": deviceprobe.FC3_DeviceProbe, - "dmraid": dmraid.FC6_DmRaid, - "driverdisk": driverdisk.FC4_DriverDisk, - "firewall": firewall.FC3_Firewall, - "firstboot": firstboot.FC3_Firstboot, - "graphical": displaymode.FC3_DisplayMode, - "halt": reboot.FC6_Reboot, - "harddrive": method.FC6_Method, - "ignoredisk": ignoredisk.FC3_IgnoreDisk, - "install": upgrade.FC3_Upgrade, - "interactive": interactive.FC3_Interactive, - "iscsi": iscsi.FC6_Iscsi, - "iscsiname": iscsiname.FC6_IscsiName, - "keyboard": keyboard.FC3_Keyboard, - "lang": lang.FC3_Lang, - "langsupport": langsupport.FC5_LangSupport, - "logging": logging.FC6_Logging, - "logvol": logvol.FC4_LogVol, - "mediacheck": mediacheck.FC4_MediaCheck, - "monitor": monitor.FC6_Monitor, - "mouse": mouse.FC3_Mouse, - "multipath": multipath.FC6_MultiPath, - "network": network.FC6_Network, - "nfs": method.FC6_Method, - "part": partition.FC4_Partition, - "partition": partition.FC4_Partition, - "poweroff": reboot.FC6_Reboot, - "raid": raid.FC5_Raid, - "reboot": reboot.FC6_Reboot, - "repo": repo.FC6_Repo, - "tpk_repo": Mic_Tpk_Repo, - "rootpw": rootpw.FC3_RootPw, - "selinux": selinux.FC3_SELinux, - "services": services.FC6_Services, - "shutdown": reboot.FC6_Reboot, - "skipx": skipx.FC3_SkipX, - "text": displaymode.FC3_DisplayMode, - "timezone": timezone.FC6_Timezone, - "upgrade": upgrade.FC3_Upgrade, - "user": user.FC6_User, - "url": method.FC6_Method, - "vnc": vnc.FC6_Vnc, - "volgroup": volgroup.FC3_VolGroup, - "xconfig": xconfig.FC6_XConfig, - "zerombr": zerombr.FC3_ZeroMbr, - "zfcp": zfcp.FC3_ZFCP, - }, - - # based on fc6 - F7: { - "auth": authconfig.FC3_Authconfig, - "authconfig": authconfig.FC3_Authconfig, - "autopart": autopart.FC3_AutoPart, - "autostep": autostep.FC3_AutoStep, - "bootloader": bootloader.FC4_Bootloader, - "cdrom": method.FC6_Method, - "clearpart": clearpart.FC3_ClearPart, - "cmdline": displaymode.FC3_DisplayMode, - "device": device.FC3_Device, - "deviceprobe": deviceprobe.FC3_DeviceProbe, - "dmraid": dmraid.FC6_DmRaid, - "driverdisk": driverdisk.FC4_DriverDisk, - "firewall": firewall.FC3_Firewall, - "firstboot": firstboot.FC3_Firstboot, - "graphical": displaymode.FC3_DisplayMode, - "halt": reboot.FC6_Reboot, - "harddrive": method.FC6_Method, - "ignoredisk": ignoredisk.FC3_IgnoreDisk, - "install": upgrade.FC3_Upgrade, - "interactive": interactive.FC3_Interactive, - "iscsi": iscsi.FC6_Iscsi, - "iscsiname": iscsiname.FC6_IscsiName, - "keyboard": keyboard.FC3_Keyboard, - "lang": lang.FC3_Lang, - "logging": logging.FC6_Logging, - "logvol": logvol.FC4_LogVol, - "mediacheck": mediacheck.FC4_MediaCheck, - "monitor": monitor.FC6_Monitor, - "multipath": multipath.FC6_MultiPath, - "network": network.FC6_Network, - "nfs": method.FC6_Method, - "part": partition.FC4_Partition, - "partition": partition.FC4_Partition, - "poweroff": reboot.FC6_Reboot, - "raid": raid.F7_Raid, - "reboot": reboot.FC6_Reboot, - "repo": repo.FC6_Repo, - "rootpw": rootpw.FC3_RootPw, - "selinux": selinux.FC3_SELinux, - "services": services.FC6_Services, - "shutdown": reboot.FC6_Reboot, - "skipx": skipx.FC3_SkipX, - "text": displaymode.FC3_DisplayMode, - "timezone": timezone.FC6_Timezone, - "updates": updates.F7_Updates, - "upgrade": upgrade.FC3_Upgrade, - "url": method.FC6_Method, - "user": user.FC6_User, - "vnc": vnc.FC6_Vnc, - "volgroup": volgroup.FC3_VolGroup, - "xconfig": xconfig.FC6_XConfig, - "zerombr": zerombr.FC3_ZeroMbr, - "zfcp": zfcp.FC3_ZFCP, - }, - - # based on f7 - F8: { - "auth": authconfig.FC3_Authconfig, - "authconfig": authconfig.FC3_Authconfig, - "autopart": autopart.FC3_AutoPart, - "autostep": autostep.FC3_AutoStep, - "bootloader": bootloader.F8_Bootloader, - "cdrom": method.FC6_Method, - "clearpart": clearpart.FC3_ClearPart, - "cmdline": displaymode.FC3_DisplayMode, - "device": device.F8_Device, - "deviceprobe": deviceprobe.FC3_DeviceProbe, - "dmraid": dmraid.FC6_DmRaid, - "driverdisk": driverdisk.FC4_DriverDisk, - "firewall": firewall.FC3_Firewall, - "firstboot": firstboot.FC3_Firstboot, - "graphical": displaymode.FC3_DisplayMode, - "halt": reboot.FC6_Reboot, - "harddrive": method.FC6_Method, - "ignoredisk": ignoredisk.F8_IgnoreDisk, - "install": upgrade.FC3_Upgrade, - "interactive": interactive.FC3_Interactive, - "iscsi": iscsi.FC6_Iscsi, - "iscsiname": iscsiname.FC6_IscsiName, - "keyboard": keyboard.FC3_Keyboard, - "lang": lang.FC3_Lang, - "logging": logging.FC6_Logging, - "logvol": logvol.FC4_LogVol, - "mediacheck": mediacheck.FC4_MediaCheck, - "monitor": monitor.FC6_Monitor, - "multipath": multipath.FC6_MultiPath, - "network": network.F8_Network, - "nfs": method.FC6_Method, - "part": partition.FC4_Partition, - "partition": partition.FC4_Partition, - "poweroff": reboot.FC6_Reboot, - "raid": raid.F7_Raid, - "reboot": reboot.FC6_Reboot, - "repo": repo.F8_Repo, - "rootpw": rootpw.F8_RootPw, - "selinux": selinux.FC3_SELinux, - "services": services.FC6_Services, - "shutdown": reboot.FC6_Reboot, - "skipx": skipx.FC3_SkipX, - "text": displaymode.FC3_DisplayMode, - "timezone": timezone.FC6_Timezone, - "updates": updates.F7_Updates, - "upgrade": upgrade.FC3_Upgrade, - "url": method.FC6_Method, - "user": user.F8_User, - "vnc": vnc.FC6_Vnc, - "volgroup": volgroup.FC3_VolGroup, - "xconfig": xconfig.FC6_XConfig, - "zerombr": zerombr.FC3_ZeroMbr, - "zfcp": zfcp.FC3_ZFCP, - }, - - # based on f8 - F9: { - "auth": authconfig.FC3_Authconfig, - "authconfig": authconfig.FC3_Authconfig, - "autopart": autopart.F9_AutoPart, - "autostep": autostep.FC3_AutoStep, - "bootloader": bootloader.F8_Bootloader, - "cdrom": method.FC6_Method, - "clearpart": clearpart.FC3_ClearPart, - "cmdline": displaymode.FC3_DisplayMode, - "device": device.F8_Device, - "deviceprobe": deviceprobe.FC3_DeviceProbe, - "dmraid": dmraid.FC6_DmRaid, - "driverdisk": driverdisk.FC4_DriverDisk, - "firewall": firewall.F9_Firewall, - "firstboot": firstboot.FC3_Firstboot, - "graphical": displaymode.FC3_DisplayMode, - "halt": reboot.FC6_Reboot, - "harddrive": method.FC6_Method, - "ignoredisk": ignoredisk.F8_IgnoreDisk, - "install": upgrade.FC3_Upgrade, - "interactive": interactive.FC3_Interactive, - "iscsi": iscsi.FC6_Iscsi, - "iscsiname": iscsiname.FC6_IscsiName, - "keyboard": keyboard.FC3_Keyboard, - "lang": lang.FC3_Lang, - "logging": logging.FC6_Logging, - "logvol": logvol.F9_LogVol, - "mediacheck": mediacheck.FC4_MediaCheck, - "monitor": monitor.FC6_Monitor, - "multipath": multipath.FC6_MultiPath, - "network": network.F9_Network, - "nfs": method.FC6_Method, - "part": partition.F9_Partition, - "partition": partition.F9_Partition, - "poweroff": reboot.FC6_Reboot, - "raid": raid.F9_Raid, - "reboot": reboot.FC6_Reboot, - "repo": repo.F8_Repo, - "rootpw": rootpw.F8_RootPw, - "selinux": selinux.FC3_SELinux, - "services": services.FC6_Services, - "shutdown": reboot.FC6_Reboot, - "skipx": skipx.FC3_SkipX, - "text": displaymode.FC3_DisplayMode, - "timezone": timezone.FC6_Timezone, - "updates": updates.F7_Updates, - "upgrade": upgrade.FC3_Upgrade, - "url": method.FC6_Method, - "user": user.F8_User, - "vnc": vnc.F9_Vnc, - "volgroup": volgroup.FC3_VolGroup, - "xconfig": xconfig.F9_XConfig, - "zerombr": zerombr.F9_ZeroMbr, - "zfcp": zfcp.FC3_ZFCP, - }, - - # based on f9 - F10: { - "auth": authconfig.FC3_Authconfig, - "authconfig": authconfig.FC3_Authconfig, - "autopart": autopart.F9_AutoPart, - "autostep": autostep.FC3_AutoStep, - "bootloader": bootloader.F8_Bootloader, - "cdrom": method.FC6_Method, - "clearpart": clearpart.FC3_ClearPart, - "cmdline": displaymode.FC3_DisplayMode, - "device": device.F8_Device, - "deviceprobe": deviceprobe.FC3_DeviceProbe, - "dmraid": dmraid.FC6_DmRaid, - "driverdisk": driverdisk.FC4_DriverDisk, - "firewall": firewall.F10_Firewall, - "firstboot": firstboot.FC3_Firstboot, - "graphical": displaymode.FC3_DisplayMode, - "halt": reboot.FC6_Reboot, - "harddrive": method.FC6_Method, - "ignoredisk": ignoredisk.F8_IgnoreDisk, - "install": upgrade.FC3_Upgrade, - "interactive": interactive.FC3_Interactive, - "iscsi": iscsi.F10_Iscsi, - "iscsiname": iscsiname.FC6_IscsiName, - "keyboard": keyboard.FC3_Keyboard, - "lang": lang.FC3_Lang, - "logging": logging.FC6_Logging, - "logvol": logvol.F9_LogVol, - "mediacheck": mediacheck.FC4_MediaCheck, - "monitor": monitor.F10_Monitor, - "multipath": multipath.FC6_MultiPath, - "network": network.F9_Network, - "nfs": method.FC6_Method, - "part": partition.F9_Partition, - "partition": partition.F9_Partition, - "poweroff": reboot.FC6_Reboot, - "raid": raid.F9_Raid, - "reboot": reboot.FC6_Reboot, - "repo": repo.F8_Repo, - "rescue": rescue.F10_Rescue, - "rootpw": rootpw.F8_RootPw, - "selinux": selinux.FC3_SELinux, - "services": services.FC6_Services, - "shutdown": reboot.FC6_Reboot, - "skipx": skipx.FC3_SkipX, - "text": displaymode.FC3_DisplayMode, - "timezone": timezone.FC6_Timezone, - "updates": updates.F7_Updates, - "upgrade": upgrade.FC3_Upgrade, - "url": method.FC6_Method, - "user": user.F8_User, - "vnc": vnc.F9_Vnc, - "volgroup": volgroup.FC3_VolGroup, - "xconfig": xconfig.F10_XConfig, - "zerombr": zerombr.F9_ZeroMbr, - "zfcp": zfcp.FC3_ZFCP, - }, - - # based on f10 - F11: { - "auth": authconfig.FC3_Authconfig, - "authconfig": authconfig.FC3_Authconfig, - "autopart": autopart.F9_AutoPart, - "autostep": autostep.FC3_AutoStep, - "bootloader": bootloader.F8_Bootloader, - "cdrom": method.FC6_Method, - "clearpart": clearpart.FC3_ClearPart, - "cmdline": displaymode.FC3_DisplayMode, - "device": device.F8_Device, - "deviceprobe": deviceprobe.FC3_DeviceProbe, - "dmraid": dmraid.FC6_DmRaid, - "driverdisk": driverdisk.FC4_DriverDisk, - "firewall": firewall.F10_Firewall, - "firstboot": firstboot.FC3_Firstboot, - "graphical": displaymode.FC3_DisplayMode, - "halt": reboot.FC6_Reboot, - "harddrive": method.FC6_Method, - "ignoredisk": ignoredisk.F8_IgnoreDisk, - "install": upgrade.F11_Upgrade, - "interactive": interactive.FC3_Interactive, - "iscsi": iscsi.F10_Iscsi, - "iscsiname": iscsiname.FC6_IscsiName, - "keyboard": keyboard.FC3_Keyboard, - "lang": lang.FC3_Lang, - "logging": logging.FC6_Logging, - "logvol": logvol.F9_LogVol, - "mediacheck": mediacheck.FC4_MediaCheck, - "monitor": monitor.F10_Monitor, - "multipath": multipath.FC6_MultiPath, - "network": network.F9_Network, - "nfs": method.FC6_Method, - "part": partition.F11_Partition, - "partition": partition.F11_Partition, - "poweroff": reboot.FC6_Reboot, - "raid": raid.F9_Raid, - "reboot": reboot.FC6_Reboot, - "repo": repo.F11_Repo, - "rescue": rescue.F10_Rescue, - "rootpw": rootpw.F8_RootPw, - "selinux": selinux.FC3_SELinux, - "services": services.FC6_Services, - "shutdown": reboot.FC6_Reboot, - "skipx": skipx.FC3_SkipX, - "text": displaymode.FC3_DisplayMode, - "timezone": timezone.FC6_Timezone, - "updates": updates.F7_Updates, - "upgrade": upgrade.F11_Upgrade, - "url": method.FC6_Method, - "user": user.F8_User, - "vnc": vnc.F9_Vnc, - "volgroup": volgroup.FC3_VolGroup, - "xconfig": xconfig.F10_XConfig, - "zerombr": zerombr.F9_ZeroMbr, - "zfcp": zfcp.FC3_ZFCP, - }, - - # based on f11 - F12: { - "auth": authconfig.FC3_Authconfig, - "authconfig": authconfig.FC3_Authconfig, - "autopart": autopart.F12_AutoPart, - "autostep": autostep.FC3_AutoStep, - "bootloader": bootloader.F12_Bootloader, - "cdrom": method.FC6_Method, - "clearpart": clearpart.FC3_ClearPart, - "cmdline": displaymode.FC3_DisplayMode, - "device": device.F8_Device, - "deviceprobe": deviceprobe.FC3_DeviceProbe, - "dmraid": dmraid.FC6_DmRaid, - "driverdisk": driverdisk.F12_DriverDisk, - "fcoe": fcoe.F12_Fcoe, - "firewall": firewall.F10_Firewall, - "firstboot": firstboot.FC3_Firstboot, - "graphical": displaymode.FC3_DisplayMode, - "group": group.F12_Group, - "halt": reboot.FC6_Reboot, - "harddrive": method.FC6_Method, - "ignoredisk": ignoredisk.F8_IgnoreDisk, - "install": upgrade.F11_Upgrade, - "interactive": interactive.FC3_Interactive, - "iscsi": iscsi.F10_Iscsi, - "iscsiname": iscsiname.FC6_IscsiName, - "keyboard": keyboard.FC3_Keyboard, - "lang": lang.FC3_Lang, - "logging": logging.FC6_Logging, - "logvol": logvol.F12_LogVol, - "mediacheck": mediacheck.FC4_MediaCheck, - "monitor": monitor.F10_Monitor, - "multipath": multipath.FC6_MultiPath, - "network": network.F9_Network, - "nfs": method.FC6_Method, - "part": partition.F12_Partition, - "partition": partition.F12_Partition, - "poweroff": reboot.FC6_Reboot, - "raid": raid.F12_Raid, - "reboot": reboot.FC6_Reboot, - "repo": repo.F11_Repo, - "rescue": rescue.F10_Rescue, - "rootpw": rootpw.F8_RootPw, - "selinux": selinux.FC3_SELinux, - "services": services.FC6_Services, - "shutdown": reboot.FC6_Reboot, - "skipx": skipx.FC3_SkipX, - "text": displaymode.FC3_DisplayMode, - "timezone": timezone.FC6_Timezone, - "updates": updates.F7_Updates, - "upgrade": upgrade.F11_Upgrade, - "url": method.FC6_Method, - "user": user.F12_User, - "vnc": vnc.F9_Vnc, - "volgroup": volgroup.FC3_VolGroup, - "xconfig": xconfig.F10_XConfig, - "zerombr": zerombr.F9_ZeroMbr, - "zfcp": zfcp.F12_ZFCP, - }, - - # based on f12 - F13: { - "auth": authconfig.FC3_Authconfig, - "authconfig": authconfig.FC3_Authconfig, - "autopart": autopart.F12_AutoPart, - "autostep": autostep.FC3_AutoStep, - "bootloader": bootloader.F12_Bootloader, - "cdrom": method.F13_Method, - "clearpart": clearpart.FC3_ClearPart, - "cmdline": displaymode.FC3_DisplayMode, - "device": device.F8_Device, - "deviceprobe": deviceprobe.FC3_DeviceProbe, - "dmraid": dmraid.FC6_DmRaid, - "driverdisk": driverdisk.F12_DriverDisk, - "fcoe": fcoe.F13_Fcoe, - "firewall": firewall.F10_Firewall, - "firstboot": firstboot.FC3_Firstboot, - "graphical": displaymode.FC3_DisplayMode, - "group": group.F12_Group, - "halt": reboot.FC6_Reboot, - "harddrive": method.F13_Method, - "ignoredisk": ignoredisk.F8_IgnoreDisk, - "install": upgrade.F11_Upgrade, - "interactive": interactive.FC3_Interactive, - "iscsi": iscsi.F10_Iscsi, - "iscsiname": iscsiname.FC6_IscsiName, - "keyboard": keyboard.FC3_Keyboard, - "lang": lang.FC3_Lang, - "logging": logging.FC6_Logging, - "logvol": logvol.F12_LogVol, - "mediacheck": mediacheck.FC4_MediaCheck, - "monitor": monitor.F10_Monitor, - "multipath": multipath.FC6_MultiPath, - "network": network.F9_Network, - "nfs": method.F13_Method, - "part": partition.F12_Partition, - "partition": partition.F12_Partition, - "poweroff": reboot.FC6_Reboot, - "raid": raid.F13_Raid, - "reboot": reboot.FC6_Reboot, - "repo": repo.F13_Repo, - "rescue": rescue.F10_Rescue, - "rootpw": rootpw.F8_RootPw, - "selinux": selinux.FC3_SELinux, - "services": services.FC6_Services, - "shutdown": reboot.FC6_Reboot, - "skipx": skipx.FC3_SkipX, - "sshpw": sshpw.F13_SshPw, - "text": displaymode.FC3_DisplayMode, - "timezone": timezone.FC6_Timezone, - "updates": updates.F7_Updates, - "upgrade": upgrade.F11_Upgrade, - "url": method.F13_Method, - "user": user.F12_User, - "vnc": vnc.F9_Vnc, - "volgroup": volgroup.FC3_VolGroup, - "xconfig": xconfig.F10_XConfig, - "zerombr": zerombr.F9_ZeroMbr, - "zfcp": zfcp.F12_ZFCP, - }, - - # based on f13 - F14: { - "auth": authconfig.FC3_Authconfig, - "authconfig": authconfig.FC3_Authconfig, - "autopart": autopart.F12_AutoPart, - "autostep": autostep.FC3_AutoStep, - "bootloader": bootloader.F14_Bootloader, - "cdrom": method.F14_Method, - "clearpart": clearpart.FC3_ClearPart, - "cmdline": displaymode.FC3_DisplayMode, - "device": device.F8_Device, - "deviceprobe": deviceprobe.FC3_DeviceProbe, - "dmraid": dmraid.FC6_DmRaid, - "driverdisk": driverdisk.F14_DriverDisk, - "fcoe": fcoe.F13_Fcoe, - "firewall": firewall.F14_Firewall, - "firstboot": firstboot.FC3_Firstboot, - "graphical": displaymode.FC3_DisplayMode, - "group": group.F12_Group, - "halt": reboot.FC6_Reboot, - "harddrive": method.F14_Method, - "ignoredisk": ignoredisk.F14_IgnoreDisk, - "install": upgrade.F11_Upgrade, - "interactive": interactive.F14_Interactive, - "iscsi": iscsi.F10_Iscsi, - "iscsiname": iscsiname.FC6_IscsiName, - "keyboard": keyboard.FC3_Keyboard, - "lang": lang.FC3_Lang, - "logging": logging.FC6_Logging, - "logvol": logvol.F14_LogVol, - "mediacheck": mediacheck.FC4_MediaCheck, - "monitor": monitor.F10_Monitor, - "multipath": multipath.FC6_MultiPath, - "network": network.F9_Network, - "nfs": method.F14_Method, - "part": partition.F14_Partition, - "partition": partition.F14_Partition, - "poweroff": reboot.FC6_Reboot, - "raid": raid.F14_Raid, - "reboot": reboot.FC6_Reboot, - "repo": repo.F14_Repo, - "rescue": rescue.F10_Rescue, - "rootpw": rootpw.F8_RootPw, - "selinux": selinux.FC3_SELinux, - "services": services.FC6_Services, - "shutdown": reboot.FC6_Reboot, - "skipx": skipx.FC3_SkipX, - "sshpw": sshpw.F13_SshPw, - "text": displaymode.FC3_DisplayMode, - "timezone": timezone.FC6_Timezone, - "updates": updates.F7_Updates, - "upgrade": upgrade.F11_Upgrade, - "url": method.F14_Method, - "user": user.F12_User, - "vnc": vnc.F9_Vnc, - "volgroup": volgroup.FC3_VolGroup, - "xconfig": xconfig.F14_XConfig, - "zerombr": zerombr.F9_ZeroMbr, - "zfcp": zfcp.F14_ZFCP, - }, - - # based on f14 - F15: { - "auth": authconfig.FC3_Authconfig, - "authconfig": authconfig.FC3_Authconfig, - "autopart": autopart.F12_AutoPart, - "autostep": autostep.FC3_AutoStep, - "bootloader": bootloader.F15_Bootloader, - "cdrom": method.F14_Method, - "clearpart": clearpart.FC3_ClearPart, - "cmdline": displaymode.FC3_DisplayMode, - "device": device.F8_Device, - "deviceprobe": deviceprobe.FC3_DeviceProbe, - "dmraid": dmraid.FC6_DmRaid, - "driverdisk": driverdisk.F14_DriverDisk, - "fcoe": fcoe.F13_Fcoe, - "firewall": firewall.F14_Firewall, - "firstboot": firstboot.FC3_Firstboot, - "graphical": displaymode.FC3_DisplayMode, - "group": group.F12_Group, - "halt": reboot.FC6_Reboot, - "harddrive": method.F14_Method, - "ignoredisk": ignoredisk.F14_IgnoreDisk, - "install": upgrade.F11_Upgrade, - "iscsi": iscsi.F10_Iscsi, - "iscsiname": iscsiname.FC6_IscsiName, - "keyboard": keyboard.FC3_Keyboard, - "lang": lang.FC3_Lang, - "logging": logging.FC6_Logging, - "logvol": logvol.F15_LogVol, - "mediacheck": mediacheck.FC4_MediaCheck, - "monitor": monitor.F10_Monitor, - "multipath": multipath.FC6_MultiPath, - "network": network.F9_Network, - "nfs": method.F14_Method, - "part": partition.F14_Partition, - "partition": partition.F14_Partition, - "poweroff": reboot.FC6_Reboot, - "raid": raid.F15_Raid, - "reboot": reboot.FC6_Reboot, - "repo": repo.F15_Repo, - "rescue": rescue.F10_Rescue, - "rootpw": rootpw.F8_RootPw, - "selinux": selinux.FC3_SELinux, - "services": services.FC6_Services, - "shutdown": reboot.FC6_Reboot, - "skipx": skipx.FC3_SkipX, - "sshpw": sshpw.F13_SshPw, - "text": displaymode.FC3_DisplayMode, - "timezone": timezone.FC6_Timezone, - "updates": updates.F7_Updates, - "upgrade": upgrade.F11_Upgrade, - "url": method.F14_Method, - "user": user.F12_User, - "vnc": vnc.F9_Vnc, - "volgroup": volgroup.FC3_VolGroup, - "xconfig": xconfig.F14_XConfig, - "zerombr": zerombr.F9_ZeroMbr, - "zfcp": zfcp.F14_ZFCP, - }, - - # based on f15 - F16: { - "auth": authconfig.FC3_Authconfig, - "authconfig": authconfig.FC3_Authconfig, - "autopart": autopart.F12_AutoPart, - "autostep": autostep.FC3_AutoStep, - "bootloader": bootloader.F15_Bootloader, - "cdrom": method.F14_Method, - "clearpart": clearpart.FC3_ClearPart, - "cmdline": displaymode.FC3_DisplayMode, - "device": device.F8_Device, - "deviceprobe": deviceprobe.FC3_DeviceProbe, - "dmraid": dmraid.FC6_DmRaid, - "driverdisk": driverdisk.F14_DriverDisk, - "fcoe": fcoe.F13_Fcoe, - "firewall": firewall.F14_Firewall, - "firstboot": firstboot.FC3_Firstboot, - "graphical": displaymode.FC3_DisplayMode, - "group": group.F12_Group, - "halt": reboot.FC6_Reboot, - "harddrive": method.F14_Method, - "ignoredisk": ignoredisk.F14_IgnoreDisk, - "install": upgrade.F11_Upgrade, - "iscsi": iscsi.F10_Iscsi, - "iscsiname": iscsiname.FC6_IscsiName, - "keyboard": keyboard.FC3_Keyboard, - "lang": lang.FC3_Lang, - "logging": logging.FC6_Logging, - "logvol": logvol.F15_LogVol, - "mediacheck": mediacheck.FC4_MediaCheck, - "monitor": monitor.F10_Monitor, - "multipath": multipath.FC6_MultiPath, - "network": network.F16_Network, - "nfs": method.F14_Method, - "part": partition.F14_Partition, - "partition": partition.F14_Partition, - "poweroff": reboot.FC6_Reboot, - "raid": raid.F15_Raid, - "reboot": reboot.FC6_Reboot, - "repo": repo.F15_Repo, - "rescue": rescue.F10_Rescue, - "rootpw": rootpw.F8_RootPw, - "selinux": selinux.FC3_SELinux, - "services": services.FC6_Services, - "shutdown": reboot.FC6_Reboot, - "skipx": skipx.FC3_SkipX, - "sshpw": sshpw.F13_SshPw, - "text": displaymode.FC3_DisplayMode, - "timezone": timezone.FC6_Timezone, - "updates": updates.F7_Updates, - "upgrade": upgrade.F11_Upgrade, - "url": method.F14_Method, - "user": user.F12_User, - "vnc": vnc.F9_Vnc, - "volgroup": volgroup.FC3_VolGroup, - "xconfig": xconfig.F14_XConfig, - "zerombr": zerombr.F9_ZeroMbr, - "zfcp": zfcp.F14_ZFCP, - }, - - # based on fc1 - RHEL3: { - "auth": authconfig.FC3_Authconfig, - "authconfig": authconfig.FC3_Authconfig, - "autopart": autopart.FC3_AutoPart, - "autostep": autostep.FC3_AutoStep, - "bootloader": bootloader.FC3_Bootloader, - "cdrom": method.FC3_Method, - "clearpart": clearpart.FC3_ClearPart, - "cmdline": displaymode.FC3_DisplayMode, - "device": device.FC3_Device, - "deviceprobe": deviceprobe.FC3_DeviceProbe, - "driverdisk": driverdisk.FC3_DriverDisk, - "firewall": firewall.FC3_Firewall, - "firstboot": firstboot.FC3_Firstboot, - "graphical": displaymode.FC3_DisplayMode, - "halt": reboot.FC3_Reboot, - "harddrive": method.FC3_Method, - "ignoredisk": ignoredisk.FC3_IgnoreDisk, - "install": upgrade.FC3_Upgrade, - "interactive": interactive.FC3_Interactive, - "keyboard": keyboard.FC3_Keyboard, - "lang": lang.FC3_Lang, - "langsupport": langsupport.FC3_LangSupport, - "lilo": bootloader.FC3_Bootloader, - "lilocheck": lilocheck.FC3_LiloCheck, - "logvol": logvol.FC3_LogVol, - "monitor": monitor.FC3_Monitor, - "mouse": mouse.RHEL3_Mouse, - "network": network.FC3_Network, - "nfs": method.FC3_Method, - "part": partition.FC3_Partition, - "partition": partition.FC3_Partition, - "poweroff": reboot.FC3_Reboot, - "raid": raid.FC3_Raid, - "reboot": reboot.FC3_Reboot, - "rootpw": rootpw.FC3_RootPw, - "shutdown": reboot.FC3_Reboot, - "skipx": skipx.FC3_SkipX, - "text": displaymode.FC3_DisplayMode, - "timezone": timezone.FC3_Timezone, - "upgrade": upgrade.FC3_Upgrade, - "url": method.FC3_Method, - "vnc": vnc.FC3_Vnc, - "volgroup": volgroup.FC3_VolGroup, - "xconfig": xconfig.FC3_XConfig, - "zerombr": zerombr.FC3_ZeroMbr, - }, - - # based on fc3 - RHEL4: { - "auth": authconfig.FC3_Authconfig, - "authconfig": authconfig.FC3_Authconfig, - "autopart": autopart.FC3_AutoPart, - "autostep": autostep.FC3_AutoStep, - "bootloader": bootloader.FC3_Bootloader, - "cdrom": method.FC3_Method, - "clearpart": clearpart.FC3_ClearPart, - "cmdline": displaymode.FC3_DisplayMode, - "device": device.FC3_Device, - "deviceprobe": deviceprobe.FC3_DeviceProbe, - "driverdisk": driverdisk.FC4_DriverDisk, - "firewall": firewall.FC3_Firewall, - "firstboot": firstboot.FC3_Firstboot, - "graphical": displaymode.FC3_DisplayMode, - "halt": reboot.FC3_Reboot, - "harddrive": method.FC3_Method, - "ignoredisk": ignoredisk.F8_IgnoreDisk, - "install": upgrade.FC3_Upgrade, - "interactive": interactive.FC3_Interactive, - "keyboard": keyboard.FC3_Keyboard, - "lang": lang.FC3_Lang, - "langsupport": langsupport.FC3_LangSupport, - "lilo": bootloader.FC3_Bootloader, - "lilocheck": lilocheck.FC3_LiloCheck, - "logvol": logvol.FC3_LogVol, - "monitor": monitor.FC3_Monitor, - "mouse": mouse.FC3_Mouse, - "network": network.RHEL4_Network, - "nfs": method.FC3_Method, - "part": partition.FC3_Partition, - "partition": partition.FC3_Partition, - "poweroff": reboot.FC3_Reboot, - "raid": raid.FC3_Raid, - "reboot": reboot.FC3_Reboot, - "rootpw": rootpw.FC3_RootPw, - "selinux": selinux.FC3_SELinux, - "shutdown": reboot.FC3_Reboot, - "skipx": skipx.FC3_SkipX, - "text": displaymode.FC3_DisplayMode, - "timezone": timezone.FC3_Timezone, - "upgrade": upgrade.FC3_Upgrade, - "url": method.FC3_Method, - "vnc": vnc.FC3_Vnc, - "volgroup": volgroup.FC3_VolGroup, - "xconfig": xconfig.FC3_XConfig, - "zerombr": zerombr.FC3_ZeroMbr, - "zfcp": zfcp.FC3_ZFCP, - }, - - # based on fc6 - RHEL5: { - "auth": authconfig.FC3_Authconfig, - "authconfig": authconfig.FC3_Authconfig, - "autopart": autopart.F9_AutoPart, - "autostep": autostep.FC3_AutoStep, - "bootloader": bootloader.RHEL5_Bootloader, - "cdrom": method.FC6_Method, - "clearpart": clearpart.FC3_ClearPart, - "cmdline": displaymode.FC3_DisplayMode, - "device": device.FC3_Device, - "deviceprobe": deviceprobe.FC3_DeviceProbe, - "dmraid": dmraid.FC6_DmRaid, - "driverdisk": driverdisk.F12_DriverDisk, - "firewall": firewall.FC3_Firewall, - "firstboot": firstboot.FC3_Firstboot, - "graphical": displaymode.FC3_DisplayMode, - "halt": reboot.FC6_Reboot, - "harddrive": method.FC6_Method, - "ignoredisk": ignoredisk.F8_IgnoreDisk, - "install": upgrade.FC3_Upgrade, - "interactive": interactive.FC3_Interactive, - "iscsi": iscsi.FC6_Iscsi, - "iscsiname": iscsiname.FC6_IscsiName, - "key": key.RHEL5_Key, - "keyboard": keyboard.FC3_Keyboard, - "lang": lang.FC3_Lang, - "langsupport": langsupport.FC5_LangSupport, - "logging": logging.FC6_Logging, - "logvol": logvol.RHEL5_LogVol, - "mediacheck": mediacheck.FC4_MediaCheck, - "monitor": monitor.FC6_Monitor, - "mouse": mouse.FC3_Mouse, - "multipath": multipath.FC6_MultiPath, - "network": network.RHEL5_Network, - "nfs": method.FC6_Method, - "part": partition.RHEL5_Partition, - "partition": partition.RHEL5_Partition, - "poweroff": reboot.FC6_Reboot, - "raid": raid.RHEL5_Raid, - "reboot": reboot.FC6_Reboot, - "repo": repo.FC6_Repo, - "rootpw": rootpw.FC3_RootPw, - "services": services.FC6_Services, - "selinux": selinux.FC3_SELinux, - "shutdown": reboot.FC6_Reboot, - "skipx": skipx.FC3_SkipX, - "text": displaymode.FC3_DisplayMode, - "timezone": timezone.FC6_Timezone, - "upgrade": upgrade.FC3_Upgrade, - "user": user.FC6_User, - "url": method.FC6_Method, - "vnc": vnc.FC6_Vnc, - "volgroup": volgroup.FC3_VolGroup, - "xconfig": xconfig.FC6_XConfig, - "zerombr": zerombr.FC3_ZeroMbr, - "zfcp": zfcp.FC3_ZFCP, - }, - - # based on f13ish - RHEL6: { - "auth": authconfig.FC3_Authconfig, - "authconfig": authconfig.FC3_Authconfig, - "autopart": autopart.F12_AutoPart, - "autostep": autostep.FC3_AutoStep, - "bootloader": bootloader.RHEL6_Bootloader, - "cdrom": method.RHEL6_Method, - "clearpart": clearpart.FC3_ClearPart, - "cmdline": displaymode.FC3_DisplayMode, - "device": device.F8_Device, - "deviceprobe": deviceprobe.FC3_DeviceProbe, - "dmraid": dmraid.FC6_DmRaid, - "driverdisk": driverdisk.F12_DriverDisk, - "fcoe": fcoe.F13_Fcoe, - "firewall": firewall.F10_Firewall, - "firstboot": firstboot.FC3_Firstboot, - "graphical": displaymode.FC3_DisplayMode, - "group": group.F12_Group, - "halt": reboot.FC6_Reboot, - "harddrive": method.RHEL6_Method, - "ignoredisk": ignoredisk.RHEL6_IgnoreDisk, - "install": upgrade.F11_Upgrade, - "interactive": interactive.FC3_Interactive, - "iscsi": iscsi.F10_Iscsi, - "iscsiname": iscsiname.FC6_IscsiName, - "keyboard": keyboard.FC3_Keyboard, - "lang": lang.FC3_Lang, - "logging": logging.FC6_Logging, - "logvol": logvol.F12_LogVol, - "mediacheck": mediacheck.FC4_MediaCheck, - "monitor": monitor.F10_Monitor, - "multipath": multipath.FC6_MultiPath, - "network": network.RHEL6_Network, - "nfs": method.RHEL6_Method, - "part": partition.F12_Partition, - "partition": partition.F12_Partition, - "poweroff": reboot.FC6_Reboot, - "raid": raid.F13_Raid, - "reboot": reboot.FC6_Reboot, - "repo": repo.RHEL6_Repo, - "rescue": rescue.F10_Rescue, - "rootpw": rootpw.F8_RootPw, - "selinux": selinux.FC3_SELinux, - "services": services.FC6_Services, - "shutdown": reboot.FC6_Reboot, - "skipx": skipx.FC3_SkipX, - "sshpw": sshpw.F13_SshPw, - "text": displaymode.FC3_DisplayMode, - "timezone": timezone.FC6_Timezone, - "updates": updates.F7_Updates, - "upgrade": upgrade.F11_Upgrade, - "url": method.RHEL6_Method, - "user": user.F12_User, - "vnc": vnc.F9_Vnc, - "volgroup": volgroup.FC3_VolGroup, - "xconfig": xconfig.F10_XConfig, - "zerombr": zerombr.F9_ZeroMbr, - "zfcp": zfcp.F12_ZFCP, - } -} - -# This map is keyed on kickstart syntax version as provided by -# pykickstart.version. Within each sub-dict is a mapping from a data object -# name to the class that provides it. This is a bijective mapping - that is, -# each name maps to exactly one data class and all data classes have a name. -# More than one instance of each class is allowed to exist, however. -dataMap = { - FC3: { - "DriverDiskData": driverdisk.FC3_DriverDiskData, - "LogVolData": logvol.FC3_LogVolData, - "NetworkData": network.FC3_NetworkData, - "PartData": partition.FC3_PartData, - "RaidData": raid.FC3_RaidData, - "VolGroupData": volgroup.FC3_VolGroupData, - "ZFCPData": zfcp.FC3_ZFCPData, - }, - FC4: { - "DriverDiskData": driverdisk.FC4_DriverDiskData, - "LogVolData": logvol.FC4_LogVolData, - "NetworkData": network.FC4_NetworkData, - "PartData": partition.FC4_PartData, - "RaidData": raid.FC4_RaidData, - "VolGroupData": volgroup.FC3_VolGroupData, - "ZFCPData": zfcp.FC3_ZFCPData, - }, - FC5: { - "DriverDiskData": driverdisk.FC4_DriverDiskData, - "LogVolData": logvol.FC4_LogVolData, - "NetworkData": network.FC4_NetworkData, - "PartData": partition.FC4_PartData, - "RaidData": raid.FC5_RaidData, - "VolGroupData": volgroup.FC3_VolGroupData, - "ZFCPData": zfcp.FC3_ZFCPData, - }, - FC6: { - "DriverDiskData": driverdisk.FC4_DriverDiskData, - "DmRaidData": dmraid.FC6_DmRaidData, - "IscsiData": iscsi.FC6_IscsiData, - "LogVolData": logvol.FC4_LogVolData, - "MultiPathData": multipath.FC6_MultiPathData, - "NetworkData": network.FC6_NetworkData, - "PartData": partition.FC4_PartData, - "RaidData": raid.FC5_RaidData, - "RepoData": repo.FC6_RepoData, - "TpkRepoData": Mic_Tpk_RepoData, - "UserData": user.FC6_UserData, - "VolGroupData": volgroup.FC3_VolGroupData, - "ZFCPData": zfcp.FC3_ZFCPData, - }, - F7: { - "DriverDiskData": driverdisk.FC4_DriverDiskData, - "DmRaidData": dmraid.FC6_DmRaidData, - "IscsiData": iscsi.FC6_IscsiData, - "LogVolData": logvol.FC4_LogVolData, - "MultiPathData": multipath.FC6_MultiPathData, - "NetworkData": network.FC6_NetworkData, - "PartData": partition.FC4_PartData, - "RaidData": raid.F7_RaidData, - "RepoData": repo.FC6_RepoData, - "UserData": user.FC6_UserData, - "VolGroupData": volgroup.FC3_VolGroupData, - "ZFCPData": zfcp.FC3_ZFCPData, - }, - F8: { - "DriverDiskData": driverdisk.FC4_DriverDiskData, - "DeviceData": device.F8_DeviceData, - "DmRaidData": dmraid.FC6_DmRaidData, - "IscsiData": iscsi.FC6_IscsiData, - "LogVolData": logvol.FC4_LogVolData, - "MultiPathData": multipath.FC6_MultiPathData, - "NetworkData": network.F8_NetworkData, - "PartData": partition.FC4_PartData, - "RaidData": raid.F7_RaidData, - "RepoData": repo.F8_RepoData, - "UserData": user.F8_UserData, - "VolGroupData": volgroup.FC3_VolGroupData, - "ZFCPData": zfcp.FC3_ZFCPData, - }, - F9: { - "DriverDiskData": driverdisk.FC4_DriverDiskData, - "DeviceData": device.F8_DeviceData, - "DmRaidData": dmraid.FC6_DmRaidData, - "IscsiData": iscsi.FC6_IscsiData, - "LogVolData": logvol.F9_LogVolData, - "MultiPathData": multipath.FC6_MultiPathData, - "NetworkData": network.F8_NetworkData, - "PartData": partition.F9_PartData, - "RaidData": raid.F9_RaidData, - "RepoData": repo.F8_RepoData, - "UserData": user.F8_UserData, - "VolGroupData": volgroup.FC3_VolGroupData, - "ZFCPData": zfcp.FC3_ZFCPData, - }, - F10: { - "DriverDiskData": driverdisk.FC4_DriverDiskData, - "DeviceData": device.F8_DeviceData, - "DmRaidData": dmraid.FC6_DmRaidData, - "IscsiData": iscsi.F10_IscsiData, - "LogVolData": logvol.F9_LogVolData, - "MultiPathData": multipath.FC6_MultiPathData, - "NetworkData": network.F8_NetworkData, - "PartData": partition.F9_PartData, - "RaidData": raid.F9_RaidData, - "RepoData": repo.F8_RepoData, - "UserData": user.F8_UserData, - "VolGroupData": volgroup.FC3_VolGroupData, - "ZFCPData": zfcp.FC3_ZFCPData, - }, - F11: { - "DriverDiskData": driverdisk.FC4_DriverDiskData, - "DeviceData": device.F8_DeviceData, - "DmRaidData": dmraid.FC6_DmRaidData, - "IscsiData": iscsi.F10_IscsiData, - "LogVolData": logvol.F9_LogVolData, - "MultiPathData": multipath.FC6_MultiPathData, - "NetworkData": network.F8_NetworkData, - "PartData": partition.F11_PartData, - "RaidData": raid.F9_RaidData, - "RepoData": repo.F11_RepoData, - "UserData": user.F8_UserData, - "VolGroupData": volgroup.FC3_VolGroupData, - "ZFCPData": zfcp.FC3_ZFCPData, - }, - F12: { - "DriverDiskData": driverdisk.F12_DriverDiskData, - "DeviceData": device.F8_DeviceData, - "DmRaidData": dmraid.FC6_DmRaidData, - "FcoeData": fcoe.F12_FcoeData, - "GroupData": group.F12_GroupData, - "IscsiData": iscsi.F10_IscsiData, - "LogVolData": logvol.F12_LogVolData, - "MultiPathData": multipath.FC6_MultiPathData, - "NetworkData": network.F8_NetworkData, - "PartData": partition.F12_PartData, - "RaidData": raid.F12_RaidData, - "RepoData": repo.F11_RepoData, - "UserData": user.F12_UserData, - "VolGroupData": volgroup.FC3_VolGroupData, - "ZFCPData": zfcp.F12_ZFCPData, - }, - F13: { - "DriverDiskData": driverdisk.F12_DriverDiskData, - "DeviceData": device.F8_DeviceData, - "DmRaidData": dmraid.FC6_DmRaidData, - "FcoeData": fcoe.F13_FcoeData, - "GroupData": group.F12_GroupData, - "IscsiData": iscsi.F10_IscsiData, - "LogVolData": logvol.F12_LogVolData, - "MultiPathData": multipath.FC6_MultiPathData, - "NetworkData": network.F8_NetworkData, - "PartData": partition.F12_PartData, - "RaidData": raid.F13_RaidData, - "RepoData": repo.F13_RepoData, - "SshPwData": sshpw.F13_SshPwData, - "UserData": user.F12_UserData, - "VolGroupData": volgroup.FC3_VolGroupData, - "ZFCPData": zfcp.F12_ZFCPData, - }, - F14: { - "DriverDiskData": driverdisk.F14_DriverDiskData, - "DeviceData": device.F8_DeviceData, - "DmRaidData": dmraid.FC6_DmRaidData, - "FcoeData": fcoe.F13_FcoeData, - "GroupData": group.F12_GroupData, - "IscsiData": iscsi.F10_IscsiData, - "LogVolData": logvol.F14_LogVolData, - "MultiPathData": multipath.FC6_MultiPathData, - "NetworkData": network.F8_NetworkData, - "PartData": partition.F14_PartData, - "RaidData": raid.F14_RaidData, - "RepoData": repo.F14_RepoData, - "SshPwData": sshpw.F13_SshPwData, - "UserData": user.F12_UserData, - "VolGroupData": volgroup.FC3_VolGroupData, - "ZFCPData": zfcp.F14_ZFCPData, - }, - F15: { - "DriverDiskData": driverdisk.F14_DriverDiskData, - "DeviceData": device.F8_DeviceData, - "DmRaidData": dmraid.FC6_DmRaidData, - "FcoeData": fcoe.F13_FcoeData, - "GroupData": group.F12_GroupData, - "IscsiData": iscsi.F10_IscsiData, - "LogVolData": logvol.F15_LogVolData, - "MultiPathData": multipath.FC6_MultiPathData, - "NetworkData": network.F8_NetworkData, - "PartData": partition.F14_PartData, - "RaidData": raid.F15_RaidData, - "RepoData": repo.F15_RepoData, - "SshPwData": sshpw.F13_SshPwData, - "UserData": user.F12_UserData, - "VolGroupData": volgroup.FC3_VolGroupData, - "ZFCPData": zfcp.F14_ZFCPData, - }, - F16: { - "DriverDiskData": driverdisk.F14_DriverDiskData, - "DeviceData": device.F8_DeviceData, - "DmRaidData": dmraid.FC6_DmRaidData, - "FcoeData": fcoe.F13_FcoeData, - "GroupData": group.F12_GroupData, - "IscsiData": iscsi.F10_IscsiData, - "LogVolData": logvol.F15_LogVolData, - "MultiPathData": multipath.FC6_MultiPathData, - "NetworkData": network.F16_NetworkData, - "PartData": partition.F14_PartData, - "RaidData": raid.F15_RaidData, - "RepoData": repo.F15_RepoData, - "SshPwData": sshpw.F13_SshPwData, - "UserData": user.F12_UserData, - "VolGroupData": volgroup.FC3_VolGroupData, - "ZFCPData": zfcp.F14_ZFCPData, - }, - RHEL3: { - "DriverDiskData": driverdisk.FC3_DriverDiskData, - "LogVolData": logvol.FC3_LogVolData, - "NetworkData": network.RHEL4_NetworkData, - "PartData": partition.FC3_PartData, - "RaidData": raid.FC3_RaidData, - "VolGroupData": volgroup.FC3_VolGroupData, - "ZFCPData": zfcp.FC3_ZFCPData, - }, - RHEL4: { - "DriverDiskData": driverdisk.FC4_DriverDiskData, - "LogVolData": logvol.FC3_LogVolData, - "NetworkData": network.RHEL4_NetworkData, - "PartData": partition.FC3_PartData, - "RaidData": raid.FC3_RaidData, - "VolGroupData": volgroup.FC3_VolGroupData, - "ZFCPData": zfcp.FC3_ZFCPData, - }, - RHEL5: { - "DriverDiskData": driverdisk.F12_DriverDiskData, - "DmRaidData": dmraid.FC6_DmRaidData, - "IscsiData": iscsi.FC6_IscsiData, - "LogVolData": logvol.RHEL5_LogVolData, - "MultiPathData": multipath.FC6_MultiPathData, - "NetworkData": network.FC6_NetworkData, - "PartData": partition.RHEL5_PartData, - "RaidData": raid.RHEL5_RaidData, - "RepoData": repo.FC6_RepoData, - "UserData": user.FC6_UserData, - "VolGroupData": volgroup.FC3_VolGroupData, - "ZFCPData": zfcp.FC3_ZFCPData, - }, - RHEL6: { - "DriverDiskData": driverdisk.F12_DriverDiskData, - "DeviceData": device.F8_DeviceData, - "DmRaidData": dmraid.FC6_DmRaidData, - "FcoeData": fcoe.F13_FcoeData, - "GroupData": group.F12_GroupData, - "IscsiData": iscsi.F10_IscsiData, - "LogVolData": logvol.F12_LogVolData, - "MultiPathData": multipath.FC6_MultiPathData, - "NetworkData": network.RHEL6_NetworkData, - "PartData": partition.F12_PartData, - "RaidData": raid.F13_RaidData, - "RepoData": repo.RHEL6_RepoData, - "SshPwData": sshpw.F13_SshPwData, - "UserData": user.F12_UserData, - "VolGroupData": volgroup.FC3_VolGroupData, - "ZFCPData": zfcp.F12_ZFCPData, - } -} diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/f10.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/f10.py deleted file mode 100644 index 17c8211..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/f10.py +++ /dev/null @@ -1,24 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2008 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.version import * - -class F10Handler(BaseHandler): - version = F10 diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/f11.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/f11.py deleted file mode 100644 index d21aee3..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/f11.py +++ /dev/null @@ -1,24 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2008 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.version import * - -class F11Handler(BaseHandler): - version = F11 diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/f12.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/f12.py deleted file mode 100644 index cea3ece..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/f12.py +++ /dev/null @@ -1,24 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2009 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.version import * - -class F12Handler(BaseHandler): - version = F12 diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/f13.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/f13.py deleted file mode 100644 index b94c738..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/f13.py +++ /dev/null @@ -1,24 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2009 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.version import * - -class F13Handler(BaseHandler): - version = F13 diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/f14.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/f14.py deleted file mode 100644 index 478f75d..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/f14.py +++ /dev/null @@ -1,24 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2010 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.version import * - -class F14Handler(BaseHandler): - version = F14 diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/f15.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/f15.py deleted file mode 100644 index 12aecb4..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/f15.py +++ /dev/null @@ -1,24 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2010 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.version import * - -class F15Handler(BaseHandler): - version = F15 diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/f16.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/f16.py deleted file mode 100644 index 3c52f8d..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/f16.py +++ /dev/null @@ -1,24 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2011 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.version import * - -class F16Handler(BaseHandler): - version = F16 diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/f7.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/f7.py deleted file mode 100644 index 5e856ea..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/f7.py +++ /dev/null @@ -1,24 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.version import * - -class F7Handler(BaseHandler): - version = F7 diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/f8.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/f8.py deleted file mode 100644 index 1a97881..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/f8.py +++ /dev/null @@ -1,24 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.version import * - -class F8Handler(BaseHandler): - version = F8 diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/f9.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/f9.py deleted file mode 100644 index 116f1b5..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/f9.py +++ /dev/null @@ -1,24 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.version import * - -class F9Handler(BaseHandler): - version = F9 diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/fc3.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/fc3.py deleted file mode 100644 index a115dc2..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/fc3.py +++ /dev/null @@ -1,24 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2005, 2006, 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.version import * - -class FC3Handler(BaseHandler): - version = FC3 diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/fc4.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/fc4.py deleted file mode 100644 index fd47b73..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/fc4.py +++ /dev/null @@ -1,24 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.version import * - -class FC4Handler(BaseHandler): - version = FC4 diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/fc5.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/fc5.py deleted file mode 100644 index bcdc29d..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/fc5.py +++ /dev/null @@ -1,24 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.version import * - -class FC5Handler(BaseHandler): - version = FC5 diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/fc6.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/fc6.py deleted file mode 100644 index c83a929..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/fc6.py +++ /dev/null @@ -1,24 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2006, 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.version import * - -class FC6Handler(BaseHandler): - version = FC6 diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/rhel3.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/rhel3.py deleted file mode 100644 index 131763c..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/rhel3.py +++ /dev/null @@ -1,24 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.version import * - -class RHEL3Handler(BaseHandler): - version = RHEL3 diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/rhel4.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/rhel4.py deleted file mode 100644 index 3496c43..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/rhel4.py +++ /dev/null @@ -1,24 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.version import * - -class RHEL4Handler(BaseHandler): - version = RHEL4 diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/rhel5.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/rhel5.py deleted file mode 100644 index abb7a8d..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/rhel5.py +++ /dev/null @@ -1,24 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.version import * - -class RHEL5Handler(BaseHandler): - version = RHEL5 diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/rhel6.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/rhel6.py deleted file mode 100644 index 7202419..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/handlers/rhel6.py +++ /dev/null @@ -1,24 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2010 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -from pykickstart.base import * -from pykickstart.version import * - -class RHEL6Handler(BaseHandler): - version = RHEL6 diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/ko.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/ko.py deleted file mode 100644 index 1350d19..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/ko.py +++ /dev/null @@ -1,37 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2009 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -""" -Base classes for internal pykickstart use. - -The module exports the following important classes: - - KickstartObject - The base class for all classes in pykickstart -""" - -class KickstartObject(object): - """The base class for all other classes in pykickstart.""" - def __init__(self, *args, **kwargs): - """Create a new KickstartObject instance. All other classes in - pykickstart should be derived from this one. Instance attributes: - """ - pass - - def __str__(self): - return "" diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/options.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/options.py deleted file mode 100644 index d07fcf6..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/options.py +++ /dev/null @@ -1,204 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2005, 2006, 2007 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -""" -Specialized option handling. - -This module exports two classes: - - KSOptionParser - A specialized subclass of OptionParser to be used - in BaseHandler subclasses. - - KSOption - A specialized subclass of Option. -""" -import warnings -from copy import copy -from optparse import * - -from constants import * -from errors import * -from version import * - -import gettext -_ = lambda x: gettext.ldgettext("pykickstart", x) - -class KSOptionParser(OptionParser): - """A specialized subclass of optparse.OptionParser to handle extra option - attribute checking, work error reporting into the KickstartParseError - framework, and to turn off the default help. - """ - def exit(self, status=0, msg=None): - pass - - def error(self, msg): - if self.lineno != None: - raise KickstartParseError ( formatErrorMsg(self.lineno, msg=msg)) - else: - raise KickstartParseError ( msg) - - def keys(self): - retval = [] - - for opt in self.option_list: - if opt not in retval: - retval.append(opt.dest) - - return retval - - def _init_parsing_state (self): - OptionParser._init_parsing_state(self) - self.option_seen = {} - - def check_values (self, values, args): - def seen(self, option): - return self.option_seen.has_key(option) - - def usedTooNew(self, option): - return option.introduced and option.introduced > self.version - - def usedDeprecated(self, option): - return option.deprecated - - def usedRemoved(self, option): - return option.removed and option.removed <= self.version - - for option in filter(lambda o: isinstance(o, Option), self.option_list): - if option.required and not seen(self, option): - raise KickstartValueError (formatErrorMsg(self.lineno, _("Option %s is required") % option)) - elif seen(self, option) and usedTooNew(self, option): - mapping = {"option": option, "intro": versionToString(option.introduced), - "version": versionToString(self.version)} - self.error(_("The %(option)s option was introduced in version %(intro)s, but you are using kickstart syntax version %(version)s.") % mapping) - elif seen(self, option) and usedRemoved(self, option): - mapping = {"option": option, "removed": versionToString(option.removed), - "version": versionToString(self.version)} - - if option.removed == self.version: - self.error(_("The %(option)s option is no longer supported.") % mapping) - else: - self.error(_("The %(option)s option was removed in version %(removed)s, but you are using kickstart syntax version %(version)s.") % mapping) - elif seen(self, option) and usedDeprecated(self, option): - mapping = {"lineno": self.lineno, "option": option} - warnings.warn(_("Ignoring deprecated option on line %(lineno)s: The %(option)s option has been deprecated and no longer has any effect. It may be removed from future releases, which will result in a fatal error from kickstart. Please modify your kickstart file to remove this option.") % mapping, DeprecationWarning) - - return (values, args) - - def parse_args(self, *args, **kwargs): - if kwargs.has_key("lineno"): - self.lineno = kwargs.pop("lineno") - - return OptionParser.parse_args(self, **kwargs) - - def __init__(self, mapping=None, version=None): - """Create a new KSOptionParser instance. Each KickstartCommand - subclass should create one instance of KSOptionParser, providing - at least the lineno attribute. mapping and version are not required. - Instance attributes: - - mapping -- A mapping from option strings to different values. - version -- The version of the kickstart syntax we are checking - against. - """ - OptionParser.__init__(self, option_class=KSOption, - add_help_option=False, - conflict_handler="resolve") - if mapping is None: - self.map = {} - else: - self.map = mapping - - self.lineno = None - self.option_seen = {} - self.version = version - -def _check_ksboolean(option, opt, value): - if value.lower() in ("on", "yes", "true", "1"): - return True - elif value.lower() in ("off", "no", "false", "0"): - return False - else: - mapping = {"opt": opt, "value": value} - raise OptionValueError(_("Option %(opt)s: invalid boolean value: %(value)r") % mapping) - -def _check_string(option, opt, value): - #if len(value) > 2 and value.startswith("--"): - #mapping = {"opt": opt, "value": value} - #raise OptionValueError(_("Option %(opt)s: invalid string value: %(value)r") % mapping) - # else: - return value - -# Creates a new Option class that supports several new attributes: -# - required: any option with this attribute must be supplied or an exception -# is thrown -# - introduced: the kickstart syntax version that this option first appeared -# in - an exception will be raised if the option is used and -# the specified syntax version is less than the value of this -# attribute -# - deprecated: the kickstart syntax version that this option was deprecated -# in - a DeprecationWarning will be thrown if the option is -# used and the specified syntax version is greater than the -# value of this attribute -# - removed: the kickstart syntax version that this option was removed in - an -# exception will be raised if the option is used and the specified -# syntax version is greated than the value of this attribute -# Also creates a new type: -# - ksboolean: support various kinds of boolean values on an option -# And two new actions: -# - map : allows you to define an opt -> val mapping such that dest gets val -# when opt is seen -# - map_extend: allows you to define an opt -> [val1, ... valn] mapping such -# that dest gets a list of vals built up when opt is seen -class KSOption (Option): - ATTRS = Option.ATTRS + ['introduced', 'deprecated', 'removed', 'required'] - ACTIONS = Option.ACTIONS + ("map", "map_extend",) - STORE_ACTIONS = Option.STORE_ACTIONS + ("map", "map_extend",) - - TYPES = Option.TYPES + ("ksboolean", "string") - TYPE_CHECKER = copy(Option.TYPE_CHECKER) - TYPE_CHECKER["ksboolean"] = _check_ksboolean - TYPE_CHECKER["string"] = _check_string - - def _check_required(self): - if self.required and not self.takes_value(): - raise OptionError(_("Required flag set for option that doesn't take a value"), self) - - # Make sure _check_required() is called from the constructor! - CHECK_METHODS = Option.CHECK_METHODS + [_check_required] - - def process (self, opt, value, values, parser): - Option.process(self, opt, value, values, parser) - parser.option_seen[self] = 1 - - # Override default take_action method to handle our custom actions. - def take_action(self, action, dest, opt, value, values, parser): - if action == "map": - values.ensure_value(dest, parser.map[opt.lstrip('-')]) - elif action == "map_extend": - values.ensure_value(dest, []).extend(parser.map[opt.lstrip('-')]) - else: - Option.take_action(self, action, dest, opt, value, values, parser) - - def takes_value(self): - # Deprecated options don't take a value. - return Option.takes_value(self) and not self.deprecated - - def __init__(self, *args, **kwargs): - self.deprecated = False - self.required = False - Option.__init__(self, *args, **kwargs) diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/parser.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/parser.py deleted file mode 100644 index a485dfe..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/parser.py +++ /dev/null @@ -1,728 +0,0 @@ -# -# parser.py: Kickstart file parser. -# -# Chris Lumens -# -# Copyright 2005, 2006, 2007, 2008, 2011 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -""" -Main kickstart file processing module. - -This module exports several important classes: - - Script - Representation of a single %pre, %post, or %traceback script. - - Packages - Representation of the %packages section. - - KickstartParser - The kickstart file parser state machine. -""" -from collections import Iterator -import os -import shlex -import sys -import tempfile -from copy import copy -from optparse import * -from urlgrabber import urlread -import urlgrabber.grabber as grabber - -import constants -from errors import KickstartError, KickstartParseError, KickstartValueError, formatErrorMsg -from ko import KickstartObject -from sections import * -import version - -import gettext -_ = lambda x: gettext.ldgettext("pykickstart", x) - -STATE_END = "end" -STATE_COMMANDS = "commands" - -ver = version.DEVEL - -def _preprocessStateMachine (lineIter): - l = None - lineno = 0 - - # Now open an output kickstart file that we are going to write to one - # line at a time. - (outF, outName) = tempfile.mkstemp("-ks.cfg", "", "/tmp") - - while True: - try: - l = lineIter.next() - except StopIteration: - break - - # At the end of the file? - if l == "": - break - - lineno += 1 - url = None - - ll = l.strip() - if not ll.startswith("%ksappend"): - os.write(outF, l) - continue - - # Try to pull down the remote file. - try: - ksurl = ll.split(' ')[1] - except: - raise KickstartParseError (formatErrorMsg(lineno, msg=_("Illegal url for %%ksappend: %s") % ll)) - - try: - url = grabber.urlopen(ksurl) - except grabber.URLGrabError as e: - raise KickstartError (formatErrorMsg(lineno, msg=_("Unable to open %%ksappend file: %s") % e.strerror)) - else: - # Sanity check result. Sometimes FTP doesn't catch a file - # is missing. - try: - if url.size < 1: - raise KickstartError (formatErrorMsg(lineno, msg=_("Unable to open %%ksappend file"))) - except: - raise KickstartError (formatErrorMsg(lineno, msg=_("Unable to open %%ksappend file"))) - - # If that worked, write the remote file to the output kickstart - # file in one burst. Then close everything up to get ready to - # read ahead in the input file. This allows multiple %ksappend - # lines to exist. - if url is not None: - os.write(outF, url.read()) - url.close() - - # All done - close the temp file and return its location. - os.close(outF) - return outName - -def preprocessFromString (s): - """Preprocess the kickstart file, provided as the string str. This - method is currently only useful for handling %ksappend lines, - which need to be fetched before the real kickstart parser can be - run. Returns the location of the complete kickstart file. - """ - i = iter(s.splitlines(True) + [""]) - rc = _preprocessStateMachine (i.next) - return rc - -def preprocessKickstart (f): - """Preprocess the kickstart file, given by the filename file. This - method is currently only useful for handling %ksappend lines, - which need to be fetched before the real kickstart parser can be - run. Returns the location of the complete kickstart file. - """ - try: - fh = urlopen(f) - except grabber.URLGrabError as e: - raise KickstartError (formatErrorMsg(0, msg=_("Unable to open input kickstart file: %s") % e.strerror)) - - rc = _preprocessStateMachine (iter(fh.readlines())) - fh.close() - return rc - -class PutBackIterator(Iterator): - def __init__(self, iterable): - self._iterable = iter(iterable) - self._buf = None - - def __iter__(self): - return self - - def put(self, s): - self._buf = s - - def next(self): - if self._buf: - retval = self._buf - self._buf = None - return retval - else: - return self._iterable.next() - -### -### SCRIPT HANDLING -### -class Script(KickstartObject): - """A class representing a single kickstart script. If functionality beyond - just a data representation is needed (for example, a run method in - anaconda), Script may be subclassed. Although a run method is not - provided, most of the attributes of Script have to do with running the - script. Instances of Script are held in a list by the Version object. - """ - def __init__(self, script, *args , **kwargs): - """Create a new Script instance. Instance attributes: - - errorOnFail -- If execution of the script fails, should anaconda - stop, display an error, and then reboot without - running any other scripts? - inChroot -- Does the script execute in anaconda's chroot - environment or not? - interp -- The program that should be used to interpret this - script. - lineno -- The line number this script starts on. - logfile -- Where all messages from the script should be logged. - script -- A string containing all the lines of the script. - type -- The type of the script, which can be KS_SCRIPT_* from - pykickstart.constants. - """ - KickstartObject.__init__(self, *args, **kwargs) - self.script = "".join(script) - - self.interp = kwargs.get("interp", "/bin/sh") - self.inChroot = kwargs.get("inChroot", False) - self.lineno = kwargs.get("lineno", None) - self.logfile = kwargs.get("logfile", None) - self.errorOnFail = kwargs.get("errorOnFail", False) - self.type = kwargs.get("type", constants.KS_SCRIPT_PRE) - - def __str__(self): - """Return a string formatted for output to a kickstart file.""" - retval = "" - - if self.type == constants.KS_SCRIPT_PRE: - retval += '\n%pre' - elif self.type == constants.KS_SCRIPT_POST: - retval += '\n%post' - elif self.type == constants.KS_SCRIPT_TRACEBACK: - retval += '\n%traceback' - elif self.type == constants.KS_SCRIPT_RUN: - retval += '\n%runscript' - elif self.type == constants.KS_SCRIPT_UMOUNT: - retval += '\n%post-umount' - - if self.interp != "/bin/sh" and self.interp != "": - retval += " --interpreter=%s" % self.interp - if self.type == constants.KS_SCRIPT_POST and not self.inChroot: - retval += " --nochroot" - if self.logfile != None: - retval += " --logfile %s" % self.logfile - if self.errorOnFail: - retval += " --erroronfail" - - if self.script.endswith("\n"): - if ver >= version.F8: - return retval + "\n%s%%end\n" % self.script - else: - return retval + "\n%s\n" % self.script - else: - if ver >= version.F8: - return retval + "\n%s\n%%end\n" % self.script - else: - return retval + "\n%s\n" % self.script - - -## -## PACKAGE HANDLING -## -class Group: - """A class representing a single group in the %packages section.""" - def __init__(self, name="", include=constants.GROUP_DEFAULT): - """Create a new Group instance. Instance attributes: - - name -- The group's identifier - include -- The level of how much of the group should be included. - Values can be GROUP_* from pykickstart.constants. - """ - self.name = name - self.include = include - - def __str__(self): - """Return a string formatted for output to a kickstart file.""" - if self.include == constants.GROUP_REQUIRED: - return "@%s --nodefaults" % self.name - elif self.include == constants.GROUP_ALL: - return "@%s --optional" % self.name - else: - return "@%s" % self.name - - def __cmp__(self, other): - if self.name < other.name: - return -1 - elif self.name > other.name: - return 1 - return 0 - -class Packages(KickstartObject): - """A class representing the %packages section of the kickstart file.""" - def __init__(self, *args, **kwargs): - """Create a new Packages instance. Instance attributes: - - addBase -- Should the Base group be installed even if it is - not specified? - default -- Should the default package set be selected? - excludedList -- A list of all the packages marked for exclusion in - the %packages section, without the leading minus - symbol. - excludeDocs -- Should documentation in each package be excluded? - groupList -- A list of Group objects representing all the groups - specified in the %packages section. Names will be - stripped of the leading @ symbol. - excludedGroupList -- A list of Group objects representing all the - groups specified for removal in the %packages - section. Names will be stripped of the leading - -@ symbols. - handleMissing -- If unknown packages are specified in the %packages - section, should it be ignored or not? Values can - be KS_MISSING_* from pykickstart.constants. - packageList -- A list of all the packages specified in the - %packages section. - instLangs -- A list of languages to install. - """ - KickstartObject.__init__(self, *args, **kwargs) - - self.addBase = True - self.default = False - self.excludedList = [] - self.excludedGroupList = [] - self.excludeDocs = False - self.groupList = [] - self.handleMissing = constants.KS_MISSING_PROMPT - self.packageList = [] - self.tpk_packageList = [] - self.instLangs = None - - def __str__(self): - """Return a string formatted for output to a kickstart file.""" - pkgs = "" - - if not self.default: - grps = self.groupList - grps.sort() - for grp in grps: - pkgs += "%s\n" % grp.__str__() - - p = self.packageList - p.sort() - for pkg in p: - pkgs += "%s\n" % pkg - - grps = self.excludedGroupList - grps.sort() - for grp in grps: - pkgs += "-%s\n" % grp.__str__() - - p = self.excludedList - p.sort() - for pkg in p: - pkgs += "-%s\n" % pkg - - if pkgs == "": - return "" - - retval = "\n%packages" - - if self.default: - retval += " --default" - if self.excludeDocs: - retval += " --excludedocs" - if not self.addBase: - retval += " --nobase" - if self.handleMissing == constants.KS_MISSING_IGNORE: - retval += " --ignoremissing" - if self.instLangs: - retval += " --instLangs=%s" % self.instLangs - - if ver >= version.F8: - return retval + "\n" + pkgs + "\n%end\n" - else: - return retval + "\n" + pkgs + "\n" - - def _processGroup (self, line): - op = OptionParser() - op.add_option("--nodefaults", action="store_true", default=False) - op.add_option("--optional", action="store_true", default=False) - - (opts, extra) = op.parse_args(args=line.split()) - - if opts.nodefaults and opts.optional: - raise KickstartValueError (_("Group cannot specify both --nodefaults and --optional")) - - # If the group name has spaces in it, we have to put it back together - # now. - grp = " ".join(extra) - - if opts.nodefaults: - self.groupList.append(Group(name=grp, include=constants.GROUP_REQUIRED)) - elif opts.optional: - self.groupList.append(Group(name=grp, include=constants.GROUP_ALL)) - else: - self.groupList.append(Group(name=grp, include=constants.GROUP_DEFAULT)) - - def add (self, pkgList): - """Given a list of lines from the input file, strip off any leading - symbols and add the result to the appropriate list. - """ - existingExcludedSet = set(self.excludedList) - existingPackageSet = set(self.packageList) - newExcludedSet = set() - newPackageSet = set() - - excludedGroupList = [] - - for pkg in pkgList: - stripped = pkg.strip() - - if stripped[0] == "@": - self._processGroup(stripped[1:]) - elif stripped[0] == "-": - if stripped[1] == "@": - excludedGroupList.append(Group(name=stripped[2:])) - else: - newExcludedSet.add(stripped[1:]) - else: - newPackageSet.add(stripped) - - # Groups have to be excluded in two different ways (note: can't use - # sets here because we have to store objects): - excludedGroupNames = map(lambda g: g.name, excludedGroupList) - - # First, an excluded group may be cancelling out a previously given - # one. This is often the case when using %include. So there we should - # just remove the group from the list. - self.groupList = filter(lambda g: g.name not in excludedGroupNames, self.groupList) - - # Second, the package list could have included globs which are not - # processed by pykickstart. In that case we need to preserve a list of - # excluded groups so whatever tool doing package/group installation can - # take appropriate action. - self.excludedGroupList.extend(excludedGroupList) - - existingPackageSet = (existingPackageSet - newExcludedSet) | newPackageSet - existingExcludedSet = (existingExcludedSet - existingPackageSet) | newExcludedSet - - self.packageList = list(existingPackageSet) - self.excludedList = list(existingExcludedSet) - -class TpkPackages(KickstartObject): - """A class representing the %tpk_packages section of the kickstart file.""" - def __init__(self, *args, **kwargs): - KickstartObject.__init__(self, *args, **kwargs) - self.tpk_packageList = [] - def __str__(self): - tpk_pkgs = "" - retval = "\n%tpk_packages" - p = self.packageList - p.sort() - for pkg in p: - tpk_pkgs += "%s\n" % pkg - return retval + "\n" +tpk_pkgs - def add(self, tpkPackageList): - tpk_PackageSet = set(self.tpk_packageList) - for tpk_pkg in tpkPackageList: - stripped = tpk_pkg.strip() - tpk_PackageSet.add(stripped) - self.tpk_packageList = list(tpk_PackageSet) -### -### PARSER -### -class KickstartParser: - """The kickstart file parser class as represented by a basic state - machine. To create a specialized parser, make a subclass and override - any of the methods you care about. Methods that don't need to do - anything may just pass. However, _stateMachine should never be - overridden. - """ - def __init__ (self, handler, followIncludes=True, errorsAreFatal=True, - missingIncludeIsFatal=True): - """Create a new KickstartParser instance. Instance attributes: - - errorsAreFatal -- Should errors cause processing to halt, or - just print a message to the screen? This - is most useful for writing syntax checkers - that may want to continue after an error is - encountered. - followIncludes -- If %include is seen, should the included - file be checked as well or skipped? - handler -- An instance of a BaseHandler subclass. If - None, the input file will still be parsed - but no data will be saved and no commands - will be executed. - missingIncludeIsFatal -- Should missing include files be fatal, even - if errorsAreFatal is False? - """ - self.errorsAreFatal = errorsAreFatal - self.followIncludes = followIncludes - self.handler = handler - self.currentdir = {} - self.missingIncludeIsFatal = missingIncludeIsFatal - - self._state = STATE_COMMANDS - self._includeDepth = 0 - self._line = "" - - self.version = self.handler.version - - global ver - ver = self.version - - self._sections = {} - self.setupSections() - - def _reset(self): - """Reset the internal variables of the state machine for a new kickstart file.""" - self._state = STATE_COMMANDS - self._includeDepth = 0 - - def getSection(self, s): - """Return a reference to the requested section (s must start with '%'s), - or raise KeyError if not found. - """ - return self._sections[s] - - def handleCommand (self, lineno, args): - """Given the list of command and arguments, call the Version's - dispatcher method to handle the command. Returns the command or - data object returned by the dispatcher. This method may be - overridden in a subclass if necessary. - """ - if self.handler: - self.handler.currentCmd = args[0] - self.handler.currentLine = self._line - retval = self.handler.dispatcher(args, lineno) - - return retval - - def registerSection(self, obj): - """Given an instance of a Section subclass, register the new section - with the parser. Calling this method means the parser will - recognize your new section and dispatch into the given object to - handle it. - """ - if not obj.sectionOpen: - raise TypeError ("no sectionOpen given for section %s" % obj) - - if not obj.sectionOpen.startswith("%"): - raise TypeError ("section %s tag does not start with a %%" % obj.sectionOpen) - - self._sections[obj.sectionOpen] = obj - - def _finalize(self, obj): - """Called at the close of a kickstart section to take any required - actions. Internally, this is used to add scripts once we have the - whole body read. - """ - obj.finalize() - self._state = STATE_COMMANDS - - def _handleSpecialComments(self, line): - """Kickstart recognizes a couple special comments.""" - if self._state != STATE_COMMANDS: - return - - # Save the platform for s-c-kickstart. - if line[:10] == "#platform=": - self.handler.platform = self._line[11:] - - def _readSection(self, lineIter, lineno): - obj = self._sections[self._state] - - while True: - try: - line = lineIter.next() - if line == "": - # This section ends at the end of the file. - if self.version >= version.F8: - raise KickstartParseError (formatErrorMsg(lineno, msg=_("Section does not end with %%end."))) - - self._finalize(obj) - except StopIteration: - break - - lineno += 1 - - # Throw away blank lines and comments, unless the section wants all - # lines. - if self._isBlankOrComment(line) and not obj.allLines: - continue - - if line.startswith("%"): - args = shlex.split(line) - - if args and args[0] == "%end": - # This is a properly terminated section. - self._finalize(obj) - break - elif args and args[0] == "%ksappend": - continue - elif args and (self._validState(args[0]) or args[0] in ["%include", "%ksappend"]): - # This is an unterminated section. - if self.version >= version.F8: - raise KickstartParseError (formatErrorMsg(lineno, msg=_("Section does not end with %%end."))) - - # Finish up. We do not process the header here because - # kicking back out to STATE_COMMANDS will ensure that happens. - lineIter.put(line) - lineno -= 1 - self._finalize(obj) - break - else: - # This is just a line within a section. Pass it off to whatever - # section handles it. - obj.handleLine(line) - - return lineno - - def _validState(self, st): - """Is the given section tag one that has been registered with the parser?""" - return st in self._sections.keys() - - def _tryFunc(self, fn): - """Call the provided function (which doesn't take any arguments) and - do the appropriate error handling. If errorsAreFatal is False, this - function will just print the exception and keep going. - """ - try: - fn() - except Exception as msg: - if self.errorsAreFatal: - raise - else: - print (msg) - - def _isBlankOrComment(self, line): - return line.isspace() or line == "" or line.lstrip()[0] == '#' - - def _stateMachine(self, lineIter): - # For error reporting. - lineno = 0 - - while True: - # Get the next line out of the file, quitting if this is the last line. - try: - self._line = lineIter.next() - if self._line == "": - break - except StopIteration: - break - - lineno += 1 - - # Eliminate blank lines, whitespace-only lines, and comments. - if self._isBlankOrComment(self._line): - self._handleSpecialComments(self._line) - continue - - # Remove any end-of-line comments. - sanitized = self._line.split("#")[0] - - # Then split the line. - args = shlex.split(sanitized.rstrip()) - - if args[0] == "%include": - # This case comes up primarily in ksvalidator. - if not self.followIncludes: - continue - - if len(args) == 1 or not args[1]: - raise KickstartParseError (formatErrorMsg(lineno)) - - self._includeDepth += 1 - - try: - self.readKickstart(args[1], reset=False) - except KickstartError: - # Handle the include file being provided over the - # network in a %pre script. This case comes up in the - # early parsing in anaconda. - if self.missingIncludeIsFatal: - raise - - self._includeDepth -= 1 - continue - - # Now on to the main event. - if self._state == STATE_COMMANDS: - if args[0] == "%ksappend": - # This is handled by the preprocess* functions, so continue. - continue - elif args[0][0] == '%': - # This is the beginning of a new section. Handle its header - # here. - newSection = args[0] - if not self._validState(newSection): - raise KickstartParseError (formatErrorMsg(lineno, msg=_("Unknown kickstart section: %s" % newSection))) - - self._state = newSection - obj = self._sections[self._state] - self._tryFunc(lambda: obj.handleHeader(lineno, args)) - - # This will handle all section processing, kicking us back - # out to STATE_COMMANDS at the end with the current line - # being the next section header, etc. - lineno = self._readSection(lineIter, lineno) - else: - # This is a command in the command section. Dispatch to it. - self._tryFunc(lambda: self.handleCommand(lineno, args)) - elif self._state == STATE_END: - break - - def readKickstartFromString (self, s, reset=True): - """Process a kickstart file, provided as the string str.""" - if reset: - self._reset() - - # Add a "" to the end of the list so the string reader acts like the - # file reader and we only get StopIteration when we're after the final - # line of input. - i = PutBackIterator(s.splitlines(True) + [""]) - self._stateMachine (i) - - def readKickstart(self, f, reset=True): - """Process a kickstart file, given by the filename f.""" - if reset: - self._reset() - - # an %include might not specify a full path. if we don't try to figure - # out what the path should have been, then we're unable to find it - # requiring full path specification, though, sucks. so let's make - # the reading "smart" by keeping track of what the path is at each - # include depth. - if not os.path.exists(f): - if self.currentdir.has_key(self._includeDepth - 1): - if os.path.exists(os.path.join(self.currentdir[self._includeDepth - 1], f)): - f = os.path.join(self.currentdir[self._includeDepth - 1], f) - - cd = os.path.dirname(f) - if not cd.startswith("/"): - cd = os.path.abspath(cd) - self.currentdir[self._includeDepth] = cd - - try: - s = urlread(f) - except grabber.URLGrabError as e: - raise KickstartError (formatErrorMsg(0, msg=_("Unable to open input kickstart file: %s") % e.strerror)) - - self.readKickstartFromString(s, reset=False) - - def setupSections(self): - """Install the sections all kickstart files support. You may override - this method in a subclass, but should avoid doing so unless you know - what you're doing. - """ - self._sections = {} - - # Install the sections all kickstart files support. - self.registerSection(PreScriptSection(self.handler, dataObj=Script)) - self.registerSection(PostScriptSection(self.handler, dataObj=Script)) - self.registerSection(TracebackScriptSection(self.handler, dataObj=Script)) - self.registerSection(RunScriptSection(self.handler, dataObj=Script)) - self.registerSection(PostUmountScriptSection(self.handler, dataObj=Script)) - self.registerSection(PackageSection(self.handler)) - self.registerSection(TpkPackageSection(self.handler)) - diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/sections.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/sections.py deleted file mode 100644 index c360a90..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/sections.py +++ /dev/null @@ -1,292 +0,0 @@ -# -# sections.py: Kickstart file sections. -# -# Chris Lumens -# -# Copyright 2011 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -""" -This module exports the classes that define a section of a kickstart file. A -section is a chunk of the file starting with a %tag and ending with a %end. -Examples of sections include %packages, %pre, and %post. - -You may use this module to define your own custom sections which will be -treated just the same as a predefined one by the kickstart parser. All that -is necessary is to create a new subclass of Section and call -parser.registerSection with an instance of your new class. -""" -from constants import * -from errors import * -from options import KSOptionParser -from version import * - -class Section(object): - """The base class for defining kickstart sections. You are free to - subclass this as appropriate. - - Class attributes: - - allLines -- Does this section require the parser to call handleLine - for every line in the section, even blanks and comments? - sectionOpen -- The string that denotes the start of this section. You - must start your tag with a percent sign. - timesSeen -- This attribute is for informational purposes only. It is - incremented every time handleHeader is called to keep - track of the number of times a section of this type is - seen. - """ - allLines = False - sectionOpen = "" - timesSeen = 0 - - def __init__(self, handler, **kwargs): - """Create a new Script instance. At the least, you must pass in an - instance of a baseHandler subclass. - - Valid kwargs: - - dataObj -- - """ - self.handler = handler - - self.version = self.handler.version - - self.dataObj = kwargs.get("dataObj", None) - - def finalize(self): - """This method is called when the %end tag for a section is seen. It - is not required to be provided. - """ - pass - - def handleLine(self, line): - """This method is called for every line of a section. Take whatever - action is appropriate. While this method is not required to be - provided, not providing it does not make a whole lot of sense. - - Arguments: - - line -- The complete line, with any trailing newline. - """ - pass - - def handleHeader(self, lineno, args): - """This method is called when the opening tag for a section is seen. - Not all sections will need this method, though all provided with - kickstart include one. - - Arguments: - - args -- A list of all strings passed as arguments to the section - opening tag. - """ - self.timesSeen += 1 - -class NullSection(Section): - """This defines a section that pykickstart will recognize but do nothing - with. If the parser runs across a %section that has no object registered, - it will raise an error. Sometimes, you may want to simply ignore those - sections instead. This class is useful for that purpose. - """ - def __init__(self, *args, **kwargs): - """Create a new NullSection instance. You must pass a sectionOpen - parameter (including a leading '%') for the section you wish to - ignore. - """ - Section.__init__(self, *args, **kwargs) - self.sectionOpen = kwargs.get("sectionOpen") - -class ScriptSection(Section): - allLines = True - - def __init__(self, *args, **kwargs): - Section.__init__(self, *args, **kwargs) - self._script = {} - self._resetScript() - - def _getParser(self): - op = KSOptionParser(self.version) - op.add_option("--erroronfail", dest="errorOnFail", action="store_true", - default=False) - op.add_option("--interpreter", dest="interpreter", default="/bin/sh") - op.add_option("--log", "--logfile", dest="log") - return op - - def _resetScript(self): - self._script = {"interp": "/bin/sh", "log": None, "errorOnFail": False, - "lineno": None, "chroot": False, "body": []} - - def handleLine(self, line): - self._script["body"].append(line) - - def finalize(self): - if " ".join(self._script["body"]).strip() == "": - return - - kwargs = {"interp": self._script["interp"], - "inChroot": self._script["chroot"], - "lineno": self._script["lineno"], - "logfile": self._script["log"], - "errorOnFail": self._script["errorOnFail"], - "type": self._script["type"]} - - s = self.dataObj (self._script["body"], **kwargs) - self._resetScript() - - if self.handler: - self.handler.scripts.append(s) - - def handleHeader(self, lineno, args): - """Process the arguments to a %pre/%post/%traceback header for later - setting on a Script instance once the end of the script is found. - This method may be overridden in a subclass if necessary. - """ - Section.handleHeader(self, lineno, args) - op = self._getParser() - - (opts, extra) = op.parse_args(args=args[1:], lineno=lineno) - - self._script["interp"] = opts.interpreter - self._script["lineno"] = lineno - self._script["log"] = opts.log - self._script["errorOnFail"] = opts.errorOnFail - if hasattr(opts, "nochroot"): - self._script["chroot"] = not opts.nochroot - -class PreScriptSection(ScriptSection): - sectionOpen = "%pre" - - def _resetScript(self): - ScriptSection._resetScript(self) - self._script["type"] = KS_SCRIPT_PRE - -class PostScriptSection(ScriptSection): - sectionOpen = "%post" - - def _getParser(self): - op = ScriptSection._getParser(self) - op.add_option("--nochroot", dest="nochroot", action="store_true", - default=False) - return op - - def _resetScript(self): - ScriptSection._resetScript(self) - self._script["chroot"] = True - self._script["type"] = KS_SCRIPT_POST - -class TracebackScriptSection(ScriptSection): - sectionOpen = "%traceback" - - def _resetScript(self): - ScriptSection._resetScript(self) - self._script["type"] = KS_SCRIPT_TRACEBACK - -class RunScriptSection(ScriptSection): - sectionOpen = "%runscript" - - def _resetScript(self): - ScriptSection._resetScript(self) - self._script["type"] = KS_SCRIPT_RUN - - def finalize(self): - ScriptSection.finalize(self) - if self.handler: - for s in self.handler.scripts: - if s.type == KS_SCRIPT_UMOUNT: - raise KickstartError("%runscript and %post-umount " \ - "can not be defined together") - -class PostUmountScriptSection(ScriptSection): - sectionOpen = "%post-umount" - - def _resetScript(self): - ScriptSection._resetScript(self) - self._script["type"] = KS_SCRIPT_UMOUNT - - def finalize(self): - ScriptSection.finalize(self) - if self.handler: - for s in self.handler.scripts: - if s.type == KS_SCRIPT_RUN: - raise KickstartError("%runscript and %post-umount " \ - "can not be defined together") - -class PackageSection(Section): - sectionOpen = "%packages" - - def handleLine(self, line): - if not self.handler: - return - - (h, s, t) = line.partition('#') - line = h.rstrip() - self.handler.packages.add([line]) - - def handleHeader(self, lineno, args): - """Process the arguments to the %packages header and set attributes - on the Version's Packages instance appropriate. This method may be - overridden in a subclass if necessary. - """ - Section.handleHeader(self, lineno, args) - op = KSOptionParser(version=self.version) - op.add_option("--excludedocs", dest="excludedocs", action="store_true", - default=False) - op.add_option("--ignoremissing", dest="ignoremissing", - action="store_true", default=False) - op.add_option("--nobase", dest="nobase", action="store_true", - default=False) - op.add_option("--ignoredeps", dest="resolveDeps", action="store_false", - deprecated=FC4, removed=F9) - op.add_option("--resolvedeps", dest="resolveDeps", action="store_true", - deprecated=FC4, removed=F9) - op.add_option("--default", dest="defaultPackages", action="store_true", - default=False, introduced=F7) - op.add_option("--instLangs", dest="instLangs", type="string", - default="", introduced=F9) - - (opts, extra) = op.parse_args(args=args[1:], lineno=lineno) - - self.handler.packages.excludeDocs = opts.excludedocs - self.handler.packages.addBase = not opts.nobase - if opts.ignoremissing: - self.handler.packages.handleMissing = KS_MISSING_IGNORE - else: - self.handler.packages.handleMissing = KS_MISSING_PROMPT - - if opts.defaultPackages: - self.handler.packages.default = True - - if opts.instLangs: - self.handler.packages.instLangs = opts.instLangs - -class TpkPackageSection(Section): - sectionOpen = "%tpk_packages" - - def handleLine(self, line): - if not self.handler: - return - - (h, s, t) = line.partition('#') - line = h.rstrip() - self.handler.tpk_packages.add([line]) - - def handleHeader(self, lineno, args): - """Process the arguments to the %tpk_packages header and set attributes - on the Version's TpkPackages instance appropriate. This method may be - overridden in a subclass if necessary. - """ - Section.handleHeader(self, lineno, args) diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/version.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/version.py deleted file mode 100644 index 102cc37..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/3rdparty/pykickstart/version.py +++ /dev/null @@ -1,197 +0,0 @@ -# -# Chris Lumens -# -# Copyright 2006, 2007, 2008, 2009, 2010 Red Hat, Inc. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Any Red Hat -# trademarks that are incorporated in the source code or documentation are not -# subject to the GNU General Public License and may only be used or replicated -# with the express permission of Red Hat, Inc. -# -""" -Methods for working with kickstart versions. - -This module defines several symbolic constants that specify kickstart syntax -versions. Each version corresponds roughly to one release of Red Hat Linux, -Red Hat Enterprise Linux, or Fedora Core as these are where most syntax -changes take place. - -This module also exports several functions: - - makeVersion - Given a version number, return an instance of the - matching handler class. - - returnClassForVersion - Given a version number, return the matching - handler class. This does not return an - instance of that class, however. - - stringToVersion - Convert a string representation of a version number - into the symbolic constant. - - versionToString - Perform the reverse mapping. - - versionFromFile - Read a kickstart file and determine the version of - syntax it uses. This requires the kickstart file to - have a version= comment in it. -""" -import imputil, re, sys -from urlgrabber import urlopen - -import gettext -_ = lambda x: gettext.ldgettext("pykickstart", x) - -from pykickstart.errors import KickstartVersionError - -# Symbolic names for internal version numbers. -RHEL3 = 900 -FC3 = 1000 -RHEL4 = 1100 -FC4 = 2000 -FC5 = 3000 -FC6 = 4000 -RHEL5 = 4100 -F7 = 5000 -F8 = 6000 -F9 = 7000 -F10 = 8000 -F11 = 9000 -F12 = 10000 -F13 = 11000 -RHEL6 = 11100 -F14 = 12000 -F15 = 13000 -F16 = 14000 - -# This always points at the latest version and is the default. -DEVEL = F16 - -# A one-to-one mapping from string representations to version numbers. -versionMap = { - "DEVEL": DEVEL, - "FC3": FC3, "FC4": FC4, "FC5": FC5, "FC6": FC6, "F7": F7, "F8": F8, - "F9": F9, "F10": F10, "F11": F11, "F12": F12, "F13": F13, - "F14": F14, "F15": F15, "F16": F16, - "RHEL3": RHEL3, "RHEL4": RHEL4, "RHEL5": RHEL5, "RHEL6": RHEL6 -} - -def stringToVersion(s): - """Convert string into one of the provided version constants. Raises - KickstartVersionError if string does not match anything. - """ - # First try these short forms. - try: - return versionMap[s.upper()] - except KeyError: - pass - - # Now try the Fedora versions. - m = re.match("^fedora.* (\d+)$", s, re.I) - - if m and m.group(1): - if versionMap.has_key("FC" + m.group(1)): - return versionMap["FC" + m.group(1)] - elif versionMap.has_key("F" + m.group(1)): - return versionMap["F" + m.group(1)] - else: - raise KickstartVersionError(_("Unsupported version specified: %s") % s) - - # Now try the RHEL versions. - m = re.match("^red hat enterprise linux.* (\d+)([\.\d]*)$", s, re.I) - - if m and m.group(1): - if versionMap.has_key("RHEL" + m.group(1)): - return versionMap["RHEL" + m.group(1)] - else: - raise KickstartVersionError(_("Unsupported version specified: %s") % s) - - # If nothing else worked, we're out of options. - raise KickstartVersionError(_("Unsupported version specified: %s") % s) - -def versionToString(version, skipDevel=False): - """Convert version into a string representation of the version number. - This is the reverse operation of stringToVersion. Raises - KickstartVersionError if version does not match anything. - """ - if not skipDevel and version == versionMap["DEVEL"]: - return "DEVEL" - - for (key, val) in versionMap.iteritems(): - if key == "DEVEL": - continue - elif val == version: - return key - - raise KickstartVersionError(_("Unsupported version specified: %s") % version) - -def versionFromFile(f): - """Given a file or URL, look for a line starting with #version= and - return the version number. If no version is found, return DEVEL. - """ - v = DEVEL - - fh = urlopen(f) - - while True: - try: - l = fh.readline() - except StopIteration: - break - - # At the end of the file? - if l == "": - break - - if l.isspace() or l.strip() == "": - continue - - if l[:9] == "#version=": - v = stringToVersion(l[9:].rstrip()) - break - - fh.close() - return v - -def returnClassForVersion(version=DEVEL): - """Return the class of the syntax handler for version. version can be - either a string or the matching constant. Raises KickstartValueError - if version does not match anything. - """ - try: - version = int(version) - module = "%s" % versionToString(version, skipDevel=True) - except ValueError: - module = "%s" % version - version = stringToVersion(version) - - module = module.lower() - - try: - import pykickstart.handlers - sys.path.extend(pykickstart.handlers.__path__) - found = imputil.imp.find_module(module) - loaded = imputil.imp.load_module(module, found[0], found[1], found[2]) - - for (k, v) in loaded.__dict__.iteritems(): - if k.lower().endswith("%shandler" % module): - return v - except: - raise KickstartVersionError(_("Unsupported version specified: %s") % version) - -def makeVersion(version=DEVEL): - """Return a new instance of the syntax handler for version. version can be - either a string or the matching constant. This function is useful for - standalone programs which just need to handle a specific version of - kickstart syntax (as provided by a command line argument, for example) - and need to instantiate the correct object. - """ - cl = returnClassForVersion(version) - return cl() diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/__init__.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/__init__.py deleted file mode 100644 index a60b9b1..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/__init__.py +++ /dev/null @@ -1,22 +0,0 @@ -# -# Copyright (c) 2013 Intel, Inc. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free -# Software Foundation; version 2 of the License -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., 59 -# Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -import os, sys - -__version__ = "0.28.19" - -cur_path = os.path.dirname(__file__) or '.' -sys.path.insert(0, cur_path + '/3rdparty') diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/archive.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/archive.py deleted file mode 100644 index c6fde02..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/archive.py +++ /dev/null @@ -1,450 +0,0 @@ -# -# Copyright (c) 2013 Intel Inc. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free -# Software Foundation; version 2 of the License -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., 59 -# Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -# Following messages should be disabled in pylint -# * Used * or ** magic (W0142) -# * Unused variable (W0612) -# * Used builtin function (W0141) -# * Invalid name for type (C0103) -# * Popen has no '%s' member (E1101) -# pylint: disable= W0612, C0103, E1101 - -""" Compression and Archiving - -Utility functions for creating archive files (tarballs, zip files, etc) -and compressing files (gzip, bzip2, lzop, etc) -""" - -import os -import shutil -import tempfile -import subprocess -from mic import msger - -__all__ = [ - "get_compress_formats", - "compress", - "decompress", - "get_archive_formats", - "get_archive_suffixes", - "make_archive", - "extract_archive", - "compressing", - "packing", - ] - -# TODO: refine Error class for archive/extract - -def which(binary, path=None): - """ Find 'binary' in the directories listed in 'path' - - @binary: the executable file to find - @path: the suposed path to search for, use $PATH if None - @retval: the absolute path if found, otherwise None - """ - if path is None: - path = os.environ["PATH"] - for apath in path.split(os.pathsep): - fpath = os.path.join(apath, binary) - if os.path.isfile(fpath) and os.access(fpath, os.X_OK): - return fpath - return None - -def _call_external(cmdln_or_args): - """ Wapper for subprocess calls. - - @cmdln_or_args: command line to be joined before execution. - @retval: a tuple (returncode, outdata, errdata). - """ - if isinstance(cmdln_or_args, list): - shell = False - else: - shell = True - msger.info("Running command: " + " ".join(cmdln_or_args)) - - proc = subprocess.Popen(cmdln_or_args, shell=shell, - stdout=subprocess.PIPE, - stderr=subprocess.STDOUT) - (outdata, errdata) = proc.communicate() - - return (proc.returncode, outdata, errdata) - -def _do_gzip(input_name, compression=True): - """ Compress/decompress the file with 'gzip' utility. - - @input_name: the file name to compress/decompress - @compress: True for compressing, False for decompressing - @retval: the path of the compressed/decompressed file - """ - if which("pigz") is not None: - compressor = "pigz" - else: - compressor = "gzip" - - if compression: - cmdln = [compressor, "-f", input_name] - else: - cmdln = [compressor, "-d", "-f", input_name] - - _call_external(cmdln) - - if compression: - output_name = input_name + ".gz" - else: - # suppose that file name is suffixed with ".gz" - output_name = os.path.splitext(input_name)[0] - - return output_name - -def _do_bzip2(input_name, compression=True): - """ Compress/decompress the file with 'bzip2' utility. - - @input_name: the file name to compress/decompress - @compress: True for compressing, False for decompressing - @retval: the path of the compressed/decompressed file - """ - if which("pbzip2") is not None: - compressor = "pbzip2" - else: - compressor = "bzip2" - - if compression: - cmdln = [compressor, "-f", input_name] - else: - cmdln = [compressor, "-d", "-f", input_name] - - _call_external(cmdln) - - if compression: - output_name = input_name + ".bz2" - else: - # suppose that file name is suffixed with ".bz2" - output_name = os.path.splitext(input_name)[0] - - return output_name - -def _do_lzop(input_name, compression=True): - """ Compress/decompress the file with 'lzop' utility. - - @input_name: the file name to compress/decompress - @compress: True for compressing, False for decompressing - @retval: the path of the compressed/decompressed file - """ - compressor = "lzop" - - if compression: - cmdln = [compressor, "-f", "-U", input_name] - else: - cmdln = [compressor, "-d", "-f", "-U", input_name] - - _call_external(cmdln) - - if compression: - output_name = input_name + ".lzo" - else: - # suppose that file name is suffixed with ".lzo" - output_name = os.path.splitext(input_name)[0] - - return output_name - -_COMPRESS_SUFFIXES = { - ".lzo" : [".lzo"], - ".gz" : [".gz"], - ".bz2" : [".bz2", ".bz"], - ".tar.lzo" : [".tar.lzo", ".tzo"], - ".tar.gz" : [".tar.gz", ".tgz", ".taz"], - ".tar.bz2" : [".tar.bz2", ".tbz", ".tbz2", ".tar.bz"], -} - -_COMPRESS_FORMATS = { - "gz" : _do_gzip, - "bz2": _do_bzip2, - "lzo": _do_lzop, -} - -def get_compress_formats(): - """ Get the list of the supported compression formats - - @retval: a list contained supported compress formats - """ - return _COMPRESS_FORMATS.keys() - -def get_compress_suffixes(): - """ Get the list of the support suffixes - - @retval: a list contained all suffixes - """ - suffixes = [] - for key in _COMPRESS_SUFFIXES.keys(): - suffix = _COMPRESS_SUFFIXES[key] - if (suffix): - suffixes.extend(suffix) - - return suffixes - -def compress(file_path, compress_format): - """ Compress a given file - - @file_path: the path of the file to compress - @compress_format: the compression format - @retval: the path of the compressed file - """ - if not os.path.isfile(file_path): - raise OSError ("can't compress a file not existed: '%s'" % file_path) - - try: - func = _COMPRESS_FORMATS[compress_format] - except KeyError: - raise ValueError ("unknown compress format '%s'" % compress_format) - return func(file_path, True) - -def decompress(file_path, decompress_format=None): - """ Decompess a give file - - @file_path: the path of the file to decompress - @decompress_format: the format for decompression, None for auto detection - @retval: the path of the decompressed file - """ - if not os.path.isfile(file_path): - raise OSError ("can't decompress a file not existed: '%s'" % file_path) - - (file_name, file_ext) = os.path.splitext(file_path) - for key, suffixes in _COMPRESS_SUFFIXES.iteritems(): - if file_ext in suffixes: - file_ext = key - break - - if file_path != (file_name + file_ext): - shutil.move(file_path, file_name + file_ext) - file_path = file_name + file_ext - - if not decompress_format: - decompress_format = os.path.splitext(file_path)[1].lstrip(".") - - try: - func = _COMPRESS_FORMATS[decompress_format] - except KeyError: - raise ValueError ("unknown decompress format '%s'" % decompress_format) - return func(file_path, False) - - -def _do_tar(archive_name, target_name): - """ Archive the directory or the file with 'tar' utility - - @archive_name: the name of the tarball file - @target_name: the name of the target to tar - @retval: the path of the archived file - """ - file_list = [] - if os.path.isdir(target_name): - target_dir = target_name - target_name = "." - for target_file in os.listdir(target_dir): - file_list.append(target_file) - else: - target_dir = os.path.dirname(target_name) - target_name = os.path.basename(target_name) - file_list.append(target_name) - cmdln = ["tar", "-C", target_dir, "-cf", archive_name] - cmdln.extend(file_list) - _call_external(cmdln) - - return archive_name - -def _do_untar(archive_name, target_dir=None): - """ Unarchive the archived file with 'tar' utility - - @archive_name: the name of the archived file - @target_dir: the directory which the target locates - raise exception if fail to extract archive - """ - if not target_dir: - target_dir = os.getcwd() - cmdln = ["tar", "-C", target_dir, "-xf", archive_name] - (returncode, stdout, stderr) = _call_external(cmdln) - if returncode != 0: - raise OSError (os.linesep.join([stdout, stderr])) - -def _imp_tarfile(archive_name, target_name): - """ Archive the directory or the file with tarfile module - - @archive_name: the name of the tarball file - @target_name: the name of the target to tar - @retval: the path of the archived file - """ - import tarfile - - msger.info("Taring files to %s using tarfile module" % archive_name) - tar = tarfile.open(archive_name, 'w') - if os.path.isdir(target_name): - for child in os.listdir(target_name): - tar.add(os.path.join(target_name, child), child) - else: - tar.add(target_name, os.path.basename(target_name)) - - tar.close() - return archive_name - -def _make_tarball(archive_name, target_name, compressor=None): - """ Create a tarball from all the files under 'target_name' or itself. - - @archive_name: the name of the archived file to create - @target_name: the directory or the file name to archive - @compressor: callback function to compress the tarball - @retval: indicate the compressing result - """ - archive_dir = os.path.dirname(archive_name) - tarball_name = tempfile.mktemp(suffix=".tar", dir=archive_dir) - - if which("tar") is not None: - _do_tar(tarball_name, target_name) - else: - _imp_tarfile(tarball_name, target_name) - - if compressor: - tarball_name = compressor(tarball_name, True) - - shutil.move(tarball_name, archive_name) - - return os.path.exists(archive_name) - -def _extract_tarball(archive_name, target_dir, compressor=None): - """ Extract a tarball to a target directory - - @archive_name: the name of the archived file to extract - @target_dir: the directory of the extracted target - """ - - _do_untar(archive_name, target_dir) - -def _make_zipfile(archive_name, target_name): - """ Create a zip file from all the files under 'target_name' or itself. - - @archive_name: the name of the archived file - @target_name: the directory or the file name to archive - @retval: indicate the archiving result - """ - import zipfile - - msger.info("Zipping files to %s using zipfile module" % archive_name) - arv = zipfile.ZipFile(archive_name, 'w', compression=zipfile.ZIP_DEFLATED) - - if os.path.isdir(target_name): - for dirpath, dirname, filenames in os.walk(target_name): - for filename in filenames: - filepath = os.path.normpath(os.path.join(dirpath, filename)) - arcname = os.path.relpath(filepath, target_name) - if os.path.isfile(filepath): - arv.write(filepath, arcname) - else: - arv.write(target_name, os.path.basename(target_name)) - - arv.close() - - return os.path.exists(archive_name) - -_ARCHIVE_SUFFIXES = { - "zip" : [".zip"], - "tar" : [".tar"], - "lzotar": [".tzo", ".tar.lzo"], - "gztar" : [".tgz", ".taz", ".tar.gz"], - "bztar" : [".tbz", ".tbz2", ".tar.bz", ".tar.bz2"], -} - -_ARCHIVE_FORMATS = { - "zip" : ( _make_zipfile, {} ), - "tar" : ( _make_tarball, {"compressor" : None} ), - "lzotar": ( _make_tarball, {"compressor" : _do_lzop} ), - "gztar" : ( _make_tarball, {"compressor" : _do_gzip} ), - "bztar" : ( _make_tarball, {"compressor" : _do_bzip2} ), -} - -def get_archive_formats(): - """ Get the list of the supported formats for archiving - - @retval: a list contained archive formats - """ - return _ARCHIVE_FORMATS.keys() - -def get_archive_suffixes(): - """ Get the list of the support suffixes - - @retval: a list contained all suffixes - """ - suffixes = [] - for name in _ARCHIVE_FORMATS.keys(): - suffix = _ARCHIVE_SUFFIXES.get(name, None) - if (suffix): - suffixes.extend(suffix) - - return suffixes - -def make_archive(archive_name, target_name): - """ Create an archive file (eg. tar or zip). - - @archive_name: the name of the archived file - @target_name: the directory or the file to archive - @retval: the archiving result - """ - if not os.path.exists(target_name): - raise OSError ("archive object does not exist: '%s'" % target_name) - - for aformat, suffixes in _ARCHIVE_SUFFIXES.iteritems(): - if filter(archive_name.endswith, suffixes): - archive_format = aformat - break - else: - raise ValueError ("unknown archive suffix '%s'" % archive_name) - - try: - func, kwargs = _ARCHIVE_FORMATS[archive_format] - except KeyError: - raise ValueError ("unknown archive format '%s'" % archive_format) - - archive_name = os.path.abspath(archive_name) - target_name = os.path.abspath(target_name) - - archive_dir = os.path.dirname(archive_name) - if not os.path.exists(archive_dir): - os.makedirs(archive_dir) - - return func(archive_name, target_name, **kwargs) - -def extract_archive(archive_name, target_name): - """ Extract the given file - - @archive_name: the name of the archived file to extract - @target_name: the directory name where the target locates - raise exception if fail to extract archive - """ - if not os.path.exists(archive_name): - raise OSError ("archived object does not exist: '%s'" % archive_name) - - archive_name = os.path.abspath(archive_name) - target_name = os.path.abspath(target_name) - - if os.path.exists(target_name) and not os.path.isdir(target_name): - raise OSError ("%s should be directory where extracted files locate"\ - % target_name) - - if not os.path.exists(target_name): - os.makedirs(target_name) - - _extract_tarball(archive_name, target_name) - -packing = make_archive -compressing = compress - diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/bootstrap.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/bootstrap.py deleted file mode 100644 index e2ea8f1..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/bootstrap.py +++ /dev/null @@ -1,346 +0,0 @@ -#!/usr/bin/python -tt -# -# Copyright (c) 2009, 2010, 2011 Intel, Inc. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free -# Software Foundation; version 2 of the License -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., 59 -# Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -from __future__ import with_statement -import os -import sys -import tempfile -import shutil -import subprocess -import rpm -import glob -import errno - -from mic import msger -from mic.utils import errors, proxy, misc -from mic.utils.rpmmisc import readRpmHeader, RPMInstallCallback -from mic.chroot import cleanup_mounts, setup_chrootenv, cleanup_chrootenv -from mic.conf import configmgr - -PATH_BOOTSTRAP = "/usr/sbin:/usr/bin:/sbin:/bin" - -RPMTRANS_FLAGS = [ - rpm.RPMTRANS_FLAG_ALLFILES, - rpm.RPMTRANS_FLAG_NOSCRIPTS, - rpm.RPMTRANS_FLAG_NOTRIGGERS, - ] - -RPMVSF_FLAGS = [ - rpm._RPMVSF_NOSIGNATURES, - rpm._RPMVSF_NODIGESTS - ] - -RPMPROB_FLAGS = [ - rpm.RPMPROB_FILTER_OLDPACKAGE, - rpm.RPMPROB_FILTER_REPLACEPKG, - rpm.RPMPROB_FILTER_IGNOREARCH - ] - -class MiniBackend(object): - def __init__(self, rootdir, arch=None, repomd=None): - self._ts = None - self.rootdir = os.path.abspath(rootdir) - self.arch = arch - self.repomd = repomd - self.dlpkgs = [] - self.localpkgs = {} - self.optionals = [] - self.preins = {} - self.postins = {} - self.scriptlets = False - - def __del__(self): - try: - del self.ts - except: - pass - - def get_ts(self): - if not self._ts: - self._ts = rpm.TransactionSet(self.rootdir) - self._ts.setFlags(reduce(lambda x, y: x|y, RPMTRANS_FLAGS)) - self._ts.setVSFlags(reduce(lambda x, y: x|y, RPMVSF_FLAGS)) - self._ts.setProbFilter(reduce(lambda x, y: x|y, RPMPROB_FLAGS)) - - return self._ts - - def del_ts(self): - if self._ts: - self._ts.closeDB() - self._ts = None - - ts = property(fget = lambda self: self.get_ts(), - fdel = lambda self: self.del_ts(), - doc="TransactionSet object") - - def selectPackage(self, pkg): - if not pkg in self.dlpkgs: - self.dlpkgs.append(pkg) - - def _get_local_packages(self, pkg): - """Return local mic-bootstrap rpm path.""" - cropts = configmgr.create - if cropts['local_pkgs_path']: - if os.path.isdir(cropts['local_pkgs_path']): - pkglist = glob.glob( - os.path.join(cropts['local_pkgs_path'], pkg + '*.rpm')) - if len(pkglist) > 1: - raise errors.BootstrapError("Many %s packages in folder, put only one %s package in it." % (pkg, pkg)) - elif len(pkglist) == 1: - return ''.join(pkglist) - elif os.path.splitext(cropts['local_pkgs_path'])[-1] == '.rpm': - if cropts['local_pkgs_path'].find(pkg) >= 0: - return cropts['local_pkgs_path'] - return None - def runInstall(self): - # FIXME: check space - self.downloadPkgs() - self.installPkgs() - - if not self.scriptlets: - return - - for pkg in self.preins.keys(): - prog, script = self.preins[pkg] - self.run_pkg_script(pkg, prog, script, '0') - for pkg in self.postins.keys(): - prog, script = self.postins[pkg] - self.run_pkg_script(pkg, prog, script, '1') - - def downloadPkgs(self): - nonexist = [] - for pkg in self.dlpkgs: - localpth = self._get_local_packages(pkg) - if localpth is None: - localpth = misc.get_package(pkg, self.repomd, self.arch) - if localpth: - self.localpkgs[pkg] = localpth - elif pkg in self.optionals: - # skip optional rpm - continue - else: - # mark nonexist rpm - nonexist.append(pkg) - - if nonexist: - raise errors.BootstrapError("Can't get rpm binary: %s" % - ','.join(nonexist)) - - def installPkgs(self): - for pkg in self.localpkgs.keys(): - rpmpath = self.localpkgs[pkg] - - hdr = readRpmHeader(self.ts, rpmpath) - - # save prein and postin scripts - self.preins[pkg] = (hdr['PREINPROG'], hdr['PREIN']) - self.postins[pkg] = (hdr['POSTINPROG'], hdr['POSTIN']) - - # mark pkg as install - self.ts.addInstall(hdr, rpmpath, 'u') - - # run transaction - self.ts.order() - cb = RPMInstallCallback(self.ts) - errs = self.ts.run(cb.callback, '') - - # ts.run() exit codes are, hmm, "creative": None means all ok, empty - # list means some errors happened in the transaction and non-empty - # list that there were errors preventing the ts from starting... - if errs is not None: - raise errors.BootstrapError("Transaction couldn't start: %s" % errs) - - def run_pkg_script(self, pkg, prog, script, arg): - mychroot = lambda: os.chroot(self.rootdir) - - if not script: - return - - if prog == "": - prog = "/usr/bin/lua" - - tmpdir = os.path.join(self.rootdir, "tmp") - if not os.path.exists(tmpdir): - os.makedirs(tmpdir) - tmpfd, tmpfp = tempfile.mkstemp(dir=tmpdir, prefix="%s.pre-" % pkg) - script = script.replace('\r', '') - os.write(tmpfd, script) - os.close(tmpfd) - os.chmod(tmpfp, 0o700) - - try: - script_fp = os.path.join('/tmp', os.path.basename(tmpfp)) - subprocess.call([prog, script_fp, arg], preexec_fn=mychroot) - except (OSError, IOError) as err: - msger.warning(str(err)) - finally: - os.unlink(tmpfp) - -class Bootstrap(object): - def __init__(self, rootdir, distro, arch=None): - self.rootdir = misc.mkdtemp(dir=rootdir, prefix=distro) - self.distro = distro - self.arch = arch - self.logfile = None - self.pkgslist = [] - self.repomd = None - - def __del__(self): - self.cleanup() - - def get_rootdir(self): - if os.path.exists(self.rootdir): - shutil.rmtree(self.rootdir, ignore_errors=True) - os.makedirs(self.rootdir) - return self.rootdir - - def dirsetup(self, rootdir=None): - _path = lambda pth: os.path.join(rootdir, pth.lstrip('/')) - - if not rootdir: - rootdir = self.rootdir - - try: - # make /tmp and /etc path - tmpdir = _path('/tmp') - if not os.path.exists(tmpdir): - os.makedirs(tmpdir) - etcdir = _path('/etc') - if not os.path.exists(etcdir): - os.makedirs(etcdir) - - # touch distro file - tzdist = _path('/etc/%s-release' % self.distro) - if not os.path.exists(tzdist): - with open(tzdist, 'w') as wf: - wf.write("bootstrap") - except: - pass - - def create(self, repomd, pkglist, optlist=()): - try: - pkgmgr = MiniBackend(self.get_rootdir()) - pkgmgr.arch = self.arch - pkgmgr.repomd = repomd - pkgmgr.optionals = list(optlist) - map(pkgmgr.selectPackage, pkglist + list(optlist)) - pkgmgr.runInstall() - except (OSError, IOError, errors.CreatorError) as err: - raise errors.BootstrapError("%s" % err) - - def run(self, cmd, chdir, rootdir=None, bindmounts=None): - def mychroot(): - os.chroot(rootdir) - os.chdir(chdir) - - def sync_timesetting(rootdir): - try: - # sync time and zone info to bootstrap - if os.path.exists(rootdir + "/etc/localtime"): - os.unlink(rootdir + "/etc/localtime") - shutil.copyfile("/etc/localtime", rootdir + "/etc/localtime") - except: - pass - - def sync_passwdfile(rootdir): - try: - # sync passwd file to bootstrap, saving the user info - if os.path.exists(rootdir + "/etc/passwd"): - os.unlink(rootdir + "/etc/passwd") - shutil.copyfile("/etc/passwd", rootdir + "/etc/passwd") - except: - pass - - def sync_hostfile(rootdir): - try: - # sync host info to bootstrap - if os.path.exists(rootdir + "/etc/hosts"): - os.unlink(rootdir + "/etc/hosts") - shutil.copyfile("/etc/hosts", rootdir + "/etc/hosts") - except: - pass - - def sync_signfile(rootdir,homedir): - if os.path.exists(homedir + "/.sign"): - signfile = rootdir + homedir + "/.sign" - try: - # sync sign info to bootstrap - if os.path.exists(signfile): - if os.path.isdir(signfile): - shutil.rmtree(signfile) - else: - os.unlink(signfile) - try: - shutil.copytree(homedir + "/.sign", signfile) - except OSError as exc: - if exc.errno == errno.ENOTDIR: - shutil.copy(homedir + "/.sign", signfile) - else: raise - except: - pass - - if not rootdir: - rootdir = self.rootdir - - if isinstance(cmd, list): - shell = False - else: - shell = True - - env = os.environ - env['PATH'] = "%s:%s" % (PATH_BOOTSTRAP, env['PATH']) - cropts = configmgr.create - if cropts["ks"]: - lang = cropts["ks"].handler.lang.lang - env['LANG'] = lang - env['LC_ALL'] = lang - - retcode = 0 - gloablmounts = None - try: - proxy.set_proxy_environ() - #globalmounts is no useless, remove it, currently function always return none. - setup_chrootenv(rootdir, bindmounts) - sync_timesetting(rootdir) - sync_passwdfile(rootdir) - sync_hostfile(rootdir) - env['SUDO_USER'] = 'root' - if 'SUDO_USER' in env: - sync_signfile(rootdir, os.path.expanduser('~' + env['SUDO_USER'])) - else: - sync_signfile(rootdir, os.path.expanduser('~')) - retcode = subprocess.call(cmd, preexec_fn=mychroot, env=env, shell=shell) - except (OSError, IOError): - # add additional information to original exception - value, tb = sys.exc_info()[1:] - value = '%s: %s' % (value, ' '.join(cmd)) - raise RuntimeError (value, tb) - finally: - #if self.logfile and os.path.isfile(self.logfile): - # msger.log(file(self.logfile).read()) - cleanup_chrootenv(rootdir, bindmounts, gloablmounts) - proxy.unset_proxy_environ() - return retcode - - def cleanup(self): - try: - # clean mounts - cleanup_mounts(self.rootdir) - # remove rootdir - shutil.rmtree(self.rootdir, ignore_errors=True) - except: - pass diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/chroot.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/chroot.py deleted file mode 100644 index 27278b6..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/chroot.py +++ /dev/null @@ -1,334 +0,0 @@ -#!/usr/bin/python -tt -# -# Copyright (c) 2009, 2010, 2011 Intel, Inc. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free -# Software Foundation; version 2 of the License -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., 59 -# Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -from __future__ import with_statement -import os -import re -import shutil -import subprocess - -from mic import msger -from mic.conf import configmgr -from mic.utils import misc, errors, runner, fs_related, lock - -##################################################################### -### GLOBAL CONSTANTS -##################################################################### - -chroot_bindmounts = None -chroot_lock = None -BIND_MOUNTS = ( - "/proc", - "/proc/sys/fs/binfmt_misc", - "/sys", - "/dev", - "/dev/pts", - "/var/lib/dbus", - "/var/run/dbus", - "/var/lock", - "/lib/modules", - ) - -##################################################################### -### GLOBAL ROUTINE -##################################################################### - -def ELF_arch(chrootdir): - """ detect the architecture of an ELF file """ - #FIXME: if chkfiles are symlink, it will be complex - chkfiles = ('/bin/bash', '/sbin/init') - # regular expression to arch mapping - mapping = { - r"Intel 80[0-9]86": "i686", - r"x86-64": "x86_64", - r"ARM": "arm", - r"RISC-V": "riscv64", - } - - for path in chkfiles: - cpath = os.path.join(chrootdir, path.lstrip('/')) - if not os.path.exists(cpath): - continue - - outs = runner.outs(['file', cpath]) - for ptn in mapping.keys(): - if re.search(ptn, outs): - return mapping[ptn] - - raise errors.CreatorError("Failed to detect architecture of chroot: %s" % - chrootdir) - -def get_bindmounts(chrootdir, bindmounts = None): - """ calculate all bind mount entries for global usage """ - # bindmounts should be a string like '/dev:/dev' - # FIXME: refine the bindmounts from string to dict - global chroot_bindmounts - - def totuple(string): - """ convert string contained ':' to a tuple """ - if ':' in string: - src, dst = string.split(':', 1) - else: - src = string - dst = None - - return (src or None, dst or None) - - if chroot_bindmounts: - return chroot_bindmounts - - chroot_bindmounts = [] - bindmounts = bindmounts or "" - mountlist = [] - - for mount in bindmounts.split(";"): - if not mount: - continue - - (src, dst) = totuple(mount) - - if src in BIND_MOUNTS or src == '/': - continue - - if not os.path.exists(src): - os.makedirs(src) - - if dst and os.path.isdir("%s/%s" % (chrootdir, dst)): - msger.warning("%s existed in %s , skip it." % (dst, chrootdir)) - continue - - mountlist.append(totuple(mount)) - - for mntpoint in BIND_MOUNTS: - if os.path.isdir(mntpoint): - mountlist.append(tuple((mntpoint, None))) - - for pair in mountlist: - if pair[0] == "/lib/modules": - opt = "ro" - else: - opt = None - bmount = fs_related.BindChrootMount(pair[0], chrootdir, pair[1], opt) - chroot_bindmounts.append(bmount) - - return chroot_bindmounts - -##################################################################### -### SETUP CHROOT ENVIRONMENT -##################################################################### - -def bind_mount(chrootmounts): - """ perform bind mounting """ - for mnt in chrootmounts: - msger.verbose("bind_mount: %s -> %s" % (mnt.src, mnt.dest)) - mnt.mount() - -def setup_resolv(chrootdir): - """ resolve network """ - try: - shutil.copyfile("/etc/resolv.conf", chrootdir + "/etc/resolv.conf") - except (OSError, IOError): - pass - -def setup_mtab(chrootdir): - """ adjust mount table """ - try: - mtab = "/etc/mtab" - dstmtab = chrootdir + mtab - if not os.path.islink(dstmtab): - shutil.copyfile(mtab, dstmtab) - except (OSError, IOError): - pass - -def setup_chrootenv(chrootdir, bindmounts = None): - """ setup chroot environment """ - global chroot_lock - - # acquire the lock - if not chroot_lock: - lockpath = os.path.join(chrootdir, '.chroot.lock') - chroot_lock = lock.SimpleLockfile(lockpath) - chroot_lock.acquire() - # bind mounting - bind_mount(get_bindmounts(chrootdir, bindmounts)) - # setup resolv.conf - setup_resolv(chrootdir) - # update /etc/mtab - setup_mtab(chrootdir) - - return None - -###################################################################### -### CLEANUP CHROOT ENVIRONMENT -###################################################################### - -def bind_unmount(chrootmounts): - """ perform bind unmounting """ - for mnt in reversed(chrootmounts): - msger.verbose("bind_unmount: %s -> %s" % (mnt.src, mnt.dest)) - mnt.unmount() - -def cleanup_resolv(chrootdir): - """ clear resolv.conf """ - try: - fdes = open(chrootdir + "/etc/resolv.conf", "w") - fdes.truncate(0) - fdes.close() - except (OSError, IOError): - pass - -def kill_proc_inchroot(chrootdir): - """ kill all processes running inside chrootdir """ - import glob - for fpath in glob.glob("/proc/*/root"): - try: - if os.readlink(fpath) == chrootdir: - pid = int(fpath.split("/")[2]) - os.kill(pid, 9) - except (OSError, ValueError): - pass - -def cleanup_mtab(chrootdir): - """ remove mtab file """ - if os.path.exists(chrootdir + "/etc/mtab"): - os.unlink(chrootdir + "/etc/mtab") - -def cleanup_mounts(chrootdir): - """ clean up all mount entries owned by chrootdir """ - umountcmd = misc.find_binary_path("umount") - mounts = open('/proc/mounts').readlines() - for line in reversed(mounts): - if chrootdir not in line: - continue - - point = line.split()[1] - - # '/' to avoid common name prefix - if chrootdir == point or point.startswith(chrootdir + '/'): - args = [ umountcmd, "-l", point ] - ret = runner.quiet(args) - if ret != 0: - msger.warning("failed to unmount %s" % point) - if os.path.isdir(point) and len(os.listdir(point)) == 0: - shutil.rmtree(point) - else: - msger.warning("%s is not directory or is not empty" % point) - -def cleanup_chrootenv(chrootdir, bindmounts=None, globalmounts=()): - """ clean up chroot environment """ - global chroot_lock - - # kill processes - kill_proc_inchroot(chrootdir) - # clean mtab - cleanup_mtab(chrootdir) - # clean resolv.conf - cleanup_resolv(chrootdir) - # bind umounting - bind_unmount(get_bindmounts(chrootdir, bindmounts)) - # FIXME: need to clean up mounts? - #cleanup_mounts(chrootdir) - - # release the lock - if chroot_lock: - chroot_lock.release() - chroot_lock = None - - return None - -##################################################################### -### CHROOT STUFF -##################################################################### - -def savefs_before_chroot(chrootdir, saveto = None): - """ backup chrootdir to another directory before chrooting in """ - if configmgr.chroot['saveto']: - savefs = True - saveto = configmgr.chroot['saveto'] - wrnmsg = "Can't save chroot fs for dir %s exists" % saveto - if saveto == chrootdir: - savefs = False - wrnmsg = "Dir %s is being used to chroot" % saveto - elif os.path.exists(saveto): - if msger.ask("Dir %s already exists, cleanup and continue?" % - saveto): - shutil.rmtree(saveto, ignore_errors = True) - savefs = True - else: - savefs = False - - if savefs: - msger.info("Saving image to directory %s" % saveto) - fs_related.makedirs(os.path.dirname(os.path.abspath(saveto))) - runner.quiet("cp -af %s %s" % (chrootdir, saveto)) - devs = ['dev/fd', - 'dev/stdin', - 'dev/stdout', - 'dev/stderr', - 'etc/mtab'] - ignlst = [os.path.join(saveto, x) for x in devs] - map(os.unlink, filter(os.path.exists, ignlst)) - else: - msger.warning(wrnmsg) - -def cleanup_after_chroot(targettype, imgmount, tmpdir, tmpmnt): - """ clean up all temporary directories after chrooting """ - if imgmount and targettype == "img": - imgmount.cleanup() - - if tmpdir: - shutil.rmtree(tmpdir, ignore_errors = True) - - if tmpmnt: - shutil.rmtree(tmpmnt, ignore_errors = True) - -def chroot(chrootdir, bindmounts = None, execute = "/bin/bash"): - """ chroot the chrootdir and execute the command """ - def mychroot(): - """ pre-execute function """ - os.chroot(chrootdir) - os.chdir("/") - - arch = ELF_arch(chrootdir) - if arch == "arm": - qemu_emulators = misc.setup_qemu_emulator(chrootdir, "arm") - elif arch == "mipsel": - qemu_emulators = misc.setup_qemu_emulator(chrootdir, "mipsel") - elif arch == "riscv64": - qemu_emulators = misc.setup_qemu_emulator(chrootdir, "riscv64") - else: - qemu_emulators = [] - - savefs_before_chroot(chrootdir, None) - - globalmounts = None - - try: - msger.info("Launching shell. Exit to continue.\n" - "----------------------------------") - - #globalmounts is no useless, remove it, currently function always return none. - setup_chrootenv(chrootdir, bindmounts) - subprocess.call(execute, preexec_fn = mychroot, shell=True) - - except OSError as err: - raise errors.CreatorError("chroot err: %s" % str(err)) - - finally: - cleanup_chrootenv(chrootdir, bindmounts, globalmounts) - for qemu_emulator in qemu_emulators: - os.unlink(chrootdir + qemu_emulator) diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/cmd_chroot.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/cmd_chroot.py deleted file mode 100644 index 35b089b..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/cmd_chroot.py +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/python -tt -# vim: ai ts=4 sts=4 et sw=4 -# -# Copyright (c) 2012 Intel, Inc. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free -# Software Foundation; version 2 of the License -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., 59 -# Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -"""Implementation of subcmd: chroot -""" - -import os -import os, sys, re -import pwd -import argparse - -from mic import msger -from mic.utils import misc, errors -from mic.conf import configmgr -from mic.plugin import pluginmgr - -def _root_confirm(): - """Make sure command is called by root - There are a lot of commands needed to be run during creating images, - some of them must be run with root privilege like mount, kpartx""" - if os.geteuid() != 0: - msger.error('Root permission is required to continue, abort') - -def main(parser, args, argv): - """mic choot entry point.""" - - #args is argparser namespace, argv is the input cmd line - if args is None: - raise errors.Usage("Invalid arguments") - - targetimage = args.imagefile - if not os.path.exists(targetimage): - raise errors.CreatorError("Cannot find the image: %s" - % targetimage) - - _root_confirm() - - configmgr.chroot['saveto'] = args.saveto - - imagetype = misc.get_image_type(targetimage) - if imagetype in ("ext3fsimg", "ext4fsimg", "btrfsimg", "f2fsimg"): - imagetype = "loop" - - chrootclass = None - for pname, pcls in pluginmgr.get_plugins('imager').iteritems(): - if pname == imagetype and hasattr(pcls, "do_chroot"): - chrootclass = pcls - break - - if not chrootclass: - raise errors.CreatorError("Cannot support image type: %s" \ - % imagetype) - - chrootclass.do_chroot(targetimage, args.cmd) - - diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/cmd_create.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/cmd_create.py deleted file mode 100644 index a62abc7..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/cmd_create.py +++ /dev/null @@ -1,270 +0,0 @@ -#!/usr/bin/python -tt -# vim: ai ts=4 sts=4 et sw=4 -# -# Copyright (c) 2012 Intel, Inc. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free -# Software Foundation; version 2 of the License -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., 59 -# Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -"""Implementation of subcmd: create -""" - -import os -import os, sys, re -import pwd -import argparse - -from mic import msger -from mic.utils import errors, rpmmisc -from mic.conf import configmgr -from mic.plugin import pluginmgr - -def main(parser, args, argv): - """mic create entry point.""" - #args is argparser namespace, argv is the input cmd line - if args is None: - raise errors.Usage("Invalid arguments") - - if not os.path.exists(args.ksfile): - raise errors.CreatorError("Can't find the file: %s" % args.ksfile) - - if os.geteuid() != 0: - msger.error("Root permission is required, abort") - - try: - w = pwd.getpwuid(os.geteuid()) - except KeyError: - msger.warning("Might fail in compressing stage for undetermined user") - - abspath = lambda pth: os.path.abspath(os.path.expanduser(pth)) - if args.logfile: - logfile_abs_path = abspath(args.logfile) - if os.path.isdir(logfile_abs_path): - raise errors.Usage("logfile's path %s should be file" - % args.logfile) - configmgr.create['logfile'] = logfile_abs_path - configmgr.set_logfile() - - if args.subcommand == "auto": - do_auto(parser, args.ksfile, argv) - return - - if args.interactive: - msger.enable_interactive() - else: - msger.disable_interactive() - - if args.verbose: - msger.set_loglevel('VERBOSE') - - if args.debug: - try: - import rpm - rpm.setVerbosity(rpm.RPMLOG_NOTICE) - except ImportError: - pass - - msger.set_loglevel('DEBUG') - - if args.rpm_debug: - try: - import rpm - rpm.setVerbosity(rpm.RPMLOG_DEBUG) - except ImportError: - pass - #check the imager type - createrClass = None - for subcmd, klass in pluginmgr.get_plugins('imager').iteritems(): - if subcmd == args.subcommand and hasattr(klass, 'do_create'): - createrClass = klass - - if createrClass is None: - raise errors.CreatorError("Can't support subcommand %s" % args.subcommand) - - if args.config: - configmgr.reset() - configmgr._siteconf = args.config - - if args.outdir is not None: - configmgr.create['outdir'] = abspath(args.outdir) - if args.cachedir is not None: - configmgr.create['cachedir'] = abspath(args.cachedir) - os.environ['ZYPP_LOCKFILE_ROOT'] = configmgr.create['cachedir'] - - for cdir in ('outdir', 'cachedir'): - if os.path.exists(configmgr.create[cdir]) \ - and not os.path.isdir(configmgr.create[cdir]): - raise errors.Usage('Invalid directory specified: %s' \ - % configmgr.create[cdir]) - if not os.path.exists(configmgr.create[cdir]): - os.makedirs(configmgr.create[cdir]) - if os.getenv('SUDO_UID', '') and os.getenv('SUDO_GID', ''): - os.chown(configmgr.create[cdir], - int(os.getenv('SUDO_UID')), - int(os.getenv('SUDO_GID'))) - - if args.local_pkgs_path is not None: - if not os.path.exists(args.local_pkgs_path): - raise errors.Usage('Local pkgs directory: \'%s\' not exist' \ - % args.local_pkgs_path) - configmgr.create['local_pkgs_path'] = args.local_pkgs_path - - if args.release: - configmgr.create['release'] = args.release.rstrip('/') - - if args.record_pkgs: - configmgr.create['record_pkgs'] = [] - for infotype in args.record_pkgs.split(','): - if infotype not in ('name', 'content', 'license', 'vcs'): - raise errors.Usage('Invalid pkg recording: %s, valid ones:' - ' "name", "content", "license", "vcs"' \ - % infotype) - - configmgr.create['record_pkgs'].append(infotype) - - if args.strict_mode: - configmgr.create['strict_mode'] = args.strict_mode - if args.arch is not None: - supported_arch = sorted(rpmmisc.archPolicies.keys(), reverse=True) - if args.arch in supported_arch: - configmgr.create['arch'] = args.arch - else: - raise errors.Usage('Invalid architecture: "%s".\n' - ' Supported architectures are: \n' - ' %s' % (args.arch, - ', '.join(supported_arch))) - - if args.pkgmgr is not None: - configmgr.create['pkgmgr'] = args.pkgmgr - - if args.skip_set_hosts: - configmgr.create['skip_set_hosts']=args.skip_set_hosts - if args.postscripts_maxruntime: - configmgr.create['postscripts_maxruntime']=int(args.postscripts_maxruntime) - if args.block_recommends: - configmgr.create['block_recommends']=args.block_recommends - if args.runtime: - configmgr.set_runtime(args.runtime) - - if args.use_mic_in_bootstrap: - configmgr.create['use_mic_in_bootstrap'] = args.use_mic_in_bootstrap - - if args.pack_to is not None: - configmgr.create['pack_to'] = args.pack_to - - if args.copy_kernel: - configmgr.create['copy_kernel'] = args.copy_kernel - - if args.install_pkgs: - configmgr.create['install_pkgs'] = [] - for pkgtype in args.install_pkgs.split(','): - if pkgtype not in ('source', 'debuginfo', 'debugsource'): - raise errors.Usage('Invalid parameter specified: "%s", ' - 'valid values: source, debuginfo, ' - 'debusource' % pkgtype) - - configmgr.create['install_pkgs'].append(pkgtype) - - if args.check_pkgs: - for pkg in args.check_pkgs.split(','): - configmgr.create['check_pkgs'].append(pkg) - - if args.enabletmpfs: - configmgr.create['enabletmpfs'] = args.enabletmpfs - - if args.repourl: - for item in args.repourl: - try: - key, val = item.split('=') - except: - continue - configmgr.create['repourl'][key] = val - - if args.repo: - for optvalue in args.repo: - repo = {} - for item in optvalue.split(';'): - try: - key, val = item.split('=') - except: - continue - repo[key.strip()] = val.strip() - if 'name' in repo: - configmgr.create['extrarepos'][repo['name']] = repo - - if args.ignore_ksrepo: - configmgr.create['ignore_ksrepo'] = args.ignore_ksrepo - if args.run_script: - configmgr.create['run_script'] = args.run_script - if args.tpk_install: - configmgr.create['tpk_install'] = args.tpk_install - - creater = createrClass() - creater.do_create(args) - -def do_auto(parser, ksfile, argv): - """${cmd_name}: auto detect image type from magic header - - Usage: - ${name} ${cmd_name} - - ${cmd_option_list} - """ - def parse_magic_line(re_str, pstr, ptype='mic'): - ptn = re.compile(re_str) - m = ptn.match(pstr) - if not m or not m.groups(): - return None - - inline_argv = m.group(1).strip() - if ptype == 'mic': - m2 = re.search('(?P\w+)', inline_argv) - elif ptype == 'mic2': - m2 = re.search('(-f|--format(=)?)\s*(?P\w+)', - inline_argv) - else: - return None - - if m2: - cmdname = m2.group('format') - inline_argv = inline_argv.replace(m2.group(0), '') - return (cmdname, inline_argv) - - return None - - if not os.path.exists(ksfile): - raise errors.CreatorError("Can't find the file: %s" % ksfile) - - with open(ksfile, 'r') as rf: - first_line = rf.readline() - - mic_re = '^#\s*-\*-mic-options-\*-\s+(.*)\s+-\*-mic-options-\*-' - mic2_re = '^#\s*-\*-mic2-options-\*-\s+(.*)\s+-\*-mic2-options-\*-' - - result = parse_magic_line(mic_re, first_line, 'mic') \ - or parse_magic_line(mic2_re, first_line, 'mic2') - if not result: - raise errors.KsError("Invalid magic line in file: %s" % ksfile) - - ksargv = ' '.join(result).split() - - argv.remove("auto") - index = argv.index("create") - #insert the subcommand - argv.insert(index+1, ksargv[0]) - options = argv + ksargv[1:] - - args = parser.parse_args(options) - - main(parser, args, options) - diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/conf.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/conf.py deleted file mode 100644 index 279d14f..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/conf.py +++ /dev/null @@ -1,322 +0,0 @@ -#!/usr/bin/python -tt -# -# Copyright (c) 2011 Intel, Inc. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free -# Software Foundation; version 2 of the License -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., 59 -# Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -import os, sys, re -import ConfigParser - -from mic import msger -from mic import kickstart -from mic.utils import misc, runner, proxy, errors - - -DEFAULT_GSITECONF = '/etc/mic/mic.conf' - - -def get_siteconf(): - if hasattr(sys, 'real_prefix'): - return os.path.join(sys.prefix, "etc/mic/mic.conf") - else: - return DEFAULT_GSITECONF - -def inbootstrap(): - if os.path.exists(os.path.join("/", ".chroot.lock")): - return True - return (os.stat("/").st_ino != 2) - -class ConfigMgr(object): - prefer_backends = ["zypp", "yum"] - - DEFAULTS = {'common': { - "distro_name": "Default Distribution", - "plugin_dir": "/usr/lib/mic/plugins", # TODO use prefix also? - }, - 'create': { - "tmpdir": '/var/tmp/mic', - "cachedir": '/var/tmp/mic/cache', - "outdir": './mic-output', - "destdir": None, - "arch": None, # None means auto-detect - "pkgmgr": "auto", - "name": "output", - "ksfile": None, - "ks": None, - "repomd": None, - "local_pkgs_path": None, - "release": None, - "logfile": None, - "releaselog": False, - "record_pkgs": [], - "pack_to": None, - "name_prefix": None, - "name_suffix": None, - "proxy": None, - "no_proxy": None, - "ssl_verify": "yes", - "copy_kernel": False, - "install_pkgs": None, - "check_pkgs": [], - "repourl": {}, - "localrepos": [], # save localrepos - "localtpkrepos":[], - "runtime": "bootstrap", - "extrarepos": {}, - "ignore_ksrepo": False, - "strict_mode": False, - "run_script": None, - "tpk_install": None, - "use_mic_in_bootstrap": False, - "skip_set_hosts": False, - "postscripts_maxruntime": 120, - "block_recommends": False, - }, - 'chroot': { - "saveto": None, - }, - 'convert': { - "shell": False, - }, - 'bootstrap': { - "rootdir": '/var/tmp/mic-bootstrap', - "packages": [], - "distro_name": "", - }, - } - - # make the manager class as singleton - _instance = None - def __new__(cls, *args, **kwargs): - if not cls._instance: - cls._instance = super(ConfigMgr, cls).__new__(cls, *args, **kwargs) - - return cls._instance - - def __init__(self, ksconf=None, siteconf=None): - # reset config options - self.reset() - - if not siteconf: - siteconf = get_siteconf() - - # initial options from siteconf - self._siteconf = siteconf - - if ksconf: - self._ksconf = ksconf - - def reset(self): - self.__ksconf = None - self.__siteconf = None - - # initialize the values with defaults - for sec, vals in self.DEFAULTS.iteritems(): - setattr(self, sec, vals) - - def __set_siteconf(self, siteconf): - try: - self.__siteconf = siteconf - self._parse_siteconf(siteconf) - except ConfigParser.Error as error: - raise errors.ConfigError("%s" % error) - def __get_siteconf(self): - return self.__siteconf - _siteconf = property(__get_siteconf, __set_siteconf) - - def __set_ksconf(self, ksconf): - if not os.path.isfile(ksconf): - raise errors.KsError('Cannot find ks file: %s' % ksconf) - - self.__ksconf = ksconf - self._parse_kickstart(ksconf) - def __get_ksconf(self): - return self.__ksconf - _ksconf = property(__get_ksconf, __set_ksconf) - - def _parse_siteconf(self, siteconf): - - if os.getenv("MIC_PLUGIN_DIR"): - self.common["plugin_dir"] = os.environ["MIC_PLUGIN_DIR"] - - if siteconf and not os.path.exists(siteconf): - msger.warning("cannot find config file: %s" % siteconf) - siteconf = None - - if not siteconf: - self.common["distro_name"] = "Tizen" - # append common section items to other sections - for section in self.DEFAULTS.keys(): - if section != "common": - getattr(self, section).update(self.common) - - return - - parser = ConfigParser.SafeConfigParser() - parser.read(siteconf) - - for section in parser.sections(): - if section in self.DEFAULTS: - getattr(self, section).update(dict(parser.items(section))) - - # append common section items to other sections - for section in self.DEFAULTS.keys(): - if section != "common": - getattr(self, section).update(self.common) - - # check and normalize the scheme of proxy url - if self.create['proxy']: - m = re.match('^(\w+)://.*', self.create['proxy']) - if m: - scheme = m.group(1) - if scheme not in ('http', 'https', 'ftp', 'socks'): - raise errors.ConfigError("%s: proxy scheme is incorrect" % siteconf) - else: - msger.warning("%s: proxy url w/o scheme, use http as default" - % siteconf) - self.create['proxy'] = "http://" + self.create['proxy'] - - proxy.set_proxies(self.create['proxy'], self.create['no_proxy']) - - # bootstrap option handling - self.set_runtime(self.create['runtime']) - if isinstance(self.bootstrap['packages'], basestring): - packages = self.bootstrap['packages'].replace('\n', ' ') - if packages.find(',') != -1: - packages = packages.split(',') - else: - packages = packages.split() - self.bootstrap['packages'] = packages - - if type(self.create['use_mic_in_bootstrap']) != 'bool': - use_mic_in_bootstrap = str(self.create['use_mic_in_bootstrap']) - if use_mic_in_bootstrap.lower() in ('on', 'yes', 'true', '1'): - self.create['use_mic_in_bootstrap'] = True - else: - self.create['use_mic_in_bootstrap'] = False - - def _parse_kickstart(self, ksconf=None): - if not ksconf: - return - - ksconf = misc.normalize_ksfile(ksconf, - self.create['release'], - self.create['arch']) - - ks = kickstart.read_kickstart(ksconf) - - self.create['ks'] = ks - self.create['name'] = os.path.splitext(os.path.basename(ksconf))[0] - - self.create['name'] = misc.build_name(ksconf, - self.create['release'], - self.create['name_prefix'], - self.create['name_suffix']) - - self.create['destdir'] = self.create['outdir'] - if self.create['release'] is not None: - self.create['destdir'] = "%s/%s/images/%s/" % (self.create['outdir'], - self.create['release'], - self.create['name']) - self.create['name'] = self.create['release'] + '_' + self.create['name'] - if self.create['pack_to'] is not None: - if '@NAME@' in self.create['pack_to']: - self.create['pack_to'] = self.create['pack_to'].replace('@NAME@', self.create['name']) - self.create['name'] = misc.strip_archive_suffix(self.create['pack_to']) - if self.create['name'] is None: - raise errors.CreatorError("Not supported archive file format: %s" % self.create['pack_to']) - - if not self.create['logfile']: - self.create['logfile'] = os.path.join(self.create['destdir'], - self.create['name'] + ".log") - self.create['releaselog'] = True - self.set_logfile() - - elif self.create['pack_to'] is not None: - if '@NAME@' in self.create['pack_to']: - self.create['pack_to'] = self.create['pack_to'].replace('@NAME@', self.create['name']) - self.create['name'] = misc.strip_archive_suffix(self.create['pack_to']) - if self.create['name'] is None: - raise errors.CreatorError("Not supported archive file format: %s" % self.create['pack_to']) - - msger.info("Retrieving repo metadata:") - ksrepos = kickstart.get_repos(ks, - self.create['extrarepos'], - self.create['ignore_ksrepo']) - if not ksrepos: - raise errors.KsError('no valid repos found in ks file') - - for repo in ksrepos: - if hasattr(repo, 'baseurl') and repo.baseurl.startswith("file:"): - repourl = repo.baseurl.replace('file:', '') - repourl = "/%s" % repourl.lstrip('/') - self.create['localrepos'].append(repourl) - - self.create['repomd'] = misc.get_metadata_from_repos( - ksrepos, - self.create['cachedir']) - kstpkrepos = kickstart.get_tpkrepos(ks) - if kstpkrepos: - for tpk_repo in kstpkrepos: - if hasattr(tpk_repo,'baseurl') and tpk_repo.baseurl.startswith("file:"): - tpk_repourl = tpk_repo.baseurl.replace('file:','') - tpk_repourl = "/%s" % tpk_repourl.lstrip('/') - self.create['localtpkrepos'].append(tpk_repourl) - - msger.raw(" DONE") - - target_archlist, archlist = misc.get_arch(self.create['repomd']) - if self.create['arch']: - if self.create['arch'] not in archlist: - raise errors.ConfigError("Invalid arch %s for repository. " - "Valid arches: %s" \ - % (self.create['arch'], ', '.join(archlist))) - else: - if len(target_archlist) == 1: - self.create['arch'] = str(target_archlist[0]) - msger.info("Use detected arch %s." % target_archlist[0]) - else: - raise errors.ConfigError("Please specify a valid arch, " - "the choice can be: %s" \ - % ', '.join(archlist)) - - kickstart.resolve_groups(self.create, self.create['repomd']) - - # check selinux, it will block arm and btrfs image creation - misc.selinux_check(self.create['arch'], - [p.fstype for p in ks.handler.partition.partitions]) - - def set_logfile(self, logfile = None): - if not logfile: - logfile = self.create['logfile'] - - logfile_dir = os.path.dirname(self.create['logfile']) - if not os.path.exists(logfile_dir): - os.makedirs(logfile_dir) - msger.set_interactive(False) - if inbootstrap(): - mode = 'a' - else: - mode = 'w' - msger.set_logfile(self.create['logfile'], mode) - - def set_runtime(self, runtime): - if runtime != "bootstrap": - raise errors.CreatorError("Invalid runtime mode: %s, only 'bootstrap' mode is allowed." % runtime) - - if misc.get_distro()[0] in ("tizen", "Tizen"): - runtime = "native" - self.create['runtime'] = runtime - -configmgr = ConfigMgr() diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/helpformat.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/helpformat.py deleted file mode 100644 index e17f716..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/helpformat.py +++ /dev/null @@ -1,90 +0,0 @@ -#!/usr/bin/env python -# vim: ai ts=4 sts=4 et sw=4 -# -# Copyright (c) 2011 Intel, Inc. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free -# Software Foundation; version 2 of the License -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., 59 -# Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -"""Local additions to commandline parsing.""" - -import os -import re -import functools - -from argparse import RawDescriptionHelpFormatter, ArgumentTypeError - -class MICHelpFormatter(RawDescriptionHelpFormatter): - """Changed default argparse help output by request from cmdln lovers.""" - - def __init__(self, *args, **kwargs): - super(MICHelpFormatter, self).__init__(*args, **kwargs) - self._aliases = {} - - def add_argument(self, action): - """Collect aliases.""" - - if action.choices: - for item, parser in action.choices.iteritems(): - self._aliases[str(item)] = parser.get_default('alias') - - return super(MICHelpFormatter, self).add_argument(action) - - def format_help(self): - """ - There is no safe and documented way in argparse to reformat - help output through APIs as almost all of them are private, - so this method just parses the output and changes it. - """ - result = [] - subcomm = False - for line in super(MICHelpFormatter, self).format_help().split('\n'): - if line.strip().startswith('{'): - continue - if line.startswith('optional arguments:'): - line = 'Global Options:' - if line.startswith('usage:'): - line = "Usage: mic [GLOBAL-OPTS] SUBCOMMAND [OPTS]" - if subcomm: - match = re.match("[ ]+([^ ]+)[ ]+(.+)", line) - if match: - name, help_text = match.group(1), match.group(2) - alias = self._aliases.get(name) or '' - if alias: - alias = "(%s)" % alias - line = " %-22s%s" % ("%s %s" % (name, alias), help_text) - if line.strip().startswith('subcommands:'): - line = 'Subcommands:' - subcomm = True - result.append(line) - return '\n'.join(result) - -def subparser(func): - """Convenient decorator for subparsers.""" - @functools.wraps(func) - def wrapper(parser): - """ - Create subparser - Set first line of function's docstring as a help - and the rest of the lines as a description. - Set attribute 'module' of subparser to 'cmd'+first part of function name - """ - splitted = func.__doc__.split('\n') - name = func.__name__.split('_')[0] - subpar = parser.add_parser(name, help=splitted[0], - description='\n'.join(splitted[1:]), - formatter_class=RawDescriptionHelpFormatter) - subpar.set_defaults(module="cmd_%s" % name) - return func(subpar) - return wrapper - diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/imager/__init__.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/imager/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/imager/baseimager.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/imager/baseimager.py deleted file mode 100644 index 059e670..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/imager/baseimager.py +++ /dev/null @@ -1,1663 +0,0 @@ -#!/usr/bin/python -tt -# -# Copyright (c) 2007 Red Hat Inc. -# Copyright (c) 2009, 2010, 2011 Intel, Inc. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free -# Software Foundation; version 2 of the License -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., 59 -# Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -from __future__ import with_statement -import os, sys -import stat -import tempfile -import shutil -import subprocess -import re -import tarfile -import glob -import json -import errno -from datetime import datetime -import rpm -import time -from mic import kickstart -from mic import msger, __version__ as VERSION -from mic.utils.errors import CreatorError, KsError, Abort -from mic.utils import misc, grabber, runner, fs_related as fs -from mic.chroot import kill_proc_inchroot -from mic.archive import get_archive_suffixes -from mic.conf import configmgr -from mic.utils.grabber import myurlgrab - -class BaseImageCreator(object): - """Installs a system to a chroot directory. - - ImageCreator is the simplest creator class available; it will install and - configure a system image according to the supplied kickstart file. - - e.g. - - import mic.imgcreate as imgcreate - ks = imgcreate.read_kickstart("foo.ks") - imgcreate.ImageCreator(ks, "foo").create() - - """ - # Output image format - img_format = '' - - def __del__(self): - self.cleanup() - - def __init__(self, createopts = None, pkgmgr = None): - """Initialize an ImageCreator instance. - - ks -- a pykickstart.KickstartParser instance; this instance will be - used to drive the install by e.g. providing the list of packages - to be installed, the system configuration and %post scripts - - name -- a name for the image; used for e.g. image filenames or - filesystem labels - """ - - self.pkgmgr = pkgmgr - self.distro_name = "" - - self.__builddir = None - self.__bindmounts = [] - - self.ks = None - self.name = "target" - self.tmpdir = "/var/tmp/mic" - self.cachedir = "/var/tmp/mic/cache" - self.workdir = "/var/tmp/mic/build" - self.destdir = "." - self.installerfw_prefix = "INSTALLERFW_" - self.target_arch = "noarch" - self.strict_mode = False - self._local_pkgs_path = None - self.pack_to = None - self.repourl = {} - self.multiple_partitions = False - self._imgdir = None - - # If the kernel is save to the destdir when copy_kernel cmd is called. - self._need_copy_kernel = False - # setup tmpfs tmpdir when enabletmpfs is True - self.enabletmpfs = False - - if createopts: - # Mapping table for variables that have different names. - optmap = {"pkgmgr" : "pkgmgr_name", - "arch" : "target_arch", - "local_pkgs_path" : "_local_pkgs_path", - "copy_kernel" : "_need_copy_kernel", - "strict_mode" : "strict_mode", - } - - # update setting from createopts - for key in createopts.keys(): - if key in optmap: - option = optmap[key] - else: - option = key - setattr(self, option, createopts[key]) - - self.destdir = os.path.abspath(os.path.expanduser(self.destdir)) - - if self.pack_to: - (tar, ext) = os.path.splitext(self.pack_to) - if ext in (".gz", ".bz2", ".lzo", ".bz") and tar.endswith(".tar"): - ext = ".tar" + ext - if ext not in get_archive_suffixes(): - self.pack_to += ".tar" - - self._dep_checks = ["ls", "bash", "cp", "echo", "modprobe"] - - # Output image file names - self.outimage = [] - # Output info related with manifest - self.image_files = {} - # A flag to generate checksum - self._genchecksum = False - - self._alt_initrd_name = None - - self._recording_pkgs = [] - - # available size in root fs, init to 0 - self._root_fs_avail = 0 - - # Name of the disk image file that is created. - self._img_name = None - - self.image_format = None - - # Save qemu emulator file names in order to clean up it finally - self.qemu_emulators = [] - - # No ks provided when called by convertor, so skip the dependency check - if self.ks: - if hasattr(self.ks.handler, "env"): - for n, v in kickstart.get_env(self.ks): - msger.debug("Setting up envvar %s = %s" % (n, v)) - os.environ[n] = v - # If we have btrfs partition we need to check necessary tools - for part in self.ks.handler.partition.partitions: - if part.fstype and part.fstype == "btrfs": - self._dep_checks.append("mkfs.btrfs") - break - if part.cpioopts: - if part.fstype == "cpio": - part.fstype = "ext4" - else: - raise KsError("The '--fstype' in ks file need to set 'cpio' when you want to generate image by cpio.") - if len(self.ks.handler.partition.partitions) > 1: - self.multiple_partitions = True - - if self.target_arch: - if self.target_arch.startswith("arm"): - for dep in self._dep_checks: - if dep == "extlinux": - self._dep_checks.remove(dep) - - if not os.path.exists("/usr/bin/qemu-arm") or \ - not misc.is_statically_linked("/usr/bin/qemu-arm"): - self._dep_checks.append("qemu-arm-static") - - if os.path.exists("/proc/sys/vm/vdso_enabled"): - vdso_fh = open("/proc/sys/vm/vdso_enabled","r") - vdso_value = vdso_fh.read().strip() - vdso_fh.close() - if (int)(vdso_value) == 1: - msger.warning("vdso is enabled on your host, which might " - "cause problems with arm emulations.\n" - "\tYou can disable vdso with following command before " - "starting image build:\n" - "\techo 0 | sudo tee /proc/sys/vm/vdso_enabled") - elif self.target_arch == "mipsel": - for dep in self._dep_checks: - if dep == "extlinux": - self._dep_checks.remove(dep) - - if not os.path.exists("/usr/bin/qemu-mipsel") or \ - not misc.is_statically_linked("/usr/bin/qemu-mipsel"): - self._dep_checks.append("qemu-mipsel-static") - - if os.path.exists("/proc/sys/vm/vdso_enabled"): - vdso_fh = open("/proc/sys/vm/vdso_enabled","r") - vdso_value = vdso_fh.read().strip() - vdso_fh.close() - if (int)(vdso_value) == 1: - msger.warning("vdso is enabled on your host, which might " - "cause problems with mipsel emulations.\n" - "\tYou can disable vdso with following command before " - "starting image build:\n" - "\techo 0 | sudo tee /proc/sys/vm/vdso_enabled") - elif self.target_arch == "riscv64": - for dep in self._dep_checks: - if dep == "extlinux": - self._dep_checks.remove(dep) - - if not os.path.exists("/usr/bin/qemu-riscv64") or \ - not misc.is_statically_linked("/usr/bin/qemu-riscv64"): - self._dep_checks.append("qemu-riscv64-static") - - if os.path.exists("/proc/sys/vm/vdso_enabled"): - vdso_fh = open("/proc/sys/vm/vdso_enabled","r") - vdso_value = vdso_fh.read().strip() - vdso_fh.close() - if (int)(vdso_value) == 1: - msger.warning("vdso is enabled on your host, which might " - "cause problems with riscv64 emulations.\n" - "\tYou can disable vdso with following command before " - "starting image build:\n" - "\techo 0 | sudo tee /proc/sys/vm/vdso_enabled") - - # make sure the specified tmpdir and cachedir exist - if not os.path.exists(self.tmpdir): - os.makedirs(self.tmpdir) - if not os.path.exists(self.cachedir): - os.makedirs(self.cachedir) - - - # - # Properties - # - def __get_instroot(self): - if self.__builddir is None: - raise CreatorError("_instroot is not valid before calling mount()") - return self.__builddir + "/install_root" - _instroot = property(__get_instroot) - """The location of the install root directory. - - This is the directory into which the system is installed. Subclasses may - mount a filesystem image here or copy files to/from here. - - Note, this directory does not exist before ImageCreator.mount() is called. - - Note also, this is a read-only attribute. - - """ - - def __get_outdir(self): - if self.__builddir is None: - raise CreatorError("_outdir is not valid before calling mount()") - return self.__builddir + "/out" - _outdir = property(__get_outdir) - """The staging location for the final image. - - This is where subclasses should stage any files that are part of the final - image. ImageCreator.package() will copy any files found here into the - requested destination directory. - - Note, this directory does not exist before ImageCreator.mount() is called. - - Note also, this is a read-only attribute. - - """ - - - # - # Hooks for subclasses - # - def _mount_instroot(self, base_on = None): - """Mount or prepare the install root directory. - - This is the hook where subclasses may prepare the install root by e.g. - mounting creating and loopback mounting a filesystem image to - _instroot. - - There is no default implementation. - - base_on -- this is the value passed to mount() and can be interpreted - as the subclass wishes; it might e.g. be the location of - a previously created ISO containing a system image. - - """ - pass - - def _unmount_instroot(self): - """Undo anything performed in _mount_instroot(). - - This is the hook where subclasses must undo anything which was done - in _mount_instroot(). For example, if a filesystem image was mounted - onto _instroot, it should be unmounted here. - - There is no default implementation. - - """ - pass - - def _create_bootconfig(self): - """Configure the image so that it's bootable. - - This is the hook where subclasses may prepare the image for booting by - e.g. creating an initramfs and bootloader configuration. - - This hook is called while the install root is still mounted, after the - packages have been installed and the kickstart configuration has been - applied, but before the %post scripts have been executed. - - There is no default implementation. - - """ - pass - - def _stage_final_image(self): - """Stage the final system image in _outdir. - - This is the hook where subclasses should place the image in _outdir - so that package() can copy it to the requested destination directory. - - By default, this moves the install root into _outdir. - - """ - shutil.move(self._instroot, self._outdir + "/" + self.name) - - def get_installed_packages(self): - return self._pkgs_content.keys() - - def _save_recording_pkgs(self, destdir): - """Save the list or content of installed packages to file. - """ - pkgs = self._pkgs_content.keys() - pkgs.sort() # inplace op - - if not os.path.exists(destdir): - os.makedirs(destdir) - - content = None - if 'vcs' in self._recording_pkgs: - vcslst = ["%s %s" % (k, v) for (k, v) in self._pkgs_vcsinfo.items()] - content = '\n'.join(sorted(vcslst)) - elif 'name' in self._recording_pkgs: - content = '\n'.join(pkgs) - if content: - namefile = os.path.join(destdir, self.name + '.packages') - f = open(namefile, "w") - f.write(content) - f.close() - self.outimage.append(namefile) - - # if 'content', save more details - if 'content' in self._recording_pkgs: - contfile = os.path.join(destdir, self.name + '.files') - f = open(contfile, "w") - - for pkg in pkgs: - content = pkg + '\n' - - pkgcont = self._pkgs_content[pkg] - content += ' ' - content += '\n '.join(pkgcont) - content += '\n' - - content += '\n' - f.write(content) - f.close() - self.outimage.append(contfile) - - if 'license' in self._recording_pkgs: - licensefile = os.path.join(destdir, self.name + '.license') - f = open(licensefile, "w") - - f.write('Summary:\n') - for license in reversed(sorted(self._pkgs_license, key=\ - lambda license: len(self._pkgs_license[license]))): - f.write(" - %s: %s\n" \ - % (license, len(self._pkgs_license[license]))) - - f.write('\nDetails:\n') - for license in reversed(sorted(self._pkgs_license, key=\ - lambda license: len(self._pkgs_license[license]))): - f.write(" - %s:\n" % (license)) - for pkg in sorted(self._pkgs_license[license]): - f.write(" - %s\n" % (pkg)) - f.write('\n') - - f.close() - self.outimage.append(licensefile) - - def _get_required_packages(self): - """Return a list of required packages. - - This is the hook where subclasses may specify a set of packages which - it requires to be installed. - - This returns an empty list by default. - - Note, subclasses should usually chain up to the base class - implementation of this hook. - - """ - return [] - - def _get_excluded_packages(self): - """Return a list of excluded packages. - - This is the hook where subclasses may specify a set of packages which - it requires _not_ to be installed. - - This returns an empty list by default. - - Note, subclasses should usually chain up to the base class - implementation of this hook. - - """ - return [] - - def _get_local_packages(self): - """Return a list of rpm path to be local installed. - - This is the hook where subclasses may specify a set of rpms which - it requires to be installed locally. - - This returns an empty list by default. - - Note, subclasses should usually chain up to the base class - implementation of this hook. - - """ - if self._local_pkgs_path: - if os.path.isdir(self._local_pkgs_path): - return glob.glob( - os.path.join(self._local_pkgs_path, '*.rpm')) - elif os.path.splitext(self._local_pkgs_path)[-1] == '.rpm': - return [self._local_pkgs_path] - - return [] - - def _get_fstab(self): - """Return the desired contents of /etc/fstab. - - This is the hook where subclasses may specify the contents of - /etc/fstab by returning a string containing the desired contents. - - A sensible default implementation is provided. - - """ - s = "/dev/root / %s %s 0 0\n" \ - % (self._fstype, - "defaults,noatime" if not self._fsopts else self._fsopts) - s += self._get_fstab_special() - return s - - def _get_fstab_special(self): - s = "devpts /dev/pts devpts gid=5,mode=620 0 0\n" - s += "tmpfs /dev/shm tmpfs defaults 0 0\n" - s += "proc /proc proc defaults 0 0\n" - s += "sysfs /sys sysfs defaults 0 0\n" - return s - - def _set_part_env(self, pnum, prop, value): - """ This is a helper function which generates an environment variable - for a property "prop" with value "value" of a partition number "pnum". - - The naming convention is: - * Variables start with INSTALLERFW_PART - * Then goes the partition number, the order is the same as - specified in the KS file - * Then goes the property name - """ - - if value == None: - value = "" - else: - value = str(value) - - name = self.installerfw_prefix + ("PART%d_" % pnum) + prop - return { name : value } - - def _get_post_scripts_env(self, in_chroot): - """Return an environment dict for %post scripts. - - This is the hook where subclasses may specify some environment - variables for %post scripts by return a dict containing the desired - environment. - - in_chroot -- whether this %post script is to be executed chroot()ed - into _instroot. - """ - - env = {} - pnum = 0 - - for p in kickstart.get_partitions(self.ks): - env.update(self._set_part_env(pnum, "SIZE", p.size)) - env.update(self._set_part_env(pnum, "MOUNTPOINT", p.mountpoint)) - env.update(self._set_part_env(pnum, "FSTYPE", p.fstype)) - env.update(self._set_part_env(pnum, "LABEL", p.label)) - env.update(self._set_part_env(pnum, "FSOPTS", p.fsopts)) - env.update(self._set_part_env(pnum, "BOOTFLAG", p.active)) - env.update(self._set_part_env(pnum, "ALIGN", p.align)) - env.update(self._set_part_env(pnum, "TYPE_ID", p.part_type)) - env.update(self._set_part_env(pnum, "UUID", p.uuid)) - env.update(self._set_part_env(pnum, "DEVNODE", - "/dev/%s%d" % (p.disk, pnum + 1))) - env.update(self._set_part_env(pnum, "DISK_DEVNODE", - "/dev/%s" % p.disk)) - pnum += 1 - - # Count of paritions - env[self.installerfw_prefix + "PART_COUNT"] = str(pnum) - - # Partition table format - ptable_format = self.ks.handler.bootloader.ptable - env[self.installerfw_prefix + "PTABLE_FORMAT"] = ptable_format - - # The kerned boot parameters - kernel_opts = self.ks.handler.bootloader.appendLine - env[self.installerfw_prefix + "KERNEL_OPTS"] = kernel_opts - - # Name of the image creation tool - env[self.installerfw_prefix + "INSTALLER_NAME"] = "mic" - - # The real current location of the mounted file-systems - if in_chroot: - mount_prefix = "/" - else: - mount_prefix = self._instroot - env[self.installerfw_prefix + "MOUNT_PREFIX"] = mount_prefix - - # These are historical variables which lack the common name prefix - if not in_chroot: - env["INSTALL_ROOT"] = self._instroot - env["IMG_NAME"] = self._name - env['ATTACHMENT_PATHS'] = ' '.join(self._attachment) - if self._imgdir: - env['IMG_DIR_PATH'] = str(self._imgdir) - - return env - - def __get_imgname(self): - return self.name - _name = property(__get_imgname) - """The name of the image file. - - """ - - def _get_kernel_versions(self): - """Return a dict detailing the available kernel types/versions. - - This is the hook where subclasses may override what kernel types and - versions should be available for e.g. creating the booloader - configuration. - - A dict should be returned mapping the available kernel types to a list - of the available versions for those kernels. - - The default implementation uses rpm to iterate over everything - providing 'kernel', finds /boot/vmlinuz-* and returns the version - obtained from the vmlinuz filename. (This can differ from the kernel - RPM's n-v-r in the case of e.g. xen) - - """ - def get_kernel_versions(instroot): - ret = {} - versions = set() - files = glob.glob(instroot + "/boot/vmlinuz-*") - for file in files: - version = os.path.basename(file)[8:] - if version is None: - continue - versions.add(version) - ret["kernel"] = list(versions) - return ret - - def get_version(header): - version = None - for f in header['filenames']: - if f.startswith('/boot/vmlinuz-'): - version = f[14:] - return version - - if self.ks is None: - return get_kernel_versions(self._instroot) - - ts = rpm.TransactionSet(self._instroot) - - ret = {} - for header in ts.dbMatch('provides', 'kernel'): - version = get_version(header) - if version is None: - continue - - name = header['name'] - if not name in ret: - ret[name] = [version] - elif not version in ret[name]: - ret[name].append(version) - - return ret - - - # - # Helpers for subclasses - # - def _do_bindmounts(self): - """Mount various system directories onto _instroot. - - This method is called by mount(), but may also be used by subclasses - in order to re-mount the bindmounts after modifying the underlying - filesystem. - - """ - for b in self.__bindmounts: - b.mount() - - def _undo_bindmounts(self): - """Unmount the bind-mounted system directories from _instroot. - - This method is usually only called by unmount(), but may also be used - by subclasses in order to gain access to the filesystem obscured by - the bindmounts - e.g. in order to create device nodes on the image - filesystem. - - """ - self.__bindmounts.reverse() - for b in self.__bindmounts: - b.unmount() - - def _chroot(self): - """Chroot into the install root. - - This method may be used by subclasses when executing programs inside - the install root e.g. - - subprocess.call(["/bin/ls"], preexec_fn = self.chroot) - - """ - os.chroot(self._instroot) - os.chdir("/") - - def _mkdtemp(self, prefix = "tmp-"): - """Create a temporary directory. - - This method may be used by subclasses to create a temporary directory - for use in building the final image - e.g. a subclass might create - a temporary directory in order to bundle a set of files into a package. - - The subclass may delete this directory if it wishes, but it will be - automatically deleted by cleanup(). - - The absolute path to the temporary directory is returned. - - Note, this method should only be called after mount() has been called. - - prefix -- a prefix which should be used when creating the directory; - defaults to "tmp-". - - """ - self.__ensure_builddir() - return tempfile.mkdtemp(dir = self.__builddir, prefix = prefix) - - def _mkstemp(self, prefix = "tmp-"): - """Create a temporary file. - - This method may be used by subclasses to create a temporary file - for use in building the final image - e.g. a subclass might need - a temporary location to unpack a compressed file. - - The subclass may delete this file if it wishes, but it will be - automatically deleted by cleanup(). - - A tuple containing a file descriptor (returned from os.open() and the - absolute path to the temporary directory is returned. - - Note, this method should only be called after mount() has been called. - - prefix -- a prefix which should be used when creating the file; - defaults to "tmp-". - - """ - self.__ensure_builddir() - return tempfile.mkstemp(dir = self.__builddir, prefix = prefix) - - def _mktemp(self, prefix = "tmp-"): - """Create a temporary file. - - This method simply calls _mkstemp() and closes the returned file - descriptor. - - The absolute path to the temporary file is returned. - - Note, this method should only be called after mount() has been called. - - prefix -- a prefix which should be used when creating the file; - defaults to "tmp-". - - """ - - (f, path) = self._mkstemp(prefix) - os.close(f) - return path - - - # - # Actual implementation - # - def __ensure_builddir(self): - if not self.__builddir is None: - return - - try: - self.workdir = os.path.join(self.tmpdir, "build") - if not os.path.exists(self.workdir): - os.makedirs(self.workdir) - self.__builddir = tempfile.mkdtemp(dir = self.workdir, - prefix = "imgcreate-") - except OSError as msg: - raise CreatorError("Failed create build directory in %s: %s" % - (self.tmpdir, msg)) - - def get_cachedir(self, cachedir = None): - if self.cachedir: - return self.cachedir - - self.__ensure_builddir() - if cachedir: - self.cachedir = cachedir - else: - self.cachedir = self.__builddir + "/mic-cache" - fs.makedirs(self.cachedir) - return self.cachedir - - def __sanity_check(self): - """Ensure that the config we've been given is same.""" - if not (kickstart.get_packages(self.ks) or - kickstart.get_groups(self.ks)): - raise CreatorError("No packages or groups specified") - - kickstart.convert_method_to_repo(self.ks) - - if not kickstart.get_repos(self.ks): - raise CreatorError("No repositories specified") - - def __write_fstab(self): - if kickstart.use_installerfw(self.ks, "fstab"): - # The fstab file will be generated by installer framework scripts - # instead. - return None - fstab_contents = self._get_fstab() - if fstab_contents: - fstab = open(self._instroot + "/etc/fstab", "w") - fstab.write(fstab_contents) - fstab.close() - - def __create_minimal_dev(self): - """Create a minimal /dev so that we don't corrupt the host /dev""" - origumask = os.umask(0000) - devices = (('null', 1, 3, 0o666), - ('urandom',1, 9, 0o666), - ('random', 1, 8, 0o666), - ('full', 1, 7, 0o666), - ('ptmx', 5, 2, 0o666), - ('tty', 5, 0, 0o666), - ('zero', 1, 5, 0o666)) - - links = (("/proc/self/fd", "/dev/fd"), - ("/proc/self/fd/0", "/dev/stdin"), - ("/proc/self/fd/1", "/dev/stdout"), - ("/proc/self/fd/2", "/dev/stderr")) - - for (node, major, minor, perm) in devices: - if not os.path.exists(self._instroot + "/dev/" + node): - os.mknod(self._instroot + "/dev/" + node, - perm | stat.S_IFCHR, - os.makedev(major,minor)) - - for (src, dest) in links: - if not os.path.exists(self._instroot + dest): - os.symlink(src, self._instroot + dest) - - os.umask(origumask) - - def __setup_tmpdir(self): - if not self.enabletmpfs: - return - - runner.show('mount -t tmpfs -o size=4G tmpfs %s' % self.workdir) - - def __clean_tmpdir(self): - if not self.enabletmpfs: - return - - runner.show('umount -l %s' % self.workdir) - - def cp_tpk(self): - #Add tpk-install option - createopts = configmgr.create - if createopts['tpk_install']: - path = createopts['tpk_install'] - file_list = os.listdir(path) - for f in file_list: - sub = os.path.splitext(f)[1] - if sub != ".tpk": - raise CreatorError("Not all files in the path: "+path +" is tpk") - - tpk_dir = "/usr/apps/.preload-tpk" - fs.makedirs(self._instroot + "/usr/apps") - fs.makedirs(self._instroot + tpk_dir) - for f in file_list: - shutil.copy(path+"/"+f,self._instroot + tpk_dir) - - def mount(self, base_on = None, cachedir = None): - """Setup the target filesystem in preparation for an install. - - This function sets up the filesystem which the ImageCreator will - install into and configure. The ImageCreator class merely creates an - install root directory, bind mounts some system directories (e.g. /dev) - and writes out /etc/fstab. Other subclasses may also e.g. create a - sparse file, format it and loopback mount it to the install root. - - base_on -- a previous install on which to base this install; defaults - to None, causing a new image to be created - - cachedir -- a directory in which to store the Yum cache; defaults to - None, causing a new cache to be created; by setting this - to another directory, the same cache can be reused across - multiple installs. - - """ - self.__setup_tmpdir() - self.__ensure_builddir() - - # prevent popup dialog in Ubuntu(s) - misc.hide_loopdev_presentation() - - fs.makedirs(self._instroot) - fs.makedirs(self._outdir) - - self._mount_instroot(base_on) - - for d in ("/dev/pts", - "/etc", - "/boot", - "/var/log", - "/sys", - "/proc", - "/usr/bin"): - fs.makedirs(self._instroot + d) - - if self.target_arch and self.target_arch.startswith("arm") or \ - self.target_arch == "aarch64" or self.target_arch == "riscv64": - self.qemu_emulators = misc.setup_qemu_emulator(self._instroot, - self.target_arch) - - self.get_cachedir(cachedir) - - # bind mount system directories into _instroot - for (f, dest) in [("/sys", None), - ("/proc", None), - ("/proc/sys/fs/binfmt_misc", None), - ("/dev/pts", None)]: - self.__bindmounts.append( - fs.BindChrootMount( - f, self._instroot, dest)) - - self._do_bindmounts() - - self.__create_minimal_dev() - - if os.path.exists(self._instroot + "/etc/mtab"): - os.unlink(self._instroot + "/etc/mtab") - os.symlink("../proc/mounts", self._instroot + "/etc/mtab") - - #self.__write_fstab() - - # get size of available space in 'instroot' fs - self._root_fs_avail = misc.get_filesystem_avail(self._instroot) - self.cp_tpk() - - def unmount(self): - """Unmounts the target filesystem. - - The ImageCreator class detaches the system from the install root, but - other subclasses may also detach the loopback mounted filesystem image - from the install root. - - """ - try: - mtab = self._instroot + "/etc/mtab" - if not os.path.islink(mtab): - os.unlink(self._instroot + "/etc/mtab") - - for qemu_emulator in self.qemu_emulators: - os.unlink(self._instroot + qemu_emulator) - except OSError: - pass - - self._undo_bindmounts() - - """ Clean up yum garbage """ - try: - instroot_pdir = os.path.dirname(self._instroot + self._instroot) - if os.path.exists(instroot_pdir): - shutil.rmtree(instroot_pdir, ignore_errors = True) - yumlibdir = self._instroot + "/var/lib/yum" - if os.path.exists(yumlibdir): - shutil.rmtree(yumlibdir, ignore_errors = True) - except OSError: - pass - - self._unmount_instroot() - - # reset settings of popup dialog in Ubuntu(s) - misc.unhide_loopdev_presentation() - - - def cleanup(self): - """Unmounts the target filesystem and deletes temporary files. - - This method calls unmount() and then deletes any temporary files and - directories that were created on the host system while building the - image. - - Note, make sure to call this method once finished with the creator - instance in order to ensure no stale files are left on the host e.g.: - - creator = ImageCreator(ks, name) - try: - creator.create() - finally: - creator.cleanup() - - """ - if not self.__builddir: - return - - kill_proc_inchroot(self._instroot) - - self.unmount() - - shutil.rmtree(self.__builddir, ignore_errors = True) - self.__builddir = None - - self.__clean_tmpdir() - - def __is_excluded_pkg(self, pkg): - if pkg in self._excluded_pkgs: - self._excluded_pkgs.remove(pkg) - return True - - for xpkg in self._excluded_pkgs: - if xpkg.endswith('*'): - if pkg.startswith(xpkg[:-1]): - return True - elif xpkg.startswith('*'): - if pkg.endswith(xpkg[1:]): - return True - - return None - - def __select_packages(self, pkg_manager): - skipped_pkgs = [] - for pkg in self._required_pkgs: - e = pkg_manager.selectPackage(pkg) - if e: - if kickstart.ignore_missing(self.ks): - skipped_pkgs.append(pkg) - elif self.__is_excluded_pkg(pkg): - skipped_pkgs.append(pkg) - else: - raise CreatorError("Failed to find package '%s' : %s" % - (pkg, e)) - - for pkg in skipped_pkgs: - msger.warning("Skipping missing package '%s'" % (pkg,)) - - def __select_groups(self, pkg_manager): - skipped_groups = [] - for group in self._required_groups: - e = pkg_manager.selectGroup(group.name, group.include) - if e: - if kickstart.ignore_missing(self.ks): - skipped_groups.append(group) - else: - raise CreatorError("Failed to find group '%s' : %s" % - (group.name, e)) - - for group in skipped_groups: - msger.warning("Skipping missing group '%s'" % (group.name,)) - - def __deselect_packages(self, pkg_manager): - for pkg in self._excluded_pkgs: - pkg_manager.deselectPackage(pkg) - - """def __localinst_packages(self, pkg_manager): - for rpm_path in self._get_local_packages(): - pkg_manager.installLocal(rpm_path)""" - - def __preinstall_packages(self, pkg_manager): - if not self.ks: - return - - self._preinstall_pkgs = kickstart.get_pre_packages(self.ks) - for pkg in self._preinstall_pkgs: - pkg_manager.preInstall(pkg) - - def __check_packages(self, pkg_manager): - for pkg in self.check_pkgs: - pkg_manager.checkPackage(pkg) - - def __attachment_packages(self, pkg_manager): - if not self.ks: - return - - self._attachment = [] - for item in kickstart.get_attachment(self.ks): - if item.startswith('/'): - fpaths = os.path.join(self._instroot, item.lstrip('/')) - for fpath in glob.glob(fpaths): - self._attachment.append(fpath) - continue - - filelist = pkg_manager.getFilelist(item) - if filelist: - # found rpm in rootfs - for pfile in pkg_manager.getFilelist(item): - fpath = os.path.join(self._instroot, pfile.lstrip('/')) - self._attachment.append(fpath) - continue - - # try to retrieve rpm file - (url, proxies) = pkg_manager.package_url(item) - if not url: - msger.warning("Can't get url from repo for %s" % item) - continue - fpath = os.path.join(self.cachedir, os.path.basename(url)) - if not os.path.exists(fpath): - # download pkgs - try: - fpath = grabber.myurlgrab(url.full, fpath, proxies, None) - except CreatorError: - raise - - tmpdir = self._mkdtemp() - misc.extract_rpm(fpath, tmpdir) - for (root, dirs, files) in os.walk(tmpdir): - for fname in files: - fpath = os.path.join(root, fname) - self._attachment.append(fpath) - - def install(self, repo_urls=None): - """Install packages into the install root. - - This function installs the packages listed in the supplied kickstart - into the install root. By default, the packages are installed from the - repository URLs specified in the kickstart. - - repo_urls -- a dict which maps a repository name to a repository; - if supplied, this causes any repository URLs specified in - the kickstart to be overridden. - - """ - def checkScriptletError(dirname, suffix): - if os.path.exists(dirname): - list = os.listdir(dirname) - for line in list: - filepath = os.path.join(dirname, line) - if os.path.isfile(filepath) and 0 < line.find(suffix): - return True - else: - continue - - return False - - def showErrorInfo(filepath): - if os.path.isfile(filepath): - for line in open(filepath): - msger.info("The error install package info: %s" % line) - else: - msger.info("%s is not found." % filepath) - - def get_ssl_verify(ssl_verify=None): - if ssl_verify is not None: - return not ssl_verify.lower().strip() == 'no' - else: - return not self.ssl_verify.lower().strip() == 'no' - - # initialize pkg list to install - if self.ks: - self.__sanity_check() - - self._required_pkgs = \ - kickstart.get_packages(self.ks, self._get_required_packages()) - self._excluded_pkgs = \ - kickstart.get_excluded(self.ks, self._get_excluded_packages()) - self._required_groups = kickstart.get_groups(self.ks) - else: - self._required_pkgs = None - self._excluded_pkgs = None - self._required_groups = None - - if not repo_urls: - repo_urls = self.extrarepos - - pkg_manager = self.get_pkg_manager() - pkg_manager.setup() - - if hasattr(self, 'install_pkgs') and self.install_pkgs: - if 'debuginfo' in self.install_pkgs: - pkg_manager.install_debuginfo = True - - - for repo in kickstart.get_repos(self.ks, repo_urls, self.ignore_ksrepo): - (name, baseurl, mirrorlist, inc, exc, - proxy, proxy_username, proxy_password, debuginfo, - source, gpgkey, disable, ssl_verify, nocache, - cost, priority) = repo - - ssl_verify = get_ssl_verify(ssl_verify) - yr = pkg_manager.addRepository(name, baseurl, mirrorlist, proxy, - proxy_username, proxy_password, inc, exc, ssl_verify, - nocache, cost, priority) - - if kickstart.exclude_docs(self.ks): - rpm.addMacro("_excludedocs", "1") - rpm.addMacro("_dbpath", "/var/lib/rpm") - rpm.addMacro("__file_context_path", "%{nil}") - if kickstart.inst_langs(self.ks) != None: - rpm.addMacro("_install_langs", kickstart.inst_langs(self.ks)) - - try: - self.__preinstall_packages(pkg_manager) - self.__select_packages(pkg_manager) - self.__select_groups(pkg_manager) - self.__deselect_packages(pkg_manager) - #self.__localinst_packages(pkg_manager) - self.__check_packages(pkg_manager) - - BOOT_SAFEGUARD = 256 * 1024 * 1024 # 256M - checksize = self._root_fs_avail - if checksize: - checksize -= BOOT_SAFEGUARD - if self.target_arch: - pkg_manager._add_prob_flags(rpm.RPMPROB_FILTER_IGNOREARCH) - - # If we have multiple partitions, don't check diskspace when rpm run transaction - # because rpm check '/' partition only. - if self.multiple_partitions: - pkg_manager._add_prob_flags(rpm.RPMPROB_FILTER_DISKSPACE) - pkg_manager.runInstall(checksize) - except CreatorError as e: - raise - except KeyboardInterrupt: - raise - else: - self._pkgs_content = pkg_manager.getAllContent() - self._pkgs_license = pkg_manager.getPkgsLicense() - self._pkgs_vcsinfo = pkg_manager.getVcsInfo() - self.__attachment_packages(pkg_manager) - finally: - pkg_manager.close() - - if checkScriptletError(self._instroot + "/tmp/.postscript/error/", "_error"): - showErrorInfo(self._instroot + "/tmp/.preload_install_error") - raise CreatorError('scriptlet errors occurred') - - # hook post install - self.postinstall() - - # do some clean up to avoid lvm info leakage. this sucks. - for subdir in ("cache", "backup", "archive"): - lvmdir = self._instroot + "/etc/lvm/" + subdir - try: - for f in os.listdir(lvmdir): - os.unlink(lvmdir + "/" + f) - except: - pass - - def tpkinstall(self): - if self.ks: - tpk_pkgs = kickstart.get_tpkpackages(self.ks) - tpk_repoList = kickstart.get_tpkrepos(self.ks) - if tpk_repoList and tpk_pkgs: - tpk_dir = "/usr/apps/.preload-tpk" - fs.makedirs(self._instroot + "/usr/apps") - fs.makedirs(self._instroot + tpk_dir) - for pkg in tpk_pkgs: - flag = 0 - for tpk_repo in tpk_repoList: - if hasattr(tpk_repo,'baseurl') and tpk_repo.baseurl.startswith("file:"): - tpk_repourl = tpk_repo.baseurl.replace('file:','') - tpk_repourl = "/%s" % tpk_repourl.lstrip('/') - tpk_pkgpath = tpk_repourl + "/"+ pkg - if os.path.isfile(tpk_pkgpath): - shutil.copy(tpk_pkgpath,self._instroot + tpk_dir) - flag = 1 - break - elif hasattr(tpk_repo,'baseurl'): - url = tpk_repo.baseurl.join(pkg) - filename = self._instroot+tpk_dir+"/"+pkg - if tpk_repo.baseurl.startswith("http:"): - import urllib - status = urllib.urlopen(url).code - if status == 200: - filename = myurlgrab(url.full, filename, None) - flag = 1 - break - elif status == 404 or status == None: - continue - #url is ok, then download, url wrong, check other url. - elif tpk_repo.baseurl.startswith("https:") : - try: - flag = 1 - filename = myurlgrab(url.full, filename, None) - except CreatorError: - continue - if flag == 0: - raise CreatorError("Tpk package missing.") - - def postinstall(self): - self.copy_attachment() - - def _get_sign_scripts_env(self): - """Return an environment dict for %post-umount scripts. - - This is the hook where subclasses may specify some environment - variables for %post-umount scripts by return a dict containing the - desired environment. - """ - - env = {} - - # Directory path of images - if self._imgdir: - env['IMG_DIR_PATH'] = str(self._imgdir) - - imgfiles = [] - imgpaths = [] - for item in self._instloops: - imgfiles.append(item['name']) - if self._imgdir: - imgpaths.append(os.path.join(self._imgdir, item['name'])) - - # Images file name - env['IMG_FILES'] = ' '.join(imgfiles) - - # Absolute path of images - env['IMG_PATHS'] = ' '.join(imgpaths) - - return env - - def run_sign_scripts(self): - if kickstart.get_sign_scripts(self.ks)==[]: - return - msger.info("Running sign scripts ...") - if os.path.exists(self._instroot + "/tmp"): - shutil.rmtree(self._instroot + "/tmp") - os.mkdir (self._instroot + "/tmp", 0o755) - for s in kickstart.get_sign_scripts(self.ks): - (fd, path) = tempfile.mkstemp(prefix = "ks-runscript-", - dir = self._instroot + "/tmp") - s.script = s.script.replace("\r", "") - os.write(fd, s.script) - if s.interp == '/bin/sh' or s.interp == '/bin/bash': - os.write(fd, '\n') - os.write(fd, 'exit 0\n') - os.close(fd) - os.chmod(path, 0o700) - - env = self._get_sign_scripts_env() - oldoutdir = os.getcwd() - os.chdir(self._imgdir) - try: - try: - p = subprocess.Popen([s.interp, path], - env = env, - stdout = subprocess.PIPE, - stderr = subprocess.STDOUT) - while p.poll() == None: - msger.info(p.stdout.readline().strip()) - if p.returncode != 0: - raise CreatorError("Failed to execute %%sign script " - "with '%s'" % (s.interp)) - except OSError as msg: - raise CreatorError("Failed to execute %%sign script " - "with '%s' : %s" % (s.interp, msg)) - finally: - os.chdir(oldoutdir) - os.unlink(path) - - def __run_post_scripts(self): - msger.info("Running post scripts ...") - if os.path.exists(self._instroot + "/tmp"): - shutil.rmtree(self._instroot + "/tmp") - os.mkdir (self._instroot + "/tmp", 0o755) - for s in kickstart.get_post_scripts(self.ks): - (fd, path) = tempfile.mkstemp(prefix = "ks-postscript-", - dir = self._instroot + "/tmp") - - s.script = s.script.replace("\r", "") - os.write(fd, s.script) - if s.interp == '/bin/sh' or s.interp == '/bin/bash': - os.write(fd, '\n') - os.write(fd, 'exit 0\n') - os.close(fd) - os.chmod(path, 0o700) - - env = self._get_post_scripts_env(s.inChroot) - if 'PATH' not in env: - env['PATH'] = '/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin' - - if not s.inChroot: - preexec = None - script = path - else: - preexec = self._chroot - script = "/tmp/" + os.path.basename(path) - start_time = time.time() - try: - try: - p = subprocess.Popen([s.interp, script], - preexec_fn = preexec, - env = env, - stdout = subprocess.PIPE, - stderr = subprocess.STDOUT) - while p.poll() == None: - msger.info(p.stdout.readline().strip()) - end_time = time.time() - if (end_time - start_time)/60 > configmgr.create['postscripts_maxruntime']: - raise CreatorError("Your post script is executed more than %d mins, please check it!" % configmgr.create['postscripts_maxruntime']) - if p.returncode != 0: - raise CreatorError("Failed to execute %%post script " - "with '%s'" % (s.interp)) - except OSError as msg: - raise CreatorError("Failed to execute %%post script " - "with '%s' : %s" % (s.interp, msg)) - finally: - os.unlink(path) - - def __save_repo_keys(self, repodata): - if not repodata: - return None - - gpgkeydir = "/etc/pki/rpm-gpg" - fs.makedirs(self._instroot + gpgkeydir) - for repo in repodata: - if repo["repokey"]: - repokey = gpgkeydir + "/RPM-GPG-KEY-%s" % repo["name"] - shutil.copy(repo["repokey"], self._instroot + repokey) - - def configure(self, repodata = None): - """Configure the system image according to the kickstart. - - This method applies the (e.g. keyboard or network) configuration - specified in the kickstart and executes the kickstart %post scripts. - - If necessary, it also prepares the image to be bootable by e.g. - creating an initrd and bootloader configuration. - - """ - ksh = self.ks.handler - - msger.info('Applying configurations ...') - try: - kickstart.LanguageConfig(self._instroot).apply(ksh.lang) - kickstart.KeyboardConfig(self._instroot).apply(ksh.keyboard) - kickstart.TimezoneConfig(self._instroot).apply(ksh.timezone) - #kickstart.AuthConfig(self._instroot).apply(ksh.authconfig) - kickstart.FirewallConfig(self._instroot).apply(ksh.firewall) - kickstart.UserConfig(self._instroot).apply(ksh.user) - kickstart.RootPasswordConfig(self._instroot).apply(ksh.rootpw) - kickstart.ServicesConfig(self._instroot).apply(ksh.services) - kickstart.XConfig(self._instroot).apply(ksh.xconfig) - kickstart.NetworkConfig(self._instroot).apply(ksh.network) - kickstart.RPMMacroConfig(self._instroot).apply(self.ks) - kickstart.DesktopConfig(self._instroot).apply(ksh.desktop) - self.__save_repo_keys(repodata) - kickstart.MoblinRepoConfig(self._instroot).apply(ksh.repo, repodata, self.repourl) - except: - msger.warning("Failed to apply configuration to image") - raise - - self._create_bootconfig() - self.__run_post_scripts() - - def launch_shell(self, launch): - """Launch a shell in the install root. - - This method is launches a bash shell chroot()ed in the install root; - this can be useful for debugging. - - """ - if launch: - msger.info("Launching shell. Exit to continue.") - subprocess.call(["/bin/bash"], preexec_fn = self._chroot) - - def do_genchecksum(self, image_name): - if not self._genchecksum: - return - - md5sum = misc.get_md5sum(image_name) - with open(image_name + ".md5sum", "w") as f: - f.write("%s %s" % (md5sum, os.path.basename(image_name))) - self.outimage.append(image_name+".md5sum") - - def remove_exclude_image(self): - for item in self._instloops[:]: - if item['exclude_image']: - msger.info("Removing %s in image." % item['name']) - imgfile = os.path.join(self._imgdir, item['name']) - try: - os.remove(imgfile) - except OSError as err: - if err.errno == errno.ENOENT: - pass - self._instloops.remove(item) - - def create_cpio_image(self): - for item in self._instloops: - if item['cpioopts']: - msger.info("Create image by cpio.") - tmp_cpio = self.__builddir + "/tmp-cpio" - if not os.path.exists(tmp_cpio): - os.mkdir(tmp_cpio) - tmp_cpio_imgfile = os.path.join(tmp_cpio, item['name']) - try: - cpiocmd = fs.find_binary_path('cpio') - if cpiocmd: - oldoutdir = os.getcwd() - os.chdir(os.path.join(self._instroot, item['mountpoint'].lstrip('/'))) - # find . | cpio --create --'format=newc' | gzip > ../ramdisk.img - runner.show('find . | cpio --create %s | gzip > %s' % (item['cpioopts'], tmp_cpio_imgfile)) - os.chdir(oldoutdir) - except OSError as msg: - raise CreatorError("Create image by cpio error: %s" % msg) - - def copy_cpio_image(self): - for item in self._instloops: - if item['cpioopts']: - tmp_cpio = self.__builddir + "/tmp-cpio" - msger.info("Copy cpio image from %s to %s." %(tmp_cpio, self._imgdir)) - try: - shutil.copyfile(os.path.join(tmp_cpio, item['name']),os.path.join(self._imgdir, item['name'])) - except IOError: - raise CreatorError("Copy cpio image error") - os.remove(os.path.join(tmp_cpio, item['name'])) - if not os.listdir(tmp_cpio): - shutil.rmtree(tmp_cpio, ignore_errors=True) - - def package(self, destdir = "."): - """Prepares the created image for final delivery. - - In its simplest form, this method merely copies the install root to the - supplied destination directory; other subclasses may choose to package - the image by e.g. creating a bootable ISO containing the image and - bootloader configuration. - - destdir -- the directory into which the final image should be moved; - this defaults to the current directory. - - """ - self.remove_exclude_image() - - self._stage_final_image() - - if not os.path.exists(destdir): - fs.makedirs(destdir) - - if self._recording_pkgs: - self._save_recording_pkgs(destdir) - - # For image formats with two or multiple image files, it will be - # better to put them under a directory - if self.image_format in ("raw", "vmdk", "vdi", "nand", "mrstnand"): - destdir = os.path.join(destdir, "%s-%s" \ - % (self.name, self.image_format)) - msger.debug("creating destination dir: %s" % destdir) - fs.makedirs(destdir) - - # Ensure all data is flushed to _outdir - runner.quiet('sync') - - misc.check_space_pre_cp(self._outdir, destdir) - for f in os.listdir(self._outdir): - shutil.move(os.path.join(self._outdir, f), - os.path.join(destdir, f)) - self.outimage.append(os.path.join(destdir, f)) - self.do_genchecksum(os.path.join(destdir, f)) - - def print_outimage_info(self): - msg = "The new image can be found here:\n" - self.outimage.sort() - for file in self.outimage: - msg += ' %s\n' % os.path.abspath(file) - - msger.info(msg) - - def check_depend_tools(self): - for tool in self._dep_checks: - fs.find_binary_path(tool) - - def package_output(self, image_format, destdir = ".", package="none"): - if not package or package == "none": - return - - destdir = os.path.abspath(os.path.expanduser(destdir)) - (pkg, comp) = os.path.splitext(package) - if comp: - comp=comp.lstrip(".") - - if pkg == "tar": - if comp: - dst = "%s/%s-%s.tar.%s" %\ - (destdir, self.name, image_format, comp) - else: - dst = "%s/%s-%s.tar" %\ - (destdir, self.name, image_format) - - msger.info("creating %s" % dst) - tar = tarfile.open(dst, "w:" + comp) - - for file in self.outimage: - msger.info("adding %s to %s" % (file, dst)) - tar.add(file, - arcname=os.path.join("%s-%s" \ - % (self.name, image_format), - os.path.basename(file))) - if os.path.isdir(file): - shutil.rmtree(file, ignore_errors = True) - else: - os.remove(file) - - tar.close() - - '''All the file in outimage has been packaged into tar.* file''' - self.outimage = [dst] - - def release_output(self, config, destdir, release): - """ Create release directory and files - """ - - def _rpath(fn): - """ release path """ - return os.path.join(destdir, fn) - - outimages = self.outimage - - # new ks - new_kspath = _rpath(self.name+'.ks') - with open(config) as fr: - with open(new_kspath, "w") as wf: - # When building a release we want to make sure the .ks - # file generates the same build even when --release not used. - wf.write(fr.read().replace("@BUILD_ID@", release)) - outimages.append(new_kspath) - - # save log file, logfile is only available in creator attrs - if hasattr(self, 'releaselog') and self.releaselog: - outimages.append(self.logfile) - - # rename iso and usbimg - for f in os.listdir(destdir): - if f.endswith(".iso"): - newf = f[:-4] + '.img' - elif f.endswith(".usbimg"): - newf = f[:-7] + '.img' - else: - continue - os.rename(_rpath(f), _rpath(newf)) - outimages.append(_rpath(newf)) - - # generate MD5SUMS SHA1SUMS SHA256SUMS - def generate_hashsum(hash_name, hash_method): - with open(_rpath(hash_name), "w") as wf: - for f in os.listdir(destdir): - if f.endswith('SUMS'): - continue - - if os.path.isdir(os.path.join(destdir, f)): - continue - - hash_value = hash_method(_rpath(f)) - # There needs to be two spaces between the sum and - # filepath to match the syntax with md5sum,sha1sum, - # sha256sum. This way also *sum -c *SUMS can be used. - wf.write("%s %s\n" % (hash_value, f)) - - outimages.append("%s/%s" % (destdir, hash_name)) - - hash_dict = { - 'MD5SUMS' : misc.get_md5sum, - 'SHA1SUMS' : misc.get_sha1sum, - 'SHA256SUMS' : misc.get_sha256sum - } - - for k, v in hash_dict.items(): - generate_hashsum(k, v) - - # Filter out the nonexist file - for fp in outimages[:]: - if not os.path.exists("%s" % fp): - outimages.remove(fp) - - def copy_kernel(self): - """ Copy kernel files to the outimage directory. - NOTE: This needs to be called before unmounting the instroot. - """ - - if not self._need_copy_kernel: - return - - if not os.path.exists(self.destdir): - os.makedirs(self.destdir) - - for kernel in glob.glob("%s/boot/vmlinuz-*" % self._instroot): - kernelfilename = "%s/%s-%s" % (self.destdir, - self.name, - os.path.basename(kernel)) - msger.info('copy kernel file %s as %s' % (os.path.basename(kernel), - kernelfilename)) - shutil.copy(kernel, kernelfilename) - self.outimage.append(kernelfilename) - - def copy_attachment(self): - """ Subclass implement it to handle attachment files - NOTE: This needs to be called before unmounting the instroot. - """ - pass - - def get_pkg_manager(self): - return self.pkgmgr(target_arch = self.target_arch, - instroot = self._instroot, - cachedir = self.cachedir, - strict_mode = self.strict_mode) - - def create_manifest(self): - def get_pack_suffix(): - return '.' + self.pack_to.split('.', 1)[1] - - if not os.path.exists(self.destdir): - os.makedirs(self.destdir) - - now = datetime.now().strftime('%Y-%m-%d %H:%M:%S') - manifest_dict = {'version': VERSION, - 'created': now} - if self.img_format: - manifest_dict.update({'format': self.img_format}) - - if hasattr(self, 'logfile') and self.logfile: - manifest_dict.update({'log_file': self.logfile}) - - if self.image_files: - if self.pack_to: - self.image_files.update({'pack': get_pack_suffix()}) - manifest_dict.update({self.img_format: self.image_files}) - - msger.info('Creating manifest file...') - manifest_file_path = os.path.join(self.destdir, 'manifest.json') - with open(manifest_file_path, 'w') as fest_file: - json.dump(manifest_dict, fest_file, indent=4) - self.outimage.append(manifest_file_path) diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/imager/fs.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/imager/fs.py deleted file mode 100644 index f2ccb78..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/imager/fs.py +++ /dev/null @@ -1,101 +0,0 @@ -#!/usr/bin/python -tt -# -# Copyright (c) 2011 Intel, Inc. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free -# Software Foundation; version 2 of the License -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., 59 -# Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -import os - -from mic import msger -from mic.utils import runner, misc -from mic.utils.errors import CreatorError -from mic.utils.fs_related import find_binary_path -from mic.imager.baseimager import BaseImageCreator - -class FsImageCreator(BaseImageCreator): - img_format = 'fs' - - def __init__(self, cfgmgr = None, pkgmgr = None): - self.zips = { - "tar.bz2" : "" - } - BaseImageCreator.__init__(self, cfgmgr, pkgmgr) - self._fstype = None - self._fsopts = None - self._include_src = False - - def package(self, destdir = "."): - - ignores = ["/dev/fd", - "/dev/stdin", - "/dev/stdout", - "/dev/stderr", - "/etc/mtab"] - - if not os.path.exists(destdir): - os.makedirs(destdir) - - if self._recording_pkgs: - self._save_recording_pkgs(destdir) - - if not self.pack_to: - self.image_files = {'image_files': [self.name]} - fsdir = os.path.join(destdir, self.name) - - misc.check_space_pre_cp(self._instroot, destdir) - msger.info("Copying %s to %s ..." % (self._instroot, fsdir)) - runner.show(['cp', "-af", self._instroot, fsdir]) - - for exclude in ignores: - if os.path.exists(fsdir + exclude): - os.unlink(fsdir + exclude) - - self.outimage.append(fsdir) - - else: - self.image_files = {'image_files': [self.pack_to]} - (tar, comp) = os.path.splitext(self.pack_to) - try: - tarcreat = {'.tar': '-cf', - '.gz': '-czf', - '.bz2': '-cjf', - '.tgz': '-czf', - '.tbz': '-cjf'}[comp] - except KeyError: - raise CreatorError("Unsupported comression for this image type:" - " '%s', try '.tar', '.tar.gz', etc" % comp) - - dst = os.path.join(destdir, self.pack_to) - msger.info("Pack rootfs to %s. Please wait..." % dst) - - tar = find_binary_path('tar') - tar_cmdline = [tar, "--numeric-owner", - "--preserve-permissions", - "--one-file-system", - "--directory", - self._instroot] - for ignore_entry in ignores: - if ignore_entry.startswith('/'): - ignore_entry = ignore_entry[1:] - - tar_cmdline.append("--exclude=%s" % (ignore_entry)) - - tar_cmdline.extend([tarcreat, dst, "."]) - - rc = runner.show(tar_cmdline) - if rc: - raise CreatorError("Failed compress image with tar.bz2. " - "Cmdline: %s" % (" ".join(tar_cmdline))) - - self.outimage.append(dst) diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/imager/loop.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/imager/loop.py deleted file mode 100644 index 18f226c..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/imager/loop.py +++ /dev/null @@ -1,562 +0,0 @@ -#!/usr/bin/python -tt -# -# Copyright (c) 2011 Intel, Inc. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free -# Software Foundation; version 2 of the License -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., 59 -# Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -import os -import sys -import glob -import shutil - -from mic import kickstart, msger -from mic.utils.errors import CreatorError, MountError, VdfsError -from mic.utils import misc, runner, fs_related as fs -from mic.imager.baseimager import BaseImageCreator -from mic.archive import packing, compressing - - -# The maximum string length supported for LoopImageCreator.fslabel -FSLABEL_MAXLEN = 32 -# Support for Read-only file system list -AFTER_MNT_FS = {"squashfs":".sqsh", "vdfs":".vdfs"} - -def save_mountpoints(fpath, loops, arch = None): - """Save mount points mapping to file - - :fpath, the xml file to store partition info - :loops, dict of partition info - :arch, image arch - """ - - if not fpath or not loops: - return - - from xml.dom import minidom - doc = minidom.Document() - imgroot = doc.createElement("image") - doc.appendChild(imgroot) - if arch: - imgroot.setAttribute('arch', arch) - for loop in loops: - part = doc.createElement("partition") - imgroot.appendChild(part) - for (key, val) in loop.items(): - if isinstance(val, fs.Mount): - continue - part.setAttribute(key, str(val)) - - with open(fpath, 'w') as wf: - wf.write(doc.toprettyxml(indent=' ')) - - return - -def load_mountpoints(fpath): - """Load mount points mapping from file - - :fpath, file path to load - """ - - if not fpath: - return - - from xml.dom import minidom - mount_maps = [] - with open(fpath, 'r') as rf: - dom = minidom.parse(rf) - imgroot = dom.documentElement - for part in imgroot.getElementsByTagName("partition"): - p = dict(part.attributes.items()) - - try: - mp = (p['mountpoint'], p['label'], p['name'], - int(p['size']), p['fstype']) - except KeyError: - msger.warning("Wrong format line in file: %s" % fpath) - except ValueError: - msger.warning("Invalid size '%s' in file: %s" % (p['size'], fpath)) - else: - mount_maps.append(mp) - - return mount_maps - -class LoopImageCreator(BaseImageCreator): - """Installs a system into a loopback-mountable filesystem image. - - LoopImageCreator is a straightforward ImageCreator subclass; the system - is installed into an ext3 filesystem on a sparse file which can be - subsequently loopback-mounted. - - When specifying multiple partitions in kickstart file, each partition - will be created as a separated loop image. - """ - img_format = 'loop' - - def __init__(self, creatoropts=None, pkgmgr=None, - compress_image=None, - shrink_image=False): - """Initialize a LoopImageCreator instance. - - This method takes the same arguments as ImageCreator.__init__() - with the addition of: - - fslabel -- A string used as a label for any filesystems created. - """ - - BaseImageCreator.__init__(self, creatoropts, pkgmgr) - - self.compress_image = compress_image - self.shrink_image = shrink_image - - self.__fslabel = None - self.fslabel = self.name - - self.__blocksize = 4096 - if self.ks: - self.__fstype = kickstart.get_image_fstype(self.ks, - "ext3") - self.__fsopts = kickstart.get_image_fsopts(self.ks, - "defaults,noatime") - if self.__fstype in AFTER_MNT_FS.keys(): - self.__fstype = "ext4" - - allloops = [] - for part in sorted(kickstart.get_partitions(self.ks), - key=lambda p: p.mountpoint): - aft_fstype = None - if part.fstype == "swap": - continue - elif part.fstype in AFTER_MNT_FS.keys(): - aft_fstype = part.fstype - part.fstype = "ext4" - - label = part.label - fslabel = part.fslabel - if fslabel == '': - fslabel = label - mp = part.mountpoint - if mp == '/': - # the base image - if not label: - label = self.name - else: - mp = mp.rstrip('/') - if not label: - msger.warning('no "label" specified for loop img at %s' - ', use the mountpoint as the name' % mp) - label = mp.split('/')[-1] - - imgname = misc.strip_end(label, '.img') + '.img' - allloops.append({ - 'mountpoint': mp, - 'label': label, - 'fslabel':fslabel, - 'name': imgname, - 'size': part.size or 4096 * 1024 * 1024, - 'fstype': part.fstype or 'ext3', - 'fsopts': part.fsopts or None, - 'aft_fstype': aft_fstype or None, - 'extopts': part.extopts or None, - 'f2fsopts': part.f2fsopts or None, - 'vdfsopts': part.vdfsopts or None, - 'squashfsopts': part.squashfsopts or None, - 'squashfsoptions_maxsize': part.squashfsoptions_maxsize or None, - 'cpioopts': part.cpioopts or None, - 'loop': None, # to be created in _mount_instroot - 'uuid': part.uuid or None, - 'kspart' : part, - 'exclude_image' : part.exclude_image or None, - 'no_shrink': part.no_shrink or False, - 'init_expand': part.init_expand or False, - }) - self._instloops = allloops - - else: - self.__fstype = None - self.__fsopts = None - self._instloops = [] - - self._imgdir = None - self._umountdir = None - - if self.ks: - self.__image_size = kickstart.get_image_size(self.ks, - 4096 * 1024 * 1024) - else: - self.__image_size = 0 - - self._img_name = self.name + ".img" - - def get_image_names(self): - if not self._instloops: - return None - - names = [] - for lo in self._instloops : - names.append(lo['name']) - for ro in AFTER_MNT_FS.values(): - names.append(lo['name'].replace('.img',ro)) - return list(set(names)) - - def _set_fstype(self, fstype): - self.__fstype = fstype - - def _set_image_size(self, imgsize): - self.__image_size = imgsize - - - # - # Properties - # - def __get_fslabel(self): - if self.__fslabel is None: - return self.name - else: - return self.__fslabel - def __set_fslabel(self, val): - if val is None: - self.__fslabel = None - else: - self.__fslabel = val[:FSLABEL_MAXLEN] - #A string used to label any filesystems created. - # - #Some filesystems impose a constraint on the maximum allowed size of the - #filesystem label. In the case of ext3 it's 16 characters, but in the case - #of ISO9660 it's 32 characters. - # - #mke2fs silently truncates the label, but mkisofs aborts if the label is - #too long. So, for convenience sake, any string assigned to this attribute - #is silently truncated to FSLABEL_MAXLEN (32) characters. - fslabel = property(__get_fslabel, __set_fslabel) - - def __get_image(self): - if self._imgdir is None: - raise CreatorError("_image is not valid before calling mount()") - return os.path.join(self._imgdir, self._img_name) - #The location of the image file. - # - #This is the path to the filesystem image. Subclasses may use this path - #in order to package the image in _stage_final_image(). - # - #Note, this directory does not exist before ImageCreator.mount() is called. - # - #Note also, this is a read-only attribute. - _image = property(__get_image) - - def __get_blocksize(self): - return self.__blocksize - def __set_blocksize(self, val): - if self._instloops: - raise CreatorError("_blocksize must be set before calling mount()") - try: - self.__blocksize = int(val) - except ValueError: - raise CreatorError("'%s' is not a valid integer value " - "for _blocksize" % val) - #The block size used by the image's filesystem. - # - #This is the block size used when creating the filesystem image. Subclasses - #may change this if they wish to use something other than a 4k block size. - # - #Note, this attribute may only be set before calling mount(). - _blocksize = property(__get_blocksize, __set_blocksize) - - def __get_fstype(self): - return self.__fstype - def __set_fstype(self, val): - if val != "ext2" and val != "ext3": - raise CreatorError("Unknown _fstype '%s' supplied" % val) - self.__fstype = val - #The type of filesystem used for the image. - # - #This is the filesystem type used when creating the filesystem image. - #Subclasses may change this if they wish to use something other ext3. - # - #Note, only ext2 and ext3 are currently supported. - # - #Note also, this attribute may only be set before calling mount(). - _fstype = property(__get_fstype, __set_fstype) - - def __get_fsopts(self): - return self.__fsopts - def __set_fsopts(self, val): - self.__fsopts = val - #Mount options of filesystem used for the image. - # - #This can be specified by --fsoptions="xxx,yyy" in part command in - #kickstart file. - _fsopts = property(__get_fsopts, __set_fsopts) - - - # - # Helpers for subclasses - # - def _resparse(self, size=None): - """Rebuild the filesystem image to be as sparse as possible. - - This method should be used by subclasses when staging the final image - in order to reduce the actual space taken up by the sparse image file - to be as little as possible. - - This is done by resizing the filesystem to the minimal size (thereby - eliminating any space taken up by deleted files) and then resizing it - back to the supplied size. - - size -- the size in, in bytes, which the filesystem image should be - resized to after it has been minimized; this defaults to None, - causing the original size specified by the kickstart file to - be used (or 4GiB if not specified in the kickstart). - """ - minsize = 0 - for item in self._instloops: - if not item['cpioopts']: - if item['no_shrink']: - item['loop'].resparse() - continue - if item['name'] == self._img_name: - minsize = item['loop'].resparse(size) - else: - item['loop'].resparse(size) - - return minsize - - def _base_on(self, base_on=None): - if base_on and self._image != base_on: - shutil.copyfile(base_on, self._image) - - def _check_imgdir(self): - if self._imgdir is None: - self._imgdir = self._mkdtemp() - - - # - # Actual implementation - # - def _mount_instroot(self, base_on=None): - if base_on and os.path.isfile(base_on): - self._imgdir = os.path.dirname(base_on) - imgname = os.path.basename(base_on) - self._base_on(base_on) - self._set_image_size(misc.get_file_size(self._image)) - - # here, self._instloops must be [] - self._instloops.append({ - "mountpoint": "/", - "label": self.name, - "name": imgname, - "size": self.__image_size or 4096, - "fstype": self.__fstype or "ext3", - "f2fsopts": None, - "extopts": None, - "loop": None, - "uuid": None, - "kspart": None, - "exclude_image" : None - }) - - self._check_imgdir() - - for loop in self._instloops: - fstype = loop['fstype'] - fsopt = loop['fsopts'] - mp = os.path.join(self._instroot, loop['mountpoint'].lstrip('/')) - size = loop['size'] * 1024 * 1024 - imgname = loop['name'] - - if fstype in ("ext2", "ext3", "ext4"): - MyDiskMount = fs.ExtDiskMount - elif fstype == "btrfs": - MyDiskMount = fs.BtrfsDiskMount - elif fstype in ("vfat", "msdos"): - MyDiskMount = fs.VfatDiskMount - elif fstype == "f2fs": - MyDiskMount = fs.F2fsDiskMount - else: - raise MountError('Cannot support fstype: %s' % fstype) - - loop['loop'] = MyDiskMount(fs.SparseLoopbackDisk( - os.path.join(self._imgdir, imgname), - size), - mp, - fstype, - self._blocksize, - loop['fslabel'], - fsopt, - fsuuid = loop['uuid']) - - if fstype in ("ext2", "ext3", "ext4"): - loop['loop'].extopts = loop['extopts'] - elif fstype == "f2fs": - loop['loop'].f2fsopts = loop['f2fsopts'] - - try: - msger.verbose('Mounting image "%s" on "%s"' % (imgname, mp)) - fs.makedirs(mp) - loop['loop'].mount(fsopt, init_expand=loop['init_expand']) - # Make an autogenerated uuid avaialble in _get_post_scripts_env() - if loop['kspart'] and loop['kspart'].uuid is None and \ - loop['loop'].uuid: - loop['kspart'].uuid = loop['loop'].uuid - - except MountError as e: - raise - - def _unmount_instroot(self): - for item in reversed(self._instloops): - try: - item['loop'].cleanup() - except: - pass - - def _get_sign_scripts_env(self): - env = BaseImageCreator._get_sign_scripts_env(self) - - # Directory path of %post-umounts scripts - if self._umountdir: - env['UMOUNT_SCRIPTS_PATH'] = str(self._umountdir) - - return env - - def _stage_final_image(self): - - if self.pack_to or self.shrink_image: - self._resparse(0) - else: - self._resparse() - - for item in self._instloops: - imgfile = os.path.join(self._imgdir, item['name']) - - if item['aft_fstype'] in AFTER_MNT_FS.keys(): - mountpoint = misc.mkdtemp() - ext4img = os.path.join(self._imgdir, item['name']) - runner.show('mount -t ext4 %s %s' % (ext4img, mountpoint)) - runner.show('ls -al %s' % (mountpoint)) -# item['loop'].mount(None, 'not_create') -# point_mnt = os.path.join(self._instroot, item['mountpoint'].lstrip('/')) - - fs_suffix = AFTER_MNT_FS[item['aft_fstype']] - if item['aft_fstype'] == "squashfs": -# fs.mksquashfs(mountpoint, self._outdir+"/"+item['label']+fs_suffix) - args = "mksquashfs " + mountpoint + " " + self._imgdir+"/"+item['label']+fs_suffix - if item['squashfsopts']: - squashfsopts=item['squashfsopts'].replace(',', ' ') - runner.show("mksquashfs --help") - runner.show("%s %s" % (args, squashfsopts)) - else: - runner.show("%s " % args) - - if item['squashfsoptions_maxsize']: - squashfsoptions_maxsize=int(item['squashfsoptions_maxsize']) * 1024 * 1024 - imgsize = os.stat(self._imgdir+"/"+item['label']+fs_suffix).st_size - if imgsize > squashfsoptions_maxsize: - msger.error("squashfs img size is too large (%d > %d)" % (imgsize, squashfsoptions_maxsize)) - sys.exit() - - if item['aft_fstype'] == "vdfs": - ##FIXME temporary code - replace this with fs.mkvdfs() - if item['vdfsopts']: - vdfsopts=item['vdfsopts'].replace(',', ' ') - else: - vdfsopts="-i -z 1024M" - - fullpathmkvdfs = "mkfs.vdfs" #find_binary_path("mkfs.vdfs") - runner.show("%s --help" % fullpathmkvdfs) -# fs.mkvdfs(mountpoint, self._outdir+"/"+item['label']+fs_suffix, vdfsopts) - ret = runner.show('%s %s -r %s %s' % (fullpathmkvdfs, vdfsopts, mountpoint, self._imgdir+"/"+item['label']+fs_suffix)) - if ret != 0: - runner.show("mkfs.vdfs return error") - raise VdfsError("' %s' exited with error (%d)" % (fullpathmkvdfs, ret)) - - runner.show('umount %s' % mountpoint) -# os.unlink(mountpoint) - runner.show('mv %s %s' % (self._imgdir+"/"+item['label']+fs_suffix, self._imgdir+"/"+item['label']+".img") ) - runner.show('ls -al %s' % self._imgdir) - - if item['fstype'] == "ext4": - if not item['cpioopts']: - runner.show('/sbin/tune2fs -O ^huge_file,extents,uninit_bg %s ' - % imgfile) - runner.quiet(["/sbin/e2fsck", "-f", "-y", imgfile]) - self.image_files.setdefault('partitions', {}).update( - {item['mountpoint']: item['label']}) - if self.compress_image: - compressing(imgfile, self.compress_image) - self.image_files.setdefault('image_files', []).append( - '.'.join([item['name'], self.compress_image])) - else: - self.image_files.setdefault('image_files', []).append(item['name']) - - for item in os.listdir(self._imgdir): - imgfile = os.path.join(self._imgdir, item) - imgsize = os.path.getsize(imgfile) - msger.info("filesystem size of %s : %s bytes" % (item, imgsize)) - - self.run_sign_scripts() - if not self.pack_to: - for item in os.listdir(self._imgdir): - shutil.move(os.path.join(self._imgdir, item), - os.path.join(self._outdir, item)) - else: - msger.info("Pack all loop images together to %s" % self.pack_to) - dstfile = os.path.join(self._outdir, self.pack_to) - packing(dstfile, self._imgdir) - self.image_files['image_files'] = [self.pack_to] - - - if self.pack_to: - mountfp_xml = os.path.splitext(self.pack_to)[0] - mountfp_xml = misc.strip_end(mountfp_xml, '.tar') + ".xml" - else: - mountfp_xml = self.name + ".xml" - # save mount points mapping file to xml - save_mountpoints(os.path.join(self._outdir, mountfp_xml), - self._instloops, - self.target_arch) - - def copy_attachment(self): - if not hasattr(self, '_attachment') or not self._attachment: - return - - self._check_imgdir() - - msger.info("Copying attachment files...") - for item in self._attachment: - if not os.path.exists(item): - continue - dpath = os.path.join(self._imgdir, os.path.basename(item)) - msger.verbose("Copy attachment %s to %s" % (item, dpath)) - shutil.copy(item, dpath) - - def move_post_umount_scripts(self): - scripts_dir = self._instroot + "/var/tmp/post_umount_scripts" - if not os.path.exists(scripts_dir): - return - self._umountdir = self._mkdtemp("umount") - msger.info("Moving post umount scripts...") - for item in os.listdir(scripts_dir): - spath = os.path.join(scripts_dir, item) - dpath = os.path.join(self._umountdir, item) - msger.verbose("Move post umount scripts %s to %s" % (spath, dpath)) - shutil.move(spath, dpath) - shutil.rmtree(scripts_dir) - - def postinstall(self): - BaseImageCreator.postinstall(self) - self.move_post_umount_scripts() - - def create_manifest(self): - if self.compress_image: - self.image_files.update({'compress': self.compress_image}) - super(LoopImageCreator, self).create_manifest() diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/imager/qcow.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/imager/qcow.py deleted file mode 100644 index f4b66fc..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/imager/qcow.py +++ /dev/null @@ -1,57 +0,0 @@ -# -# Copyright (c) 2014 Intel, Inc. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free -# Software Foundation; version 2 of the License -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., 59 -# Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -import os -import shutil - -from mic.imager.loop import LoopImageCreator -from mic.utils import errors, fs_related, runner - -class QcowImageCreator(LoopImageCreator): - img_format = 'qcow' - - def __init__(self, creatoropts=None, pkgmgr=None): - LoopImageCreator.__init__(self, creatoropts, pkgmgr) - self.cmd_qemuimg = 'qemu-img' - - def _stage_final_image(self): - try: - self.cmd_qemuimg = fs_related.find_binary_path('qemu-img') - except errors.CreatorError: - return LoopImageCreator._stage_final_image(self) - - self._resparse() - - imgfile = None - for item in self._instloops: - if item['mountpoint'] == '/': - if item['fstype'] == "ext4": - runner.show('/sbin/tune2fs -O ^huge_file,extents,uninit_bg %s' - % imgfile) - self.image_files.setdefault('partitions', {}).update( - {item['mountpoint']: item['label']}) - imgfile = os.path.join(self._imgdir, item['name']) - - if imgfile: - qemuimage = imgfile + ".x86" - runner.show("%s convert -O qcow2 %s %s" - % (self.cmd_qemuimg, imgfile, qemuimage)) - os.unlink(imgfile) - os.rename(qemuimage, imgfile) - - for item in os.listdir(self._imgdir): - shutil.move(os.path.join(self._imgdir, item), - os.path.join(self._outdir, item)) diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/imager/raw.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/imager/raw.py deleted file mode 100644 index 430cfd0..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/imager/raw.py +++ /dev/null @@ -1,605 +0,0 @@ -#!/usr/bin/python -tt -# -# Copyright (c) 2011 Intel, Inc. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free -# Software Foundation; version 2 of the License -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., 59 -# Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -import os -import stat -import shutil - -from mic import kickstart, msger -from mic.utils import fs_related, runner, misc -from mic.utils.partitionedfs import PartitionedMount -from mic.utils.errors import CreatorError, MountError -from mic.imager.baseimager import BaseImageCreator -from mic.archive import packing, compressing - -class RawImageCreator(BaseImageCreator): - """Installs a system into a file containing a partitioned disk image. - - ApplianceImageCreator is an advanced ImageCreator subclass; a sparse file - is formatted with a partition table, each partition loopback mounted - and the system installed into an virtual disk. The disk image can - subsequently be booted in a virtual machine or accessed with kpartx - """ - img_format = 'raw' - - def __init__(self, creatoropts=None, pkgmgr=None, compress_image=None, generate_bmap=None, fstab_entry="uuid"): - """Initialize a ApplianceImageCreator instance. - - This method takes the same arguments as ImageCreator.__init__() - """ - BaseImageCreator.__init__(self, creatoropts, pkgmgr) - - self.__instloop = None - self.__imgdir = None - self.__disks = {} - self.__disk_format = "raw" - self._disk_names = [] - self._ptable_format = self.ks.handler.bootloader.ptable - self.vmem = 512 - self.vcpu = 1 - self.checksum = False - self.use_uuid = fstab_entry == "uuid" - self.appliance_version = None - self.appliance_release = None - self.compress_image = compress_image - self.bmap_needed = generate_bmap - self._need_extlinux = not kickstart.use_installerfw(self.ks, "bootloader") - #self.getsource = False - #self.listpkg = False - - self._dep_checks.extend(["sync", "kpartx", "parted"]) - if self._need_extlinux: - self._dep_checks.extend(["extlinux"]) - - def configure(self, repodata = None): - import subprocess - def chroot(): - os.chroot(self._instroot) - os.chdir("/") - - if os.path.exists(self._instroot + "/usr/bin/Xorg"): - subprocess.call(["/bin/chmod", "u+s", "/usr/bin/Xorg"], - preexec_fn = chroot) - - BaseImageCreator.configure(self, repodata) - - def _get_fstab(self): - s = "" - for mp in self.__instloop.mount_order: - p = None - for p1 in self.__instloop.partitions: - if p1['mountpoint'] == mp: - p = p1 - break - - if self.use_uuid and p['uuid']: - device = "UUID=%s" % p['uuid'] - else: - device = "/dev/%s%-d" % (p['disk_name'], p['num']) - - s += "%(device)s %(mountpoint)s %(fstype)s %(fsopts)s 0 0\n" % { - 'device': device, - 'mountpoint': p['mountpoint'], - 'fstype': p['fstype'], - 'fsopts': "defaults,noatime" if not p['fsopts'] else p['fsopts']} - - if p['mountpoint'] == "/": - for subvol in self.__instloop.subvolumes: - if subvol['mountpoint'] == "/": - continue - s += "%(device)s %(mountpoint)s %(fstype)s %(fsopts)s 0 0\n" % { - 'device': "/dev/%s%-d" % (p['disk_name'], p['num']), - 'mountpoint': subvol['mountpoint'], - 'fstype': p['fstype'], - 'fsopts': "defaults,noatime" if not subvol['fsopts'] else subvol['fsopts']} - - s += "devpts /dev/pts devpts gid=5,mode=620 0 0\n" - s += "tmpfs /dev/shm tmpfs defaults 0 0\n" - s += "proc /proc proc defaults 0 0\n" - s += "sysfs /sys sysfs defaults 0 0\n" - return s - - def _create_mkinitrd_config(self): - """write to tell which modules to be included in initrd""" - - mkinitrd = "" - mkinitrd += "PROBE=\"no\"\n" - mkinitrd += "MODULES+=\"ext3 ata_piix sd_mod libata scsi_mod\"\n" - mkinitrd += "rootfs=\"ext3\"\n" - mkinitrd += "rootopts=\"defaults\"\n" - - msger.debug("Writing mkinitrd config %s/etc/sysconfig/mkinitrd" \ - % self._instroot) - os.makedirs(self._instroot + "/etc/sysconfig/",mode=644) - cfg = open(self._instroot + "/etc/sysconfig/mkinitrd", "w") - cfg.write(mkinitrd) - cfg.close() - - def _get_parts(self): - if not self.ks: - raise CreatorError("Failed to get partition info, " - "please check your kickstart setting.") - - # Set a default partition if no partition is given out - if not self.ks.handler.partition.partitions: - partstr = "part / --size 1900 --ondisk sda --fstype=ext3" - args = partstr.split() - pd = self.ks.handler.partition.parse(args[1:]) - if pd not in self.ks.handler.partition.partitions: - self.ks.handler.partition.partitions.append(pd) - - # partitions list from kickstart file - return kickstart.get_partitions(self.ks) - - def get_disk_names(self): - """ Returns a list of physical target disk names (e.g., 'sdb') which - will be created. """ - - if self._disk_names: - return self._disk_names - - #get partition info from ks handler - parts = self._get_parts() - - for i in range(len(parts)): - if parts[i].disk: - disk_name = parts[i].disk - else: - raise CreatorError("Failed to create disks, no --ondisk " - "specified in partition line of ks file") - - if parts[i].mountpoint and not parts[i].fstype: - raise CreatorError("Failed to create disks, no --fstype " - "specified for partition with mountpoint " - "'%s' in the ks file") - - self._disk_names.append(disk_name) - - return self._disk_names - - def _full_name(self, name, extention): - """ Construct full file name for a file we generate. """ - return "%s-%s.%s" % (self.name, name, extention) - - def _full_path(self, path, name, extention): - """ Construct full file path to a file we generate. """ - return os.path.join(path, self._full_name(name, extention)) - - # - # Actual implemention - # - def _mount_instroot(self, base_on = None): - parts = self._get_parts() - self.__instloop = PartitionedMount(self._instroot) - - for p in parts: - self.__instloop.add_partition(int(p.size), - p.disk, - p.mountpoint, - p.fstype, - p.label, - fsopts = p.fsopts, - boot = p.active, - align = p.align, - part_type = p.part_type) - - self.__instloop.layout_partitions(self._ptable_format) - - # Create the disks - self.__imgdir = self._mkdtemp() - for disk_name, disk in self.__instloop.disks.items(): - full_path = self._full_path(self.__imgdir, disk_name, "raw") - msger.debug("Adding disk %s as %s with size %s bytes" \ - % (disk_name, full_path, disk['min_size'])) - - disk_obj = fs_related.SparseLoopbackDisk(full_path, - disk['min_size']) - self.__disks[disk_name] = disk_obj - self.__instloop.add_disk(disk_name, disk_obj) - - self.__instloop.mount() - self._create_mkinitrd_config() - - def mount(self, base_on = None, cachedir = None): - """ - This method calls the base class' 'mount()' method and then creates - block device nodes corresponding to the image's partitions in the image - itself. Namely, the image has /dev/loopX device corresponding to the - entire image, and per-partition /dev/mapper/* devices. - - We copy these files to image's "/dev" directory in order to enable - scripts which run in the image chroot environment to access own raw - partitions. For example, this can be used to install the bootloader to - the MBR (say, from an installer framework plugin). - """ - - def copy_devnode(src, dest): - """A helper function for copying device nodes.""" - - if not src: - return - - stat_obj = os.stat(src) - assert stat.S_ISBLK(stat_obj.st_mode) - - os.mknod(dest, stat_obj.st_mode, - os.makedev(os.major(stat_obj.st_rdev), - os.minor(stat_obj.st_rdev))) - # os.mknod uses process umask may create a nod with different - # permissions, so we use os.chmod to make sure permissions are - # correct. - os.chmod(dest, stat_obj.st_mode) - - BaseImageCreator.mount(self, base_on, cachedir) - - # Copy the disk loop devices - for name in self.__disks.keys(): - loopdev = self.__disks[name].device - copy_devnode(loopdev, self._instroot + loopdev) - - # Copy per-partition dm nodes - os.mkdir(self._instroot + "/dev/mapper", os.stat("/dev/mapper").st_mode) - for p in self.__instloop.partitions: - copy_devnode(p['mapper_device'], - self._instroot + p['mapper_device']) - copy_devnode(p['mpath_device'], - self._instroot + p['mpath_device']) - - def unmount(self): - """ - Remove loop/dm device nodes which we created in 'mount()' and call the - base class' 'unmount()' method. - """ - - for p in self.__instloop.partitions: - if p['mapper_device']: - path = self._instroot + p['mapper_device'] - if os.path.exists(path): - os.unlink(path) - if p['mpath_device']: - path = self._instroot + p['mpath_device'] - if os.path.exists(path): - os.unlink(path) - - path = self._instroot + "/dev/mapper" - if os.path.exists(path): - shutil.rmtree(path, ignore_errors=True) - - for name in self.__disks.keys(): - if self.__disks[name].device: - path = self._instroot + self.__disks[name].device - if os.path.exists(path): - os.unlink(path) - - BaseImageCreator.unmount(self) - - def _get_required_packages(self): - required_packages = BaseImageCreator._get_required_packages(self) - if self._need_extlinux: - if not self.target_arch or not self.target_arch.startswith("arm"): - required_packages += ["syslinux", "syslinux-extlinux"] - return required_packages - - def _get_excluded_packages(self): - return BaseImageCreator._get_excluded_packages(self) - - def _get_syslinux_boot_config(self): - rootdev = None - root_part_uuid = None - for p in self.__instloop.partitions: - if p['mountpoint'] == "/": - rootdev = "/dev/%s%-d" % (p['disk_name'], p['num']) - root_part_uuid = p['partuuid'] - - return (rootdev, root_part_uuid) - - def _create_syslinux_config(self): - - splash = os.path.join(self._instroot, "boot/extlinux") - if os.path.exists(splash): - splashline = "menu background splash.jpg" - else: - splashline = "" - - (rootdev, root_part_uuid) = self._get_syslinux_boot_config() - options = self.ks.handler.bootloader.appendLine - - #XXX don't hardcode default kernel - see livecd code - syslinux_conf = "" - syslinux_conf += "prompt 0\n" - syslinux_conf += "timeout 1\n" - syslinux_conf += "\n" - syslinux_conf += "default vesamenu.c32\n" - syslinux_conf += "menu autoboot Starting %s...\n" % self.distro_name - syslinux_conf += "menu hidden\n" - syslinux_conf += "\n" - syslinux_conf += "%s\n" % splashline - syslinux_conf += "menu title Welcome to %s!\n" % self.distro_name - syslinux_conf += "menu color border 0 #ffffffff #00000000\n" - syslinux_conf += "menu color sel 7 #ffffffff #ff000000\n" - syslinux_conf += "menu color title 0 #ffffffff #00000000\n" - syslinux_conf += "menu color tabmsg 0 #ffffffff #00000000\n" - syslinux_conf += "menu color unsel 0 #ffffffff #00000000\n" - syslinux_conf += "menu color hotsel 0 #ff000000 #ffffffff\n" - syslinux_conf += "menu color hotkey 7 #ffffffff #ff000000\n" - syslinux_conf += "menu color timeout_msg 0 #ffffffff #00000000\n" - syslinux_conf += "menu color timeout 0 #ffffffff #00000000\n" - syslinux_conf += "menu color cmdline 0 #ffffffff #00000000\n" - - versions = [] - kernels = self._get_kernel_versions() - symkern = "%s/boot/vmlinuz" % self._instroot - - if os.path.lexists(symkern): - v = os.path.realpath(symkern).replace('%s-' % symkern, "") - syslinux_conf += "label %s\n" % self.distro_name.lower() - syslinux_conf += "\tmenu label %s (%s)\n" % (self.distro_name, v) - syslinux_conf += "\tlinux ../vmlinuz\n" - if self._ptable_format == 'msdos': - rootstr = rootdev - else: - if not root_part_uuid: - raise MountError("Cannot find the root GPT partition UUID") - rootstr = "PARTUUID=%s" % root_part_uuid - syslinux_conf += "\tappend ro root=%s %s\n" % (rootstr, options) - syslinux_conf += "\tmenu default\n" - else: - for kernel in kernels: - for version in kernels[kernel]: - versions.append(version) - - footlabel = 0 - for v in versions: - syslinux_conf += "label %s%d\n" \ - % (self.distro_name.lower(), footlabel) - syslinux_conf += "\tmenu label %s (%s)\n" % (self.distro_name, v) - syslinux_conf += "\tlinux ../vmlinuz-%s\n" % v - syslinux_conf += "\tappend ro root=%s %s\n" \ - % (rootdev, options) - if footlabel == 0: - syslinux_conf += "\tmenu default\n" - footlabel += 1 - - msger.debug("Writing syslinux config %s/boot/extlinux/extlinux.conf" \ - % self._instroot) - cfg = open(self._instroot + "/boot/extlinux/extlinux.conf", "w") - cfg.write(syslinux_conf) - cfg.close() - - def _install_syslinux(self): - for name in self.__disks.keys(): - loopdev = self.__disks[name].device - - # Set MBR - mbrfile = "%s/usr/share/syslinux/" % self._instroot - if self._ptable_format == 'gpt': - mbrfile += "gptmbr.bin" - else: - mbrfile += "mbr.bin" - - msger.debug("Installing syslinux bootloader '%s' to %s" % \ - (mbrfile, loopdev)) - - rc = runner.show(['dd', 'if=%s' % mbrfile, 'of=' + loopdev]) - if rc != 0: - raise MountError("Unable to set MBR to %s" % loopdev) - - - # Ensure all data is flushed to disk before doing syslinux install - runner.quiet('sync') - - fullpathsyslinux = fs_related.find_binary_path("extlinux") - rc = runner.show([fullpathsyslinux, - "-i", - "%s/boot/extlinux" % self._instroot]) - if rc != 0: - raise MountError("Unable to install syslinux bootloader to %s" \ - % loopdev) - - def _create_bootconfig(self): - #If syslinux is available do the required configurations. - if self._need_extlinux \ - and os.path.exists("%s/usr/share/syslinux/" % (self._instroot)) \ - and os.path.exists("%s/boot/extlinux/" % (self._instroot)): - self._create_syslinux_config() - self._install_syslinux() - - def _unmount_instroot(self): - if not self.__instloop is None: - try: - self.__instloop.cleanup() - except MountError as err: - msger.warning("%s" % err) - - def _resparse(self, size = None): - return self.__instloop.resparse(size) - - def _get_post_scripts_env(self, in_chroot): - env = BaseImageCreator._get_post_scripts_env(self, in_chroot) - - # Export the file-system UUIDs and partition UUIDs (AKA PARTUUIDs) - for p in self.__instloop.partitions: - env.update(self._set_part_env(p['ks_pnum'], "UUID", p['uuid'])) - env.update(self._set_part_env(p['ks_pnum'], "PARTUUID", p['partuuid'])) - env.update(self._set_part_env(p['ks_pnum'], "DEVNODE_NOW", - p['mapper_device'])) - env.update(self._set_part_env(p['ks_pnum'], "DISK_DEVNODE_NOW", - self.__disks[p['disk_name']].device)) - - return env - - def _stage_final_image(self): - """Stage the final system image in _outdir. - write meta data - """ - self._resparse() - self.image_files.update({'disks': self.__disks.keys()}) - - if not (self.compress_image or self.pack_to): - for imgfile in os.listdir(self.__imgdir): - if imgfile.endswith('.raw'): - for disk in self.__disks.keys(): - if imgfile.find(disk) != -1: - self.image_files.setdefault(disk, {}).update( - {'image': imgfile}) - self.image_files.setdefault('image_files', - []).append(imgfile) - - if self.compress_image: - for imgfile in os.listdir(self.__imgdir): - if imgfile.endswith('.raw') or imgfile.endswith('bin'): - imgpath = os.path.join(self.__imgdir, imgfile) - msger.info("Compressing image %s" % imgfile) - compressing(imgpath, self.compress_image) - if imgfile.endswith('.raw') and not self.pack_to: - for disk in self.__disks.keys(): - if imgfile.find(disk) != -1: - imgname = '%s.%s' % (imgfile, self.compress_image) - self.image_files.setdefault(disk, {}).update( - {'image': imgname}) - self.image_files.setdefault('image_files', - []).append(imgname) - - if self.pack_to: - dst = os.path.join(self._outdir, self.pack_to) - msger.info("Pack all raw images to %s" % dst) - packing(dst, self.__imgdir) - self.image_files.update({'image_files': self.pack_to}) - else: - msger.debug("moving disks to stage location") - for imgfile in os.listdir(self.__imgdir): - src = os.path.join(self.__imgdir, imgfile) - dst = os.path.join(self._outdir, imgfile) - msger.debug("moving %s to %s" % (src,dst)) - shutil.move(src,dst) - - self._write_image_xml() - - def _write_image_xml(self): - imgarch = "i686" - if self.target_arch: - if self.target_arch.startswith("arm"): - imgarch = "arm" - elif self.target_arch == "riscv64": - imgarch = "riscv64" - xml = "\n" - - name_attributes = "" - if self.appliance_version: - name_attributes += " version='%s'" % self.appliance_version - if self.appliance_release: - name_attributes += " release='%s'" % self.appliance_release - xml += " %s\n" % (name_attributes, self.name) - xml += " \n" - # XXX don't hardcode - determine based on the kernel we installed for - # grub baremetal vs xen - xml += " \n" - xml += " \n" - xml += " %s\n" % imgarch - xml += " \n" - xml += " \n" - xml += " \n" - xml += " \n" - - i = 0 - for name in self.__disks.keys(): - full_name = self._full_name(name, self.__disk_format) - xml += " \n" \ - % (full_name, chr(ord('a') + i)) - i = i + 1 - - xml += " \n" - xml += " \n" - xml += " %s\n" % self.vcpu - xml += " %d\n" %(self.vmem * 1024) - for network in self.ks.handler.network.network: - xml += " \n" - xml += " \n" - xml += " \n" - xml += " \n" - xml += " \n" - - if self.checksum is True: - for name in self.__disks.keys(): - diskpath = self._full_path(self._outdir, name, \ - self.__disk_format) - full_name = self._full_name(name, self.__disk_format) - - msger.debug("Generating disk signature for %s" % full_name) - - xml += " \n" \ - % (full_name, self.__disk_format) - - hashes = misc.calc_hashes(diskpath, ('sha1', 'sha256')) - - xml += " %s\n" \ - % hashes[0] - xml += " %s\n" \ - % hashes[1] - xml += " \n" - else: - for name in self.__disks.keys(): - full_name = self._full_name(name, self.__disk_format) - xml += " \n" \ - % (full_name, self.__disk_format) - - xml += " \n" - xml += "\n" - - msger.debug("writing image XML to %s/%s.xml" %(self._outdir, self.name)) - cfg = open("%s/%s.xml" % (self._outdir, self.name), "w") - cfg.write(xml) - cfg.close() - - def generate_bmap(self): - """ Generate block map file for the image. The idea is that while disk - images we generate may be large (e.g., 4GiB), they may actually contain - only little real data, e.g., 512MiB. This data are files, directories, - file-system meta-data, partition table, etc. In other words, when - flashing the image to the target device, you do not have to copy all the - 4GiB of data, you can copy only 512MiB of it, which is 4 times faster. - - This function generates the block map file for an arbitrary image that - mic has generated. The block map file is basically an XML file which - contains a list of blocks which have to be copied to the target device. - The other blocks are not used and there is no need to copy them. """ - - if self.bmap_needed is None: - return - - msger.info("Generating the map file(s)") - - for name in self.__disks.keys(): - image = self._full_path(self.__imgdir, name, self.__disk_format) - bmap_file = self._full_path(self._outdir, name, "bmap") - self.image_files.setdefault(name, {}).update({'bmap': \ - os.path.basename(bmap_file)}) - - msger.debug("Generating block map file '%s'" % bmap_file) - - bmaptoolcmd = misc.find_binary_path('bmaptool') - rc = runner.show([bmaptoolcmd, 'create', image, '-o', bmap_file]) - if rc != 0: - raise CreatorError("Failed to create bmap file: %s" % bmap_file) - - def create_manifest(self): - if self.compress_image: - self.image_files.update({'compress': self.compress_image}) - super(RawImageCreator, self).create_manifest() - - def remove_exclude_image(self): - pass diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/kickstart/__init__.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/kickstart/__init__.py deleted file mode 100644 index 46bcca2..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/kickstart/__init__.py +++ /dev/null @@ -1,963 +0,0 @@ -#!/usr/bin/python -tt -# -# Copyright (c) 2007 Red Hat, Inc. -# Copyright (c) 2009, 2010, 2011 Intel, Inc. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free -# Software Foundation; version 2 of the License -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., 59 -# Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -import os, sys, re -import shutil -import subprocess -import string -import collections - -import pykickstart.sections as kssections -import pykickstart.commands as kscommands -import pykickstart.constants as ksconstants -import pykickstart.errors as kserrors -import pykickstart.parser as ksparser -import pykickstart.version as ksversion -from pykickstart.handlers.control import commandMap -from pykickstart.handlers.control import dataMap - -from mic import msger -from mic.utils import errors, misc, runner, fs_related as fs -from custom_commands import desktop, micrepo, micboot, partition, installerfw -from mic.utils.safeurl import SafeURL - -AUTH_URL_PTN = r"(?P.*)://(?P.*)(:?P.*)?@(?P.*)" - - -class PrepackageSection(kssections.Section): - sectionOpen = "%prepackages" - - def handleLine(self, line): - if not self.handler: - return - - (h, s, t) = line.partition('#') - line = h.rstrip() - - self.handler.prepackages.add([line]) - - def handleHeader(self, lineno, args): - kssections.Section.handleHeader(self, lineno, args) - -class AttachmentSection(kssections.Section): - sectionOpen = "%attachment" - - def handleLine(self, line): - if not self.handler: - return - - (h, s, t) = line.partition('#') - line = h.rstrip() - - self.handler.attachment.add([line]) - - def handleHeader(self, lineno, args): - kssections.Section.handleHeader(self, lineno, args) - -class EnvSection(kssections.Section): - sectionOpen = "%env" - - def handleLine(self, line): - if not self.handler: - return - - (h, s, t) = line.partition('#') - line = h.rstrip() - (n, s, v) = line.partition('=') - self.handler.env.append((n, v)) - - def handleHeader(self, lineno, args): - self.handler.env = [] - kssections.Section.handleHeader(self, lineno, args) - -def apply_wrapper(func): - def wrapper(*kargs, **kwargs): - try: - func(*kargs, **kwargs) - except (OSError, IOError, errors.KsError) as err: - cfgcls = kargs[0].__class__.__name__ - if msger.ask("Failed to apply %s, skip and continue?" % cfgcls): - msger.warning("%s" % err) - pass - else: - # just throw out the exception - raise - return wrapper - -def read_kickstart(path): - """Parse a kickstart file and return a KickstartParser instance. - - This is a simple utility function which takes a path to a kickstart file, - parses it and returns a pykickstart KickstartParser instance which can - be then passed to an ImageCreator constructor. - - If an error occurs, a CreatorError exception is thrown. - """ - - #version = ksversion.makeVersion() - #ks = ksparser.KickstartParser(version) - - using_version = ksversion.DEVEL - commandMap[using_version]["desktop"] = desktop.Mic_Desktop - commandMap[using_version]["repo"] = micrepo.Mic_Repo - commandMap[using_version]["tpk_repo"] = micrepo.Mic_Tpk_Repo - commandMap[using_version]["bootloader"] = micboot.Mic_Bootloader - commandMap[using_version]["part"] = partition.Mic_Partition - commandMap[using_version]["partition"] = partition.Mic_Partition - commandMap[using_version]["installerfw_plugins"] = installerfw.Mic_installerfw - dataMap[using_version]["RepoData"] = micrepo.Mic_RepoData - dataMap[using_version]["Tpk_RepoData"] = micrepo.Mic_Tpk_RepoData - dataMap[using_version]["PartData"] = partition.Mic_PartData - superclass = ksversion.returnClassForVersion(version=using_version) - - class KSHandlers(superclass): - def __init__(self): - superclass.__init__(self, mapping=commandMap[using_version]) - self.prepackages = ksparser.Packages() - self.attachment = ksparser.Packages() - - ks = ksparser.KickstartParser(KSHandlers(), errorsAreFatal=False) - ks.registerSection(PrepackageSection(ks.handler)) - ks.registerSection(AttachmentSection(ks.handler)) - ks.registerSection(EnvSection(ks.handler)) - - try: - ks.readKickstart(path) - except (kserrors.KickstartParseError, kserrors.KickstartError) as err: - if msger.ask("Errors occured on kickstart file, skip and continue?"): - msger.warning("%s" % err) - pass - else: - raise errors.KsError("%s" % err) - - return ks - -class KickstartConfig(object): - """A base class for applying kickstart configurations to a system.""" - def __init__(self, instroot): - self.instroot = instroot - - def path(self, subpath): - return self.instroot + subpath - - def _check_sysconfig(self): - if not os.path.exists(self.path("/etc/sysconfig")): - fs.makedirs(self.path("/etc/sysconfig")) - - def chroot(self): - os.chroot(self.instroot) - os.chdir("/") - - def call(self, args): - if not os.path.exists("%s/%s" %(self.instroot, args[0])): - raise errors.KsError("Can't find %s in chroot" % args[0]) - subprocess.call(args, preexec_fn = self.chroot) - - def apply(self): - pass - -class LanguageConfig(KickstartConfig): - """A class to apply a kickstart language configuration to a system.""" - @apply_wrapper - def apply(self, kslang): - self._check_sysconfig() - if kslang.lang: - f = open(self.path("/etc/sysconfig/i18n"), "w+") - f.write("LANG=\"" + kslang.lang + "\"\n") - f.close() - - f = open(self.path("/etc/locale.conf"), "w+") - f.write("LANG=\"" + kslang.lang + "\"\n") - f.close() - - #cp ks lang setting to other file, then can access the file in %post section - fs.makedirs(self.path("/etc/config")) - f = open(self.path("/etc/config/mic_language"), "w+") - f.write("LANG=\"" + kslang.lang + "\"\n") - f.close() - -class KeyboardConfig(KickstartConfig): - """A class to apply a kickstart keyboard configuration to a system.""" - @apply_wrapper - def apply(self, kskeyboard): - # - # FIXME: - # should this impact the X keyboard config too? - # or do we want to make X be able to do this mapping? - # - #k = rhpl.keyboard.Keyboard() - #if kskeyboard.keyboard: - # k.set(kskeyboard.keyboard) - #k.write(self.instroot) - pass - -class TimezoneConfig(KickstartConfig): - """A class to apply a kickstart timezone configuration to a system.""" - @apply_wrapper - def apply(self, kstimezone): - self._check_sysconfig() - tz = kstimezone.timezone or "America/New_York" - utc = str(kstimezone.isUtc) - - f = open(self.path("/etc/sysconfig/clock"), "w+") - f.write("ZONE=\"" + tz + "\"\n") - f.write("UTC=" + utc + "\n") - f.close() - if not os.path.exists("/opt/etc"): - fs.makedirs("/opt/etc") - tz_source = "/usr/share/zoneinfo/%s" % (tz) - tz_midst = "/opt/etc/localtime" - tz_dest = "/etc/localtime" - try: - lncmd = fs.find_binary_inchroot('ln', self.instroot) - if lncmd: - self.call([lncmd, "-s", tz_source, tz_midst]) - self.call([lncmd, "-s", tz_midst, tz_dest]) - else: - lncmd = fs.find_binary_path('ln') - subprocess.call([lncmd, "-s", - self.path(tz_source), - self.path(tz_midst)]) - subprocess.call([lncmd, "-s", - self.path(tz_midst), - self.path(tz_dest)]) - except (IOError, OSError) as msg: - raise errors.KsError("Timezone setting error: %s" % msg) - -class AuthConfig(KickstartConfig): - """A class to apply a kickstart authconfig configuration to a system.""" - @apply_wrapper - def apply(self, ksauthconfig): - auth = ksauthconfig.authconfig or "--useshadow --enablemd5" - args = ["/usr/share/authconfig/authconfig.py", "--update", "--nostart"] - self.call(args + auth.split()) - -class FirewallConfig(KickstartConfig): - """A class to apply a kickstart firewall configuration to a system.""" - @apply_wrapper - def apply(self, ksfirewall): - # - # FIXME: should handle the rest of the options - # - if not os.path.exists(self.path("/usr/sbin/lokkit")): - return - if ksfirewall.enabled: - status = "--enabled" - else: - status = "--disabled" - - self.call(["/usr/sbin/lokkit", - "-f", "--quiet", "--nostart", status]) - -class RootPasswordConfig(KickstartConfig): - """A class to apply a kickstart root password configuration to a system.""" - def unset(self): - self.call(["/usr/bin/passwd", "-d", "root"]) - - def set_encrypted(self, password): - self.call(["/usr/sbin/usermod", "-p", password, "root"]) - - def set_unencrypted(self, password): - for p in ("/bin/echo", "/usr/sbin/chpasswd"): - if not os.path.exists("%s/%s" %(self.instroot, p)): - raise errors.KsError("Unable to set unencrypted password due " - "to lack of %s" % p) - - p1 = subprocess.Popen(["/bin/echo", "root:%s" %password], - stdout = subprocess.PIPE, - preexec_fn = self.chroot) - p2 = subprocess.Popen(["/usr/sbin/chpasswd", "-c","SHA512"], - stdin = p1.stdout, - stdout = subprocess.PIPE, - preexec_fn = self.chroot) - p2.communicate() - - @apply_wrapper - def apply(self, ksrootpw): - if ksrootpw.isCrypted: - self.set_encrypted(ksrootpw.password) - elif ksrootpw.password != "": - self.set_unencrypted(ksrootpw.password) - else: - self.unset() - -class UserConfig(KickstartConfig): - def set_empty_passwd(self, user): - self.call(["/usr/bin/passwd", "-d", user]) - - def set_encrypted_passwd(self, user, password): - self.call(["/usr/sbin/usermod", "-p", "%s" % password, user]) - - def set_unencrypted_passwd(self, user, password): - for p in ("/bin/echo", "/usr/sbin/chpasswd"): - if not os.path.exists("%s/%s" %(self.instroot, p)): - raise errors.KsError("Unable to set unencrypted password due " - "to lack of %s" % p) - - p1 = subprocess.Popen(["/bin/echo", "%s:%s" %(user, password)], - stdout = subprocess.PIPE, - preexec_fn = self.chroot) - p2 = subprocess.Popen(["/usr/sbin/chpasswd", "-c","SHA512"], - stdin = p1.stdout, - stdout = subprocess.PIPE, - preexec_fn = self.chroot) - p2.communicate() - - def addUser(self, userconfig): - args = [ "/usr/sbin/useradd" ] - if userconfig.groups: - args += [ "--groups", string.join(userconfig.groups, ",") ] - if userconfig.name: - args += [ "-m"] - args += [ "-d", "/home/%s" % userconfig.name ] - args.append(userconfig.name) - try: - dev_null = os.open("/dev/null", os.O_WRONLY) - msger.debug('adding user with %s' % args) - subprocess.call(args, - stdout = dev_null, - stderr = dev_null, - preexec_fn = self.chroot) - os.close(dev_null) - except: - msger.warning('Cannot add user using "useradd"') - - if userconfig.password not in (None, ""): - if userconfig.isCrypted: - self.set_encrypted_passwd(userconfig.name, - userconfig.password) - else: - self.set_unencrypted_passwd(userconfig.name, - userconfig.password) - else: - self.set_empty_passwd(userconfig.name) - else: - raise errors.KsError("Invalid kickstart command: %s" \ - % userconfig.__str__()) - - @apply_wrapper - def apply(self, user): - for userconfig in user.userList: - #There exist root user already. - if userconfig.name == "root": - msger.debug("root user, just set root user groups attribution") - if userconfig.groups: - self.call(["/usr/sbin/usermod", "-a", "-G", "%s" % string.join(userconfig.groups, ","), "root"]) - continue - self.addUser(userconfig) - -class ServicesConfig(KickstartConfig): - """A class to apply a kickstart services configuration to a system.""" - @apply_wrapper - def apply(self, ksservices): - if not os.path.exists(self.path("/sbin/chkconfig")): - return - for s in ksservices.enabled: - self.call(["/sbin/chkconfig", s, "on"]) - for s in ksservices.disabled: - self.call(["/sbin/chkconfig", s, "off"]) - -class XConfig(KickstartConfig): - """A class to apply a kickstart X configuration to a system.""" - @apply_wrapper - def apply(self, ksxconfig): - if ksxconfig.startX and os.path.exists(self.path("/etc/inittab")): - f = open(self.path("/etc/inittab"), "r+") - buf = f.read() - buf = buf.replace("id:3:initdefault", "id:5:initdefault") - f.seek(0) - f.write(buf) - f.close() - if ksxconfig.defaultdesktop: - self._check_sysconfig() - f = open(self.path("/etc/sysconfig/desktop"), "w") - f.write("DESKTOP="+ksxconfig.defaultdesktop+"\n") - f.close() - -class DesktopConfig(KickstartConfig): - """A class to apply a kickstart desktop configuration to a system.""" - @apply_wrapper - def apply(self, ksdesktop): - if ksdesktop.defaultdesktop: - self._check_sysconfig() - f = open(self.path("/etc/sysconfig/desktop"), "w") - f.write("DESKTOP="+ksdesktop.defaultdesktop+"\n") - f.close() - if os.path.exists(self.path("/etc/gdm/custom.conf")): - f = open(self.path("/etc/skel/.dmrc"), "w") - f.write("[Desktop]\n") - f.write("Session="+ksdesktop.defaultdesktop.lower()+"\n") - f.close() - if ksdesktop.session: - if os.path.exists(self.path("/etc/sysconfig/uxlaunch")): - f = open(self.path("/etc/sysconfig/uxlaunch"), "a+") - f.write("session="+ksdesktop.session.lower()+"\n") - f.close() - if ksdesktop.autologinuser: - self._check_sysconfig() - f = open(self.path("/etc/sysconfig/desktop"), "a+") - f.write("AUTOLOGIN_USER=" + ksdesktop.autologinuser + "\n") - f.close() - if os.path.exists(self.path("/etc/gdm/custom.conf")): - f = open(self.path("/etc/gdm/custom.conf"), "w") - f.write("[daemon]\n") - f.write("AutomaticLoginEnable=true\n") - f.write("AutomaticLogin=" + ksdesktop.autologinuser + "\n") - f.close() - -class MoblinRepoConfig(KickstartConfig): - """A class to apply a kickstart desktop configuration to a system.""" - def __create_repo_section(self, repo, type, fd): - baseurl = None - mirrorlist = None - reposuffix = {"base":"", "debuginfo":"-debuginfo", "source":"-source"} - reponame = repo.name + reposuffix[type] - if type == "base": - if repo.baseurl: - baseurl = repo.baseurl - if repo.mirrorlist: - mirrorlist = repo.mirrorlist - - elif type == "debuginfo": - if repo.baseurl: - if repo.baseurl.endswith("/"): - baseurl = os.path.dirname(os.path.dirname(repo.baseurl)) - else: - baseurl = os.path.dirname(repo.baseurl) - baseurl += "/debug" - - if repo.mirrorlist: - variant = repo.mirrorlist[repo.mirrorlist.find("$"):] - mirrorlist = repo.mirrorlist[0:repo.mirrorlist.find("$")] - mirrorlist += "debug" + "-" + variant - - elif type == "source": - if repo.baseurl: - if repo.baseurl.endswith("/"): - baseurl = os.path.dirname( - os.path.dirname( - os.path.dirname(repo.baseurl))) - else: - baseurl = os.path.dirname(os.path.dirname(repo.baseurl)) - baseurl += "/source" - - if repo.mirrorlist: - variant = repo.mirrorlist[repo.mirrorlist.find("$"):] - mirrorlist = repo.mirrorlist[0:repo.mirrorlist.find("$")] - mirrorlist += "source" + "-" + variant - - fd.write("[" + reponame + "]\n") - fd.write("name=" + reponame + "\n") - fd.write("failovermethod=priority\n") - if baseurl: - auth_url = re.compile(AUTH_URL_PTN) - m = auth_url.match(baseurl) - if m: - baseurl = "%s://%s" % (m.group('scheme'), m.group('url')) - fd.write("baseurl=" + baseurl + "\n") - if mirrorlist: - fd.write("mirrorlist=" + mirrorlist + "\n") - """ Skip saving proxy settings """ - #if repo.proxy: - # fd.write("proxy=" + repo.proxy + "\n") - #if repo.proxy_username: - # fd.write("proxy_username=" + repo.proxy_username + "\n") - #if repo.proxy_password: - # fd.write("proxy_password=" + repo.proxy_password + "\n") - if repo.gpgkey: - fd.write("gpgkey=" + repo.gpgkey + "\n") - fd.write("gpgcheck=1\n") - else: - fd.write("gpgcheck=0\n") - if type == "source" or type == "debuginfo" or repo.disable: - fd.write("enabled=0\n") - else: - fd.write("enabled=1\n") - fd.write("\n") - - def __create_repo_file(self, repo, repodir): - fs.makedirs(self.path(repodir)) - f = open(self.path(repodir + "/" + repo.name + ".repo"), "w") - self.__create_repo_section(repo, "base", f) - if repo.debuginfo: - self.__create_repo_section(repo, "debuginfo", f) - if repo.source: - self.__create_repo_section(repo, "source", f) - f.close() - - @apply_wrapper - def apply(self, ksrepo, repodata, repourl): - for repo in ksrepo.repoList: - if repo.name in repourl: - repo.baseurl = repourl[repo.name] - if repo.save: - #self.__create_repo_file(repo, "/etc/yum.repos.d") - self.__create_repo_file(repo, "/etc/zypp/repos.d") - """ Import repo gpg keys """ - if repodata: - for repo in repodata: - if repo['repokey']: - runner.quiet(['rpm', - "--root=%s" % self.instroot, - "--import", - repo['repokey']]) - -class RPMMacroConfig(KickstartConfig): - """A class to apply the specified rpm macros to the filesystem""" - @apply_wrapper - def apply(self, ks): - if not ks: - return - if not os.path.exists(self.path("/etc/rpm")): - os.mkdir(self.path("/etc/rpm")) - f = open(self.path("/etc/rpm/macros.imgcreate"), "w+") - if exclude_docs(ks): - f.write("%_excludedocs 1\n") - f.write("%__file_context_path %{nil}\n") - if inst_langs(ks) != None: - f.write("%_install_langs ") - f.write(inst_langs(ks)) - f.write("\n") - f.close() - -class NetworkConfig(KickstartConfig): - """A class to apply a kickstart network configuration to a system.""" - def write_ifcfg(self, network): - p = self.path("/etc/sysconfig/network-scripts/ifcfg-" + network.device) - - f = file(p, "w+") - os.chmod(p, 0o644) - - f.write("DEVICE=%s\n" % network.device) - f.write("BOOTPROTO=%s\n" % network.bootProto) - - if network.bootProto.lower() == "static": - if network.ip: - f.write("IPADDR=%s\n" % network.ip) - if network.netmask: - f.write("NETMASK=%s\n" % network.netmask) - - if network.onboot: - f.write("ONBOOT=on\n") - else: - f.write("ONBOOT=off\n") - - if network.essid: - f.write("ESSID=%s\n" % network.essid) - - if network.ethtool: - if network.ethtool.find("autoneg") == -1: - network.ethtool = "autoneg off " + network.ethtool - f.write("ETHTOOL_OPTS=%s\n" % network.ethtool) - - if network.bootProto.lower() == "dhcp": - if network.hostname: - f.write("DHCP_HOSTNAME=%s\n" % network.hostname) - if network.dhcpclass: - f.write("DHCP_CLASSID=%s\n" % network.dhcpclass) - - if network.mtu: - f.write("MTU=%s\n" % network.mtu) - - f.close() - - def write_wepkey(self, network): - if not network.wepkey: - return - - p = self.path("/etc/sysconfig/network-scripts/keys-" + network.device) - f = file(p, "w+") - os.chmod(p, 0o600) - f.write("KEY=%s\n" % network.wepkey) - f.close() - - def write_sysconfig(self, useipv6, hostname, gateway): - path = self.path("/etc/sysconfig/network") - f = file(path, "w+") - os.chmod(path, 0o644) - - f.write("NETWORKING=yes\n") - - if useipv6: - f.write("NETWORKING_IPV6=yes\n") - else: - f.write("NETWORKING_IPV6=no\n") - - if hostname: - f.write("HOSTNAME=%s\n" % hostname) - else: - f.write("HOSTNAME=localhost.localdomain\n") - - if gateway: - f.write("GATEWAY=%s\n" % gateway) - - f.close() - - def write_hosts(self, hostname): - localline = "" - if hostname and hostname != "localhost.localdomain": - localline += hostname + " " - l = hostname.split(".") - if len(l) > 1: - localline += l[0] + " " - localline += "localhost.localdomain localhost" - - path = self.path("/etc/hosts") - f = file(path, "w+") - os.chmod(path, 0o644) - f.write("127.0.0.1\t\t%s\n" % localline) - f.write("::1\t\tlocalhost6.localdomain6 localhost6\n") - f.close() - - def write_resolv(self, nodns, nameservers): - if nodns or not nameservers: - return - - path = self.path("/etc/resolv.conf") - f = file(path, "w+") - os.chmod(path, 0o644) - - for ns in (nameservers): - if ns: - f.write("nameserver %s\n" % ns) - - f.close() - - @apply_wrapper - def apply(self, ksnet): - fs.makedirs(self.path("/etc/sysconfig/network-scripts")) - - useipv6 = False - nodns = False - hostname = None - gateway = None - nameservers = None - - for network in ksnet.network: - if not network.device: - raise errors.KsError("No --device specified with " - "network kickstart command") - - if (network.onboot and network.bootProto.lower() != "dhcp" and - not (network.ip and network.netmask)): - raise errors.KsError("No IP address and/or netmask " - "specified with static " - "configuration for '%s'" % - network.device) - - self.write_ifcfg(network) - self.write_wepkey(network) - - if network.ipv6: - useipv6 = True - if network.nodns: - nodns = True - - if network.hostname: - hostname = network.hostname - if network.gateway: - gateway = network.gateway - - if network.nameserver: - nameservers = network.nameserver.split(",") - - self.write_sysconfig(useipv6, hostname, gateway) - - #to avoid import error because of import each other - from mic.conf import configmgr - path=self.path("/etc/hosts") - if configmgr.create['skip_set_hosts'] == False and os.path.exists(path) == False: - self.write_hosts(hostname) - self.write_resolv(nodns, nameservers) - -def use_installerfw(ks, feature): - """ Check if the installer framework has to be used for a feature - "feature". """ - - features = ks.handler.installerfw.features - if features: - if feature in features or "all" in features: - return True - return False - -def get_image_size(ks, default = None): - __size = 0 - for p in ks.handler.partition.partitions: - if p.mountpoint == "/" and p.size: - __size = p.size - if __size > 0: - return int(__size) * 1024 * 1024 - else: - return default - -def get_image_fstype(ks, default = None): - for p in ks.handler.partition.partitions: - if p.mountpoint == "/" and p.fstype: - return p.fstype - return default - -def get_image_fsopts(ks, default = None): - for p in ks.handler.partition.partitions: - if p.mountpoint == "/" and p.fsopts: - return p.fsopts - return default - -def get_modules(ks): - devices = [] - if isinstance(ks.handler.device, kscommands.device.FC3_Device): - devices.append(ks.handler.device) - else: - devices.extend(ks.handler.device.deviceList) - - modules = [] - for device in devices: - if not device.moduleName: - continue - modules.extend(device.moduleName.split(":")) - - return modules - -def get_timeout(ks, default = None): - if not hasattr(ks.handler.bootloader, "timeout"): - return default - if ks.handler.bootloader.timeout is None: - return default - return int(ks.handler.bootloader.timeout) - -def get_kernel_args(ks, default = "ro rd.live.image"): - if not hasattr(ks.handler.bootloader, "appendLine"): - return default - if ks.handler.bootloader.appendLine is None: - return default - return "%s %s" %(default, ks.handler.bootloader.appendLine) - -def get_menu_args(ks, default = ""): - if not hasattr(ks.handler.bootloader, "menus"): - return default - if ks.handler.bootloader.menus in (None, ""): - return default - return "%s" % ks.handler.bootloader.menus - -def get_default_kernel(ks, default = None): - if not hasattr(ks.handler.bootloader, "default"): - return default - if not ks.handler.bootloader.default: - return default - return ks.handler.bootloader.default - -RepoType = collections.namedtuple("Repo", - "name, baseurl, mirrorlist, includepkgs, excludepkgs, proxy, \ - proxy_username, proxy_password, debuginfo, \ - source, gpgkey, disable, ssl_verify, nocache, \ - cost, priority") - -def Repo(name, baseurl, mirrorlist=None, includepkgs=[], excludepkgs=[], proxy=None, - proxy_username=None, proxy_password=None, debuginfo=None, - source=None, gpgkey=None, disable=None, ssl_verify=None, - nocache=False, cost=None, priority=None): - return RepoType(name, baseurl, mirrorlist, includepkgs, excludepkgs, proxy, - proxy_username, proxy_password, debuginfo, - source, gpgkey, disable, ssl_verify, nocache, - cost, priority) - - -def get_repos(ks, repo_urls=None, ignore_ksrepo=False): - repos = {} - for repodata in ks.handler.repo.repoList: - repo = {} - for field in RepoType._fields: - if hasattr(repodata, field) and getattr(repodata, field): - repo[field] = getattr(repodata, field) - - if hasattr(repodata, 'baseurl') and getattr(repodata, 'baseurl'): - repo['baseurl'] = SafeURL(getattr(repodata, 'baseurl'), - getattr(repodata, 'user', None), - getattr(repodata, 'passwd', None)) - - if 'name' in repo: - repos[repo['name']] = Repo(**repo) - - if repo_urls: - if ignore_ksrepo: - repos = {} - for name, repo in repo_urls.items(): - if 'baseurl' in repo: - repo['baseurl'] = SafeURL(repo.get('baseurl'), - repo.get('user', None), - repo.get('passwd', None)) - repos[name] = Repo(**repo) - return repos.values() - -TpkRepoType = collections.namedtuple("TpkRepo", - "name, baseurl,proxy,proxy_username,proxy_password,ssl_verify") - -def TpkRepo(name, baseurl, proxy=None,proxy_username=None, proxy_password=None,ssl_verify=None): - return TpkRepoType(name, baseurl,proxy,proxy_username,proxy_password,ssl_verify) - - -def get_tpkrepos(ks): - tpkrepos = {} - for tpkrepodata in ks.handler.tpk_repo.tpkRepoList: - tpkrepo = {} - for field in TpkRepoType._fields: - if hasattr(tpkrepodata, field) and getattr(tpkrepodata, field): - tpkrepo[field] = getattr(tpkrepodata, field) - - if hasattr(tpkrepodata, 'baseurl') and getattr(tpkrepodata, 'baseurl'): - tpkrepo['baseurl'] = SafeURL(getattr(tpkrepodata, 'baseurl'),getattr(tpkrepodata, 'user',None),getattr(tpkrepodata, 'passwd',None)) - - if 'name' in tpkrepo: - tpkrepos[tpkrepo['name']] = TpkRepo(**tpkrepo) - - return tpkrepos.values() - - -def convert_method_to_repo(ks): - try: - ks.handler.repo.methodToRepo() - except (AttributeError, kserrors.KickstartError): - pass - -def get_attachment(ks, required=()): - return ks.handler.attachment.packageList + list(required) - -def get_env(ks, required=()): - return ks.handler.env - -def get_pre_packages(ks, required=()): - return ks.handler.prepackages.packageList + list(required) - -def get_packages(ks, required=()): - return ks.handler.packages.packageList + list(required) - -def get_tpkpackages(ks): - return ks.handler.tpk_packages.tpk_packageList - -def get_groups(ks, required=()): - return ks.handler.packages.groupList + list(required) - -def get_excluded(ks, required=()): - return ks.handler.packages.excludedList + list(required) - -def get_partitions(ks): - return ks.handler.partition.partitions - -def ignore_missing(ks): - return ks.handler.packages.handleMissing == ksconstants.KS_MISSING_IGNORE - -def exclude_docs(ks): - return ks.handler.packages.excludeDocs - -def inst_langs(ks): - if hasattr(ks.handler.packages, "instLange"): - return ks.handler.packages.instLange - elif hasattr(ks.handler.packages, "instLangs"): - return ks.handler.packages.instLangs - return "" - -def get_post_scripts(ks): - scripts = [] - for s in ks.handler.scripts: - if s.type != ksparser.KS_SCRIPT_POST: - continue - scripts.append(s) - return scripts - -def get_sign_scripts(ks): - scripts = [] - for s in ks.handler.scripts: - if (s.type == ksparser.KS_SCRIPT_RUN or \ - s.type == ksparser.KS_SCRIPT_UMOUNT): - scripts.append(s) - return scripts - -def add_repo(ks, repostr): - args = repostr.split() - repoobj = ks.handler.repo.parse(args[1:]) - if repoobj and repoobj not in ks.handler.repo.repoList: - ks.handler.repo.repoList.append(repoobj) - -def remove_all_repos(ks): - while len(ks.handler.repo.repoList) != 0: - del ks.handler.repo.repoList[0] - -def remove_duplicate_repos(ks): - i = 0 - j = i + 1 - while True: - if len(ks.handler.repo.repoList) < 2: - break - if i >= len(ks.handler.repo.repoList) - 1: - break - name = ks.handler.repo.repoList[i].name - baseurl = ks.handler.repo.repoList[i].baseurl - if j < len(ks.handler.repo.repoList): - if (ks.handler.repo.repoList[j].name == name or \ - ks.handler.repo.repoList[j].baseurl == baseurl): - del ks.handler.repo.repoList[j] - else: - j += 1 - if j >= len(ks.handler.repo.repoList): - i += 1 - j = i + 1 - else: - i += 1 - j = i + 1 - -def resolve_groups(creatoropts, repometadata): - iszypp = False - if 'zypp' == creatoropts['pkgmgr']: - iszypp = True - ks = creatoropts['ks'] - - for repo in repometadata: - """ Mustn't replace group with package list if repo is ready for the - corresponding package manager. - """ - - if iszypp and repo["patterns"]: - continue - if not iszypp and repo["comps"]: - continue - - # But we also must handle such cases, use zypp but repo only has comps, - # use yum but repo only has patterns, use zypp but use_comps is true, - # use yum but use_comps is false. - groupfile = None - if iszypp and repo["comps"]: - groupfile = repo["comps"] - get_pkglist_handler = misc.get_pkglist_in_comps - if not iszypp and repo["patterns"]: - groupfile = repo["patterns"] - get_pkglist_handler = misc.get_pkglist_in_patterns - - if groupfile: - i = 0 - while True: - if i >= len(ks.handler.packages.groupList): - break - pkglist = get_pkglist_handler( - ks.handler.packages.groupList[i].name, - groupfile) - if pkglist: - del ks.handler.packages.groupList[i] - for pkg in pkglist: - if pkg not in ks.handler.packages.packageList: - ks.handler.packages.packageList.append(pkg) - else: - i = i + 1 diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/kickstart/custom_commands/__init__.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/kickstart/custom_commands/__init__.py deleted file mode 100644 index 381c917..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/kickstart/custom_commands/__init__.py +++ /dev/null @@ -1,14 +0,0 @@ -from desktop import Mic_Desktop -from micrepo import Mic_Repo, Mic_RepoData,Mic_Tpk_Repo, Mic_Tpk_RepoData -from partition import Mic_Partition -from installerfw import Mic_installerfw - -__all__ = ( - "Mic_Desktop", - "Mic_Repo", - "Mic_RepoData", - "Mic_Tpk_Repo", - "Mic_Tpk_RepoData", - "Mic_Partition", - "Mic_installerfw", -) diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/kickstart/custom_commands/desktop.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/kickstart/custom_commands/desktop.py deleted file mode 100644 index a2359b3..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/kickstart/custom_commands/desktop.py +++ /dev/null @@ -1,96 +0,0 @@ -#!/usr/bin/python -tt -# -# Copyright (c) 2008, 2009, 2010 Intel, Inc. -# -# Yi Yang -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free -# Software Foundation; version 2 of the License -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., 59 -# Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -from pykickstart.base import * -from pykickstart.errors import * -from pykickstart.options import * - -class Mic_Desktop(KickstartCommand): - def __init__(self, writePriority=0, - defaultdesktop=None, - defaultdm=None, - autologinuser=None, - session=None): - - KickstartCommand.__init__(self, writePriority) - - self.__new_version = False - self.op = self._getParser() - - self.defaultdesktop = defaultdesktop - self.autologinuser = autologinuser - self.defaultdm = defaultdm - self.session = session - - def __str__(self): - retval = "" - - if self.defaultdesktop != None: - retval += " --defaultdesktop=%s" % self.defaultdesktop - if self.session != None: - retval += " --session=\"%s\"" % self.session - if self.autologinuser != None: - retval += " --autologinuser=%s" % self.autologinuser - if self.defaultdm != None: - retval += " --defaultdm=%s" % self.defaultdm - - if retval != "": - retval = "# Default Desktop Settings\ndesktop %s\n" % retval - - return retval - - def _getParser(self): - try: - #ingnore this pylit error, the lineno argument exist in olg version. using this way can compate old version. - op = KSOptionParser(lineno=self.lineno) #pylint: disable=unexpected-keyword-arg - except TypeError: - # the latest version has not lineno argument - op = KSOptionParser() - self.__new_version = True - - op.add_option("--defaultdesktop", dest="defaultdesktop", - action="store", - type="string", - nargs=1) - op.add_option("--autologinuser", dest="autologinuser", - action="store", - type="string", - nargs=1) - op.add_option("--defaultdm", dest="defaultdm", - action="store", - type="string", - nargs=1) - op.add_option("--session", dest="session", - action="store", - type="string", - nargs=1) - return op - - def parse(self, args): - if self.__new_version: - (opts, extra) = self.op.parse_args(args=args, lineno=self.lineno) - else: - (opts, extra) = self.op.parse_args(args=args) - - if extra: - m = ("Unexpected arguments to %(command)s command: %(options)s") \ - % {"command": "desktop", "options": extra} - raise KickstartValueError (formatErrorMsg(self.lineno, msg=m)) - - self._setToSelf(self.op, opts) diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/kickstart/custom_commands/installerfw.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/kickstart/custom_commands/installerfw.py deleted file mode 100644 index 01deb76..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/kickstart/custom_commands/installerfw.py +++ /dev/null @@ -1,65 +0,0 @@ -#!/usr/bin/python -tt -# -# Copyright (c) 2013 Intel, Inc. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free -# Software Foundation; version 2 of the License -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., 59 -# Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -from pykickstart.base import * -from pykickstart.options import * -from mic import msger - -class Mic_installerfw(KickstartCommand): - """ This class implements the "installerfw_plugins" KS option. The argument - of the option is a comman-separated list of MIC features which have to be - disabled and instead, will be done in the installer. For example, - "installerfw_plugins=bootloader" disables all the MIC code which installs - the bootloader to the target images, and instead, the bootlodaer will be - installed by the installer framework plugin. - - The plugin is a program which is external to MIC, it comes from the - installation repositories and can be executed by MIC in order to perform - various configuration actions. The main point here is to make sure MIC has - no hard-wired knoledge about the target OS configuration. """ - - removedKeywords = KickstartCommand.removedKeywords - removedAttrs = KickstartCommand.removedAttrs - - def __init__(self, *args, **kwargs): - KickstartCommand.__init__(self, *args, **kwargs) - self.op = self._getParser() - self.features = None - - def __str__(self): - retval = KickstartCommand.__str__(self) - - if self.features: - retval += "# Enable installer framework plugins\ninstallerfw_plugins\n" - - return retval - - def _getParser(self): - op = KSOptionParser() - return op - - def parse(self, args): - (_, extra) = self.op.parse_args(args=args, lineno=self.lineno) - - if len(extra) != 1: - msg = "Kickstart command \"%s\" requires one " \ - "argumet - a list of legacy features to disable" % self.currentCmd - raise KickstartValueError (formatErrorMsg(self.lineno, msg = msg)) - - self.features = extra[0].split(",") - - return self diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/kickstart/custom_commands/micboot.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/kickstart/custom_commands/micboot.py deleted file mode 100644 index 66d1678..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/kickstart/custom_commands/micboot.py +++ /dev/null @@ -1,49 +0,0 @@ -#!/usr/bin/python -tt -# -# Copyright (c) 2008, 2009, 2010 Intel, Inc. -# -# Anas Nashif -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free -# Software Foundation; version 2 of the License -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., 59 -# Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -from pykickstart.base import * -from pykickstart.errors import * -from pykickstart.options import * -from pykickstart.commands.bootloader import * - -class Mic_Bootloader(F8_Bootloader): - def __init__(self, writePriority=10, appendLine="", driveorder=None, - forceLBA=False, location="", md5pass="", password="", - upgrade=False, menus=""): - F8_Bootloader.__init__(self, writePriority, appendLine, driveorder, - forceLBA, location, md5pass, password, upgrade) - - self.menus = "" - self.ptable = "msdos" - - def _getArgsAsStr(self): - ret = F8_Bootloader._getArgsAsStr(self) - - if self.menus == "": - ret += " --menus=%s" %(self.menus,) - if self.ptable: - ret += " --ptable=\"%s\"" %(self.ptable,) - return ret - - def _getParser(self): - op = F8_Bootloader._getParser(self) - op.add_option("--menus", dest="menus") - op.add_option("--ptable", dest="ptable", type="string") - return op - diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/kickstart/custom_commands/micrepo.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/kickstart/custom_commands/micrepo.py deleted file mode 100644 index 25cdae9..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/kickstart/custom_commands/micrepo.py +++ /dev/null @@ -1,97 +0,0 @@ -# -# Copyright (c) 2008, 2009, 2010 Intel, Inc. -# -# Yi Yang -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free -# Software Foundation; version 2 of the License -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., 59 -# Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -from pykickstart.commands.repo import F14_RepoData, F14_Repo - - -class Mic_RepoData(F14_RepoData): - "Mic customized repo data" - - def __init__(self, *args, **kw): - F14_RepoData.__init__(self, *args, **kw) - for field in ('save', 'proxyuser', 'proxypasswd', 'debuginfo', - 'disable', 'source', 'gpgkey', 'ssl_verify', 'priority', - 'nocache', 'user', 'passwd'): - setattr(self, field, kw.get(field)) - - if hasattr(self, 'proxy') and not self.proxy: - # TODO: remove this code, since it only for back-compatible. - # Some code behind only accept None but not empty string - # for default proxy - self.proxy = None - - def _getArgsAsStr(self): - retval = F14_RepoData._getArgsAsStr(self) - - for field in ('proxyuser', 'proxypasswd', 'user', 'passwd', - 'gpgkey', 'ssl_verify', 'priority', - ): - if hasattr(self, field) and getattr(self, field): - retval += ' --%s="%s"' % (field, getattr(self, field)) - - for field in ('save', 'diable', 'nocache', 'source', 'debuginfo'): - if hasattr(self, field) and getattr(self, field): - retval += ' --%s' % field - - return retval - -class Mic_Tpk_RepoData(Mic_RepoData): - "Mic customized tpk repo data" - def __init__(self, *args, **kw): - Mic_RepoData.__init__(self, *args, **kw) - def __str__(self): - retval = Mic_RepoData._getArgsAsStr(self) - retval = "tpk_repo " + retval - return retval - -class Mic_Repo(F14_Repo): - "Mic customized repo command" - - def _getParser(self): - op = F14_Repo._getParser(self) - op.add_option('--user') - op.add_option('--passwd') - op.add_option("--proxyuser") - op.add_option("--proxypasswd") - - op.add_option("--save", action="store_true", default=False) - op.add_option("--debuginfo", action="store_true", default=False) - op.add_option("--source", action="store_true", default=False) - op.add_option("--disable", action="store_true", default=False) - op.add_option("--nocache", action="store_true", default=False) - - op.add_option("--gpgkey") - op.add_option("--priority", type="int") - op.add_option("--ssl_verify", default=None) - return op - - -class Mic_Tpk_Repo(Mic_Repo): - def __init__(self, writePriority=0, *args, **kwargs): - Mic_Repo.__init__(self, writePriority, *args, **kwargs) - self.op = self._getParser() - - self.tpkRepoList = kwargs.get("tpkRepoList", []) - - def _getParser(self): - op = Mic_Repo._getParser(self) - return op - - def dataList(self): - return self.tpkRepoList - diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/kickstart/custom_commands/partition.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/kickstart/custom_commands/partition.py deleted file mode 100644 index b0e9246..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/kickstart/custom_commands/partition.py +++ /dev/null @@ -1,98 +0,0 @@ -#!/usr/bin/python -tt -# -# Marko Saukko -# -# Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the GNU -# General Public License v.2. This program is distributed in the hope that it -# will be useful, but WITHOUT ANY WARRANTY expressed or implied, including the -# implied warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# See the GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 51 -# Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -from pykickstart.commands.partition import * - -class Mic_PartData(FC4_PartData): - removedKeywords = FC4_PartData.removedKeywords - removedAttrs = FC4_PartData.removedAttrs - - def __init__(self, *args, **kwargs): - FC4_PartData.__init__(self, *args, **kwargs) - self.deleteRemovedAttrs() - self.align = kwargs.get("align", None) - self.extopts = kwargs.get("extopts", None) - self.f2fsopts = kwargs.get("f2fsopts", None) - self.part_type = kwargs.get("part_type", None) - self.uuid = kwargs.get("uuid", None) - self.exclude_image = kwargs.get("exclude_from_image", False) - self.vdfsopts = kwargs.get("vdfsopts", None) - self.squashfsopts = kwargs.get("squashfsopts", None) - self.squashfsoptions_maxsize = kwargs.get("squashfsoptions_maxsize", None) - self.cpioopts = kwargs.get("cpioopts", None) - self.no_shrink = kwargs.get("no_shrink", False) - self.init_expand = kwargs.get("init_expand", False) - - def _getArgsAsStr(self): - retval = FC4_PartData._getArgsAsStr(self) - - if self.align: - retval += " --align" - if self.extopts: - retval += " --extoptions=%s" % self.extopts - if self.f2fsopts: - retval += " --f2fsoptions=%s" % self.f2fsopts - if self.part_type: - retval += " --part-type=%s" % self.part_type - if self.uuid: - retval += " --uuid=%s" % self.uuid - if self.exclude_image: - retval += " --exclude-from-image" - if self.vdfsopts: - retval += " --vdfsoptions=%s" % self.vdfsopts - if self.squashfsopts: - retval += " --squashfsoptions=%s" % self.squashfsopts - if self.squashfsoptions_maxsize: - retval += " --squashfsoptions_maxsize=%s" % self.squashfsoptions_maxsize - if self.cpioopts: - retval += " --cpiooptions=%s" % self.cpioopts - if self.no_shrink: - retval += " --no-shrink" - if self.init_expand: - retval += " --init-expand" - return retval - -class Mic_Partition(FC4_Partition): - removedKeywords = FC4_Partition.removedKeywords - removedAttrs = FC4_Partition.removedAttrs - - def _getParser(self): - op = FC4_Partition._getParser(self) - # The alignment value is given in kBytes. e.g., value 8 means that - # the partition is aligned to start from 8096 byte boundary. - op.add_option("--align", type="int", action="store", dest="align", - default=None) - op.add_option("--extoptions", type="string", action="store", dest="extopts", - default=None) - op.add_option("--f2fsoptions", type="string", action="store", dest="f2fsopts", - default=None) - op.add_option("--part-type", type="string", action="store", dest="part_type", - default=None) - op.add_option("--uuid", dest="uuid", action="store", type="string") - op.add_option("--exclude-from-image", action="store_true", dest="exclude_image", - default=False) - op.add_option("--vdfsoptions", type="string", action="store", dest="vdfsopts", - default=None) - op.add_option("--squashfsoptions", type="string", action="store", dest="squashfsopts", - default=None) - op.add_option("--squashfsoptions_maxsize", type="string", action="store", dest="squashfsoptions_maxsize", - default=None) - op.add_option("--cpiooptions", type="string", action="store", dest="cpioopts", - default=None) - op.add_option("--no-shrink", action="store_true", dest="no_shrink", default=False) - op.add_option("--init-expand", action="store_true", dest="init_expand", default=False) - return op diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/msger.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/msger.py deleted file mode 100644 index 31ac9bd..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/msger.py +++ /dev/null @@ -1,430 +0,0 @@ -# -# Copyright (c) 2013 Intel, Inc. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free -# Software Foundation; version 2 of the License -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., 59 -# Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -# Following messages should be disabled in pylint: -# * Too many instance attributes (R0902) -# * Too few public methods (R0903) -# * Too many public methods (R0904) -# * Anomalous backslash in string (W1401) -# * __init__ method from base class %r is not called (W0231) -# * __init__ method from a non direct base class %r is called (W0233) -# * Invalid name for type (C0103) -# * RootLogger has no '%s' member (E1103) -# pylint: disable=R0902,R0903,R0904,W1401,W0231,W0233,C0103,E1103 - -""" This logging module is fully compatible with the old msger module, and - it supports interactive mode, logs the messages with specified levels - to specified stream, can also catch all error messages including the - involved 3rd party modules to the logger -""" -import os -import sys -import logging -import tempfile - -__ALL__ = [ - 'get_loglevel', - 'set_loglevel', - 'set_logfile', - 'enable_interactive', - 'disable_interactive', - 'enable_logstderr', - 'disable_logstderr', - 'raw', - 'debug', - 'verbose', - 'info', - 'warning', - 'error', - 'select', - 'choice', - 'ask', - 'pause', -] - - -# define the color constants -BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = range(30, 38) - -# color sequence for tty terminal -COLOR_SEQ = "\033[%dm" -# reset sequence for tty terminal -RESET_SEQ = "\033[0m" - -# new log level -RAWTEXT = 25 -VERBOSE = 15 - -# define colors for log levels -COLORS = { - 'DEBUG': COLOR_SEQ % BLUE, - 'VERBOSE': COLOR_SEQ % MAGENTA, - 'INFO': COLOR_SEQ % GREEN, - 'WARNING': COLOR_SEQ % YELLOW, - 'ERROR': COLOR_SEQ % RED, -} - - -class LevelFilter(logging.Filter): - """ A filter that selects logging message with specified level """ - def __init__(self, levels): - self._levels = levels - - def filter(self, record): - if self._levels: - return record.levelname in self._levels - return False - - -class MicStreamHandler(logging.StreamHandler): - """ A stream handler that print colorized levelname in tty terminal """ - def __init__(self, stream=None): - logging.StreamHandler.__init__(self, stream) - msg_fmt = "%(color)s%(levelname)s:%(reset)s %(message)s" - self.setFormatter(logging.Formatter(fmt=msg_fmt)) - - def _use_color(self): - """ Check if to print in color or not """ - in_emacs = (os.getenv("EMACS") and - os.getenv("INSIDE_EMACS", "").endswith(",comint")) - return self.stream.isatty() and not in_emacs - - def format(self, record): - """ Format the logging record if need color """ - record.color = record.reset = "" - if self._use_color(): - record.color = COLORS[record.levelname] - record.reset = RESET_SEQ - return logging.StreamHandler.format(self, record) - - -class RedirectedStderr(object): - """ A faked error stream that redirect stderr to a temp file """ - def __init__(self): - self.tmpfile = tempfile.NamedTemporaryFile() - self.fderr = None - self.value = None - - def __del__(self): - self.close() - - def close(self): - """ Close the temp file and clear the buffer """ - try: - self.value = None - self.tmpfile.close() - except OSError: - pass - - def truncate(self): - """ Truncate the tempfile to size zero """ - if self.tmpfile: - os.ftruncate(self.tmpfile.fileno(), 0) - os.lseek(self.tmpfile.fileno(), 0, os.SEEK_SET) - - def redirect(self): - """ Redirect stderr to the temp file """ - self.fderr = os.dup(2) - os.dup2(self.tmpfile.fileno(), 2) - - def restore(self): - """ Restore the stderr and read the bufferred data """ - os.dup2(self.fderr, 2) - self.fderr = None - - if self.tmpfile: - self.tmpfile.seek(0, 0) - self.value = self.tmpfile.read() - - def getvalue(self): - """ Read the bufferred data """ - if self.tmpfile: - self.tmpfile.seek(0, 0) - self.value = self.tmpfile.read() - os.ftruncate(self.tmpfile.fileno(), 0) - os.lseek(self.tmpfile.fileno(), 0, os.SEEK_SET) - return self.value - return None - -class MicFileHandler(logging.FileHandler): - """ This file handler is supposed to catch the stderr output from - all modules even 3rd party modules involed, as it redirects - the stderr stream to a temp file stream, if logfile assigned, - it will flush the record to file stream, else it's a buffer - handler; once logfile assigned, the buffer will be flushed - """ - def __init__(self, filename=None, mode='w', encoding=None, capacity=10): - # we don't use FileHandler to initialize, - # because filename might be expected to None - logging.Handler.__init__(self) - self.stream = None - if filename: - self.baseFilename = os.path.abspath(filename) - else: - self.baseFilename = None - self.mode = mode - self.encoding = None - self.capacity = capacity - # buffering the records - self.buffer = [] - - # set formater locally - msg_fmt = "[%(asctime)s] %(message)s" - date_fmt = "%m/%d %H:%M:%S %Z" - self.setFormatter(logging.Formatter(fmt=msg_fmt, datefmt=date_fmt)) - self.olderr = sys.stderr - self.stderr = RedirectedStderr() - self.errmsg = None - - def set_logfile(self, filename, mode='w'): - """ Set logfile path to make it possible flush records not-on-fly """ - self.baseFilename = os.path.abspath(filename) - self.mode = mode - - def redirect_stderr(self): - """ Start to redirect stderr for catching all error output """ - self.stderr.redirect() - - def restore_stderr(self): - """ Restore stderr stream and log the error messages to both stderr - and log file if error messages are not empty - """ - self.stderr.restore() - self.errmsg = self.stderr.value - if self.errmsg: - self.logstderr() - - def logstderr(self): - """ Log catched error message from stderr redirector """ - if not self.errmsg: - return - - sys.stdout.write(self.errmsg) - sys.stdout.flush() - - record = logging.makeLogRecord({'msg': self.errmsg}) - self.buffer.append(record) - - # truncate the redirector for the errors is logged - self.stderr.truncate() - self.errmsg = None - - def emit(self, record): - """ Emit the log record to Handler """ - # if there error message catched, log it first - self.errmsg = self.stderr.getvalue() - if self.errmsg: - self.logstderr() - - # if no logfile assigned, it's a buffer handler - if not self.baseFilename: - self.buffer.append(record) - if len(self.buffer) >= self.capacity: - self.buffer = [] - else: - self.flushing(record) - - def flushing(self, record=None): - """ Flush buffer and record to logfile """ - # NOTE: 'flushing' can't be named 'flush' because of 'emit' calling it - # set file stream position to SEEK_END(=2) - if self.stream: - self.stream.seek(0, 2) - # if bufferred, flush it - if self.buffer: - for arecord in self.buffer: - logging.FileHandler.emit(self, arecord) - self.buffer = [] - # if recorded, flush it - if record: - logging.FileHandler.emit(self, record) - - def close(self): - """ Close handler after flushing the buffer """ - # if any left in buffer, flush it - if self.stream: - self.flushing() - logging.FileHandler.close(self) - - -class MicLogger(logging.Logger): - """ The MIC logger class, it supports interactive mode, and logs the - messages with specified levels tospecified stream, also can catch - all error messages including the involved 3rd party modules - """ - def __init__(self, name, level=logging.INFO): - logging.Logger.__init__(self, name, level) - self.propagate = False - self.interactive = True - self.logfile = None - self._allhandlers = { - 'default': logging.StreamHandler(sys.stdout), - 'stdout': MicStreamHandler(sys.stdout), - 'stderr': MicStreamHandler(sys.stderr), - 'logfile': MicFileHandler(), - } - - self._allhandlers['default'].addFilter(LevelFilter(['RAWTEXT'])) - self._allhandlers['default'].setFormatter( - logging.Formatter(fmt="%(message)s")) - self.addHandler(self._allhandlers['default']) - - self._allhandlers['stdout'].addFilter(LevelFilter(['DEBUG', 'VERBOSE', - 'INFO'])) - self.addHandler(self._allhandlers['stdout']) - - self._allhandlers['stderr'].addFilter(LevelFilter(['WARNING', - 'ERROR'])) - self.addHandler(self._allhandlers['stderr']) - - self.addHandler(self._allhandlers['logfile']) - - def set_logfile(self, filename, mode='w'): - """ Set logfile path """ - self.logfile = filename - self._allhandlers['logfile'].set_logfile(self.logfile, mode) - - def enable_logstderr(self): - """ Start to log all error messages """ - if self.logfile: - self._allhandlers['logfile'].redirect_stderr() - - def disable_logstderr(self): - """ Stop to log all error messages """ - if self.logfile: - self._allhandlers['logfile'].restore_stderr() - - def verbose(self, msg, *args, **kwargs): - """ Log a message with level VERBOSE """ - if self.isEnabledFor(VERBOSE): - self._log(VERBOSE, msg, args, **kwargs) - - def raw(self, msg, *args, **kwargs): - """ Log a message in raw text format """ - if self.isEnabledFor(RAWTEXT): - self._log(RAWTEXT, msg, args, **kwargs) - - def select(self, msg, optdict, default=None): - """ Log a message in interactive mode """ - if not optdict.keys(): - return default - if default is None: - default = optdict.keys()[0] - msg += " [%s](%s): " % ('/'.join(optdict.keys()), default) - if not self.interactive or self.logfile: - reply = default - self.raw(msg + reply) - else: - while True: - reply = raw_input(msg).strip() - if not reply or reply in optdict: - break - if not reply: - reply = default - return optdict[reply] - - -def error(msg): - """ Log a message with level ERROR on the MIC logger """ - LOGGER.error(msg) - sys.exit(2) - -def warning(msg): - """ Log a message with level WARNING on the MIC logger """ - LOGGER.warning(msg) - -def info(msg): - """ Log a message with level INFO on the MIC logger """ - LOGGER.info(msg) - -def verbose(msg): - """ Log a message with level VERBOSE on the MIC logger """ - LOGGER.verbose(msg) - -def debug(msg): - """ Log a message with level DEBUG on the MIC logger """ - LOGGER.debug(msg) - -def raw(msg): - """ Log a message on the MIC logger in raw text format""" - LOGGER.raw(msg) - -def select(msg, optdict, default=None): - """ Show an interactive scene in tty terminal and - logs them on MIC logger - """ - return LOGGER.select(msg, optdict, default) - -def choice(msg, optlist, default=0): - """ Give some alternatives to users for answering the question """ - return LOGGER.select(msg, dict(zip(optlist, optlist)), optlist[default]) - -def ask(msg, ret=True): - """ Ask users to answer 'yes' or 'no' to the question """ - answers = {'y': True, 'n': False} - default = {True: 'y', False: 'n'}[ret] - return LOGGER.select(msg, answers, default) - -def pause(msg=None): - """ Pause for any key """ - if msg is None: - msg = "press ANY KEY to continue ..." - raw_input(msg) - -def set_logfile(logfile, mode='w'): - """ Set logfile path to the MIC logger """ - LOGGER.set_logfile(logfile, mode) - -def set_loglevel(level): - """ Set loglevel to the MIC logger """ - if isinstance(level, basestring): - level = logging.getLevelName(level) - LOGGER.setLevel(level) - -def get_loglevel(): - """ Get the loglevel of the MIC logger """ - return logging.getLevelName(LOGGER.level) - -def disable_interactive(): - """ Disable the interactive mode """ - LOGGER.interactive = False - -def enable_interactive(): - """ Enable the interactive mode """ - LOGGER.interactive = True - -def set_interactive(value): - """ Set the interactive mode (for compatibility) """ - if value: - enable_interactive() - else: - disable_interactive() - -def enable_logstderr(fpath=None): - """ Start to log all error message on the MIC logger """ - LOGGER.enable_logstderr() - -def disable_logstderr(): - """ Stop to log all error message on the MIC logger """ - LOGGER.disable_logstderr() - - -# add two level to the MIC logger: 'VERBOSE', 'RAWTEXT' -logging.addLevelName(VERBOSE, 'VERBOSE') -logging.addLevelName(RAWTEXT, 'RAWTEXT') -# initial the MIC logger -logging.setLoggerClass(MicLogger) -LOGGER = logging.getLogger("MIC") diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/plugin.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/plugin.py deleted file mode 100644 index e433e25..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/plugin.py +++ /dev/null @@ -1,98 +0,0 @@ -#!/usr/bin/python -tt -# -# Copyright (c) 2011 Intel, Inc. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free -# Software Foundation; version 2 of the License -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., 59 -# Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -import os, sys - -from mic import msger -from mic import pluginbase -from mic.conf import configmgr -from mic.utils import errors - - -__ALL__ = ['PluginMgr', 'pluginmgr'] - -PLUGIN_TYPES = ["imager", "backend"] # TODO "hook" - - -class PluginMgr(object): - plugin_dirs = {} - - # make the manager class as singleton - _instance = None - def __new__(cls, *args, **kwargs): - if not cls._instance: - cls._instance = super(PluginMgr, cls).__new__(cls, *args, **kwargs) - - return cls._instance - - def __init__(self): - self.plugin_dir = configmgr.common['plugin_dir'] - - def append_dirs(self, dirs): - for path in dirs: - self._add_plugindir(path) - - # load all the plugins AGAIN - self._load_all() - - def _add_plugindir(self, path): - path = os.path.abspath(os.path.expanduser(path)) - - if not os.path.isdir(path): - msger.warning("Plugin dir is not a directory or does not exist: %s"\ - % path) - return - - if path not in self.plugin_dirs: - self.plugin_dirs[path] = False - # the value True/False means "loaded" - - def _load_all(self): - for (pdir, loaded) in self.plugin_dirs.iteritems(): - if loaded: continue - - sys.path.insert(0, pdir) - for mod in [x[:-3] for x in os.listdir(pdir) if x.endswith(".py")]: - if mod and mod != '__init__': - if mod in sys.modules: - #self.plugin_dirs[pdir] = True - msger.warning("Module %s already exists, skip" % mod) - else: - try: - pymod = __import__(mod) - self.plugin_dirs[pdir] = True - msger.debug("Plugin module %s:%s imported"\ - % (mod, pymod.__file__)) - except ImportError as err: - msg = 'Failed to load plugin %s/%s: %s' \ - % (os.path.basename(pdir), mod, err) - msger.verbose(msg) - - del(sys.path[0]) - - def get_plugins(self, ptype): - """ the return value is dict of name:class pairs """ - - if ptype not in PLUGIN_TYPES: - raise errors.CreatorError('%s is not valid plugin type' % ptype) - - self._add_plugindir(os.path.join(self.plugin_dir, ptype)) - self._load_all() - - return pluginbase.get_plugins(ptype) - -pluginmgr = PluginMgr() diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/pluginbase.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/pluginbase.py deleted file mode 100644 index db438b6..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/pluginbase.py +++ /dev/null @@ -1,99 +0,0 @@ -#!/usr/bin/python -tt -# -# Copyright (c) 2011 Intel, Inc. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free -# Software Foundation; version 2 of the License -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., 59 -# Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -import os -import shutil -from mic import msger -from mic.utils import errors - -class _Plugin(object): - class __metaclass__(type): - def __init__(cls, name, bases, attrs): - if not hasattr(cls, 'plugins'): - cls.plugins = {} - - elif 'mic_plugin_type' in attrs: - if attrs['mic_plugin_type'] not in cls.plugins: - cls.plugins[attrs['mic_plugin_type']] = {} - - elif hasattr(cls, 'mic_plugin_type') and 'name' in attrs: - cls.plugins[cls.mic_plugin_type][attrs['name']] = cls - - def show_plugins(cls): - for cls in cls.plugins[cls.mic_plugin_type]: - print (cls) - - def get_plugins(cls): - return cls.plugins - -class ImagerPlugin(_Plugin): - mic_plugin_type = "imager" - - @classmethod - def check_image_exists(self, destdir, apacking=None, - images=(), - release=None): - - # if it's a packing file, reset images - if apacking: - images = [apacking] - - # release option will override images - if release is not None: - images = [os.path.basename(destdir.rstrip('/'))] - destdir = os.path.dirname(destdir.rstrip('/')) - - for name in images: - if not name: - continue - - image = os.path.join(destdir, name) - if not os.path.exists(image): - continue - if msger.ask("Target image/dir: %s already exists, " - "clean up the old files and continue?" % image): - if os.path.isdir(image): - for path, dirs, files in os.walk(os.path.abspath(image)): - for fname in files: - fpath = os.path.join(path, fname) - if not fpath.endswith('.log'): - os.remove(fpath) - else: - os.unlink(image) - else: - raise errors.Abort("Canceled") - - def do_create(self): - pass - - def do_chroot(self): - pass - -class BackendPlugin(_Plugin): - mic_plugin_type="backend" - - def addRepository(self): - pass - -def get_plugins(typen): - ps = ImagerPlugin.get_plugins() - if typen in ps: - return ps[typen] - else: - return None - -__all__ = ['ImagerPlugin', 'BackendPlugin', 'get_plugins'] diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/rt_util.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/rt_util.py deleted file mode 100644 index b79e800..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/rt_util.py +++ /dev/null @@ -1,316 +0,0 @@ -#!/usr/bin/python -tt -# -# Copyright (c) 2009, 2010, 2011 Intel, Inc. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free -# Software Foundation; version 2 of the License -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., 59 -# Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -import os -import sys -import glob -import re -import shutil -import subprocess -import ctypes - -from mic import bootstrap, msger -from mic.conf import configmgr -from mic.utils import errors, proxy -from mic.utils.fs_related import find_binary_path, makedirs -from mic.chroot import setup_chrootenv, cleanup_chrootenv, ELF_arch - -from mic.plugin import pluginmgr - -_libc = ctypes.cdll.LoadLibrary(None) -_errno = ctypes.c_int.in_dll(_libc, "errno") -_libc.personality.argtypes = [ctypes.c_ulong] -_libc.personality.restype = ctypes.c_int -_libc.unshare.argtypes = [ctypes.c_int,] -_libc.unshare.restype = ctypes.c_int - -expath = lambda p: os.path.abspath(os.path.expanduser(p)) - -PER_LINUX32=0x0008 -PER_LINUX=0x0000 -personality_defs = { - 'x86_64': PER_LINUX, 'ppc64': PER_LINUX, 'sparc64': PER_LINUX, - 'i386': PER_LINUX32, 'i586': PER_LINUX32, 'i686': PER_LINUX32, - 'ppc': PER_LINUX32, 'sparc': PER_LINUX32, 'sparcv9': PER_LINUX32, - 'ia64' : PER_LINUX, 'alpha' : PER_LINUX, - 's390' : PER_LINUX32, 's390x' : PER_LINUX, -} - -def condPersonality(per=None): - if per is None or per in ('noarch',): - return - if personality_defs.get(per, None) is None: - return - res = _libc.personality(personality_defs[per]) - if res == -1: - raise OSError(_errno.value, os.strerror(_errno.value)) - -def inbootstrap(): - if os.path.exists(os.path.join("/", ".chroot.lock")): - return True - return (os.stat("/").st_ino != 2) - -def bootstrap_mic(argv=None): - def mychroot(): - os.chroot(rootdir) - os.chdir(cwd) - - # by default, sys.argv is used to run mic in bootstrap - if not argv: - argv = sys.argv - if argv[0] not in ('/usr/bin/mic', 'mic'): - argv[0] = '/usr/bin/mic' - - cropts = configmgr.create - bsopts = configmgr.bootstrap - distro = bsopts['distro_name'].lower() - - rootdir = bsopts['rootdir'] - pkglist = bsopts['packages'] - cwd = os.getcwd() - - # create bootstrap and run mic in bootstrap - bsenv = bootstrap.Bootstrap(rootdir, distro, cropts['arch']) - bsenv.logfile = cropts['logfile'] - # rootdir is regenerated as a temp dir - rootdir = bsenv.rootdir - - if 'optional' in bsopts: - optlist = bsopts['optional'] - else: - optlist = [] - - try: - msger.info("Creating %s bootstrap ..." % distro) - bsenv.create(cropts['repomd'], pkglist, optlist) - - # bootstrap is relocated under "bootstrap" - if os.path.exists(os.path.join(rootdir, "bootstrap")): - rootdir = os.path.join(rootdir, "bootstrap") - - bsenv.dirsetup(rootdir) - if cropts['use_mic_in_bootstrap']: - msger.info("No copy host mic") - else: - msger.info("Copy host mic to bootstrap") - sync_mic(rootdir, plugin=cropts['plugin_dir']) - - #FIXME: sync the ks file to bootstrap - if "/" == os.path.dirname(os.path.abspath(configmgr._ksconf)): - safecopy(configmgr._ksconf, rootdir) - - msger.info("Start mic in bootstrap: %s\n" % rootdir) - bsarch = ELF_arch(rootdir) - if bsarch in personality_defs: - condPersonality(bsarch) - bindmounts = get_bindmounts(cropts) - ret = bsenv.run(argv, cwd, rootdir, bindmounts) - - except errors.BootstrapError as err: - raise errors.CreatorError("Failed to download/install bootstrap package " \ - "or the package is in bad format: %s" % err) - except RuntimeError as err: - #change exception type but keep the trace back - value,tb = sys.exc_info()[1:] - raise errors.CreatorError((value,tb)) - else: - sys.exit(ret) - finally: - bsenv.cleanup() - -def get_bindmounts(cropts): - binddirs = [ - os.getcwd(), - cropts['tmpdir'], - cropts['cachedir'], - cropts['outdir'], - cropts['local_pkgs_path'], - ] - bindfiles = [ - cropts['logfile'], - configmgr._ksconf, - ] - - for lrepo in cropts['localrepos']: - binddirs.append(lrepo) - for ltpkrepo in cropts['localtpkrepos']: - binddirs.append(ltpkrepo) - - bindlist = map(expath, filter(None, binddirs)) - bindlist += map(os.path.dirname, map(expath, filter(None, bindfiles))) - bindlist = sorted(set(bindlist)) - bindmounts = ';'.join(bindlist) - return bindmounts - - -def get_mic_binpath(): - fp = None - try: - import pkg_resources # depends on 'setuptools' - dist = pkg_resources.get_distribution('mic') - # the real script is under EGG_INFO/scripts - if dist.has_metadata('scripts/mic'): - fp = os.path.join(dist.egg_info, "scripts/mic") - except ImportError: - pass - except pkg_resources.DistributionNotFound: - pass - - - if fp: - return fp - - # not found script if 'flat' egg installed - try: - return find_binary_path('mic') - except errors.CreatorError: - raise errors.BootstrapError("Can't find mic binary in host OS") - - -def get_mic_modpath(): - try: - import mic - except ImportError: - raise errors.BootstrapError("Can't find mic module in host OS") - path = os.path.abspath(mic.__file__) - return os.path.dirname(path) - -def get_mic_libpath(): - return os.getenv("MIC_LIBRARY_PATH", "/usr/lib/mic") - -# the hard code path is prepared for bootstrap -def sync_mic(bootstrap, binpth = '/usr/bin/mic', - libpth='/usr/lib', - plugin='/usr/lib/mic/plugins', - pylib = '/usr/lib/python2.7/site-packages', - conf = '/etc/mic/mic.conf'): - _path = lambda p: os.path.join(bootstrap, p.lstrip('/')) - - micpaths = { - 'binpth': get_mic_binpath(), - 'libpth': get_mic_libpath(), - 'plugin': plugin, - 'pylib': get_mic_modpath(), - 'conf': '/etc/mic/mic.conf', - } - - if not os.path.exists(_path(pylib)): - pyptn = '/usr/lib/python?.?/site-packages' - pylibs = glob.glob(_path(pyptn)) - if pylibs: - pylib = pylibs[0].replace(bootstrap, '') - else: - raise errors.BootstrapError("Can't find python site dir in: %s" % - bootstrap) - - for key, value in micpaths.items(): - try: - safecopy(value, _path(eval(key)), False, ["*.pyc", "*.pyo"]) - except (OSError, IOError) as err: - raise errors.BootstrapError(err) - - # auto select backend - conf_str = file(_path(conf)).read() - conf_str = re.sub("pkgmgr\s*=\s*.*", "pkgmgr=auto", conf_str) - with open(_path(conf), 'w') as wf: - wf.write(conf_str) - - # chmod +x /usr/bin/mic - os.chmod(_path(binpth), 0o777) - - # correct python interpreter - mic_cont = file(_path(binpth)).read() - mic_cont = "#!/usr/bin/python\n" + mic_cont - with open(_path(binpth), 'w') as wf: - wf.write(mic_cont) - - -def safecopy(src, dst, symlinks=False, ignore_ptns=()): - if os.path.isdir(src): - if os.path.isdir(dst): - dst = os.path.join(dst, os.path.basename(src)) - if os.path.exists(dst): - shutil.rmtree(dst, ignore_errors=True) - - src = src.rstrip('/') - # check common prefix to ignore copying itself - if dst.startswith(src + '/'): - ignore_ptns = list(ignore_ptns) + [ os.path.basename(src) ] - - ignores = shutil.ignore_patterns(*ignore_ptns) - try: - shutil.copytree(src, dst, symlinks, ignores) - except (OSError, IOError): - shutil.rmtree(dst, ignore_errors=True) - raise - else: - if not os.path.isdir(dst): - makedirs(os.path.dirname(dst)) - - shutil.copy2(src, dst) - -def prepare_create(args): - """ - Usage: - ${name} ${cmd_name} [OPTS] - - ${cmd_option_list} - """ - - if args is None: - raise errors.Usage("Invalid arguments.") - - creatoropts = configmgr.create - ksconf = args.ksfile - - if creatoropts['runtime'] == 'bootstrap': - configmgr._ksconf = ksconf - bootstrap_mic() - - recording_pkgs = [] - if len(creatoropts['record_pkgs']) > 0: - recording_pkgs = creatoropts['record_pkgs'] - - if creatoropts['release'] is not None: - if 'name' not in recording_pkgs: - recording_pkgs.append('name') - if 'vcs' not in recording_pkgs: - recording_pkgs.append('vcs') - - configmgr._ksconf = ksconf - - # try to find the pkgmgr - pkgmgr = None - backends = pluginmgr.get_plugins('backend') - if 'auto' == creatoropts['pkgmgr']: - for key in configmgr.prefer_backends: - if key in backends: - pkgmgr = backends[key] - break - else: - for key in backends.keys(): - if key == creatoropts['pkgmgr']: - pkgmgr = backends[key] - break - - if not pkgmgr: - raise errors.CreatorError("Can't find backend: %s, " - "available choices: %s" % - (creatoropts['pkgmgr'], - ','.join(backends.keys()))) - return creatoropts, pkgmgr, recording_pkgs - diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/utils/__init__.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/utils/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/utils/errors.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/utils/errors.py deleted file mode 100644 index 12ddde6..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/utils/errors.py +++ /dev/null @@ -1,82 +0,0 @@ -# -# Copyright (c) 2011~2013 Intel, Inc. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free -# Software Foundation; version 2 of the License -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., 59 -# Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -""" Collection of all error class """ - -class CreatorError(Exception): - """ Based class for all mic creator errors """ - keyword = None - - def __init__(self, msg): - Exception.__init__(self) - self.msg = msg - - def __str__(self): - if isinstance(self.msg, unicode): - self.msg = self.msg.encode('utf-8', 'ignore') - else: - self.msg = str(self.msg) - return self.msg - - def __repr__(self): - if not hasattr(self, 'keyword') or not self.keyword: - self.keyword = self.__class__.__name__ - return "<%s> %s" % (self.keyword, str(self)) - -class Usage(CreatorError): - """ Error class for Usage """ - pass - -class Abort(CreatorError): - """ Error class for Abort """ - pass - -class ConfigError(CreatorError): - """ Error class for Config file """ - keyword = 'Config' - -class KsError(CreatorError): - """ Error class for Kickstart module """ - keyword = 'Kickstart' - -class RepoError(CreatorError): - """ Error class for Repository related """ - keyword = 'Repository' - -class RpmError(CreatorError): - """ Error class for RPM related """ - keyword = 'RPM' - -class MountError(CreatorError): - """ Error class for Mount related """ - keyword = 'Mount' - -class SnapshotError(CreatorError): - """ Error class for Snapshot related """ - keyword = 'Snapshot' - -class SquashfsError(CreatorError): - """ Error class for Squashfs related """ - keyword = 'Squashfs' - -class VdfsError(CreatorError): - """ Error class for Vdfs related """ - keyword = 'vdfs' - -class BootstrapError(CreatorError): - """ Error class for Bootstrap related """ - keyword = 'Bootstrap' - diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/utils/fs_related.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/utils/fs_related.py deleted file mode 100644 index 9e2e2c3..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/utils/fs_related.py +++ /dev/null @@ -1,1179 +0,0 @@ -#!/usr/bin/python -tt -# -# Copyright (c) 2007, Red Hat, Inc. -# Copyright (c) 2009, 2010, 2011 Intel, Inc. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free -# Software Foundation; version 2 of the License -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., 59 -# Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -from __future__ import with_statement -import os -import re -import sys -import errno -import stat -import random -import string -import time -import uuid - -from mic import msger -from mic.utils import runner -from mic.utils.errors import * - - -def find_binary_inchroot(binary, chroot): - paths = ["/usr/sbin", - "/usr/bin", - "/sbin", - "/bin" - ] - - for path in paths: - bin_path = "%s/%s" % (path, binary) - if os.path.exists("%s/%s" % (chroot, bin_path)): - return bin_path - return None - -def find_binary_path(binary): - if os.environ.has_key("PATH"): - paths = os.environ["PATH"].split(":") - else: - paths = [] - if os.environ.has_key("HOME"): - paths += [os.environ["HOME"] + "/bin"] - paths += ["/usr/local/sbin", "/usr/local/bin", "/usr/sbin", "/usr/bin", "/sbin", "/bin"] - - for path in paths: - bin_path = "%s/%s" % (path, binary) - if os.path.exists(bin_path): - return bin_path - raise CreatorError("Command '%s' is not available." % binary) - -def makedirs(dirname): - """A version of os.makedirs() that doesn't throw an - exception if the leaf directory already exists. - """ - try: - os.makedirs(dirname) - except OSError as err: - if err.errno != errno.EEXIST: - raise - -def mkvdfs(in_img, out_img, fsoptions): - """ This function is incomplete. """ - fullpathmkvdfs = find_binary_path("mkfs.vdfs") -# args = fullpathmkvdfs + " -i -r "+ in_img + " -z 1024M -s " + out_img - args = fullpathmkvdfs + " " + fsoptions + " -r " + in_img + " " + out_img - msger.verbose("vdfs args: %s" % args) - runner.show("%s --help" % fullpathmkvdfs) -# if not sys.stdout.isatty(): -# args.append("-no-progress") -# runner.show("%s --help" % fullpathmkvdfs) - ret = runner.show(args) - if ret != 0: - runner.show ("vdfs error") - raise VdfsError("' %s' exited with error (%d)" % (args, ret)) - -def mksquashfs(in_img, out_img): - fullpathmksquashfs = find_binary_path("mksquashfs") - args = [fullpathmksquashfs, in_img, out_img] - - if not sys.stdout.isatty(): - args.append("-no-progress") - - ret = runner.show(args) - if ret != 0: - raise SquashfsError("'%s' exited with error (%d)" % (' '.join(args), ret)) - -def resize2fs(fs, size): - resize2fs = find_binary_path("resize2fs") - if size == 0: - # it means to minimalize it - return runner.show([resize2fs, '-M', fs]) - else: - return runner.show([resize2fs, fs, "%sK" % (size / 1024,)]) - -class BindChrootMount: - """Represents a bind mount of a directory into a chroot.""" - def __init__(self, src, chroot, dest = None, option = None): - self.root = os.path.abspath(os.path.expanduser(chroot)) - self.mount_option = option - - self.orig_src = self.src = src - if os.path.islink(src): - self.src = os.readlink(src) - if not self.src.startswith('/'): - self.src = os.path.abspath(os.path.join(os.path.dirname(src), - self.src)) - - if not dest: - dest = self.src - self.dest = os.path.join(self.root, dest.lstrip('/')) - - self.mounted = False - self.mountcmd = find_binary_path("mount") - self.umountcmd = find_binary_path("umount") - - def ismounted(self): - with open('/proc/mounts') as f: - for line in f: - if line.split()[1] == os.path.abspath(self.dest): - return True - - return False - - def mount(self): - if self.mounted or self.ismounted(): - return - - try: - makedirs(self.dest) - except OSError as err: - if err.errno == errno.ENOSPC: - msger.warning("No space left on device '%s'" % err.filename) - return - - if self.mount_option: - cmdline = [self.mountcmd, "-o" ,"bind", "-o", "%s" % \ - self.mount_option, self.src, self.dest] - else: - cmdline = [self.mountcmd, "-o" ,"bind", self.src, self.dest] - rc, errout = runner.runtool(cmdline, catch=2) - if rc != 0: - raise MountError("Bind-mounting '%s' to '%s' failed: %s" % - (self.src, self.dest, errout)) - - self.mounted = True - if os.path.islink(self.orig_src): - dest = os.path.join(self.root, self.orig_src.lstrip('/')) - if not os.path.exists(dest): - os.symlink(self.src, dest) - - def unmount(self): - if self.mounted or self.ismounted(): - runner.show([self.umountcmd, "-l", self.dest]) - self.mounted = False - -class LoopbackMount: - """LoopbackMount compatibility layer for old API""" - def __init__(self, lofile, mountdir, fstype = None): - self.diskmount = DiskMount(LoopbackDisk(lofile,size = 0),mountdir,fstype,rmmountdir = True) - self.losetup = False - self.losetupcmd = find_binary_path("losetup") - - def cleanup(self): - self.diskmount.cleanup() - - def unmount(self): - self.diskmount.unmount() - - def lounsetup(self): - if self.losetup: - runner.show([self.losetupcmd, "-d", self.loopdev]) - self.losetup = False - self.loopdev = None - - def loopsetup(self): - if self.losetup: - return - - self.loopdev = get_loop_device(self.losetupcmd, self.lofile) - self.losetup = True - - def mount(self): - self.diskmount.mount() - -class SparseLoopbackMount(LoopbackMount): - """SparseLoopbackMount compatibility layer for old API""" - def __init__(self, lofile, mountdir, size, fstype = None): - self.diskmount = DiskMount(SparseLoopbackDisk(lofile,size),mountdir,fstype,rmmountdir = True) - - def expand(self, create = False, size = None): - self.diskmount.disk.expand(create, size) - - def truncate(self, size = None): - self.diskmount.disk.truncate(size) - - def create(self): - self.diskmount.disk.create() - -class SparseExtLoopbackMount(SparseLoopbackMount): - """SparseExtLoopbackMount compatibility layer for old API""" - def __init__(self, lofile, mountdir, size, fstype, blocksize, fslabel): - self.diskmount = ExtDiskMount(SparseLoopbackDisk(lofile,size), mountdir, fstype, blocksize, fslabel, rmmountdir = True) - - - def __format_filesystem(self): - self.diskmount.__format_filesystem() - - def create(self): - self.diskmount.disk.create() - - def resize(self, size = None): - return self.diskmount.__resize_filesystem(size) - - def mount(self): - self.diskmount.mount() - - def __fsck(self): - self.extdiskmount.__fsck() - - def __get_size_from_filesystem(self): - return self.diskmount.__get_size_from_filesystem() - - def __resize_to_minimal(self): - return self.diskmount.__resize_to_minimal() - - def resparse(self, size = None): - return self.diskmount.resparse(size) - -class Disk: - """Generic base object for a disk - - The 'create' method must make the disk visible as a block device - eg - by calling losetup. For RawDisk, this is obviously a no-op. The 'cleanup' - method must undo the 'create' operation. - """ - def __init__(self, size, device = None): - self._device = device - self._size = size - - def create(self): - pass - - def cleanup(self): - pass - - def get_device(self): - return self._device - def set_device(self, path): - self._device = path - device = property(get_device, set_device) - - def get_size(self): - return self._size - size = property(get_size) - - -class RawDisk(Disk): - """A Disk backed by a block device. - Note that create() is a no-op. - """ - def __init__(self, size, device): - Disk.__init__(self, size, device) - - def fixed(self): - return True - - def exists(self): - return True - -class LoopbackDisk(Disk): - """A Disk backed by a file via the loop module.""" - def __init__(self, lofile, size): - Disk.__init__(self, size) - self.lofile = lofile - self.losetupcmd = find_binary_path("losetup") - - def fixed(self): - return False - - def exists(self): - return os.path.exists(self.lofile) - - def create(self): - if self.device is not None: - return - - self.device = get_loop_device(self.losetupcmd, self.lofile) - - def cleanup(self): - if self.device is None: - return - msger.debug("Losetup remove %s" % self.device) - rc = runner.show([self.losetupcmd, "-d", self.device]) - self.device = None - - def reread_size(self): - if self.device is None: - return - msger.debug("Reread size %s" % self.device) - rc = runner.show([self.losetupcmd, "-c", self.device]) - # XXX: (WORKAROUND) re-setup loop device when losetup isn't support '-c' option. - if rc != 0: - msger.debug("Fail to reread size, Try to re-setup loop device to reread the size of the file associated") - runner.show([self.losetupcmd, "-d", self.device]) - runner.show([self.losetupcmd, self.device, self.lofile]) - -class SparseLoopbackDisk(LoopbackDisk): - """A Disk backed by a sparse file via the loop module.""" - def __init__(self, lofile, size): - LoopbackDisk.__init__(self, lofile, size) - - def expand(self, create = False, size = None): - flags = os.O_WRONLY - if create: - flags |= os.O_CREAT - if not os.path.exists(self.lofile): - makedirs(os.path.dirname(self.lofile)) - - if size is None: - size = self.size - - msger.debug("Extending sparse file %s to %d" % (self.lofile, size)) - if create: - fd = os.open(self.lofile, flags, 0o644) - else: - fd = os.open(self.lofile, flags) - - if size <= 0: - size = 1 - try: - os.ftruncate(fd, size) - except: - # may be limited by 2G in 32bit env - os.ftruncate(fd, 2**31) - - os.close(fd) - - def truncate(self, size = None): - if size is None: - size = self.size - - msger.debug("Truncating sparse file %s to %d" % (self.lofile, size)) - fd = os.open(self.lofile, os.O_WRONLY) - os.ftruncate(fd, size) - os.close(fd) - - def create(self): - if self.device is not None: - return - - self.expand(create = True) - LoopbackDisk.create(self) - -class Mount(object): - """A generic base class to deal with mounting things.""" - def __init__(self, mountdir): - self.mountdir = mountdir - - def cleanup(self): - self.unmount() - - def mount(self, options = None): - pass - - def unmount(self): - pass - -class DiskMount(Mount): - """A Mount object that handles mounting of a Disk.""" - def __init__(self, disk, mountdir, fstype = None, rmmountdir = True): - Mount.__init__(self, mountdir) - - self.disk = disk - self.fstype = fstype - self.rmmountdir = rmmountdir - - self.mounted = False - self.rmdir = False - if fstype: - self.mkfscmd = find_binary_path("mkfs." + self.fstype) - else: - self.mkfscmd = None - self.mountcmd = find_binary_path("mount") - self.umountcmd = find_binary_path("umount") - - def cleanup(self): - Mount.cleanup(self) - self.disk.cleanup() - - def unmount(self): - if self.mounted: - msger.debug("Unmounting directory %s" % self.mountdir) - runner.quiet('sync') # sync the data on this mount point - rc = runner.show([self.umountcmd, "-l", self.mountdir]) - if rc == 0: - self.mounted = False - else: - raise MountError("Failed to umount %s" % self.mountdir) - if self.rmdir and not self.mounted: - try: - os.rmdir(self.mountdir) - except OSError as e: - pass - self.rmdir = False - - - def __create(self): - self.disk.create() - - - def mount(self, options = None): - if self.mounted: - return - - if not os.path.isdir(self.mountdir): - msger.debug("Creating mount point %s" % self.mountdir) - os.makedirs(self.mountdir) - self.rmdir = self.rmmountdir - - self.__create() - - msger.debug("Mounting %s at %s" % (self.disk.device, self.mountdir)) - if options: - args = [ self.mountcmd, "-o", options, self.disk.device, self.mountdir ] - else: - args = [ self.mountcmd, self.disk.device, self.mountdir ] - if self.fstype: - args.extend(["-t", self.fstype]) - - rc = runner.show(args) - if rc != 0: - raise MountError("Failed to mount '%s' to '%s' with command '%s'. Retval: %s" % - (self.disk.device, self.mountdir, " ".join(args), rc)) - - self.mounted = True - -class F2fsDiskMount(DiskMount): - """A DiskMount object that is able to format/resize f2fs filesystems.""" - def __init__(self, disk, mountdir, fstype, blocksize, fslabel, rmmountdir=True, skipformat = False, fsopts = None, fsuuid=None): - self.__check_f2fs() - DiskMount.__init__(self, disk, mountdir, fstype, rmmountdir) - self.blocksize = blocksize - self.fslabel = fslabel.replace("/", "") - self.uuid = fsuuid or None - self.skipformat = skipformat - self.fsopts = fsopts - self.__f2fsopts = None - self.blkidcmd = find_binary_path("blkid") - self.dumpe2fs = find_binary_path("dump." + self.fstype) - self.fsckcmd = find_binary_path("fsck." + self.fstype) - self.resizecmd = find_binary_path("resize." + self.fstype) - - def __get_f2fsopts(self): - return self.__f2f2opts - - def __set_f2fsopts(self, val): - if val is None: - self.__f2fsopts = None - else: - self.__f2fsopts = val - f2fsopts = property(__get_f2fsopts, __set_f2fsopts) - - def __check_f2fs(self): - found = False - """ Need to load f2fs module to mount it """ - load_module("f2fs") - for line in open("/proc/filesystems").xreadlines(): - if line.find("f2fs") > -1: - found = True - break - if not found: - raise MountError("Your system can't mount f2fs filesystem, please make sure your kernel has f2fs support and the module f2fs.ko has been loaded.") - - def __parse_field(self, output, field): - for line in output.split(" "): - if line.startswith(field + "="): - return line[len(field) + 1:].strip().replace("\"", "") - - raise KeyError("Failed to find field '%s' in output" % field) - - def __format_filesystem(self): - if self.skipformat: - msger.debug("Skip filesystem format.") - return - - msger.verbose("Formating %s filesystem on %s" % (self.fstype, self.disk.device)) - - cmdlist = [self.mkfscmd, "-l", self.fslabel] - if self.__f2fsopts: - cmdlist.extend(self.__f2fsopts.split()) - cmdlist.extend([self.disk.device]) - - rc, errout = runner.runtool(cmdlist, catch=2) - if rc != 0: - raise MountError("Error creating %s filesystem on disk %s:\n%s" % - (self.fstype, self.disk.device, errout)) - - self.uuid = self.__parse_field(runner.outs([self.blkidcmd, self.disk.device]), "UUID") - - def __resize_filesystem(self, size = None): - msger.info("Resizing filesystem ...") - current_size = os.stat(self.disk.lofile)[stat.ST_SIZE] - - if size is None: - size = self.disk.size - - if size == current_size: - return - - if size > current_size: - self.disk.expand(size=size) - - self.__fsck() - - return size - - def __create(self): - resize = False - if not self.disk.fixed() and self.disk.exists(): - resize = True - - self.disk.create() - - if resize: - self.__resize_filesystem() - else: - self.__format_filesystem() - - def mount(self, options = None, init_expand = False): - self.__create() - if init_expand: - expand_size = long(self.disk.size * 1.5) - msger.info("Initial partition size expanded : %ld -> %ld" % (self.disk.size, expand_size)) - self.__resize_filesystem(expand_size) - self.disk.reread_size() - DiskMount.mount(self, options) - - def __fsck(self): - msger.info("Checking filesystem %s" % self.disk.lofile) - runner.quiet([self.fsckcmd, self.disk.lofile]) - - def __get_size_from_filesystem(self): - return self.disk.size - - def __resize_to_minimal(self): - msger.info("Resizing filesystem to minimal ...") - self.__fsck() - - return self.__get_size_from_filesystem() - - def resparse(self, size = None): - self.cleanup() - if size == 0: - minsize = 0 - else: - minsize = self.__resize_to_minimal() - self.disk.truncate(minsize) - self.__resize_filesystem(size) - return minsize - -class ExtDiskMount(DiskMount): - """A DiskMount object that is able to format/resize ext[23] filesystems.""" - def __init__(self, disk, mountdir, fstype, blocksize, fslabel, rmmountdir=True, skipformat = False, fsopts = None, fsuuid=None): - DiskMount.__init__(self, disk, mountdir, fstype, rmmountdir) - self.blocksize = blocksize - self.fslabel = fslabel.replace("/", "") - self.uuid = fsuuid or str(uuid.uuid4()) - self.skipformat = skipformat - self.fsopts = fsopts - self.__extopts = None - self.dumpe2fs = find_binary_path("dumpe2fs") - self.tune2fs = find_binary_path("tune2fs") - - def __get_extopts(self): - return self.__extopts - - def __set_extopts(self, val): - if val is None: - self.__extopts = None - else: - m = re.search(r'-b\s*(?P\d+)', val) - if m: - self.blocksize = int(m.group('blocksize')) - val = val.replace(m.group(), '') - self.__extopts = val - - extopts = property(__get_extopts, __set_extopts) - - def __parse_field(self, output, field): - for line in output.split("\n"): - if line.startswith(field + ":"): - return line[len(field) + 1:].strip() - - raise KeyError("Failed to find field '%s' in output" % field) - - def __format_filesystem(self): - if self.skipformat: - msger.debug("Skip filesystem format.") - return - - msger.verbose("Formating %s filesystem on %s" % (self.fstype, self.disk.device)) - cmdlist = [self.mkfscmd, "-F", "-L", self.fslabel, "-m", "1", "-b", - str(self.blocksize), "-U", self.uuid] - if self.__extopts: - cmdlist.extend(self.__extopts.split()) - cmdlist.extend([self.disk.device]) - - rc, errout = runner.runtool(cmdlist, catch=2) - if rc != 0: - raise MountError("Error creating %s filesystem on disk %s:\n%s" % - (self.fstype, self.disk.device, errout)) - - if not self.__extopts: - msger.debug("Tuning filesystem on %s" % self.disk.device) - runner.show([self.tune2fs, "-c0", "-i0", "-Odir_index", "-ouser_xattr,acl", self.disk.device]) - - def __resize_filesystem(self, size = None): - msger.info("Resizing filesystem ...") - current_size = os.stat(self.disk.lofile)[stat.ST_SIZE] - - if size is None: - size = self.disk.size - - if size == current_size: - return - - if size > current_size: - self.disk.expand(size=size) - - self.__fsck() - - resize2fs(self.disk.lofile, size) - if size and size != os.stat(self.disk.lofile)[stat.ST_SIZE]: - raise MountError("Failed to resize filesystem %s to %d " % (self.disk.lofile, size)) - - return size - - def __create(self): - resize = False - if not self.disk.fixed() and self.disk.exists(): - resize = True - - self.disk.create() - - if resize: - self.__resize_filesystem() - else: - self.__format_filesystem() - - def mount(self, options = None, init_expand = False): - self.__create() - if init_expand: - expand_size = long(self.disk.size * 1.5) - msger.info("Initial partition size expanded : %ld -> %ld" % (self.disk.size, expand_size)) - self.__resize_filesystem(expand_size) - self.disk.reread_size() - DiskMount.mount(self, options) - - def __fsck(self): - msger.info("Checking filesystem %s" % self.disk.lofile) - runner.quiet(["/sbin/e2fsck", "-f", "-y", self.disk.lofile]) - - def __get_size_from_filesystem(self): - return int(self.__parse_field(runner.outs([self.dumpe2fs, '-h', self.disk.lofile]), - "Block count")) * self.blocksize - - def __resize_to_minimal(self): - msger.info("Resizing filesystem to minimal ...") - self.__fsck() - resize2fs(self.disk.lofile, 0) - return self.__get_size_from_filesystem() - - def resparse(self, size = None): - self.cleanup() - if size == 0: - minsize = 0 - else: - minsize = self.__resize_to_minimal() - self.disk.truncate(minsize) - - self.__resize_filesystem(size) - return minsize - -class VfatDiskMount(DiskMount): - """A DiskMount object that is able to format vfat/msdos filesystems.""" - def __init__(self, disk, mountdir, fstype, blocksize, fslabel, rmmountdir=True, skipformat = False, fsopts = None, fsuuid = None): - DiskMount.__init__(self, disk, mountdir, fstype, rmmountdir) - self.blocksize = blocksize - self.fslabel = fslabel.replace("/", "") - rand1 = random.randint(0, 2**16 - 1) - rand2 = random.randint(0, 2**16 - 1) - self.uuid = fsuuid or "%04X-%04X" % (rand1, rand2) - self.skipformat = skipformat - self.fsopts = fsopts - self.fsckcmd = find_binary_path("fsck." + self.fstype) - - def __format_filesystem(self): - if self.skipformat: - msger.debug("Skip filesystem format.") - return - - msger.verbose("Formating %s filesystem on %s" % (self.fstype, self.disk.device)) - rc = runner.show([self.mkfscmd, "-n", self.fslabel, - "-i", self.uuid.replace("-", ""), self.disk.device]) - if rc != 0: - raise MountError("Error creating %s filesystem on disk %s" % (self.fstype,self.disk.device)) - - msger.verbose("Tuning filesystem on %s" % self.disk.device) - - def __resize_filesystem(self, size = None): - current_size = os.stat(self.disk.lofile)[stat.ST_SIZE] - - if size is None: - size = self.disk.size - - if size == current_size: - return - - if size > current_size: - self.disk.expand(size=size) - - self.__fsck() - - #resize2fs(self.disk.lofile, size) - return size - - def __create(self): - resize = False - if not self.disk.fixed() and self.disk.exists(): - resize = True - - self.disk.create() - - if resize: - self.__resize_filesystem() - else: - self.__format_filesystem() - - def mount(self, options = None, init_expand = False): - self.__create() - if init_expand: - expand_size = long(self.disk.size * 1.5) - msger.info("Initial partition size expanded : %ld -> %ld" % (self.disk.size, expand_size)) - self.__resize_filesystem(expand_size) - self.disk.reread_size() - DiskMount.mount(self, options) - - def __fsck(self): - msger.debug("Checking filesystem %s" % self.disk.lofile) - runner.show([self.fsckcmd, "-y", self.disk.lofile]) - - def __get_size_from_filesystem(self): - return self.disk.size - - def __resize_to_minimal(self): - self.__fsck() - - # - # Use a binary search to find the minimal size - # we can resize the image to - # - bot = 0 - top = self.__get_size_from_filesystem() - return top - - def resparse(self, size = None): - self.cleanup() - minsize = self.__resize_to_minimal() - self.disk.truncate(minsize) - self.__resize_filesystem(size) - return minsize - -class BtrfsDiskMount(DiskMount): - """A DiskMount object that is able to format/resize btrfs filesystems.""" - def __init__(self, disk, mountdir, fstype, blocksize, fslabel, rmmountdir=True, skipformat = False, fsopts = None, fsuuid = None): - self.__check_btrfs() - DiskMount.__init__(self, disk, mountdir, fstype, rmmountdir) - self.blocksize = blocksize - self.fslabel = fslabel.replace("/", "") - self.uuid = fsuuid or None - self.skipformat = skipformat - self.fsopts = fsopts - self.blkidcmd = find_binary_path("blkid") - self.btrfsckcmd = find_binary_path("btrfsck") - - def __check_btrfs(self): - found = False - """ Need to load btrfs module to mount it """ - load_module("btrfs") - for line in open("/proc/filesystems").xreadlines(): - if line.find("btrfs") > -1: - found = True - break - if not found: - raise MountError("Your system can't mount btrfs filesystem, please make sure your kernel has btrfs support and the module btrfs.ko has been loaded.") - - # disable selinux, selinux will block write - if os.path.exists("/usr/sbin/setenforce"): - runner.show(["/usr/sbin/setenforce", "0"]) - - def __parse_field(self, output, field): - for line in output.split(" "): - if line.startswith(field + "="): - return line[len(field) + 1:].strip().replace("\"", "") - - raise KeyError("Failed to find field '%s' in output" % field) - - def __format_filesystem(self): - if self.skipformat: - msger.debug("Skip filesystem format.") - return - - msger.verbose("Formating %s filesystem on %s" % (self.fstype, self.disk.device)) - rc = runner.show([self.mkfscmd, "-L", self.fslabel, "-m", "single", self.disk.device]) - if rc != 0: - raise MountError("Error creating %s filesystem on disk %s" % (self.fstype,self.disk.device)) - - self.uuid = self.__parse_field(runner.outs([self.blkidcmd, self.disk.device]), "UUID") - - def __resize_filesystem(self, size = None): - current_size = os.stat(self.disk.lofile)[stat.ST_SIZE] - - if size is None: - size = self.disk.size - - if size == current_size: - return - - if size > current_size: - self.disk.expand(size=size) - - self.__fsck() - return size - - def __create(self): - resize = False - if not self.disk.fixed() and self.disk.exists(): - resize = True - - self.disk.create() - - if resize: - self.__resize_filesystem() - else: - self.__format_filesystem() - - def mount(self, options = None, init_expand = False): - self.__create() - if init_expand: - expand_size = long(self.disk.size * 1.5) - msger.info("Initial partition size expanded : %ld -> %ld" % (self.disk.size, expand_size)) - self.__resize_filesystem(expand_size) - self.disk.reread_size() - DiskMount.mount(self, options) - - def __fsck(self): - msger.debug("Checking filesystem %s" % self.disk.lofile) - runner.quiet([self.btrfsckcmd, self.disk.lofile]) - - def __get_size_from_filesystem(self): - return self.disk.size - - def __resize_to_minimal(self): - self.__fsck() - - return self.__get_size_from_filesystem() - - def resparse(self, size = None): - self.cleanup() - minsize = self.__resize_to_minimal() - self.disk.truncate(minsize) - self.__resize_filesystem(size) - return minsize - -class DeviceMapperSnapshot(object): - def __init__(self, imgloop, cowloop): - self.imgloop = imgloop - self.cowloop = cowloop - - self.__created = False - self.__name = None - self.dmsetupcmd = find_binary_path("dmsetup") - - """Load dm_snapshot if it isn't loaded""" - load_module("dm_snapshot") - - def get_path(self): - if self.__name is None: - return None - return os.path.join("/dev/mapper", self.__name) - path = property(get_path) - - def create(self): - if self.__created: - return - - self.imgloop.create() - self.cowloop.create() - - self.__name = "imgcreate-%d-%d" % (os.getpid(), - random.randint(0, 2**16)) - - size = os.stat(self.imgloop.lofile)[stat.ST_SIZE] - - table = "0 %d snapshot %s %s p 8" % (size / 512, - self.imgloop.device, - self.cowloop.device) - - args = [self.dmsetupcmd, "create", self.__name, "--table", table] - if runner.show(args) != 0: - self.cowloop.cleanup() - self.imgloop.cleanup() - raise SnapshotError("Could not create snapshot device using: " + ' '.join(args)) - - self.__created = True - - def remove(self, ignore_errors = False): - if not self.__created: - return - - time.sleep(2) - rc = runner.show([self.dmsetupcmd, "remove", self.__name]) - if not ignore_errors and rc != 0: - raise SnapshotError("Could not remove snapshot device") - - self.__name = None - self.__created = False - - self.cowloop.cleanup() - self.imgloop.cleanup() - - def get_cow_used(self): - if not self.__created: - return 0 - - # - # dmsetup status on a snapshot returns e.g. - # "0 8388608 snapshot 416/1048576" - # or, more generally: - # "A B snapshot C/D" - # where C is the number of 512 byte sectors in use - # - out = runner.outs([self.dmsetupcmd, "status", self.__name]) - try: - return int((out.split()[3]).split('/')[0]) * 512 - except ValueError: - raise SnapshotError("Failed to parse dmsetup status: " + out) - -def create_image_minimizer(path, image, minimal_size): - """ - Builds a copy-on-write image which can be used to - create a device-mapper snapshot of an image where - the image's filesystem is as small as possible - - The steps taken are: - 1) Create a sparse COW - 2) Loopback mount the image and the COW - 3) Create a device-mapper snapshot of the image - using the COW - 4) Resize the filesystem to the minimal size - 5) Determine the amount of space used in the COW - 6) Restroy the device-mapper snapshot - 7) Truncate the COW, removing unused space - 8) Create a squashfs of the COW - """ - imgloop = LoopbackDisk(image, None) # Passing bogus size - doesn't matter - - cowloop = SparseLoopbackDisk(os.path.join(os.path.dirname(path), "osmin"), - 64 * 1024 * 1024) - - snapshot = DeviceMapperSnapshot(imgloop, cowloop) - - try: - snapshot.create() - - resize2fs(snapshot.path, minimal_size) - - cow_used = snapshot.get_cow_used() - finally: - snapshot.remove(ignore_errors = (not sys.exc_info()[0] is None)) - - cowloop.truncate(cow_used) - - mksquashfs(cowloop.lofile, path) - - os.unlink(cowloop.lofile) - -def load_module(module): - found = False - for line in open('/proc/modules').xreadlines(): - if line.startswith("%s " % module): - found = True - break - if not found: - msger.info("Loading %s..." % module) - runner.quiet(['modprobe', module]) - -class LoopDevice(object): - def __init__(self, loopid=None): - self.device = None - self.loopid = loopid - self.created = False - self.kpartxcmd = find_binary_path("kpartx") - self.losetupcmd = find_binary_path("losetup") - - def register(self, device): - self.device = device - self.loopid = None - #self.created = True - - def reg_atexit(self): - import atexit - atexit.register(self.close) - - def _genloopid(self): - import glob - if not glob.glob("/dev/loop[0-9]*"): - return 10 - - fint = lambda x: x[9:].isdigit() and int(x[9:]) or 0 - maxid = 1 + max(filter(lambda x: x<256, - map(fint, glob.glob("/dev/loop[0-9]*")))) - if maxid < 10: maxid = 10 - if maxid >= 256: - raise Exception("maxid >= 256") - return maxid - - def _kpseek(self, device): - rc, out = runner.runtool([self.kpartxcmd, '-l', '-v', device]) - if rc != 0: - raise MountError("Can't query dm snapshot on %s" % device) - for line in out.splitlines(): - if line and line.startswith("loop"): - return True - return False - - def _loseek(self, device): - import re - rc, out = runner.runtool([self.losetupcmd, '-a']) - if rc != 0: - raise MountError("Failed to run 'losetup -a'") - for line in out.splitlines(): - m = re.match("([^:]+): .*", line) - if m and m.group(1) == device: - return True - return False - - def create(self): - if not self.created: - if not self.loopid: - self.loopid = self._genloopid() - self.device = "/dev/loop%d" % self.loopid - if os.path.exists(self.device): - if self._loseek(self.device): - raise MountError("Device busy: %s" % self.device) - else: - self.created = True - return - - mknod = find_binary_path('mknod') - rc = runner.show([mknod, '-m664', self.device, 'b', '7', str(self.loopid)]) - if rc != 0: - raise MountError("Failed to create device %s" % self.device) - else: - self.created = True - - def close(self): - if self.created: - try: - self.cleanup() - self.device = None - except MountError as e: - raise CreatorError("%s" % e) - - def cleanup(self): - - if self.device is None: - return - - - if self._kpseek(self.device): - runner.quiet([self.kpartxcmd, "-d", self.device]) - if self._loseek(self.device): - runner.quiet([self.losetupcmd, "-d", self.device]) - # FIXME: should sleep a while between two loseek - if self._loseek(self.device): - msger.warning("Can't cleanup loop device %s" % self.device) - elif self.loopid: - os.unlink(self.device) - -DEVICE_PIDFILE_DIR = "/var/tmp/mic/device" -DEVICE_LOCKFILE = "/var/lock/__mic_loopdev.lock" - -def get_loop_device(losetupcmd, lofile): - import fcntl - makedirs(os.path.dirname(DEVICE_LOCKFILE)) - fp = open(DEVICE_LOCKFILE, 'w') - fcntl.flock(fp, fcntl.LOCK_EX) - try: - loopdev = None - devinst = LoopDevice() - - # clean up left loop device first - clean_loop_devices() - - # provide an avaible loop device - rc, out = runner.runtool([losetupcmd, "-f"]) - if rc == 0 and out: - loopdev = out.split()[0] - devinst.register(loopdev) - if not loopdev or not os.path.exists(loopdev): - devinst.create() - loopdev = devinst.device - - # setup a loop device for image file - rc = runner.show([losetupcmd, loopdev, lofile]) - if rc != 0: - raise MountError("Failed to setup loop device for '%s'" % lofile) - - devinst.reg_atexit() - - # try to save device and pid - makedirs(DEVICE_PIDFILE_DIR) - pidfile = os.path.join(DEVICE_PIDFILE_DIR, os.path.basename(loopdev)) - if os.path.exists(pidfile): - os.unlink(pidfile) - with open(pidfile, 'w') as wf: - wf.write(str(os.getpid())) - - except MountError as err: - raise CreatorError("%s" % str(err)) - except: - raise - finally: - try: - fcntl.flock(fp, fcntl.LOCK_UN) - fp.close() - except: - pass - - return loopdev - -def clean_loop_devices(piddir=DEVICE_PIDFILE_DIR): - if not os.path.exists(piddir) or not os.path.isdir(piddir): - return - - for loopdev in os.listdir(piddir): - pidfile = os.path.join(piddir, loopdev) - try: - with open(pidfile, 'r') as rf: - devpid = int(rf.read()) - except: - devpid = None - - # if the process using this device is alive, skip it - if not devpid or os.path.exists(os.path.join('/proc', str(devpid))): - continue - - # try to clean it up - try: - devinst = LoopDevice() - devinst.register(os.path.join('/dev', loopdev)) - devinst.cleanup() - os.unlink(pidfile) - except: - pass - diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/utils/gpt_parser.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/utils/gpt_parser.py deleted file mode 100644 index c499e81..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/utils/gpt_parser.py +++ /dev/null @@ -1,331 +0,0 @@ -#!/usr/bin/python -tt -# -# Copyright (c) 2013 Intel, Inc. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free -# Software Foundation; version 2 of the License -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., 59 -# Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -""" This module implements a simple GPT partitions parser which can read the -GPT header and the GPT partition table. """ - -import struct -import uuid -import binascii -from mic.utils.errors import MountError - -_GPT_HEADER_FORMAT = "<8s4sIIIQQQQ16sQIII" -_GPT_HEADER_SIZE = struct.calcsize(_GPT_HEADER_FORMAT) -_GPT_ENTRY_FORMAT = "<16s16sQQQ72s" -_GPT_ENTRY_SIZE = struct.calcsize(_GPT_ENTRY_FORMAT) -_SUPPORTED_GPT_REVISION = '\x00\x00\x01\x00' - -def _stringify_uuid(binary_uuid): - """ A small helper function to transform a binary UUID into a string - format. """ - - uuid_str = str(uuid.UUID(bytes_le = binary_uuid)) - - return uuid_str.upper() - -def _calc_header_crc(raw_hdr): - """ Calculate GPT header CRC32 checksum. The 'raw_hdr' parameter has to - be a list or a tuple containing all the elements of the GPT header in a - "raw" form, meaning that it should simply contain "unpacked" disk data. - """ - - raw_hdr = list(raw_hdr) - raw_hdr[3] = 0 - raw_hdr = struct.pack(_GPT_HEADER_FORMAT, *raw_hdr) - - return binascii.crc32(raw_hdr) & 0xFFFFFFFF - -def _validate_header(raw_hdr): - """ Validate the GPT header. The 'raw_hdr' parameter has to be a list or a - tuple containing all the elements of the GPT header in a "raw" form, - meaning that it should simply contain "unpacked" disk data. """ - - # Validate the signature - if raw_hdr[0] != 'EFI PART': - raise MountError("GPT partition table not found") - - # Validate the revision - if raw_hdr[1] != _SUPPORTED_GPT_REVISION: - raise MountError("Unsupported GPT revision '%s', supported revision " \ - "is '%s'" % \ - (binascii.hexlify(raw_hdr[1]), - binascii.hexlify(_SUPPORTED_GPT_REVISION))) - - # Validate header size - if raw_hdr[2] != _GPT_HEADER_SIZE: - raise MountError("Bad GPT header size: %d bytes, expected %d" % \ - (raw_hdr[2], _GPT_HEADER_SIZE)) - - crc = _calc_header_crc(raw_hdr) - if raw_hdr[3] != crc: - raise MountError("GPT header crc mismatch: %#x, should be %#x" % \ - (crc, raw_hdr[3])) - -class GptParser: - """ GPT partition table parser. Allows reading the GPT header and the - partition table, as well as modifying the partition table records. """ - - def __init__(self, disk_path, sector_size = 512): - """ The class constructor which accepts the following parameters: - * disk_path - full path to the disk image or device node - * sector_size - size of a disk sector in bytes """ - - self.sector_size = sector_size - self.disk_path = disk_path - - try: - self._disk_obj = open(disk_path, 'r+b') - except IOError as err: - raise MountError("Cannot open file '%s' for reading GPT " \ - "partitions: %s" % (disk_path, err)) - - def __del__(self): - """ The class destructor. """ - - self._disk_obj.close() - - def _read_disk(self, offset, size): - """ A helper function which reads 'size' bytes from offset 'offset' of - the disk and checks all the error conditions. """ - - self._disk_obj.seek(offset) - try: - data = self._disk_obj.read(size) - except IOError as err: - raise MountError("cannot read from '%s': %s" % \ - (self.disk_path, err)) - - if len(data) != size: - raise MountError("cannot read %d bytes from offset '%d' of '%s', " \ - "read only %d bytes" % \ - (size, offset, self.disk_path, len(data))) - - return data - - def _write_disk(self, offset, buf): - """ A helper function which writes buffer 'buf' to offset 'offset' of - the disk. This function takes care of unaligned writes and checks all - the error conditions. """ - - # Since we may be dealing with a block device, we only can write in - # 'self.sector_size' chunks. Find the aligned starting and ending - # disk offsets to read. - start = (offset / self.sector_size) * self.sector_size - end = ((start + len(buf)) / self.sector_size + 1) * self.sector_size - - data = self._read_disk(start, end - start) - off = offset - start - data = data[:off] + buf + data[off + len(buf):] - - self._disk_obj.seek(start) - try: - self._disk_obj.write(data) - except IOError as err: - raise MountError("cannot write to '%s': %s" % (self.disk_path, err)) - - def read_header(self, primary = True): - """ Read and verify the GPT header and return a dictionary containing - the following elements: - - 'signature' : header signature - 'revision' : header revision - 'hdr_size' : header size in bytes - 'hdr_crc' : header CRC32 - 'hdr_lba' : LBA of this header - 'hdr_offs' : byte disk offset of this header - 'backup_lba' : backup header LBA - 'backup_offs' : byte disk offset of backup header - 'first_lba' : first usable LBA for partitions - 'first_offs' : first usable byte disk offset for partitions - 'last_lba' : last usable LBA for partitions - 'last_offs' : last usable byte disk offset for partitions - 'disk_uuid' : UUID of the disk - 'ptable_lba' : starting LBA of array of partition entries - 'ptable_offs' : disk byte offset of the start of the partition table - 'ptable_size' : partition table size in bytes - 'entries_cnt' : number of available partition table entries - 'entry_size' : size of a single partition entry - 'ptable_crc' : CRC32 of the partition table - 'primary' : a boolean, if 'True', this is the primary GPT header, - if 'False' - the secondary - 'primary_str' : contains string "primary" if this is the primary GPT - header, and "backup" otherwise - - This dictionary corresponds to the GPT header format. Please, see the - UEFI standard for the description of these fields. - - If the 'primary' parameter is 'True', the primary GPT header is read, - otherwise the backup GPT header is read instead. """ - - # Read and validate the primary GPT header - raw_hdr = self._read_disk(self.sector_size, _GPT_HEADER_SIZE) - raw_hdr = struct.unpack(_GPT_HEADER_FORMAT, raw_hdr) - _validate_header(raw_hdr) - primary_str = "primary" - - if not primary: - # Read and validate the backup GPT header - raw_hdr = self._read_disk(raw_hdr[6] * self.sector_size, _GPT_HEADER_SIZE) - raw_hdr = struct.unpack(_GPT_HEADER_FORMAT, raw_hdr) - _validate_header(raw_hdr) - primary_str = "backup" - - return { 'signature' : raw_hdr[0], - 'revision' : raw_hdr[1], - 'hdr_size' : raw_hdr[2], - 'hdr_crc' : raw_hdr[3], - 'hdr_lba' : raw_hdr[5], - 'hdr_offs' : raw_hdr[5] * self.sector_size, - 'backup_lba' : raw_hdr[6], - 'backup_offs' : raw_hdr[6] * self.sector_size, - 'first_lba' : raw_hdr[7], - 'first_offs' : raw_hdr[7] * self.sector_size, - 'last_lba' : raw_hdr[8], - 'last_offs' : raw_hdr[8] * self.sector_size, - 'disk_uuid' :_stringify_uuid(raw_hdr[9]), - 'ptable_lba' : raw_hdr[10], - 'ptable_offs' : raw_hdr[10] * self.sector_size, - 'ptable_size' : raw_hdr[11] * raw_hdr[12], - 'entries_cnt' : raw_hdr[11], - 'entry_size' : raw_hdr[12], - 'ptable_crc' : raw_hdr[13], - 'primary' : primary, - 'primary_str' : primary_str } - - def _read_raw_ptable(self, header): - """ Read and validate primary or backup partition table. The 'header' - argument is the GPT header. If it is the primary GPT header, then the - primary partition table is read and validated, otherwise - the backup - one. The 'header' argument is a dictionary which is returned by the - 'read_header()' method. """ - - raw_ptable = self._read_disk(header['ptable_offs'], - header['ptable_size']) - - crc = binascii.crc32(raw_ptable) & 0xFFFFFFFF - if crc != header['ptable_crc']: - raise MountError("Partition table at LBA %d (%s) is corrupted" % \ - (header['ptable_lba'], header['primary_str'])) - - return raw_ptable - - def get_partitions(self, primary = True): - """ This is a generator which parses the GPT partition table and - generates the following dictionary for each partition: - - 'index' : the index of the partition table endry - 'offs' : byte disk offset of the partition table entry - 'type_uuid' : partition type UUID - 'part_uuid' : partition UUID - 'first_lba' : the first LBA - 'last_lba' : the last LBA - 'flags' : attribute flags - 'name' : partition name - 'primary' : a boolean, if 'True', this is the primary partition - table, if 'False' - the secondary - 'primary_str' : contains string "primary" if this is the primary GPT - header, and "backup" otherwise - - This dictionary corresponds to the GPT header format. Please, see the - UEFI standard for the description of these fields. - - If the 'primary' parameter is 'True', partitions from the primary GPT - partition table are generated, otherwise partitions from the backup GPT - partition table are generated. """ - - if primary: - primary_str = "primary" - else: - primary_str = "backup" - - header = self.read_header(primary) - raw_ptable = self._read_raw_ptable(header) - - for index in xrange(0, header['entries_cnt']): - start = header['entry_size'] * index - end = start + header['entry_size'] - raw_entry = struct.unpack(_GPT_ENTRY_FORMAT, raw_ptable[start:end]) - - if raw_entry[2] == 0 or raw_entry[3] == 0: - continue - - part_name = str(raw_entry[5].decode('UTF-16').split('\0', 1)[0]) - - yield { 'index' : index, - 'offs' : header['ptable_offs'] + start, - 'type_uuid' : _stringify_uuid(raw_entry[0]), - 'part_uuid' : _stringify_uuid(raw_entry[1]), - 'first_lba' : raw_entry[2], - 'last_lba' : raw_entry[3], - 'flags' : raw_entry[4], - 'name' : part_name, - 'primary' : primary, - 'primary_str' : primary_str } - - def _change_partition(self, header, entry): - """ A helper function for 'change_partitions()' which changes a - a paricular instance of the partition table (primary or backup). """ - - if entry['index'] >= header['entries_cnt']: - raise MountError("Partition table at LBA %d has only %d " \ - "records cannot change record number " % \ - (header['entries_cnt'], entry['index'])) - # Read raw GPT header - raw_hdr = self._read_disk(header['hdr_offs'], _GPT_HEADER_SIZE) - raw_hdr = list(struct.unpack(_GPT_HEADER_FORMAT, raw_hdr)) - _validate_header(raw_hdr) - - # Prepare the new partition table entry - raw_entry = struct.pack(_GPT_ENTRY_FORMAT, - uuid.UUID(entry['type_uuid']).bytes_le, - uuid.UUID(entry['part_uuid']).bytes_le, - entry['first_lba'], - entry['last_lba'], - entry['flags'], - entry['name'].encode('UTF-16LE')) - - # Write the updated entry to the disk - entry_offs = header['ptable_offs'] + \ - header['entry_size'] * entry['index'] - self._write_disk(entry_offs, raw_entry) - - # Calculate and update partition table CRC32 - raw_ptable = self._read_disk(header['ptable_offs'], - header['ptable_size']) - raw_hdr[13] = binascii.crc32(raw_ptable) & 0xFFFFFFFF - - # Calculate and update the GPT header CRC - raw_hdr[3] = _calc_header_crc(raw_hdr) - - # Write the updated header to the disk - raw_hdr = struct.pack(_GPT_HEADER_FORMAT, *raw_hdr) - self._write_disk(header['hdr_offs'], raw_hdr) - - def change_partition(self, entry): - """ Change a GPT partition. The 'entry' argument has the same format as - 'get_partitions()' returns. This function simply changes the partition - table record corresponding to 'entry' in both, the primary and the - backup GPT partition tables. The parition table CRC is re-calculated - and the GPT headers are modified accordingly. """ - - # Change the primary partition table - header = self.read_header(True) - self._change_partition(header, entry) - - # Change the backup partition table - header = self.read_header(False) - self._change_partition(header, entry) diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/utils/grabber.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/utils/grabber.py deleted file mode 100644 index a87d5a4..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/utils/grabber.py +++ /dev/null @@ -1,114 +0,0 @@ -#!/usr/bin/python - -# Copyright (c) 2014 Intel, Inc. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free -# Software Foundation; version 2 of the License -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., 59 -# Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -import os -import sys -import fcntl -import struct -import termios - -from mic import msger -from mic.utils import runner -from mic.utils.errors import CreatorError -from mic.utils.safeurl import SafeURL - -from urlgrabber import grabber -from urlgrabber import __version__ as grabber_version - -def myurlgrab(url, filename, proxies, progress_obj = None): - g = grabber.URLGrabber() - if progress_obj is None: - progress_obj = TextProgress() - - if url.startswith("file:/"): - filepath = "/%s" % url.replace("file:", "").lstrip('/') - if not os.path.exists(filepath): - raise CreatorError("URLGrabber error: can't find file %s" % url) - if url.endswith('.rpm'): - return filepath - else: - # untouch repometadata in source path - runner.show(['cp', '-f', filepath, filename]) - - else: - try: - # cast url to str here, sometimes it can be unicode, - # but pycurl only accept str - filename = g.urlgrab(url=str(url), - filename=filename, - ssl_verify_host=False, - ssl_verify_peer=False, - proxies=proxies, - http_headers=(('Pragma', 'no-cache'),), - quote=0, - progress_obj=progress_obj) - except grabber.URLGrabError as err: - tmp = SafeURL(url) - msg = str(err) - - if msg.find(url) < 0: - msg += ' on %s' % tmp - else: - msg = msg.replace(url, tmp) - - raise CreatorError(msg) - - return filename - -def terminal_width(fd=1): - """ Get the real terminal width """ - try: - buf = 'abcdefgh' - buf = fcntl.ioctl(fd, termios.TIOCGWINSZ, buf) - return struct.unpack('hhhh', buf)[1] - except: # IOError - return 80 - -def truncate_url(url, width): - return os.path.basename(url)[0:width] - -class TextProgress(object): - # make the class as singleton - _instance = None - def __new__(cls, *args, **kwargs): - if not cls._instance: - cls._instance = super(TextProgress, cls).__new__(cls, *args, **kwargs) - - return cls._instance - - def __init__(self, totalnum = None): - self.total = totalnum - self.counter = 1 - - def start(self, filename, url, *args, **kwargs): - self.url = url - self.termwidth = terminal_width() - if self.total is None: - msger.info("Retrieving %s ..." % truncate_url(self.url, self.termwidth - 15)) - else: - msger.info("Retrieving %s [%d/%d] ..." % (truncate_url(self.url, self.termwidth - 25), self.counter, self.total)) - - def update(self, *args): - pass - - def end(self, *args): - if self.counter == self.total: - msger.raw("\n") - - if self.total is not None: - self.counter += 1 - diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/utils/lock.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/utils/lock.py deleted file mode 100644 index ca8d5a0..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/utils/lock.py +++ /dev/null @@ -1,49 +0,0 @@ -# Copyright (c) 2011 Intel, Inc. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free -# Software Foundation; either version 2 of the License, or any later version. - -import os -import errno - -class LockfileError(Exception): - """ Lockfile Exception""" - pass - -class SimpleLockfile(object): - """ Simple implementation of lockfile """ - def __init__(self, fpath): - self.fpath = fpath - self.lockf = None - - def acquire(self): - """ acquire the lock """ - try: - self.lockf = os.open(self.fpath, - os.O_CREAT | os.O_EXCL | os.O_WRONLY) - except OSError as err: - if err.errno == errno.EEXIST: - raise LockfileError("File %s is locked already" % self.fpath) - raise - finally: - if self.lockf: - os.close(self.lockf) - - def release(self): - """ release the lock """ - try: - os.remove(self.fpath) - except OSError as err: - if err.errno == errno.ENOENT: - pass - - def __enter__(self): - self.acquire() - return self - - def __exit__(self, *args): - self.release() - - def __del__(self): - self.release() diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/utils/misc.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/utils/misc.py deleted file mode 100644 index 1fbbcd9..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/utils/misc.py +++ /dev/null @@ -1,1075 +0,0 @@ -#!/usr/bin/python -tt -# -# Copyright (c) 2010, 2011 Intel Inc. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free -# Software Foundation; version 2 of the License -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., 59 -# Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -from __future__ import with_statement -import os -import sys -import time -import tempfile -import re -import shutil -import glob -import hashlib -import subprocess -import platform -import traceback - - -try: - import sqlite3 as sqlite -except ImportError: - import sqlite - -try: - from xml.etree import cElementTree -except ImportError: - import cElementTree -xmlparse = cElementTree.parse - -from mic import msger -from mic.archive import get_archive_suffixes -from mic.utils.errors import CreatorError, SquashfsError -from mic.utils.fs_related import find_binary_path, makedirs -from mic.utils.grabber import myurlgrab -from mic.utils.proxy import get_proxy_for -from mic.utils import runner -from mic.utils import rpmmisc -from mic.utils.safeurl import SafeURL - - -RPM_RE = re.compile("(.*)\.(.*) (.*)-(.*)") -RPM_FMT = "%(name)s.%(arch)s %(version)s-%(release)s" -SRPM_RE = re.compile("(.*)-(\d+.*)-(\d+\.\d+).src.rpm") - - -def build_name(kscfg, release=None, prefix = None, suffix = None): - """Construct and return an image name string. - - This is a utility function to help create sensible name and fslabel - strings. The name is constructed using the sans-prefix-and-extension - kickstart filename and the supplied prefix and suffix. - - kscfg -- a path to a kickstart file - release -- a replacement to suffix for image release - prefix -- a prefix to prepend to the name; defaults to None, which causes - no prefix to be used - suffix -- a suffix to append to the name; defaults to None, which causes - a YYYYMMDDHHMM suffix to be used - - Note, if maxlen is less then the len(suffix), you get to keep both pieces. - - """ - name = os.path.basename(kscfg) - idx = name.rfind('.') - if idx >= 0: - name = name[:idx] - - if release is not None: - suffix = "" - if prefix is None: - prefix = "" - if suffix is None: - suffix = time.strftime("%Y%m%d%H%M") - - if name.startswith(prefix): - name = name[len(prefix):] - - prefix = "%s-" % prefix if prefix else "" - suffix = "-%s" % suffix if suffix else "" - - ret = prefix + name + suffix - return ret - -def get_distro(): - """Detect linux distribution, support "meego" - """ - - support_dists = ('SuSE', - 'debian', - 'fedora', - 'redhat', - 'centos', - 'meego', - 'moblin', - 'tizen') - try: - (dist, ver, id) = platform.linux_distribution( \ - supported_dists = support_dists) - except: - (dist, ver, id) = platform.dist( \ - supported_dists = support_dists) - - return (dist, ver, id) - -def get_hostname(): - """Get hostname - """ - return platform.node() - -def get_hostname_distro_str(): - """Get composited string for current linux distribution - """ - (dist, ver, id) = get_distro() - hostname = get_hostname() - - if not dist: - return "%s(Unknown Linux Distribution)" % hostname - else: - distro_str = ' '.join(map(str.strip, (hostname, dist, ver, id))) - return distro_str.strip() - -_LOOP_RULE_PTH = None - -def hide_loopdev_presentation(): - udev_rules = "80-prevent-loop-present.rules" - udev_rules_dir = [ - '/usr/lib/udev/rules.d/', - '/lib/udev/rules.d/', - '/etc/udev/rules.d/' - ] - - global _LOOP_RULE_PTH - - for rdir in udev_rules_dir: - if os.path.exists(rdir): - _LOOP_RULE_PTH = os.path.join(rdir, udev_rules) - - if not _LOOP_RULE_PTH: - return - - try: - with open(_LOOP_RULE_PTH, 'w') as wf: - wf.write('KERNEL=="loop*", ENV{UDISKS_PRESENTATION_HIDE}="1"') - - runner.quiet('udevadm trigger') - except: - pass - -def unhide_loopdev_presentation(): - #global _LOOP_RULE_PTH - - if not _LOOP_RULE_PTH: - return - - try: - os.unlink(_LOOP_RULE_PTH) - runner.quiet('udevadm trigger') - except: - pass - -def extract_rpm(rpmfile, targetdir): - rpm2cpio = find_binary_path("rpm2cpio") - cpio = find_binary_path("cpio") - - olddir = os.getcwd() - os.chdir(targetdir) - - msger.verbose("Extract rpm file with cpio: %s" % rpmfile) - p1 = subprocess.Popen([rpm2cpio, rpmfile], stdout=subprocess.PIPE) - p2 = subprocess.Popen([cpio, "-idv"], stdin=p1.stdout, - stdout=subprocess.PIPE, stderr=subprocess.PIPE) - p1.stdout.close() - (sout, serr) = p2.communicate() - msger.verbose(sout or serr) - - os.chdir(olddir) - -def human_size(size): - """Return human readable string for Bytes size - """ - - if size <= 0: - return "0M" - import math - measure = ['B', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'] - expo = int(math.log(size, 1024)) - mant = float(size/math.pow(1024, expo)) - return "{0:.1f}{1:s}".format(mant, measure[expo]) - -def get_block_size(file_obj): - """ Returns block size for file object 'file_obj'. Errors are indicated by - the 'IOError' exception. """ - - from fcntl import ioctl - import struct - - # Get the block size of the host file-system for the image file by calling - # the FIGETBSZ ioctl (number 2). - binary_data = ioctl(file_obj, 2, struct.pack('I', 0)) - return struct.unpack('I', binary_data)[0] - -def check_space_pre_cp(src, dst): - """Check whether disk space is enough before 'cp' like - operations, else exception will be raised. - """ - - srcsize = get_file_size(src) * 1024 * 1024 - freesize = get_filesystem_avail(dst) - if srcsize > freesize: - raise CreatorError("space on %s(%s) is not enough for about %s files" - % (dst, human_size(freesize), human_size(srcsize))) - -def calc_hashes(file_path, hash_names, start = 0, end = None): - """ Calculate hashes for a file. The 'file_path' argument is the file - to calculate hash functions for, 'start' and 'end' are the starting and - ending file offset to calculate the has functions for. The 'hash_names' - argument is a list of hash names to calculate. Returns the the list - of calculated hash values in the hexadecimal form in the same order - as 'hash_names'. - """ - if end == None: - end = os.path.getsize(file_path) - - chunk_size = 65536 - to_read = end - start - read = 0 - - hashes = [] - for hash_name in hash_names: - hashes.append(hashlib.new(hash_name)) - - with open(file_path, "rb") as f: - f.seek(start) - - while read < to_read: - if read + chunk_size > to_read: - chunk_size = to_read - read - chunk = f.read(chunk_size) - for hash_obj in hashes: - hash_obj.update(chunk) - read += chunk_size - - result = [] - for hash_obj in hashes: - result.append(hash_obj.hexdigest()) - - return result - -def get_md5sum(fpath): - return calc_hashes(fpath, ('md5', ))[0] - -def get_sha1sum(fpath): - return calc_hashes(fpath, ('sha1', ))[0] - -def get_sha256sum(fpath): - return calc_hashes(fpath, ('sha256', ))[0] - -def normalize_ksfile(ksconf, release, arch): - ''' - Return the name of a normalized ks file in which macro variables - @BUILD_ID@ and @ARCH@ are replace with real values. - - The original ks file is returned if no special macro is used, otherwise - a temp file is created and returned, which will be deleted when program - exits normally. - ''' - - if not release: - release = "latest" - if not arch or re.match(r'i.86', arch): - arch = "ia32" - - with open(ksconf) as f: - ksc = f.read() - - if "@ARCH@" not in ksc and "@BUILD_ID@" not in ksc: - return ksconf - - msger.info("Substitute macro variable @BUILD_ID@/@ARCH@ in ks: %s" % ksconf) - ksc = ksc.replace("@ARCH@", arch) - ksc = ksc.replace("@BUILD_ID@", release) - - fd, ksconf = tempfile.mkstemp(prefix=os.path.basename(ksconf)) - os.write(fd, ksc) - os.close(fd) - - msger.debug('normalized ks file:%s' % ksconf) - - def remove_temp_ks(): - try: - os.unlink(ksconf) - except OSError as err: - msger.warning('Failed to remove temp ks file:%s:%s' % (ksconf, err)) - - import atexit - atexit.register(remove_temp_ks) - - return ksconf - - -def _check_mic_chroot(rootdir): - def _path(path): - return rootdir.rstrip('/') + path - - release_files = map(_path, [ "/etc/moblin-release", - "/etc/meego-release", - "/etc/tizen-release"]) - - if not any(map(os.path.exists, release_files)): - msger.warning("Dir %s is not a MeeGo/Tizen chroot env" % rootdir) - - if not glob.glob(rootdir + "/boot/vmlinuz-*"): - msger.warning("Failed to find kernel module under %s" % rootdir) - - return - -def selinux_check(arch, fstypes): - try: - getenforce = find_binary_path('getenforce') - except CreatorError: - return - - selinux_status = runner.outs([getenforce]) - if arch and arch.startswith("arm") and selinux_status == "Enforcing": - raise CreatorError("Can't create arm image if selinux is enabled, " - "please run 'setenforce 0' to disable selinux") - - use_btrfs = filter(lambda typ: typ == 'btrfs', fstypes) - if use_btrfs and selinux_status == "Enforcing": - raise CreatorError("Can't create btrfs image if selinux is enabled," - " please run 'setenforce 0' to disable selinux") - -def get_image_type(path): - def _get_extension_name(path): - match = re.search("(?<=\.)\w+$", path) - if match: - return match.group(0) - else: - return None - - if os.path.isdir(path): - _check_mic_chroot(path) - return "fs" - - maptab = { - "tar": "loop", - "raw":"raw", - "vmdk":"vmdk", - "vdi":"vdi", - "iso":"livecd", - "usbimg":"liveusb", - } - - extension = _get_extension_name(path) - if extension in maptab: - return maptab[extension] - - fd = open(path, "rb") - file_header = fd.read(1024) - fd.close() - vdi_flag = "<<< Sun VirtualBox Disk Image >>>" - if file_header[0:len(vdi_flag)] == vdi_flag: - return maptab["vdi"] - - #Checking f2fs fs type. - blkidcmd = find_binary_path("blkid") - out = runner.outs([blkidcmd, '-o', 'value', '-s', 'TYPE', path]) - if out == "f2fs": - return "f2fsimg" - output = runner.outs(['file', path]) - isoptn = re.compile(r".*ISO 9660 CD-ROM filesystem.*(bootable).*") - usbimgptn = re.compile(r".*x86 boot sector.*active.*") - rawptn = re.compile(r".*x86 boot sector.*") - vmdkptn = re.compile(r".*VMware. disk image.*") - ext3fsimgptn = re.compile(r".*Linux.*ext3 filesystem data.*") - ext4fsimgptn = re.compile(r".*Linux.*ext4 filesystem data.*") - btrfsimgptn = re.compile(r".*BTRFS.*") - if isoptn.match(output): - return maptab["iso"] - elif usbimgptn.match(output): - return maptab["usbimg"] - elif rawptn.match(output): - return maptab["raw"] - elif vmdkptn.match(output): - return maptab["vmdk"] - elif ext3fsimgptn.match(output): - return "ext3fsimg" - elif ext4fsimgptn.match(output): - return "ext4fsimg" - elif btrfsimgptn.match(output): - return "btrfsimg" - else: - raise CreatorError("Cannot detect the type of image: %s" % path) - - -def get_file_size(filename): - """ Return size in MB unit """ - cmd = ['du', "-s", "-b", "-B", "1M", filename] - rc, duOutput = runner.runtool(cmd) - if rc != 0: - raise CreatorError("Failed to run: %s" % ' '.join(cmd)) - size1 = int(duOutput.split()[0]) - - cmd = ['du', "-s", "-B", "1M", filename] - rc, duOutput = runner.runtool(cmd) - if rc != 0: - raise CreatorError("Failed to run: %s" % ' '.join(cmd)) - - size2 = int(duOutput.split()[0]) - return max(size1, size2) - - -def get_filesystem_avail(fs): - vfstat = os.statvfs(fs) - return vfstat.f_bavail * vfstat.f_bsize - -def convert_image(srcimg, srcfmt, dstimg, dstfmt): - #convert disk format - if dstfmt != "raw": - raise CreatorError("Invalid destination image format: %s" % dstfmt) - msger.debug("converting %s image to %s" % (srcimg, dstimg)) - if srcfmt == "vmdk": - path = find_binary_path("qemu-img") - argv = [path, "convert", "-f", "vmdk", srcimg, "-O", dstfmt, dstimg] - elif srcfmt == "vdi": - path = find_binary_path("VBoxManage") - argv = [path, "internalcommands", "converttoraw", srcimg, dstimg] - else: - raise CreatorError("Invalid soure image format: %s" % srcfmt) - - rc = runner.show(argv) - if rc == 0: - msger.debug("convert successful") - if rc != 0: - raise CreatorError("Unable to convert disk to %s" % dstfmt) - -def uncompress_squashfs(squashfsimg, outdir): - """Uncompress file system from squshfs image""" - unsquashfs = find_binary_path("unsquashfs") - args = [ unsquashfs, "-d", outdir, squashfsimg ] - rc = runner.show(args) - if (rc != 0): - raise SquashfsError("Failed to uncompress %s." % squashfsimg) - -def mkdtemp(dir = "/var/tmp", prefix = "mic-tmp-"): - """ FIXME: use the dir in mic.conf instead """ - - makedirs(dir) - return tempfile.mkdtemp(dir = dir, prefix = prefix) - -def get_repostrs_from_ks(ks): - def _get_temp_reponame(baseurl): - md5obj = hashlib.md5(baseurl) - tmpreponame = "%s" % md5obj.hexdigest() - return tmpreponame - - kickstart_repos = [] - - for repodata in ks.handler.repo.repoList: - repo = {} - for attr in ('name', - 'baseurl', - 'mirrorlist', - 'includepkgs', # val is list - 'excludepkgs', # val is list - 'cost', # int - 'priority',# int - 'save', - 'proxy', - 'proxyuser', - 'proxypasswd', - 'proxypasswd', - 'debuginfo', - 'source', - 'gpgkey', - 'ssl_verify'): - if hasattr(repodata, attr) and getattr(repodata, attr): - repo[attr] = getattr(repodata, attr) - - if 'name' not in repo: - repo['name'] = _get_temp_reponame(repodata.baseurl) - if hasattr(repodata, 'baseurl') and getattr(repodata, 'baseurl'): - repo['baseurl'] = SafeURL(getattr(repodata, 'baseurl'), - getattr(repodata, 'user', None), - getattr(repodata, 'passwd', None)) - - kickstart_repos.append(repo) - - return kickstart_repos - -def _get_uncompressed_data_from_url(url, filename, proxies): - filename = myurlgrab(url.full, filename, proxies) - suffix = None - if filename.endswith(".gz"): - suffix = ".gz" - runner.quiet(['gunzip', "-f", filename]) - elif filename.endswith(".bz2"): - suffix = ".bz2" - runner.quiet(['bunzip2', "-f", filename]) - if suffix: - filename = filename.replace(suffix, "") - return filename - -def _get_metadata_from_repo(baseurl, proxies, cachedir, reponame, filename, - sumtype=None, checksum=None): - url = baseurl.join(filename) - filename_tmp = str("%s/%s/%s" % (cachedir, reponame, os.path.basename(filename))) - if os.path.splitext(filename_tmp)[1] in (".gz", ".bz2"): - filename = os.path.splitext(filename_tmp)[0] - else: - filename = filename_tmp - if sumtype and checksum and os.path.exists(filename): - try: - sumcmd = find_binary_path("%ssum" % sumtype) - except: - file_checksum = None - else: - file_checksum = runner.outs([sumcmd, filename]).split()[0] - - if file_checksum and file_checksum == checksum: - return filename - - return _get_uncompressed_data_from_url(url,filename_tmp,proxies) - -def get_metadata_from_repos(repos, cachedir): - my_repo_metadata = [] - for repo in repos: - reponame = repo.name - baseurl = repo.baseurl - - if hasattr(repo, 'proxy'): - proxy = repo.proxy - else: - proxy = get_proxy_for(baseurl) - - proxies = None - if proxy: - proxies = {str(baseurl.split(":")[0]): str(proxy)} - - makedirs(os.path.join(cachedir, reponame)) - url = baseurl.join("repodata/repomd.xml") - filename = os.path.join(cachedir, reponame, 'repomd.xml') - repomd = myurlgrab(url.full, filename, proxies) - try: - root = xmlparse(repomd) - except SyntaxError: - raise CreatorError("repomd.xml syntax error.") - - ns = root.getroot().tag - ns = ns[0:ns.rindex("}")+1] - - filepaths = {} - checksums = {} - sumtypes = {} - - for elm in root.getiterator("%sdata" % ns): - if elm.attrib["type"] == "patterns": - filepaths['patterns'] = elm.find("%slocation" % ns).attrib['href'] - checksums['patterns'] = elm.find("%sopen-checksum" % ns).text - sumtypes['patterns'] = elm.find("%sopen-checksum" % ns).attrib['type'] - break - - for elm in root.getiterator("%sdata" % ns): - #"group" type has no "open-checksum" filed, remove it. - if elm.attrib["type"] == "group_gz": - filepaths['comps'] = elm.find("%slocation" % ns).attrib['href'] - checksums['comps'] = elm.find("%sopen-checksum" % ns).text - sumtypes['comps'] = elm.find("%sopen-checksum" % ns).attrib['type'] - break - - primary_type = None - for elm in root.getiterator("%sdata" % ns): - if elm.attrib["type"] in ("primary_db", "primary"): - primary_type = elm.attrib["type"] - filepaths['primary'] = elm.find("%slocation" % ns).attrib['href'] - checksums['primary'] = elm.find("%sopen-checksum" % ns).text - sumtypes['primary'] = elm.find("%sopen-checksum" % ns).attrib['type'] - break - - if not primary_type: - continue - - for item in ("primary", "patterns", "comps"): - if item not in filepaths: - filepaths[item] = None - continue - if not filepaths[item]: - continue - filepaths[item] = _get_metadata_from_repo(baseurl, - proxies, - cachedir, - reponame, - filepaths[item], - sumtypes[item], - checksums[item]) - - """ Get repo key """ - try: - repokey = _get_metadata_from_repo(baseurl, - proxies, - cachedir, - reponame, - "repodata/repomd.xml.key") - except CreatorError: - repokey = None - msger.debug("\ncan't get %s/%s" % (baseurl, "repodata/repomd.xml.key")) - - my_repo_metadata.append({"name":reponame, - "baseurl":baseurl, - "repomd":repomd, - "primary":filepaths['primary'], - "cachedir":cachedir, - "proxies":proxies, - "patterns":filepaths['patterns'], - "comps":filepaths['comps'], - "repokey":repokey, - "priority":repo.priority}) - - return my_repo_metadata - -def get_rpmver_in_repo(repometadata): - for repo in repometadata: - if repo["primary"].endswith(".xml"): - root = xmlparse(repo["primary"]) - ns = root.getroot().tag - ns = ns[0:ns.rindex("}")+1] - - versionlist = [] - for elm in root.getiterator("%spackage" % ns): - if elm.find("%sname" % ns).text == 'rpm': - for node in elm.getchildren(): - if node.tag == "%sversion" % ns: - versionlist.append(node.attrib['ver']) - - if versionlist: - return reversed( - sorted( - versionlist, - key = lambda ver: map(int, ver.split('.')))).next() - - elif repo["primary"].endswith(".sqlite"): - con = sqlite.connect(repo["primary"]) - for row in con.execute("select version from packages where " - "name=\"rpm\" ORDER by version DESC"): - con.close() - return row[0] - - return None - -def get_arch(repometadata): - archlist = [] - for repo in repometadata: - if repo["primary"].endswith(".xml"): - root = xmlparse(repo["primary"]) - ns = root.getroot().tag - ns = ns[0:ns.rindex("}")+1] - for elm in root.getiterator("%spackage" % ns): - if elm.find("%sarch" % ns).text not in ("noarch", "src"): - arch = elm.find("%sarch" % ns).text - if arch not in archlist: - archlist.append(arch) - elif repo["primary"].endswith(".sqlite"): - con = sqlite.connect(repo["primary"]) - for row in con.execute("select arch from packages where arch not in (\"src\", \"noarch\")"): - if row[0] not in archlist: - archlist.append(row[0]) - - con.close() - - uniq_arch = [] - for i in range(len(archlist)): - if archlist[i] not in rpmmisc.archPolicies.keys(): - continue - need_append = True - j = 0 - while j < len(uniq_arch): - if archlist[i] in rpmmisc.archPolicies[uniq_arch[j]].split(':'): - need_append = False - break - if uniq_arch[j] in rpmmisc.archPolicies[archlist[i]].split(':'): - if need_append: - uniq_arch[j] = archlist[i] - need_append = False - else: - uniq_arch.remove(uniq_arch[j]) - continue - j += 1 - if need_append: - uniq_arch.append(archlist[i]) - - return uniq_arch, archlist - -def get_package(pkg, repometadata, arch = None): - ver = "" - priority = 99 - target_repo = None - if not arch: - arches = [] - elif arch not in rpmmisc.archPolicies: - arches = [arch] - else: - arches = rpmmisc.archPolicies[arch].split(':') - arches.append('noarch') - - for repo in repometadata: - if repo["primary"].endswith(".xml"): - root = xmlparse(repo["primary"]) - ns = root.getroot().tag - ns = ns[0:ns.rindex("}")+1] - for elm in root.getiterator("%spackage" % ns): - if elm.find("%sname" % ns).text == pkg and elm.find("%sarch" % ns).text in arches: - if repo["priority"] != None: - tmpprior = int(repo["priority"]) - if tmpprior < priority: - priority = tmpprior - location = elm.find("%slocation" % ns) - pkgpath = "%s" % location.attrib['href'] - target_repo = repo - break - elif tmpprior > priority: - break - version = elm.find("%sversion" % ns) - tmpver = "%s-%s" % (version.attrib['ver'], version.attrib['rel']) - if tmpver > ver: - ver = tmpver - location = elm.find("%slocation" % ns) - pkgpath = "%s" % location.attrib['href'] - target_repo = repo - break - if repo["primary"].endswith(".sqlite"): - con = sqlite.connect(repo["primary"]) - if arch: - sql = 'select version, release, location_href from packages ' \ - 'where name = "%s" and arch IN ("%s")' % \ - (pkg, '","'.join(arches)) - for row in con.execute(sql): - tmpver = "%s-%s" % (row[0], row[1]) - if tmpver > ver: - ver = tmpver - pkgpath = "%s" % row[2] - target_repo = repo - break - else: - sql = 'select version, release, location_href from packages ' \ - 'where name = "%s"' % pkg - for row in con.execute(sql): - tmpver = "%s-%s" % (row[0], row[1]) - if tmpver > ver: - ver = tmpver - pkgpath = "%s" % row[2] - target_repo = repo - break - con.close() - if target_repo: - makedirs("%s/packages/%s" % (target_repo["cachedir"], target_repo["name"])) - url = target_repo["baseurl"].join(pkgpath) - filename = str("%s/packages/%s/%s" % (target_repo["cachedir"], target_repo["name"], os.path.basename(pkgpath))) - if os.path.exists(filename): - ret = rpmmisc.checkRpmIntegrity('rpm', filename) - if ret == 0: - return filename - - msger.warning("package %s is damaged: %s" % - (os.path.basename(filename), filename)) - os.unlink(filename) - - pkg = myurlgrab(url.full, filename, target_repo["proxies"]) - return pkg - else: - return None - -def get_source_name(pkg, repometadata): - - def get_bin_name(pkg): - m = RPM_RE.match(pkg) - if m: - return m.group(1) - return None - - def get_src_name(srpm): - m = SRPM_RE.match(srpm) - if m: - return m.group(1) - return None - - ver = "" - target_repo = None - - pkg_name = get_bin_name(pkg) - if not pkg_name: - return None - - for repo in repometadata: - if repo["primary"].endswith(".xml"): - root = xmlparse(repo["primary"]) - ns = root.getroot().tag - ns = ns[0:ns.rindex("}")+1] - for elm in root.getiterator("%spackage" % ns): - if elm.find("%sname" % ns).text == pkg_name: - if elm.find("%sarch" % ns).text != "src": - version = elm.find("%sversion" % ns) - tmpver = "%s-%s" % (version.attrib['ver'], version.attrib['rel']) - if tmpver > ver: - ver = tmpver - fmt = elm.find("%sformat" % ns) - if fmt: - fns = fmt.getchildren()[0].tag - fns = fns[0:fns.rindex("}")+1] - pkgpath = fmt.find("%ssourcerpm" % fns).text - target_repo = repo - break - - if repo["primary"].endswith(".sqlite"): - con = sqlite.connect(repo["primary"]) - for row in con.execute("select version, release, rpm_sourcerpm from packages where name = \"%s\" and arch != \"src\"" % pkg_name): - tmpver = "%s-%s" % (row[0], row[1]) - if tmpver > ver: - pkgpath = "%s" % row[2] - target_repo = repo - break - con.close() - if target_repo: - return get_src_name(pkgpath) - else: - return None - -def get_pkglist_in_patterns(group, patterns): - found = False - pkglist = [] - try: - root = xmlparse(patterns) - except SyntaxError: - raise SyntaxError("%s syntax error." % patterns) - - for elm in list(root.getroot()): - ns = elm.tag - ns = ns[0:ns.rindex("}")+1] - name = elm.find("%sname" % ns) - summary = elm.find("%ssummary" % ns) - if name.text == group or summary.text == group: - found = True - break - - if not found: - return pkglist - - found = False - for requires in list(elm): - if requires.tag.endswith("requires"): - found = True - break - - if not found: - return pkglist - - for pkg in list(requires): - pkgname = pkg.attrib["name"] - if pkgname not in pkglist: - pkglist.append(pkgname) - - return pkglist - -def get_pkglist_in_comps(group, comps): - found = False - pkglist = [] - try: - root = xmlparse(comps) - except SyntaxError: - raise SyntaxError("%s syntax error." % comps) - - for elm in root.getiterator("group"): - id = elm.find("id") - name = elm.find("name") - if id.text == group or name.text == group: - packagelist = elm.find("packagelist") - found = True - break - - if not found: - return pkglist - - for require in elm.getiterator("packagereq"): - if require.tag.endswith("packagereq"): - pkgname = require.text - if pkgname not in pkglist: - pkglist.append(pkgname) - - return pkglist - -def is_statically_linked(binary): - return ", statically linked, " in runner.outs(['file', binary]) - -def get_qemu_arm_binary(arch): - if arch == "aarch64": - node = "/proc/sys/fs/binfmt_misc/aarch64" - if os.path.exists("/usr/bin/qemu-arm64") and is_statically_linked("/usr/bin/qemu-arm64"): - arm_binary = "qemu-arm64" - elif os.path.exists("/usr/bin/qemu-aarch64") and is_statically_linked("/usr/bin/qemu-aarch64"): - arm_binary = "qemu-aarch64" - elif os.path.exists("/usr/bin/qemu-arm64-static"): - arm_binary = "qemu-arm64-static" - elif os.path.exists("/usr/bin/qemu-aarch64-static"): - arm_binary = "qemu-aarch64-static" - else: - raise CreatorError("Please install a statically-linked %s" % arm_binary) - elif arch == "mipsel": - node = "/proc/sys/fs/binfmt_misc/mipsel" - arm_binary = "qemu-mipsel" - if not os.path.exists("/usr/bin/%s" % arm_binary) or not is_statically_linked("/usr/bin/%s"): - arm_binary = "qemu-mipsel-static" - if not os.path.exists("/usr/bin/%s" % arm_binary): - raise CreatorError("Please install a statically-linked %s" % arm_binary) - elif arch == "riscv64": - node = "/proc/sys/fs/binfmt_misc/riscv64" - arm_binary = "qemu-riscv64" - if os.path.exists("/usr/bin/qemu-riscv64") and is_statically_linked("/usr/bin/qemu-riscv64"): - arm_binary = "qemu-riscv64" - elif os.path.exists("/usr/bin/qemu-riscv64-static"): - arm_binary = "qemu-riscv64-static" - else: - raise CreatorError("Please install a statically-linked %s" % arm_binary) - else: - node = "/proc/sys/fs/binfmt_misc/arm" - arm_binary = "qemu-arm" - if not os.path.exists("/usr/bin/qemu-arm") or not is_statically_linked("/usr/bin/qemu-arm"): - arm_binary = "qemu-arm-static" - if not os.path.exists("/usr/bin/%s" % arm_binary): - raise CreatorError("Please install a statically-linked %s" % arm_binary) - - return (arm_binary, node) - -def setup_qemu_emulator(rootdir, arch): - qemu_emulators = [] - # mount binfmt_misc if it doesn't exist - if not os.path.exists("/proc/sys/fs/binfmt_misc"): - modprobecmd = find_binary_path("modprobe") - runner.show([modprobecmd, "binfmt_misc"]) - if not os.path.exists("/proc/sys/fs/binfmt_misc/register"): - mountcmd = find_binary_path("mount") - runner.show([mountcmd, "-t", "binfmt_misc", "none", "/proc/sys/fs/binfmt_misc"]) - - # qemu_emulator is a special case, we can't use find_binary_path - # qemu emulator should be a statically-linked executable file - arm_binary, node = get_qemu_arm_binary(arch) - qemu_emulator = "/usr/bin/%s" % arm_binary - - if not os.path.exists(rootdir + "/usr/bin"): - makedirs(rootdir + "/usr/bin") - shutil.copy(qemu_emulator, rootdir + qemu_emulator) - qemu_emulators.append(qemu_emulator) - - # disable selinux, selinux will block qemu emulator to run - if os.path.exists("/usr/sbin/setenforce"): - msger.info('Try to disable selinux') - runner.show(["/usr/sbin/setenforce", "0"]) - - # register qemu emulator for interpreting other arch executable file - if not os.path.exists(node): - if arch == "aarch64": - qemu_arm_string = ":aarch64:M::\\x7fELF\\x02\\x01\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x00\\xb7:\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x00\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xfe\\xff\\xff:%s:\n" % qemu_emulator - elif arch == "mipsel": - qemu_arm_string = ":mipsel:M::\\x7fELF\\x01\\x01\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x00\\x08\\x00:\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x00\\xfe\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xfe\\xff\\xff\\xff:%s:\n" % qemu_emulator - elif arch == "riscv64": - qemu_arm_string = ":riscv64:M::\\x7fELF\\x02\\x01\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x00\\xf3\\x00:\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x00\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xfe\\xff\\xff\\xff:%s:\n" % qemu_emulator - else: - qemu_arm_string = ":arm:M::\\x7fELF\\x01\\x01\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x02\\x00\\x28\\x00:\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\x00\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xff\\xfa\\xff\\xff\\xff:%s:\n" % qemu_emulator - - with open("/proc/sys/fs/binfmt_misc/register", "w") as fd: - fd.write(qemu_arm_string) - else: - flags = "" - interpreter = "" - with open(node, "r") as fd: - for line in fd.readlines(): - if line.startswith("flags:"): - flags = line[len("flags:"):].strip() - elif line.startswith("interpreter"): - interpreter = line[len("interpreter"):].strip() - - if flags == "P" and interpreter.endswith("-binfmt"): - # copy binfmt wrapper when preserve-argv[0] flag is enabled - shutil.copy(os.path.realpath(interpreter), rootdir + interpreter) - qemu_emulators.append(interpreter) - elif not flags and interpreter != qemu_emulator: - # create symlink as registered qemu emulator - os.symlink(qemu_emulator, rootdir + interpreter) - qemu_emulators.append(interpreter) - - return qemu_emulators - -def SrcpkgsDownload(pkgs, repometadata, instroot, cachedir): - def get_source_repometadata(repometadata): - src_repometadata=[] - for repo in repometadata: - if repo["name"].endswith("-source"): - src_repometadata.append(repo) - if src_repometadata: - return src_repometadata - return None - - def get_src_name(srpm): - m = SRPM_RE.match(srpm) - if m: - return m.group(1) - return None - - src_repometadata = get_source_repometadata(repometadata) - - if not src_repometadata: - msger.warning("No source repo found") - return None - - src_pkgs = [] - lpkgs_dict = {} - lpkgs_path = [] - for repo in src_repometadata: - cachepath = "%s/%s/packages/*.src.rpm" %(cachedir, repo["name"]) - lpkgs_path += glob.glob(cachepath) - - for lpkg in lpkgs_path: - lpkg_name = get_src_name(os.path.basename(lpkg)) - lpkgs_dict[lpkg_name] = lpkg - localpkgs = lpkgs_dict.keys() - - cached_count = 0 - destdir = instroot+'/usr/src/SRPMS' - if not os.path.exists(destdir): - os.makedirs(destdir) - - srcpkgset = set() - for _pkg in pkgs: - srcpkg_name = get_source_name(_pkg, repometadata) - if not srcpkg_name: - continue - srcpkgset.add(srcpkg_name) - - for pkg in list(srcpkgset): - if pkg in localpkgs: - cached_count += 1 - shutil.copy(lpkgs_dict[pkg], destdir) - src_pkgs.append(os.path.basename(lpkgs_dict[pkg])) - else: - src_pkg = get_package(pkg, src_repometadata, 'src') - if src_pkg: - shutil.copy(src_pkg, destdir) - src_pkgs.append(src_pkg) - msger.info("%d source packages gotten from cache" % cached_count) - - return src_pkgs - -def strip_end(text, suffix): - if not text.endswith(suffix): - return text - return text[:-len(suffix)] - -def strip_archive_suffix(filename): - for suffix in get_archive_suffixes(): - if filename.endswith(suffix): - return filename[:-len(suffix)] - else: - msger.warning("Not supported archive file format: %s" % filename) - return None diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/utils/partitionedfs.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/utils/partitionedfs.py deleted file mode 100644 index cac360b..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/utils/partitionedfs.py +++ /dev/null @@ -1,830 +0,0 @@ -#!/usr/bin/python -tt -# -# Copyright (c) 2009, 2010, 2011 Intel, Inc. -# Copyright (c) 2007, 2008 Red Hat, Inc. -# Copyright (c) 2008 Daniel P. Berrange -# Copyright (c) 2008 David P. Huff -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free -# Software Foundation; version 2 of the License -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., 59 -# Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -import os - -from mic import msger -from mic.utils import runner -from mic.utils.errors import MountError, CreatorError -from mic.utils.fs_related import * -from mic.utils.gpt_parser import GptParser - -# Overhead of the MBR partitioning scheme (just one sector) -MBR_OVERHEAD = 1 -# Overhead of the GPT partitioning scheme -GPT_OVERHEAD = 34 - -# Size of a sector in bytes -SECTOR_SIZE = 512 - -def resolve_ref(ref): - real = os.readlink(ref) - if not real.startswith('/'): - return os.path.realpath(os.path.join(ref, real)) - else: - return real - -class PartitionedMount(Mount): - def __init__(self, mountdir, skipformat = False): - Mount.__init__(self, mountdir) - self.disks = {} - self.partitions = [] - self.subvolumes = [] - self.mapped = False - self.mount_order = [] - self.unmount_order = [] - self.parted = find_binary_path("parted") - self.kpartx = find_binary_path("kpartx") - self.mkswap = find_binary_path("mkswap") - self.dmsetup = find_binary_path("dmsetup") - self.btrfscmd = None - self.mountcmd = find_binary_path("mount") - self.umountcmd = find_binary_path("umount") - self.skipformat = skipformat - self.snapshot_created = self.skipformat - # Size of a sector used in calculations - self.sector_size = SECTOR_SIZE - self._partitions_layed_out = False - - def __add_disk(self, disk_name): - """ Add a disk 'disk_name' to the internal list of disks. Note, - 'disk_name' is the name of the disk in the target system - (e.g., sdb). """ - - if disk_name in self.disks: - # We already have this disk - return - - assert not self._partitions_layed_out - - self.disks[disk_name] = \ - { 'disk': None, # Disk object - 'mapped': False, # True if kpartx mapping exists - 'numpart': 0, # Number of allocate partitions - 'partitions': [], # Indexes to self.partitions - 'offset': 0, # Offset of next partition (in sectors) - # Minimum required disk size to fit all partitions (in bytes) - 'min_size': 0, - 'ptable_format': "msdos" } # Partition table format - - def add_disk(self, disk_name, disk_obj): - """ Add a disk object which have to be partitioned. More than one disk - can be added. In case of multiple disks, disk partitions have to be - added for each disk separately with 'add_partition()". """ - - self.__add_disk(disk_name) - self.disks[disk_name]['disk'] = disk_obj - - def __add_partition(self, part): - """ This is a helper function for 'add_partition()' which adds a - partition to the internal list of partitions. """ - - assert not self._partitions_layed_out - - self.partitions.append(part) - self.__add_disk(part['disk_name']) - - def add_partition(self, size, disk_name, mountpoint, fstype = None, - label=None, fsopts = None, boot = False, align = None, - part_type = None): - """ Add the next partition. Partitions have to be added in the - first-to-last order. """ - - ks_pnum = len(self.partitions) - - # Converting MB to sectors for parted - size = size * 1024 * 1024 / self.sector_size - - # We need to handle subvolumes for btrfs - if fstype == "btrfs" and fsopts and fsopts.find("subvol=") != -1: - self.btrfscmd = find_binary_path("btrfs") - subvol = None - opts = fsopts.split(",") - for opt in opts: - if opt.find("subvol=") != -1: - subvol = opt.replace("subvol=", "").strip() - break - if not subvol: - raise MountError("No subvolume: %s" % fsopts) - self.subvolumes.append({'size': size, # In sectors - 'mountpoint': mountpoint, # Mount relative to chroot - 'fstype': fstype, # Filesystem type - 'fsopts': fsopts, # Filesystem mount options - 'disk_name': disk_name, # physical disk name holding partition - 'device': None, # kpartx device node for partition - 'mapper_device': None, # mapper device node - 'mpath_device': None, # multipath device of device mapper - 'mount': None, # Mount object - 'subvol': subvol, # Subvolume name - 'boot': boot, # Bootable flag - 'mounted': False # Mount flag - }) - - # We still need partition for "/" or non-subvolume - if mountpoint == "/" or not fsopts or fsopts.find("subvol=") == -1: - # Don't need subvolume for "/" because it will be set as default subvolume - if fsopts and fsopts.find("subvol=") != -1: - opts = fsopts.split(",") - for opt in opts: - if opt.strip().startswith("subvol="): - opts.remove(opt) - break - fsopts = ",".join(opts) - - part = { 'ks_pnum' : ks_pnum, # Partition number in the KS file - 'size': size, # In sectors - 'mountpoint': mountpoint, # Mount relative to chroot - 'fstype': fstype, # Filesystem type - 'fsopts': fsopts, # Filesystem mount options - 'label': label, # Partition label - 'disk_name': disk_name, # physical disk name holding partition - 'device': None, # kpartx device node for partition - 'mapper_device': None, # mapper device node - 'mpath_device': None, # multipath device of device mapper - 'mount': None, # Mount object - 'num': None, # Partition number - 'boot': boot, # Bootable flag - 'align': align, # Partition alignment - 'part_type' : part_type, # Partition type - 'uuid': None, # Partition UUID (no-GPT use) - 'partuuid': None } # Partition UUID (GPT-only) - - self.__add_partition(part) - - def layout_partitions(self, ptable_format = "msdos"): - """ Layout the partitions, meaning calculate the position of every - partition on the disk. The 'ptable_format' parameter defines the - partition table format, and may be either "msdos" or "gpt". """ - - msger.debug("Assigning %s partitions to disks" % ptable_format) - - if ptable_format not in ('msdos', 'gpt'): - raise MountError("Unknown partition table format '%s', supported " \ - "formats are: 'msdos' and 'gpt'" % ptable_format) - - if self._partitions_layed_out: - return - - self._partitions_layed_out = True - - # Go through partitions in the order they are added in .ks file - for n in range(len(self.partitions)): - p = self.partitions[n] - - if not self.disks.has_key(p['disk_name']): - raise MountError("No disk %s for partition %s" \ - % (p['disk_name'], p['mountpoint'])) - - if p['part_type'] and ptable_format != 'gpt': - # The --part-type can also be implemented for MBR partitions, - # in which case it would map to the 1-byte "partition type" - # filed at offset 3 of the partition entry. - raise MountError("setting custom partition type is only " \ - "implemented for GPT partitions") - - # Get the disk where the partition is located - d = self.disks[p['disk_name']] - d['numpart'] += 1 - d['ptable_format'] = ptable_format - - if d['numpart'] == 1: - if ptable_format == "msdos": - overhead = MBR_OVERHEAD - else: - overhead = GPT_OVERHEAD - - # Skip one sector required for the partitioning scheme overhead - d['offset'] += overhead - # Steal few sectors from the first partition to offset for the - # partitioning overhead - p['size'] -= overhead - - if p['align']: - # If not first partition and we do have alignment set we need - # to align the partition. - # FIXME: This leaves a empty spaces to the disk. To fill the - # gaps we could enlarge the previous partition? - - # Calc how much the alignment is off. - align_sectors = d['offset'] % (p['align'] * 1024 / self.sector_size) - # We need to move forward to the next alignment point - align_sectors = (p['align'] * 1024 / self.sector_size) - align_sectors - - msger.debug("Realignment for %s%s with %s sectors, original" - " offset %s, target alignment is %sK." % - (p['disk_name'], d['numpart'], align_sectors, - d['offset'], p['align'])) - - # increase the offset so we actually start the partition on right alignment - d['offset'] += align_sectors - - p['start'] = d['offset'] - d['offset'] += p['size'] - - p['type'] = 'primary' - p['num'] = d['numpart'] - - if d['ptable_format'] == "msdos": - if d['numpart'] > 2: - # Every logical partition requires an additional sector for - # the EBR, so steal the last sector from the end of each - # partition starting from the 3rd one for the EBR. This - # will make sure the logical partitions are aligned - # correctly. - p['size'] -= 1 - - if d['numpart'] > 3: - p['type'] = 'logical' - p['num'] = d['numpart'] + 1 - - d['partitions'].append(n) - msger.debug("Assigned %s to %s%d, sectors range %d-%d size %d " - "sectors (%d bytes)." \ - % (p['mountpoint'], p['disk_name'], p['num'], - p['start'], p['start'] + p['size'] - 1, - p['size'], p['size'] * self.sector_size)) - - # Once all the partitions have been laid out, we can calculate the - # minimum disk sizes. - for disk_name, d in self.disks.items(): - d['min_size'] = d['offset'] - if d['ptable_format'] == 'gpt': - # Account for the backup partition table at the end of the disk - d['min_size'] += GPT_OVERHEAD - - d['min_size'] *= self.sector_size - - def __run_parted(self, args): - """ Run parted with arguments specified in the 'args' list. """ - - args.insert(0, self.parted) - msger.debug(args) - - rc, out = runner.runtool(args, catch = 3) - out = out.strip() - msger.debug("'parted': exitcode: %d, output: %s" % (rc, out)) - # We don't throw exception when return code is not 0, because - # parted always fails to reload part table with loop devices. This - # prevents us from distinguishing real errors based on return - # code. - return rc, out - - def __create_partition(self, device, parttype, fstype, start, size): - """ Create a partition on an image described by the 'device' object. """ - - # Start is included to the size so we need to subtract one from the end. - end = start + size - 1 - msger.debug("Added '%s' partition, sectors %d-%d, size %d sectors" % - (parttype, start, end, size)) - - args = ["-s", device, "unit", "s", "mkpart", parttype] - if fstype: - args.extend([fstype]) - args.extend(["%d" % start, "%d" % end]) - - return self.__run_parted(args) - - def __format_disks(self): - self.layout_partitions() - - if self.skipformat: - msger.debug("Skipping disk format, because skipformat flag is set.") - return - - for dev in self.disks.keys(): - d = self.disks[dev] - msger.debug("Initializing partition table for %s" % \ - (d['disk'].device)) - self.__run_parted(["-s", d['disk'].device, "mklabel", - d['ptable_format']]) - - msger.debug("Creating partitions") - - for p in self.partitions: - d = self.disks[p['disk_name']] - if d['ptable_format'] == "msdos" and p['num'] == 5: - # The last sector of the 3rd partition was reserved for the EBR - # of the first _logical_ partition. This is why the extended - # partition should start one sector before the first logical - # partition. - self.__create_partition(d['disk'].device, "extended", - None, p['start'] - 1, - d['offset'] - p['start']) - - if p['fstype'] == "swap": - parted_fs_type = "linux-swap" - elif p['fstype'] == "vfat": - parted_fs_type = "fat32" - elif p['fstype'] == "msdos": - parted_fs_type = "fat16" - else: - # Type for ext2/ext3/ext4/btrfs - parted_fs_type = "ext2" - - # Boot ROM of OMAP boards require vfat boot partition to have an - # even number of sectors. - if p['mountpoint'] == "/boot" and p['fstype'] in ["vfat", "msdos"] \ - and p['size'] % 2: - msger.debug("Substracting one sector from '%s' partition to " \ - "get even number of sectors for the partition" % \ - p['mountpoint']) - p['size'] -= 1 - - self.__create_partition(d['disk'].device, p['type'], - parted_fs_type, p['start'], p['size']) - - if p['boot']: - if d['ptable_format'] == 'gpt': - flag_name = "legacy_boot" - else: - flag_name = "boot" - msger.debug("Set '%s' flag for partition '%s' on disk '%s'" % \ - (flag_name, p['num'], d['disk'].device)) - cmd = ["-s", d['disk'].device, - "set", "%d" % p['num'], - flag_name, "on"] - exitcode, output = self.__run_parted(cmd) - if exitcode != 0: - msger.warning( - "partition '%s' is marked with --active, " - "but flag '%s' can't be set: " - "exitcode: %s, output: %s" - % (p['mountpoint'], flag_name, exitcode, output)) - - # If the partition table format is "gpt", find out PARTUUIDs for all - # the partitions. And if users specified custom parition type UUIDs, - # set them. - for disk_name, disk in self.disks.items(): - if disk['ptable_format'] != 'gpt': - continue - - pnum = 0 - gpt_parser = GptParser(disk['disk'].device, SECTOR_SIZE) - # Iterate over all GPT partitions on this disk - for entry in gpt_parser.get_partitions(): - pnum += 1 - # Find the matching partition in the 'self.partitions' list - for n in disk['partitions']: - p = self.partitions[n] - if p['num'] == pnum: - # Found, fetch PARTUUID (partition's unique ID) - p['partuuid'] = entry['part_uuid'] - msger.debug("PARTUUID for partition %d on disk '%s' " \ - "(mount point '%s') is '%s'" % (pnum, \ - disk_name, p['mountpoint'], p['partuuid'])) - if p['part_type']: - entry['type_uuid'] = p['part_type'] - msger.debug("Change type of partition %d on disk " \ - "'%s' (mount point '%s') to '%s'" % \ - (pnum, disk_name, p['mountpoint'], - p['part_type'])) - gpt_parser.change_partition(entry) - - del gpt_parser - - def __map_partitions(self): - """Load it if dm_snapshot isn't loaded. """ - load_module("dm_snapshot") - - for dev in self.disks.keys(): - d = self.disks[dev] - if d['mapped']: - continue - - msger.debug("Running kpartx on %s" % d['disk'].device ) - rc, kpartx_output = runner.runtool([self.kpartx, "-l", "-v", d['disk'].device]) - kpartx_output = kpartx_output.splitlines() - - if rc != 0: - raise MountError("Failed to query partition mapping for '%s'" % - d['disk'].device) - - # Strip trailing blank and mask verbose output - i = 0 - while i < len(kpartx_output) and kpartx_output[i][0:4] != "loop": - i = i + 1 - kpartx_output = kpartx_output[i:] - - # Make sure kpartx reported the right count of partitions - if len(kpartx_output) != d['numpart']: - # If this disk has more than 3 partitions, then in case of MBR - # paritions there is an extended parition. Different versions - # of kpartx behave differently WRT the extended partition - - # some map it, some ignore it. This is why we do the below hack - # - if kpartx reported one more partition and the partition - # table type is "msdos" and the amount of partitions is more - # than 3, we just assume kpartx mapped the extended parition - # and we remove it. - if len(kpartx_output) == d['numpart'] + 1 \ - and d['ptable_format'] == 'msdos' and len(kpartx_output) > 3: - kpartx_output.pop(3) - else: - raise MountError("Unexpected number of partitions from " \ - "kpartx: %d != %d" % \ - (len(kpartx_output), d['numpart'])) - - for i in range(len(kpartx_output)): - line = kpartx_output[i] - newdev = line.split()[0] - mapperdev = "/dev/mapper/" + newdev - loopdev = d['disk'].device + newdev[-1] - - msger.debug("Dev %s: %s -> %s" % (newdev, loopdev, mapperdev)) - pnum = d['partitions'][i] - self.partitions[pnum]['device'] = loopdev - self.partitions[pnum]['mapper_device'] = mapperdev - - # grub's install wants partitions to be named - # to match their parent device + partition num - # kpartx doesn't work like this, so we add compat - # symlinks to point to /dev/mapper - if os.path.lexists(loopdev): - os.unlink(loopdev) - os.symlink(mapperdev, loopdev) - - msger.debug("Adding partx mapping for %s" % d['disk'].device) - rc = runner.show([self.kpartx, "-v", "-sa", d['disk'].device]) - - if rc != 0: - # Make sure that the device maps are also removed on error case. - # The d['mapped'] isn't set to True if the kpartx fails so - # failed mapping will not be cleaned on cleanup either. - runner.quiet([self.kpartx, "-sd", d['disk'].device]) - raise MountError("Failed to map partitions for '%s'" % - d['disk'].device) - - for p in self.partitions: - if p['mapper_device'] and os.path.islink(p['mapper_device']): - p['mpath_device'] = resolve_ref(p['mapper_device']) - else: - p['mpath_device'] = '' - - # FIXME: need a better way to fix the latency - import time - time.sleep(1) - - if not os.path.exists(mapperdev): - # load mapper device if not updated - runner.quiet([self.dmsetup, "mknodes"]) - # still not updated, roll back - if not os.path.exists(mapperdev): - runner.quiet([self.kpartx, "-sd", d['disk'].device]) - raise MountError("Failed to load mapper devices for '%s'" % - d['disk'].device) - - d['mapped'] = True - - def __unmap_partitions(self): - for dev in self.disks.keys(): - d = self.disks[dev] - if not d['mapped']: - continue - - msger.debug("Removing compat symlinks") - for pnum in d['partitions']: - if self.partitions[pnum]['device'] != None: - os.unlink(self.partitions[pnum]['device']) - self.partitions[pnum]['device'] = None - - msger.debug("Unmapping %s" % d['disk'].device) - rc = runner.quiet([self.kpartx, "-sd", d['disk'].device]) - if rc != 0: - raise MountError("Failed to unmap partitions for '%s'" % - d['disk'].device) - - d['mapped'] = False - - def __calculate_mountorder(self): - msger.debug("Calculating mount order") - for p in self.partitions: - if p['mountpoint']: - self.mount_order.append(p['mountpoint']) - self.unmount_order.append(p['mountpoint']) - - self.mount_order.sort() - self.unmount_order.sort() - self.unmount_order.reverse() - - def cleanup(self): - Mount.cleanup(self) - if self.disks: - self.__unmap_partitions() - for dev in self.disks.keys(): - d = self.disks[dev] - try: - d['disk'].cleanup() - except: - pass - - def unmount(self): - self.__unmount_subvolumes() - for mp in self.unmount_order: - if mp == 'swap': - continue - p = None - for p1 in self.partitions: - if p1['mountpoint'] == mp: - p = p1 - break - - if p['mount'] != None: - try: - # Create subvolume snapshot here - if p['fstype'] == "btrfs" and p['mountpoint'] == "/" and \ - not self.snapshot_created: - self.__create_subvolume_snapshots(p, p["mount"]) - p['mount'].cleanup() - except: - pass - p['mount'] = None - - # Only for btrfs - def __get_subvolume_id(self, rootpath, subvol): - if not self.btrfscmd: - self.btrfscmd = find_binary_path("btrfs") - argv = [ self.btrfscmd, "subvolume", "list", rootpath ] - - rc, out = runner.runtool(argv) - msger.debug(out) - - if rc != 0: - raise MountError("Failed to get subvolume id from %s'," - "return code: %d." % (rootpath, rc)) - - subvolid = -1 - for line in out.splitlines(): - if line.endswith(" path %s" % subvol): - subvolid = line.split()[1] - if not subvolid.isdigit(): - raise MountError("Invalid subvolume id: %s" % subvolid) - subvolid = int(subvolid) - break - return subvolid - - def __create_subvolume_metadata(self, p, pdisk): - if len(self.subvolumes) == 0: - return - - argv = [ self.btrfscmd, "subvolume", "list", pdisk.mountdir ] - rc, out = runner.runtool(argv) - msger.debug(out) - - if rc != 0: - raise MountError("Failed to get subvolume id from %s', return code: %d." % (pdisk.mountdir, rc)) - - subvolid_items = out.splitlines() - subvolume_metadata = "" - for subvol in self.subvolumes: - for line in subvolid_items: - if line.endswith(" path %s" % subvol["subvol"]): - subvolid = line.split()[1] - if not subvolid.isdigit(): - raise MountError("Invalid subvolume id: %s" % subvolid) - - subvolid = int(subvolid) - opts = subvol["fsopts"].split(",") - for opt in opts: - if opt.strip().startswith("subvol="): - opts.remove(opt) - break - fsopts = ",".join(opts) - subvolume_metadata += "%d\t%s\t%s\t%s\n" % (subvolid, subvol["subvol"], - subvol['mountpoint'], fsopts) - - if subvolume_metadata: - fd = open("%s/.subvolume_metadata" % pdisk.mountdir, "w") - fd.write(subvolume_metadata) - fd.close() - - def __get_subvolume_metadata(self, p, pdisk): - subvolume_metadata_file = "%s/.subvolume_metadata" % pdisk.mountdir - if not os.path.exists(subvolume_metadata_file): - return - - fd = open(subvolume_metadata_file, "r") - content = fd.read() - fd.close() - - for line in content.splitlines(): - items = line.split("\t") - if items and len(items) == 4: - self.subvolumes.append({'size': 0, # In sectors - 'mountpoint': items[2], # Mount relative to chroot - 'fstype': "btrfs", # Filesystem type - 'fsopts': items[3] + ",subvol=%s" % items[1], # Filesystem mount options - 'disk_name': p['disk_name'], # physical disk name holding partition - 'device': None, # kpartx device node for partition - 'mount': None, # Mount object - 'subvol': items[1], # Subvolume name - 'boot': False, # Bootable flag - 'mounted': False # Mount flag - }) - - def __create_subvolumes(self, p, pdisk): - """ Create all the subvolumes. """ - - for subvol in self.subvolumes: - argv = [ self.btrfscmd, "subvolume", "create", pdisk.mountdir + "/" + subvol["subvol"]] - - rc = runner.show(argv) - if rc != 0: - raise MountError("Failed to create subvolume '%s', return code: %d." % (subvol["subvol"], rc)) - - # Set default subvolume, subvolume for "/" is default - subvol = None - for subvolume in self.subvolumes: - if subvolume["mountpoint"] == "/" and p['disk_name'] == subvolume['disk_name']: - subvol = subvolume - break - - if subvol: - # Get default subvolume id - subvolid = self. __get_subvolume_id(pdisk.mountdir, subvol["subvol"]) - # Set default subvolume - if subvolid != -1: - rc = runner.show([ self.btrfscmd, "subvolume", "set-default", "%d" % - subvolid, pdisk.mountdir]) - if rc != 0: - raise MountError("Failed to set default subvolume id: %d', return code: %d." - % (subvolid, rc)) - - self.__create_subvolume_metadata(p, pdisk) - - def __mount_subvolumes(self, p, pdisk): - if self.skipformat: - # Get subvolume info - self.__get_subvolume_metadata(p, pdisk) - # Set default mount options - if len(self.subvolumes) != 0: - for subvol in self.subvolumes: - if subvol["mountpoint"] == p["mountpoint"] == "/": - opts = subvol["fsopts"].split(",") - for opt in opts: - if opt.strip().startswith("subvol="): - opts.remove(opt) - break - pdisk.fsopts = ",".join(opts) - break - - if len(self.subvolumes) == 0: - # Return directly if no subvolumes - return - - # Remount to make default subvolume mounted - rc = runner.show([self.umountcmd, pdisk.mountdir]) - if rc != 0: - raise MountError("Failed to umount %s" % pdisk.mountdir) - - rc = runner.show([self.mountcmd, "-o", pdisk.fsopts, pdisk.disk.device, pdisk.mountdir]) - if rc != 0: - raise MountError("Failed to umount %s" % pdisk.mountdir) - - for subvol in self.subvolumes: - if subvol["mountpoint"] == "/": - continue - subvolid = self. __get_subvolume_id(pdisk.mountdir, subvol["subvol"]) - if subvolid == -1: - msger.debug("WARNING: invalid subvolume %s" % subvol["subvol"]) - continue - # Replace subvolume name with subvolume ID - opts = subvol["fsopts"].split(",") - for opt in opts: - if opt.strip().startswith("subvol="): - opts.remove(opt) - break - - opts.extend(["subvolrootid=0", "subvol=%s" % subvol["subvol"]]) - fsopts = ",".join(opts) - subvol['fsopts'] = fsopts - mountpoint = self.mountdir + subvol['mountpoint'] - makedirs(mountpoint) - rc = runner.show([self.mountcmd, "-o", fsopts, pdisk.disk.device, mountpoint]) - if rc != 0: - raise MountError("Failed to mount subvolume %s to %s" % (subvol["subvol"], mountpoint)) - subvol["mounted"] = True - - def __unmount_subvolumes(self): - """ It may be called multiple times, so we need to chekc if it is still mounted. """ - for subvol in self.subvolumes: - if subvol["mountpoint"] == "/": - continue - if not subvol["mounted"]: - continue - mountpoint = self.mountdir + subvol['mountpoint'] - rc = runner.show([self.umountcmd, mountpoint]) - if rc != 0: - raise MountError("Failed to unmount subvolume %s from %s" % (subvol["subvol"], mountpoint)) - subvol["mounted"] = False - - def __create_subvolume_snapshots(self, p, pdisk): - import time - - if self.snapshot_created: - return - - # Remount with subvolid=0 - rc = runner.show([self.umountcmd, pdisk.mountdir]) - if rc != 0: - raise MountError("Failed to umount %s" % pdisk.mountdir) - if pdisk.fsopts: - mountopts = pdisk.fsopts + ",subvolid=0" - else: - mountopts = "subvolid=0" - rc = runner.show([self.mountcmd, "-o", mountopts, pdisk.disk.device, pdisk.mountdir]) - if rc != 0: - raise MountError("Failed to umount %s" % pdisk.mountdir) - - # Create all the subvolume snapshots - snapshotts = time.strftime("%Y%m%d-%H%M") - for subvol in self.subvolumes: - subvolpath = pdisk.mountdir + "/" + subvol["subvol"] - snapshotpath = subvolpath + "_%s-1" % snapshotts - rc = runner.show([ self.btrfscmd, "subvolume", "snapshot", subvolpath, snapshotpath ]) - if rc != 0: - raise MountError("Failed to create subvolume snapshot '%s' for '%s', return code:" - "%d." % (snapshotpath, subvolpath, rc)) - - self.snapshot_created = True - - def mount(self): - for dev in self.disks.keys(): - d = self.disks[dev] - d['disk'].create() - - self.__format_disks() - self.__map_partitions() - self.__calculate_mountorder() - - for mp in self.mount_order: - p = None - for p1 in self.partitions: - if p1['mountpoint'] == mp: - p = p1 - break - - if not p['label']: - if p['mountpoint'] == "/": - p['label'] = 'platform' - else: - p['label'] = mp.split('/')[-1] - - if mp == 'swap': - import uuid - p['uuid'] = str(uuid.uuid1()) - runner.show([self.mkswap, - '-L', p['label'], - '-U', p['uuid'], - p['device']]) - continue - - rmmountdir = False - if p['mountpoint'] == "/": - rmmountdir = True - if p['fstype'] == "vfat" or p['fstype'] == "msdos": - my_disk_mount = VfatDiskMount - elif p['fstype'] in ("ext2", "ext3", "ext4"): - my_disk_mount = ExtDiskMount - elif p['fstype'] == "btrfs": - my_disk_mount = BtrfsDiskMount - else: - raise MountError("Fail to support file system " + p['fstype']) - - if p['fstype'] == "btrfs" and not p['fsopts']: - p['fsopts'] = "subvolid=0" - - pdisk = my_disk_mount(RawDisk(p['size'] * self.sector_size, p['device']), - self.mountdir + p['mountpoint'], - p['fstype'], - 4096, - p['label'], - rmmountdir, - self.skipformat, - fsopts = p['fsopts']) - pdisk.mount(pdisk.fsopts) - if p['fstype'] == "btrfs" and p['mountpoint'] == "/": - if not self.skipformat: - self.__create_subvolumes(p, pdisk) - self.__mount_subvolumes(p, pdisk) - p['mount'] = pdisk - p['uuid'] = pdisk.uuid - - def resparse(self, size = None): - # Can't re-sparse a disk image - too hard - pass diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/utils/proxy.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/utils/proxy.py deleted file mode 100644 index ca884a2..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/utils/proxy.py +++ /dev/null @@ -1,212 +0,0 @@ -#!/usr/bin/python -tt -# -# Copyright (c) 2010, 2011 Intel, Inc. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free -# Software Foundation; version 2 of the License -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., 59 -# Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -import os -import re -import urlparse -from mic import msger - -_my_proxies = {} -_my_noproxy = None -_my_noproxy_list = [] - -def set_proxy_environ(): - if not _my_proxies: - return - for key in _my_proxies.keys(): - os.environ[key + "_proxy"] = _my_proxies[key] - if not _my_noproxy: - return - os.environ["no_proxy"] = _my_noproxy - -def unset_proxy_environ(): - for env in ('http_proxy', - 'https_proxy', - 'ftp_proxy', - 'all_proxy'): - if env in os.environ: - del os.environ[env] - - env_upper = env.upper() - if env_upper in os.environ: - del os.environ[env_upper] - -def _set_proxies(proxy = None, no_proxy = None): - """Return a dictionary of scheme -> proxy server URL mappings. - """ - - global _my_noproxy, _my_proxies - _my_proxies = {} - _my_noproxy = None - proxies = [] - if proxy: - proxies.append(("http_proxy", proxy)) - if no_proxy: - proxies.append(("no_proxy", no_proxy)) - - # Get proxy settings from environment if not provided - if not proxy and not no_proxy: - proxies = os.environ.items() - - # Remove proxy env variables, urllib2 can't handle them correctly - unset_proxy_environ() - - for name, value in proxies: - name = name.lower() - if value and name[-6:] == '_proxy': - if name[0:2] != "no": - _my_proxies[name[:-6]] = value - else: - _my_noproxy = value - -def _ip_to_int(ip): - ipint = 0 - shift = 24 - for dec in ip.split("."): - if not dec.isdigit(): - continue - ipint |= int(dec) << shift - shift -= 8 - return ipint - -def _int_to_ip(val): - ipaddr = "" - shift = 0 - for i in range(4): - dec = val >> shift - dec &= 0xff - ipaddr = ".%d%s" % (dec, ipaddr) - shift += 8 - return ipaddr[1:] - -def _isip(host): - if host.replace(".", "").isdigit(): - return True - return False - -def _set_noproxy_list(): - global _my_noproxy, _my_noproxy_list - _my_noproxy_list = [] - if not _my_noproxy: - return - - #solve in /etc/enviroment contains command like `echo 165.xxx.xxx.{1..255} | sed 's/ /,/g'`` - _my_noproxy_bak = _my_noproxy - start = _my_noproxy.find("`") - while(start < len(_my_noproxy) and start != -1): - start = _my_noproxy.find("`",start) - end = _my_noproxy.find("`",start+1) - cmd = _my_noproxy[start+1:end] - pstr = _my_noproxy[start:end+1] - start = end + 1 - - _my_noproxy=_my_noproxy.replace(pstr,len(pstr)*" ") - try: - c_result = os.popen(cmd).readlines() - if len(c_result) == 0: - continue - except Exception as e: - msger.warning(str(e)) - continue - to_list = c_result[0].strip("\n").split(",") - _my_noproxy_list.extend(to_list) - - for item in _my_noproxy.split(","): - item = item.strip() - if not item: - continue - - if item[0] != '.' and item.find("/") == -1: - # Need to match it - _my_noproxy_list.append({"match":0, "needle":item}) - - elif item[0] == '.': - # Need to match at tail - _my_noproxy_list.append({"match":1, "needle":item}) - - elif item.find("/") > 3: - # IP/MASK, need to match at head - needle = item[0:item.find("/")].strip() - ip = _ip_to_int(needle) - netmask = 0 - mask = item[item.find("/")+1:].strip() - - if mask.isdigit(): - netmask = int(mask) - netmask = ~((1<<(32-netmask)) - 1) - ip &= netmask - else: - shift = 24 - netmask = 0 - for dec in mask.split("."): - if not dec.isdigit(): - continue - netmask |= int(dec) << shift - shift -= 8 - ip &= netmask - - _my_noproxy_list.append({"match":2, "needle":ip, "netmask":netmask}) - _my_noproxy = _my_noproxy_bak - -def _isnoproxy(url): - host = urlparse.urlparse(url)[1] - # urlparse.urlparse(url) returns (scheme, host, path, parm, query, frag) - - if '@' in host: - user_pass, host = host.split('@', 1) - - if ':' in host: - host, port = host.split(':', 1) - - hostisip = _isip(host) - for item in _my_noproxy_list: - if hostisip and item["match"] == 1: - continue - - if item["match"] == 2 and hostisip: - if (_ip_to_int(host) & item["netmask"]) == item["needle"]: - return True - - if item["match"] == 0: - if host == item["needle"]: - return True - - if item["match"] == 1: - if re.match(r".*%s$" % item["needle"], host): - return True - - return False - -def set_proxies(proxy = None, no_proxy = None): - _set_proxies(proxy, no_proxy) - _set_noproxy_list() - set_proxy_environ() - -def get_proxy_for(url): - if url.startswith('file:') or _isnoproxy(url): - return None - - type = url[0:url.index(":")] - proxy = None - if _my_proxies.has_key(type): - proxy = _my_proxies[type] - elif _my_proxies.has_key("http"): - proxy = _my_proxies["http"] - else: - proxy = None - - return proxy diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/utils/rpmmisc.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/utils/rpmmisc.py deleted file mode 100644 index 3dde377..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/utils/rpmmisc.py +++ /dev/null @@ -1,467 +0,0 @@ -#!/usr/bin/python -tt -# -# Copyright (c) 2008, 2009, 2010, 2011 Intel, Inc. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free -# Software Foundation; version 2 of the License -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., 59 -# Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -import os -import sys -import re -import rpm - -from mic import msger -from mic.utils.errors import CreatorError -from mic.utils.proxy import get_proxy_for -from mic.utils import runner - - -class RPMInstallCallback: - """ Command line callback class for callbacks from the RPM library. - """ - - def __init__(self, ts, output=1): - self.output = output - self.callbackfilehandles = {} - self.total_actions = 0 - self.total_installed = 0 - self.total_installing = 0 - self.installed_pkg_names = [] - self.total_removed = 0 - self.mark = "+" - self.marks = 40 - self.lastmsg = None - self.tsInfo = None # this needs to be set for anything else to work - self.ts = ts - self.filelog = False - self.logString = [] - self.headmsg = "Installing" - - def _dopkgtup(self, hdr): - tmpepoch = hdr['epoch'] - if tmpepoch is None: epoch = '0' - else: epoch = str(tmpepoch) - - return (hdr['name'], hdr['arch'], epoch, hdr['version'], hdr['release']) - - def _makeHandle(self, hdr): - handle = '%s:%s.%s-%s-%s' % (hdr['epoch'], hdr['name'], hdr['version'], - hdr['release'], hdr['arch']) - - return handle - - def _localprint(self, msg): - if self.output: - msger.info(msg) - - def _makefmt(self, percent, progress = True): - l = len(str(self.total_actions)) - size = "%s.%s" % (l, l) - fmt_done = "[%" + size + "s/%" + size + "s]" - done = fmt_done % (self.total_installing, - self.total_actions) - marks = self.marks - (2 * l) - width = "%s.%s" % (marks, marks) - fmt_bar = "%-" + width + "s" - if progress: - bar = fmt_bar % (self.mark * int(marks * (percent / 100.0)), ) - fmt = "%-10.10s: %-50.50s " + bar + " " + done - else: - bar = fmt_bar % (self.mark * marks, ) - fmt = "%-10.10s: %-50.50s " + bar + " " + done - return fmt - - def _logPkgString(self, hdr): - """return nice representation of the package for the log""" - (n,a,e,v,r) = self._dopkgtup(hdr) - if e == '0': - pkg = '%s.%s %s-%s' % (n, a, v, r) - else: - pkg = '%s.%s %s:%s-%s' % (n, a, e, v, r) - - return pkg - - def callback(self, what, bytes, total, h, user): - if what == rpm.RPMCALLBACK_TRANS_START: - if bytes == 6: - self.total_actions = total - - elif what == rpm.RPMCALLBACK_TRANS_PROGRESS: - pass - - elif what == rpm.RPMCALLBACK_TRANS_STOP: - pass - - elif what == rpm.RPMCALLBACK_INST_OPEN_FILE: - self.lastmsg = None - hdr = None - if h is not None: - try: - hdr, rpmloc = h - except: - rpmloc = h - hdr = readRpmHeader(self.ts, h) - - m = re.match("(.*)-(\d+.*)-(\d+\.\d+)\.(.+)\.rpm", os.path.basename(rpmloc)) - if m: - pkgname = m.group(1) - else: - pkgname = os.path.basename(rpmloc) - msger.info("Next install: %s " % pkgname) - - handle = self._makeHandle(hdr) - fd = os.open(rpmloc, os.O_RDONLY) - self.callbackfilehandles[handle]=fd - if hdr['name'] not in self.installed_pkg_names: - self.installed_pkg_names.append(hdr['name']) - self.total_installed += 1 - return fd - else: - self._localprint("No header - huh?") - - elif what == rpm.RPMCALLBACK_INST_CLOSE_FILE: - hdr = None - if h is not None: - try: - hdr, rpmloc = h - except: - rpmloc = h - hdr = readRpmHeader(self.ts, h) - - handle = self._makeHandle(hdr) - os.close(self.callbackfilehandles[handle]) - fd = 0 - - # log stuff - #pkgtup = self._dopkgtup(hdr) - self.logString.append(self._logPkgString(hdr)) - - elif what == rpm.RPMCALLBACK_INST_START: - self.total_installing += 1 - - elif what == rpm.RPMCALLBACK_UNINST_STOP: - pass - - elif what == rpm.RPMCALLBACK_INST_PROGRESS: - if h is not None: - percent = (self.total_installed*100)/self.total_actions - if total > 0: - try: - hdr, rpmloc = h - except: - rpmloc = h - - m = re.match("(.*)-(\d+.*)-(\d+\.\d+)\.(.+)\.rpm", os.path.basename(rpmloc)) - if m: - pkgname = m.group(1) - else: - pkgname = os.path.basename(rpmloc) - if self.output: - fmt = self._makefmt(percent) - msg = fmt % (self.headmsg, pkgname) - if msg != self.lastmsg: - self.lastmsg = msg - - msger.info(msg) - - if self.total_installed == self.total_actions: - msger.raw('') - msger.verbose('\n'.join(self.logString)) - - elif what == rpm.RPMCALLBACK_UNINST_START: - pass - - elif what == rpm.RPMCALLBACK_UNINST_PROGRESS: - pass - - elif what == rpm.RPMCALLBACK_UNINST_STOP: - self.total_removed += 1 - - elif what == rpm.RPMCALLBACK_REPACKAGE_START: - pass - - elif what == rpm.RPMCALLBACK_REPACKAGE_STOP: - pass - - elif what == rpm.RPMCALLBACK_REPACKAGE_PROGRESS: - pass - elif what == rpm.RPMCALLBACK_SCRIPT_ERROR: - if h is not None: - try: - hdr, rpmloc = h - except: - rpmloc = h - - m = re.match("(.*)-(\d+.*)-(\d+\.\d+)\.(.+)\.rpm", os.path.basename(rpmloc)) - if m: - pkgname = m.group(1) - else: - pkgname = os.path.basename(rpmloc) - - msger.warning('(%s) Post script failed' % pkgname) - -def readRpmHeader(ts, filename): - """ Read an rpm header. """ - - fd = os.open(filename, os.O_RDONLY) - h = ts.hdrFromFdno(fd) - os.close(fd) - return h - -def splitFilename(filename): - """ Pass in a standard style rpm fullname - - Return a name, version, release, epoch, arch, e.g.:: - foo-1.0-1.i386.rpm returns foo, 1.0, 1, i386 - 1:bar-9-123a.ia64.rpm returns bar, 9, 123a, 1, ia64 - """ - - if filename[-4:] == '.rpm': - filename = filename[:-4] - - archIndex = filename.rfind('.') - arch = filename[archIndex+1:] - - relIndex = filename[:archIndex].rfind('-') - rel = filename[relIndex+1:archIndex] - - verIndex = filename[:relIndex].rfind('-') - ver = filename[verIndex+1:relIndex] - - epochIndex = filename.find(':') - if epochIndex == -1: - epoch = '' - else: - epoch = filename[:epochIndex] - - name = filename[epochIndex + 1:verIndex] - return name, ver, rel, epoch, arch - -def getCanonX86Arch(arch): - # - if arch == "i586": - f = open("/proc/cpuinfo", "r") - lines = f.readlines() - f.close() - for line in lines: - if line.startswith("model name") and line.find("Geode(TM)") != -1: - return "geode" - return arch - # only athlon vs i686 isn't handled with uname currently - if arch != "i686": - return arch - - # if we're i686 and AuthenticAMD, then we should be an athlon - f = open("/proc/cpuinfo", "r") - lines = f.readlines() - f.close() - for line in lines: - if line.startswith("vendor") and line.find("AuthenticAMD") != -1: - return "athlon" - # i686 doesn't guarantee cmov, but we depend on it - elif line.startswith("flags") and line.find("cmov") == -1: - return "i586" - - return arch - -def getCanonX86_64Arch(arch): - if arch != "x86_64": - return arch - - vendor = None - f = open("/proc/cpuinfo", "r") - lines = f.readlines() - f.close() - for line in lines: - if line.startswith("vendor_id"): - vendor = line.split(':')[1] - break - if vendor is None: - return arch - - if vendor.find("Authentic AMD") != -1 or vendor.find("AuthenticAMD") != -1: - return "amd64" - if vendor.find("GenuineIntel") != -1: - return "ia32e" - return arch - -def getCanonArch(): - arch = os.uname()[4] - - if (len(arch) == 4 and arch[0] == "i" and arch[2:4] == "86"): - return getCanonX86Arch(arch) - - if arch == "x86_64": - return getCanonX86_64Arch(arch) - - return arch - -# Copy from libsatsolver:poolarch.c, with cleanup -archPolicies = { - "x86_64": "x86_64:i686:i586:i486:i386", - "i686": "i686:i586:i486:i386", - "i586": "i586:i486:i386", - "ia64": "ia64:i686:i586:i486:i386", - "aarch64": "aarch64", - "armv7tnhl": "armv7tnhl:armv7thl:armv7nhl:armv7hl", - "armv7thl": "armv7thl:armv7hl", - "armv7nhl": "armv7nhl:armv7hl", - "armv7hl": "armv7hl", - "armv7l": "armv7l:armv6l:armv5tejl:armv5tel:armv5l:armv4tl:armv4l:armv3l", - "armv6l": "armv6l:armv5tejl:armv5tel:armv5l:armv4tl:armv4l:armv3l", - "armv5tejl": "armv5tejl:armv5tel:armv5l:armv4tl:armv4l:armv3l", - "armv5tel": "armv5tel:armv5l:armv4tl:armv4l:armv3l", - "armv5l": "armv5l:armv4tl:armv4l:armv3l", - "mipsel": "mipsel", - "riscv64": "riscv64", -} - -# dict mapping arch -> ( multicompat, best personality, biarch personality ) -multilibArches = { - "x86_64": ( "athlon", "x86_64", "athlon" ), -} - -# from yumUtils.py -arches = { - # ia32 - "athlon": "i686", - "i686": "i586", - "geode": "i586", - "i586": "i486", - "i486": "i386", - "i386": "noarch", - - # amd64 - "x86_64": "athlon", - "amd64": "x86_64", - "ia32e": "x86_64", - - # arm - "armv7tnhl": "armv7nhl", - "armv7nhl": "armv7hl", - "armv7hl": "noarch", - "armv7l": "armv6l", - "armv6l": "armv5tejl", - "armv5tejl": "armv5tel", - "armv5tel": "noarch", - - #itanium - "ia64": "noarch", - - "mipsel": "mipsel", - - "riscv64": "noarch", -} - -def isMultiLibArch(arch=None): - """returns true if arch is a multilib arch, false if not""" - if arch is None: - arch = getCanonArch() - - if not arches.has_key(arch): # or we could check if it is noarch - return False - - if multilibArches.has_key(arch): - return True - - if multilibArches.has_key(arches[arch]): - return True - - return False - -def getBaseArch(): - myarch = getCanonArch() - if not arches.has_key(myarch): - return myarch - - if isMultiLibArch(arch=myarch): - if multilibArches.has_key(myarch): - return myarch - else: - return arches[myarch] - - if arches.has_key(myarch): - basearch = myarch - value = arches[basearch] - while value != 'noarch': - basearch = value - value = arches[basearch] - - return basearch - -def checkRpmIntegrity(bin_rpm, package): - return runner.quiet([bin_rpm, "-K", "--nosignature", package]) - -def checkSig(ts, package): - """ Takes a transaction set and a package, check it's sigs, - return 0 if they are all fine - return 1 if the gpg key can't be found - return 2 if the header is in someway damaged - return 3 if the key is not trusted - return 4 if the pkg is not gpg or pgp signed - """ - - value = 0 - currentflags = ts.setVSFlags(0) - fdno = os.open(package, os.O_RDONLY) - try: - hdr = ts.hdrFromFdno(fdno) - - except rpm.error as e: - if str(e) == "public key not availaiable": - value = 1 - if str(e) == "public key not available": - value = 1 - if str(e) == "public key not trusted": - value = 3 - if str(e) == "error reading package header": - value = 2 - else: - error, siginfo = getSigInfo(hdr) - if error == 101: - os.close(fdno) - del hdr - value = 4 - else: - del hdr - - try: - os.close(fdno) - except OSError: - pass - - ts.setVSFlags(currentflags) # put things back like they were before - return value - -def getSigInfo(hdr): - """ checks signature from an hdr hand back signature information and/or - an error code - """ - - import locale - locale.setlocale(locale.LC_ALL, 'C') - - string = '%|DSAHEADER?{%{DSAHEADER:pgpsig}}:{%|RSAHEADER?{%{RSAHEADER:pgpsig}}:{%|SIGGPG?{%{SIGGPG:pgpsig}}:{%|SIGPGP?{%{SIGPGP:pgpsig}}:{(none)}|}|}|}|' - siginfo = hdr.sprintf(string) - if siginfo != '(none)': - error = 0 - sigtype, sigdate, sigid = siginfo.split(',') - else: - error = 101 - sigtype = 'MD5' - sigdate = 'None' - sigid = 'None' - - infotuple = (sigtype, sigdate, sigid) - return error, infotuple - diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/utils/runner.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/utils/runner.py deleted file mode 100644 index cd361a1..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/utils/runner.py +++ /dev/null @@ -1,110 +0,0 @@ -#!/usr/bin/python -tt -# -# Copyright (c) 2011 Intel, Inc. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free -# Software Foundation; version 2 of the License -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., 59 -# Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -import os -import subprocess - -from mic import msger -from mic.utils import errors - -def runtool(cmdln_or_args, catch=1): - """ wrapper for most of the subprocess calls - input: - cmdln_or_args: can be both args and cmdln str (shell=True) - catch: 0, quitely run - 1, only STDOUT - 2, only STDERR - 3, both STDOUT and STDERR - return: - (rc, output) - if catch==0: the output will always None - """ - - if catch not in (0, 1, 2, 3): - # invalid catch selection, will cause exception, that's good - return None - - if isinstance(cmdln_or_args, list): - cmd = cmdln_or_args[0] - shell = False - else: - import shlex - cmd = shlex.split(cmdln_or_args)[0] - shell = True - - if catch != 3: - dev_null = os.open("/dev/null", os.O_WRONLY) - - if catch == 0: - sout = dev_null - serr = dev_null - elif catch == 1: - sout = subprocess.PIPE - serr = dev_null - elif catch == 2: - sout = dev_null - serr = subprocess.PIPE - elif catch == 3: - sout = subprocess.PIPE - serr = subprocess.STDOUT - - try: - p = subprocess.Popen(cmdln_or_args, stdout=sout, - stderr=serr, shell=shell) - (sout, serr) = p.communicate() - # combine stdout and stderr, filter None out - out = ''.join(filter(None, [sout, serr])) - except OSError as e: - if e.errno == 2: - # [Errno 2] No such file or directory - raise errors.CreatorError('Cannot run command: %s, lost dependency?' % cmd) - else: - raise # relay - finally: - if catch != 3: - os.close(dev_null) - - return (p.returncode, out) - -def show(cmdln_or_args): - # show all the message using msger.verbose - - rc, out = runtool(cmdln_or_args, catch=3) - - if isinstance(cmdln_or_args, list): - cmd = ' '.join(cmdln_or_args) - else: - cmd = cmdln_or_args - - msg = 'running command: "%s"' % cmd - if out: out = out.strip() - if out: - msg += ', with output::' - msg += '\n +----------------' - for line in out.splitlines(): - msg += '\n | %s' % line - msg += '\n +----------------' - - msger.verbose(msg) - return rc - -def outs(cmdln_or_args, catch=1): - # get the outputs of tools - return runtool(cmdln_or_args, catch)[1].strip() - -def quiet(cmdln_or_args): - return runtool(cmdln_or_args, catch=0)[0] diff --git a/mic_py2/usr/lib/python2.7/dist-packages/mic/utils/safeurl.py b/mic_py2/usr/lib/python2.7/dist-packages/mic/utils/safeurl.py deleted file mode 100644 index 0a82f8e..0000000 --- a/mic_py2/usr/lib/python2.7/dist-packages/mic/utils/safeurl.py +++ /dev/null @@ -1,92 +0,0 @@ -# Copyright (c) 2014 Intel, Inc. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free -# Software Foundation; version 2 of the License -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., 59 -# Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -""" -This module provides a class SafeURL which can contain url/user/password read -from config file, and hide plain user and password when it print to screen -""" -import os.path -import urllib -from urlparse import urlsplit, urlunsplit - - -def join_userpass(href, user, passwd): - """Return authenticated URL with user and passwd embeded""" - if not user and not passwd: - return href - - if passwd: - userpass = '%s:%s' % (urllib.quote(user, safe=''), - urllib.quote(passwd, safe='')) - else: - userpass = urllib.quote(user, safe='') - - parts = urlsplit(href) - netloc = '%s@%s' % (userpass, parts[1]) - comps = list(parts) - comps[1] = netloc - return urlunsplit(comps) - - -def split_userpass(href): - """Returns (href, user, passwd) of an authenticated URL""" - parts = urlsplit(href) - - netloc = parts[1] - if '@' not in netloc: - return href, None, None - - userpass, netloc = netloc.split('@', 1) - if ':' in userpass: - user, passwd = [ urllib.unquote(i) - for i in userpass.split(':', 1) ] - else: - user, passwd = userpass, None - - comps = list(parts) - comps[1] = netloc - return urlunsplit(comps), user, passwd - - -class SafeURL(str): - '''SafeURL can hide user info when it's printed to console. - Use property full to get url with user info - ''' - def __new__(cls, urlstring, user=None, passwd=None): - """Imuutable object""" - href, user1, passwd1 = split_userpass(urlstring) - user = user if user else user1 - passwd = passwd if passwd else passwd1 - - obj = super(SafeURL, cls).__new__(cls, href) - obj.user = user - obj.passwd = passwd - obj.full = join_userpass(href, user, passwd) - - parts = urlsplit(href) - obj.scheme = parts[0] - obj.netloc = parts[1] - obj.path = parts[2] - obj.host = parts.hostname - obj.port = parts.port - return obj - - def join(self, *path): - """Returns a new SafeURL with new path. Search part is removed since - after join path is changed, keep the same search part is useless. - """ - idx = self.full.find('?') - url = self.full if idx < 0 else self.full[:idx] - return SafeURL(os.path.join(url.rstrip('/'), *path)) diff --git a/packaging/mic.spec b/packaging/mic.spec index 138f07a..9dab5d1 100755 --- a/packaging/mic.spec +++ b/packaging/mic.spec @@ -74,8 +74,16 @@ install -d -m0755 %{buildroot}/%{_sysconfdir}/zsh_completion.d/ install -Dp -m0755 etc/zsh_completion.d/_%{name} %{buildroot}/%{_sysconfdir}/zsh_completion.d/ #install mic py2 code. -mkdir -p %{buildroot}/%{_prefix}/lib/%{name}/mic_py2 -cp -rp mic_py2/* %{buildroot}%{_prefix}/lib/%{name}/mic_py2 +cp -rp mic_py2.tar.gz %{buildroot}%{_prefix}/lib/%{name} + +%post +#decompress mic py2, and remove tar.gz +if [ -e /usr/lib/mic/mic_py2.tar.gz ]; then + cd /usr/lib/mic + tar -zxvf /usr/lib/mic/mic_py2.tar.gz > /dev/null + rm -rf /usr/lib/mic/mic_py2.tar.gz +fi + %files %defattr(-,root,root,-)