diff options
author | Michael E Brown <michael_e_brown@dell.com> | 2008-01-04 14:43:52 -0600 |
---|---|---|
committer | Michael E Brown <michael_e_brown@dell.com> | 2008-01-04 14:43:52 -0600 |
commit | 4d3427f27b094f6cced1512a48af4b87bd6811c0 (patch) | |
tree | f92096e19b5b498e35962b69f1df17ce21ba0520 /py | |
parent | aefe3d7b6e7c289c84bea6865e7020b4c4637ea4 (diff) | |
parent | e964477a73d2ecb233e0e680e8c091a1f884e5a2 (diff) | |
download | mock-4d3427f27b094f6cced1512a48af4b87bd6811c0.tar.gz mock-4d3427f27b094f6cced1512a48af4b87bd6811c0.tar.xz mock-4d3427f27b094f6cced1512a48af4b87bd6811c0.zip |
Merge branch 'master' of /var/ftp/pub/Applications/git/mock
* 'master' of /var/ftp/pub/Applications/git/mock:
split up --target and --arch cmdline options.
get rid of personality() calls in sub do() calls because it is set at top level now.
added --print-root-path option
paul howarth's request to change from -l to --login on bash invocations
use the right mkdev argument
Create the dev/full device, some packages use it during make check.
add ia64 and alpha to personality_defs
Patch from Doug Chapman <doug.chapman@hp.com>
Doug Chapman's ia64 personality warning fix
Roland McGrath's fix for ctypes LoadLibrary on ia64
Diffstat (limited to 'py')
-rwxr-xr-x | py/mock.py | 23 | ||||
-rw-r--r-- | py/mock/backend.py | 15 | ||||
-rw-r--r-- | py/mock/uid.py | 2 | ||||
-rw-r--r-- | py/mock/util.py | 3 |
4 files changed, 30 insertions, 13 deletions
@@ -124,8 +124,10 @@ def command_parse(config_opts): dest="cleanup_after", default=None, help="Dont clean chroot after building. If automatic" " cleanup is enabled, use this to disable.", ) - parser.add_option("--target", "--arch", action ="store", dest="arch", - default=None, help="target build arch") + parser.add_option("--arch", action ="store", dest="arch", + default=None, help="Use to set kernel personality() to use to build.") + parser.add_option("--target", action ="store", dest="rpmbuild_arch", + default=None, help="passed to rpmbuild as --target") parser.add_option("-D", "--define", action="append", dest="rpmmacros", default=[], type="string", metavar="'MACRO EXPR'", help="define an rpm macro (may be used more than once)") @@ -167,6 +169,10 @@ def command_parse(config_opts): help="Disable plugin. Currently-available plugins: %s" % repr(config_opts['plugins'])) + parser.add_option("--print-root-path", help="print path to chroot root", + dest="printrootpath", action="store_true", + default=False) + (options, args) = parser.parse_args() if len(args) and args[0] in ('chroot', 'shell', 'rebuild', 'install', 'installdeps', 'init', 'clean'): @@ -243,6 +249,7 @@ def setup_default_config_opts(config_opts, unprivUid): config_opts['use_host_resolv'] = True config_opts['chroot_setup_cmd'] = 'install buildsys-build' config_opts['target_arch'] = 'i386' + config_opts['rpmbuild_arch'] = None # <-- None means set automatically from target_arch config_opts['yum.conf'] = '' config_opts['more_buildreqs'] = {} config_opts['files'] = {} @@ -258,6 +265,11 @@ def set_config_opts_per_cmdline(config_opts, options, args): # do some other options and stuff if options.arch: config_opts['target_arch'] = options.arch + if options.rpmbuild_arch: + config_opts['rpmbuild_arch'] = options.rpmbuild_arch + elif config_opts['rpmbuild_arch'] is None: + config_opts['rpmbuild_arch'] = config_opts['target_arch'] + if not options.clean: config_opts['clean'] = options.clean @@ -399,6 +411,9 @@ def main(ret): setup_default_config_opts(config_opts, unprivUid) (options, args) = command_parse(config_opts) + if options.printrootpath: + options.verbose = 0 + # config path -- can be overridden on cmdline config_path = MOCKCONFDIR if options.configdir: @@ -461,6 +476,10 @@ def main(ret): log.info("mock.py version %s starting..." % __VERSION__) chroot = mock.backend.Root(config_opts, uidManager) + if options.printrootpath: + print chroot.makeChrootPath('') + sys.exit(0) + # dump configuration to log log.debug("mock final configuration:") for k, v in config_opts.items(): diff --git a/py/mock/backend.py b/py/mock/backend.py index 38a2abd..9f08c49 100644 --- a/py/mock/backend.py +++ b/py/mock/backend.py @@ -37,15 +37,11 @@ class Root(object): config['root'] = "%s-%s" % (config['root'], config['unique-ext']) self.basedir = os.path.join(config['basedir'], config['root']) - self.target_arch = config['target_arch'] + self.rpmbuild_arch = config['rpmbuild_arch'] self._rootdir = os.path.join(self.basedir, 'root') self.homedir = config['chroothome'] self.builddir = os.path.join(self.homedir, 'build') - self.personality = None - if config['internal_setarch']: - self.personality = config['target_arch'] - # result dir self.resultdir = config['resultdir'] % config @@ -267,6 +263,7 @@ class Root(object): prevMask = os.umask(0000) devFiles = ( (stat.S_IFCHR | 0666, os.makedev(1, 3), "dev/null"), + (stat.S_IFCHR | 0666, os.makedev(1, 7), "dev/full"), (stat.S_IFCHR | 0666, os.makedev(1, 5), "dev/zero"), (stat.S_IFCHR | 0666, os.makedev(1, 8), "dev/random"), (stat.S_IFCHR | 0444, os.makedev(1, 9), "dev/urandom"), @@ -301,7 +298,7 @@ class Root(object): #decorate(traceLog()) def doChroot(self, command, env="", *args, **kargs): """execute given command in root""" - return mock.util.do( command, personality=self.personality, chrootPath=self.makeChrootPath(), *args, **kargs ) + return mock.util.do( command, chrootPath=self.makeChrootPath(), *args, **kargs ) decorate(traceLog()) def yumInstall(self, *srpms): @@ -387,7 +384,7 @@ class Root(object): chrootspec = spec.replace(self.makeChrootPath(), '') # get rid of rootdir prefix # Completely/Permanently drop privs while running the following: self.doChroot( - "bash -l -c 'rpmbuild -bs --target %s --nodeps %s'" % (self.target_arch, chrootspec), + "bash --login -c 'rpmbuild -bs --target %s --nodeps %s'" % (self.rpmbuild_arch, chrootspec), logger=self.build_log, timeout=timeout, uidManager=self.uidManager, uid=self.chrootuid, @@ -408,7 +405,7 @@ class Root(object): self._callHooks('prebuild') self.doChroot( - "bash -l -c 'rpmbuild -bb --target %s --nodeps %s'" % (self.target_arch, chrootspec), + "bash --login -c 'rpmbuild -bb --target %s --nodeps %s'" % (self.rpmbuild_arch, chrootspec), logger=self.build_log, timeout=timeout, uidManager=self.uidManager, uid=self.chrootuid, @@ -484,7 +481,7 @@ class Root(object): output = "" try: self._callHooks("preyum") - output = mock.util.do(cmd, returnOutput=returnOutput, personality=self.personality) + output = mock.util.do(cmd, returnOutput=returnOutput) self._callHooks("postyum") return output except mock.exception.Error, e: diff --git a/py/mock/uid.py b/py/mock/uid.py index 5729d5c..b3fbeff 100644 --- a/py/mock/uid.py +++ b/py/mock/uid.py @@ -70,7 +70,7 @@ class uidManager(object): # python doesnt have native versions of these. :( import ctypes -_libc = ctypes.cdll.LoadLibrary("libc.so.6") +_libc = ctypes.cdll.LoadLibrary(None) _errno = ctypes.c_int.in_dll(_libc, "errno") def getresuid(): diff --git a/py/mock/util.py b/py/mock/util.py index dbd4296..8f3d221 100644 --- a/py/mock/util.py +++ b/py/mock/util.py @@ -190,10 +190,11 @@ 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, } import ctypes -_libc = ctypes.cdll.LoadLibrary("libc.so.6") +_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 |