def do_rebuild(config_opts, commands, buildroot, srpms): "rebuilds a list of srpms using provided chroot" if len(srpms) < 1: log.critical("No package specified to rebuild command.") sys.exit(50) util.checkSrpmHeaders(srpms) clean = config_opts['clean'] and not config_opts['scm'] def build(srpm): commands.build(srpm, timeout=config_opts['rpmbuild_timeout'], check=config_opts['check']) def post_build(): if config_opts['post_install']: if buildroot.chroot_was_initialized: commands.install_build_results(commands.build_results) else: commands.init() commands.install_build_results(commands.build_results) commands.clean() if config_opts["createrepo_on_rpms"]: log.info("Running createrepo on binary rpms in resultdir") with buildroot.uid_manager: cmd = shlex.split(config_opts["createrepo_command"]) cmd.append(buildroot.resultdir) util.do(cmd) rebuild_generic(srpms, commands, buildroot, config_opts, cmd=build, post=post_build, clean=clean)
def do_rebuild(config_opts, commands, buildroot, srpms): "rebuilds a list of srpms using provided chroot" if len(srpms) < 1: log.critical("No package specified to rebuild command.") sys.exit(50) util.checkSrpmHeaders(srpms) clean = config_opts['clean'] and not config_opts['scm'] def build(srpm): commands.build(srpm, timeout=config_opts['rpmbuild_timeout'], check=config_opts['check']) def post_build(): if config_opts['post_install']: if buildroot.chroot_was_initialized: commands.install_build_results(commands.build_results) else: commands.init() commands.install_build_results(commands.build_results) commands.clean() if config_opts["createrepo_on_rpms"]: log.info("Running createrepo on binary rpms in resultdir") with buildroot.uid_manager: cmd = shlex.split(config_opts["createrepo_command"]) cmd.append(buildroot.resultdir) util.do(cmd) rebuild_generic(srpms, commands, buildroot, config_opts, cmd=build, post=post_build, clean=clean)
def do_rebuild(config_opts, commands, buildroot, srpms): "rebuilds a list of srpms using provided chroot" if len(srpms) < 1: log.critical("No package specified to rebuild command.") sys.exit(50) util.checkSrpmHeaders(srpms) clean = config_opts['clean'] and not config_opts['scm'] def build(srpm): commands.build(srpm, timeout=config_opts['rpmbuild_timeout'], check=config_opts['check']) def createrepo_on_rpms(): if config_opts["createrepo_on_rpms"]: log.info("Running createrepo on binary rpms in resultdir") buildroot.uid_manager.dropPrivsTemp() cmd = config_opts["createrepo_command"].split() cmd.append(buildroot.resultdir) util.do(cmd) buildroot.uid_manager.restorePrivs() rebuild_generic(srpms, commands, buildroot, config_opts, cmd=build, post=createrepo_on_rpms, clean=clean)
def run_command(options, args, config_opts, commands, buildroot, state): # TODO separate this # Fetch and prepare sources from SCM if config_opts['scm']: try: import mockbuild.scm except ImportError as e: raise mockbuild.exception.BadCmdline( "Mock SCM module not installed: %s. You should install package mock-scm." % e) scmWorker = mockbuild.scm.scmWorker(log, config_opts['scm_opts'], config_opts['macros']) with buildroot.uid_manager: scmWorker.get_sources() (options.sources, options.spec) = scmWorker.prepare_sources() if options.mode == 'init': if config_opts['clean']: commands.clean() commands.init() elif options.mode == 'clean': if len(options.scrub) == 0: commands.clean() else: commands.scrub(options.scrub) elif options.mode == 'shell': if len(args): cmd = args else: cmd = None commands.init(do_log=False) sys.exit(commands.shell(options, cmd)) elif options.mode == 'chroot': if len(args) == 0: log.critical("You must specify a command to run with --chroot") sys.exit(50) commands.init(do_log=True) commands.chroot(args, options) elif options.mode == 'installdeps': if len(args) == 0: log.critical("You must specify an SRPM file with --installdeps") sys.exit(50) util.checkSrpmHeaders(args, plainRpmOk=1) commands.init() commands.installSrpmDeps(*args) elif options.mode == 'install': if len(args) == 0: log.critical("You must specify a package list to install.") sys.exit(50) commands.init() commands.install(*args) elif options.mode == 'update': commands.init() buildroot.pkg_manager.execute('update', *args) elif options.mode == 'remove': if len(args) == 0: log.critical("You must specify a package list to remove.") sys.exit(50) commands.init() commands.remove(*args) elif options.mode == 'rebuild': if config_opts['scm']: srpm = do_buildsrpm(config_opts, commands, buildroot, options, args) if srpm: args.append(srpm) scmWorker.clean() do_rebuild(config_opts, commands, buildroot, args) elif options.mode == 'buildsrpm': do_buildsrpm(config_opts, commands, buildroot, options, args) elif options.mode == 'orphanskill': util.orphansKill(buildroot.make_chroot_path()) elif options.mode == 'copyin': commands.init() if len(args) < 2: log.critical("Must have source and destinations for copyin") sys.exit(50) dest = buildroot.make_chroot_path(args[-1]) if len(args) > 2 and not os.path.isdir(dest): log.critical("multiple source files and %s is not a directory!", dest) sys.exit(50) args = args[:-1] for src in args: if not os.path.lexists(src): log.critical("No such file or directory: %s", src) sys.exit(50) log.info("copying %s to %s", src, dest) if os.path.isdir(src): dest2 = dest if os.path.exists(dest2): path_suffix = os.path.split(src)[1] dest2 = os.path.join(dest2, path_suffix) if os.path.exists(dest2): log.critical("Destination %s already exists!", dest2) sys.exit(50) shutil.copytree(src, dest2) else: shutil.copy(src, dest) buildroot.chown_home_dir() elif options.mode == 'copyout': commands.init() with buildroot.uid_manager: if len(args) < 2: log.critical("Must have source and destinations for copyout") sys.exit(50) dest = args[-1] sources = [] for arg in args[:-1]: matches = glob.glob(buildroot.make_chroot_path(arg.replace('~', buildroot.homedir))) if not matches: log.critical("%s not found", arg) sys.exit(50) sources += matches if len(sources) > 1 and not os.path.isdir(dest): log.critical("multiple source files and %s is not a directory!", dest) sys.exit(50) for src in sources: log.info("copying %s to %s", src, dest) if os.path.isdir(src): shutil.copytree(src, dest, symlinks=True) else: if os.path.islink(src): linkto = os.readlink(src) os.symlink(linkto, dest) else: shutil.copy(src, dest) elif options.mode in ('pm-cmd', 'yum-cmd', 'dnf-cmd'): log.info('Running %s %s', buildroot.pkg_manager.command, ' '.join(args)) commands.init() buildroot.pkg_manager.execute(*args) elif options.mode == 'snapshot': if len(args) < 1: log.critical("Requires a snapshot name") sys.exit(50) buildroot.plugins.call_hooks('make_snapshot', args[0], required=True) elif options.mode == 'rollback-to': if len(args) < 1: log.critical("Requires a snapshot name") sys.exit(50) buildroot.plugins.call_hooks('rollback_to', args[0], required=True) elif options.mode == 'remove_snapshot': if len(args) < 1: log.critical("Requires a snapshot name") sys.exit(50) buildroot.plugins.call_hooks('remove_snapshot', args[0], required=True) elif options.mode == 'umount': buildroot.plugins.call_hooks('umount_root') elif options.mode == 'mount': buildroot.plugins.call_hooks('mount_root') buildroot.nuke_rpm_db() state.finish("run") state.alldone()
def run_command(options, args, config_opts, commands, buildroot, state): result = 0 # TODO separate this # Fetch and prepare sources from SCM if config_opts['scm']: try: from mockbuild import scm except ImportError as e: raise mockbuild.exception.BadCmdline( "Mock SCM module not installed: %s. You should install package mock-scm." % e) scmWorker = scm.scmWorker(log, config_opts, config_opts['macros']) with buildroot.uid_manager: scmWorker.get_sources() (options.sources, options.spec) = scmWorker.prepare_sources() if options.mode == 'init': if config_opts['clean']: commands.clean() commands.init() elif options.mode == 'clean': if len(options.scrub) == 0: commands.clean() else: commands.scrub(options.scrub) elif options.mode == 'chain': if len(args) == 0: log.critical("You must specify an SRPM file with --chain") return 50 commands.init(do_log=True) result = commands.chain(args, options, buildroot) elif options.mode == 'shell': if len(args): cmd = args else: cmd = None commands.init(do_log=False) return commands.shell(options, cmd) elif options.mode == 'chroot': if len(args) == 0: log.critical("You must specify a command to run with --chroot") return 50 commands.init(do_log=True) commands.chroot(args, options) elif options.mode == 'installdeps': if len(args) == 0: log.critical("You must specify an SRPM file with --installdeps") return 50 commands.init() rpms = [] for file in args: if os.path.splitext(file)[1] == ".spec": commands.installSpecDeps(file) else: rpms.append(file) if rpms: util.checkSrpmHeaders(rpms, plainRpmOk=1) commands.installSrpmDeps(*rpms) elif options.mode == 'install': if len(args) == 0: log.critical("You must specify a package list to install.") return 50 commands.init() commands.install(*args) elif options.mode == 'update': commands.init() buildroot.pkg_manager.execute('update', *args) elif options.mode == 'remove': if len(args) == 0: log.critical("You must specify a package list to remove.") return 50 commands.init() commands.remove(*args) elif options.mode == 'rebuild': if config_opts['scm'] or (options.spec and options.sources): srpm = mockbuild.rebuild.do_buildsrpm(config_opts, commands, buildroot, options, args) if srpm: args.append(srpm) if config_opts['scm']: scmWorker.clean() options.spec = None options.sources = None else: config_opts['clean'] = False mockbuild.rebuild.do_rebuild(config_opts, commands, buildroot, options, args) elif options.mode == 'buildsrpm': mockbuild.rebuild.do_buildsrpm(config_opts, commands, buildroot, options, args) elif options.mode == 'debugconfig': do_debugconfig(config_opts) elif options.mode == 'orphanskill': util.orphansKill(buildroot.make_chroot_path()) elif options.mode == 'copyin': commands.init() if len(args) < 2: log.critical("Must have source and destinations for copyin") return 50 dest = buildroot.make_chroot_path(args[-1]) if len(args) > 2 and not os.path.isdir(dest): log.critical("multiple source files and %s is not a directory!", dest) return 50 args = args[:-1] for src in args: if not os.path.lexists(src): log.critical("No such file or directory: %s", src) return 50 log.info("copying %s to %s", src, dest) if os.path.isdir(src): dest2 = dest if os.path.exists(dest2): path_suffix = os.path.split(src)[1] dest2 = os.path.join(dest2, path_suffix) if os.path.exists(dest2): log.critical("Destination %s already exists!", dest2) return 50 shutil.copytree(src, dest2) else: shutil.copy(src, dest) buildroot.chown_home_dir() elif options.mode == 'copyout': commands.init() with buildroot.uid_manager: if len(args) < 2: log.critical("Must have source and destinations for copyout") return 50 dest = args[-1] sources = [] for arg in args[:-1]: matches = glob.glob( buildroot.make_chroot_path( arg.replace('~', buildroot.homedir))) if not matches: log.critical("%s not found", arg) return 50 sources += matches if len(sources) > 1 and not os.path.isdir(dest): log.critical( "multiple source files and %s is not a directory!", dest) return 50 for src in sources: log.info("copying %s to %s", src, dest) if os.path.isdir(src): shutil.copytree(src, dest, symlinks=True) else: if os.path.islink(src): linkto = os.readlink(src) os.symlink(linkto, dest) else: shutil.copy(src, dest) elif options.mode in ('pm-cmd', 'yum-cmd', 'dnf-cmd'): log.info('Running %s %s', buildroot.pkg_manager.command, ' '.join(args)) commands.init() buildroot.pkg_manager.execute(*args) elif options.mode == 'snapshot': if len(args) < 1: log.critical("Requires a snapshot name") return 50 buildroot.plugins.call_hooks('make_snapshot', args[0], required=True) if buildroot.bootstrap_buildroot is not None: buildroot.bootstrap_buildroot.plugins.call_hooks('make_snapshot', args[0], required=True) elif options.mode == 'rollback-to': if len(args) < 1: log.critical("Requires a snapshot name") return 50 buildroot.plugins.call_hooks('rollback_to', args[0], required=True) if buildroot.bootstrap_buildroot is not None: buildroot.bootstrap_buildroot.plugins.call_hooks('rollback_to', args[0], required=True) elif options.mode == 'remove_snapshot': if len(args) < 1: log.critical("Requires a snapshot name") return 50 buildroot.plugins.call_hooks('remove_snapshot', args[0], required=True) if buildroot.bootstrap_buildroot is not None: buildroot.bootstrap_buildroot.plugins.call_hooks('remove_snapshot', args[0], required=True) elif options.mode == 'umount': buildroot.plugins.call_hooks('umount_root') if buildroot.bootstrap_buildroot is not None: buildroot.bootstrap_buildroot.plugins.call_hooks('umount_root') elif options.mode == 'mount': buildroot.plugins.call_hooks('mount_root') if buildroot.bootstrap_buildroot is not None: buildroot.bootstrap_buildroot.plugins.call_hooks('mount_root') buildroot.nuke_rpm_db() state.finish("run") state.alldone() return result
def run_command(options, args, config_opts, commands, buildroot, state): #TODO separate this # Fetch and prepare sources from SCM if config_opts['scm']: scmWorker = mockbuild.scm.scmWorker(log, config_opts['scm_opts'], config_opts['macros']) buildroot.uid_manager.dropPrivsTemp() scmWorker.get_sources() buildroot.uid_manager.restorePrivs() (options.sources, options.spec) = scmWorker.prepare_sources() # security cleanup (don't need/want this in the chroot) if 'SSH_AUTH_SOCK' in os.environ: del os.environ['SSH_AUTH_SOCK'] if options.mode == 'init': if config_opts['clean']: commands.clean() commands.init() elif options.mode == 'clean': if len(options.scrub) == 0: commands.clean() else: commands.scrub(options.scrub) elif options.mode == 'shell': if len(args): cmd = args else: cmd = None commands.init(do_log=False) sys.exit(commands.shell(options, cmd)) elif options.mode == 'chroot': if len(args) == 0: log.critical("You must specify a command to run with --chroot") sys.exit(50) commands.init(do_log=True) commands.chroot(args, options) elif options.mode == 'installdeps': if len(args) == 0: log.critical("You must specify an SRPM file with --installdeps") sys.exit(50) util.checkSrpmHeaders(args, plainRpmOk=1) commands.init() commands.installSrpmDeps(*args) elif options.mode == 'install': if len(args) == 0: log.critical("You must specify a package list to install.") sys.exit(50) commands.init() commands.install(*args) elif options.mode == 'update': commands.init() buildroot.pkg_manager.execute('update', *args) elif options.mode == 'remove': if len(args) == 0: log.critical("You must specify a package list to remove.") sys.exit(50) commands.init() commands.remove(*args) elif options.mode == 'rebuild': if config_opts['scm']: srpm = do_buildsrpm(config_opts, commands, buildroot, options, args) if srpm: args.append(srpm) scmWorker.clean() do_rebuild(config_opts, commands, buildroot, args) elif options.mode == 'buildsrpm': do_buildsrpm(config_opts, commands, buildroot, options, args) elif options.mode == 'orphanskill': util.orphansKill(buildroot.make_chroot_path()) elif options.mode == 'copyin': commands.init() if len(args) < 2: log.critical("Must have source and destinations for copyin") sys.exit(50) dest = buildroot.make_chroot_path(args[-1]) if len(args) > 2 and not os.path.isdir(dest): log.critical("multiple source files and %s is not a directory!" % dest) sys.exit(50) args = args[:-1] for src in args: if not os.path.lexists(src): log.critical("No such file or directory: {0}".format(src)) sys.exit(50) log.info("copying %s to %s" % (src, dest)) if os.path.isdir(src): if os.path.exists(dest): path_suffix = os.path.split(src)[1] dest = os.path.join(dest, path_suffix) if os.path.exists(dest): log.critical( "Destination %{0} already exist!".format(dest)) sys.exit(50) shutil.copytree(src, dest) else: shutil.copy(src, dest) buildroot.chown_home_dir() elif options.mode == 'copyout': commands.init() buildroot.uid_manager.dropPrivsTemp() try: if len(args) < 2: log.critical("Must have source and destinations for copyout") sys.exit(50) dest = args[-1] sources = [] for arg in args[:-1]: matches = glob.glob( buildroot.make_chroot_path( arg.replace('~', buildroot.homedir))) if not matches: log.critical("%s not found" % arg) sys.exit(50) sources += matches if len(sources) > 1 and not os.path.isdir(dest): log.critical( "multiple source files and %s is not a directory!" % dest) sys.exit(50) for src in sources: log.info("copying %s to %s" % (src, dest)) if os.path.isdir(src): shutil.copytree(src, dest, symlinks=True) else: if os.path.islink(src): linkto = os.readlink(src) os.symlink(linkto, dest) else: shutil.copy(src, dest) finally: buildroot.uid_manager.restorePrivs() elif options.mode in ('pm-cmd', 'yum-cmd', 'dnf-cmd'): log.info('Running {0} {1}'.format(buildroot.pkg_manager.command, ' '.join(args))) commands.init() buildroot.pkg_manager.execute(*args) elif options.mode == 'snapshot': if len(args) < 1: log.critical("Requires a snapshot name") sys.exit(50) buildroot.plugins.call_hooks('make_snapshot', args[0], required=True) elif options.mode == 'rollback-to': if len(args) < 1: log.critical("Requires a snapshot name") sys.exit(50) buildroot.plugins.call_hooks('rollback_to', args[0], required=True) elif options.mode == 'remove_snapshot': if len(args) < 1: log.critical("Requires a snapshot name") sys.exit(50) buildroot.plugins.call_hooks('remove_snapshot', args[0], required=True) elif options.mode == 'umount': buildroot.plugins.call_hooks('umount_root') elif options.mode == 'mount': buildroot.plugins.call_hooks('mount_root') buildroot._nuke_rpm_db() state.finish("run") state.alldone() buildroot.finalize()
def run_command(options, args, config_opts, commands, buildroot, state): #TODO separate this # Fetch and prepare sources from SCM if config_opts['scm']: scmWorker = mockbuild.scm.scmWorker(log, config_opts['scm_opts'], config_opts['macros']) scmWorker.get_sources() (options.sources, options.spec) = scmWorker.prepare_sources() if options.mode == 'init': if config_opts['clean']: commands.clean() commands.init() elif options.mode == 'clean': if len(options.scrub) == 0: commands.clean() else: commands.scrub(options.scrub) elif options.mode == 'shell': if len(args): cmd = ' '.join(args) else: cmd = None commands.init(do_log=False) sys.exit(commands.shell(options, cmd)) elif options.mode == 'chroot': if not os.path.exists(buildroot.make_chroot_path()): raise mockbuild.exception.ChrootNotInitialized("chroot %s not initialized!" % buildroot.make_chroot_path()) if len(args) == 0: log.critical("You must specify a command to run with --chroot") sys.exit(50) commands.init(do_log=False) commands.chroot(args, options) elif options.mode == 'installdeps': if len(args) == 0: log.critical("You must specify an SRPM file with --installdeps") sys.exit(50) util.checkSrpmHeaders(args, plainRpmOk=1) commands.init() commands.installSrpmDeps(*args) elif options.mode == 'install': if len(args) == 0: log.critical("You must specify a package list to install.") sys.exit(50) commands.init() commands.install(*args) elif options.mode == 'update': commands.init() commands.update() elif options.mode == 'remove': if len(args) == 0: log.critical("You must specify a package list to remove.") sys.exit(50) commands.init() commands.remove(*args) elif options.mode == 'rebuild': if config_opts['scm']: srpm = do_buildsrpm(config_opts, commands, buildroot, options, args) if srpm: args.append(srpm) scmWorker.clean() do_rebuild(config_opts, commands, buildroot, args) elif options.mode == 'buildsrpm': do_buildsrpm(config_opts, commands, buildroot, options, args) elif options.mode == 'orphanskill': util.orphansKill(buildroot.make_chroot_path()) elif options.mode == 'copyin': commands.init() #uidManager.dropPrivsForever() if len(args) < 2: log.critical("Must have source and destinations for copyin") sys.exit(50) dest = buildroot.make_chroot_path(args[-1]) if len(args) > 2 and not os.path.isdir(dest): log.critical("multiple source files and %s is not a directory!" % dest) sys.exit(50) args = args[:-1] import shutil for src in args: log.info("copying %s to %s" % (src, dest)) if os.path.isdir(src): shutil.copytree(src, dest) else: shutil.copy(src, dest) elif options.mode == 'copyout': commands.init() buildroot.uid_manager.dropPrivsTemp() if len(args) < 2: log.critical("Must have source and destinations for copyout") sys.exit(50) dest = args[-1] if len(args) > 2 and not os.path.isdir(dest): log.critical("multiple source files and %s is not a directory!" % dest) sys.exit(50) args = args[:-1] import shutil for f in args: src = buildroot.make_chroot_path(f) log.info("copying %s to %s" % (src, dest)) if os.path.isdir(src): shutil.copytree(src, dest, symlinks=True) else: if os.path.islink(src): linkto = os.readlink(src) os.symlink(linkto, dst) else: shutil.copy(src, dest) buildroot.uid_manager.restorePrivs() elif options.mode in ('pm-cmd', 'yum-cmd', 'dnf-cmd'): log.info('Running {0} {1}'.format(buildroot.pkg_manager.command, ' '.join(args))) commands.init() buildroot.pkg_manager.execute(*args) elif options.mode == 'snapshot': if len(args) < 1: log.critical("Requires a snapshot name") sys.exit(50) buildroot.plugins.call_hooks('make_snapshot', args[0], required=True) elif options.mode == 'rollback-to': if len(args) < 1: log.critical("Requires a snapshot name") sys.exit(50) buildroot.plugins.call_hooks('rollback_to', args[0], required=True) elif options.mode == 'remove_snapshot': if len(args) < 1: log.critical("Requires a snapshot name") sys.exit(50) buildroot.plugins.call_hooks('remove_snapshot', args[0], required=True) elif options.mode == 'umount': buildroot.plugins.call_hooks('umount_root') buildroot._nuke_rpm_db() state.finish("run") state.alldone() buildroot.finalize()