summaryrefslogtreecommitdiffstats
path: root/py
diff options
context:
space:
mode:
authorMichael E Brown <michael_e_brown@dell.com>2008-01-04 14:43:52 -0600
committerMichael E Brown <michael_e_brown@dell.com>2008-01-04 14:43:52 -0600
commit4d3427f27b094f6cced1512a48af4b87bd6811c0 (patch)
treef92096e19b5b498e35962b69f1df17ce21ba0520 /py
parentaefe3d7b6e7c289c84bea6865e7020b4c4637ea4 (diff)
parente964477a73d2ecb233e0e680e8c091a1f884e5a2 (diff)
downloadmock-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-xpy/mock.py23
-rw-r--r--py/mock/backend.py15
-rw-r--r--py/mock/uid.py2
-rw-r--r--py/mock/util.py3
4 files changed, 30 insertions, 13 deletions
diff --git a/py/mock.py b/py/mock.py
index d4b0885..fbe71c2 100755
--- a/py/mock.py
+++ b/py/mock.py
@@ -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