def _kernel_install_koji(self, koji_tag, package="kernel", dep_pkgs=None, need_reboot=True): sm = software_manager.SoftwareManager() for utility in ['/usr/bin/koji', '/usr/bin/brew']: if not os.access(utility, os.X_OK): logging.debug("%s missing - trying to install", utility) pkg = sm.provides(utility) if pkg is not None: sm.install(pkg) else: logging.error("No %s available on software sources" % utility) # First, download packages via koji/brew c = utils_misc.KojiClient() deps_rpms = "" if dep_pkgs: for p in dep_pkgs.split(): logging.info('Fetching kernel dependencies: %s', p) k_dep = utils_misc.KojiPkgSpec(tag=koji_tag, package=p, subpackages=[p]) c.get_pkgs(k_dep, self.bindir) deps_rpms += " " deps_rpms += os.path.join(self.bindir, c.get_pkg_rpm_file_names(k_dep)[0]) k = utils_misc.KojiPkgSpec(tag=koji_tag, package=package, subpackages=[package]) c.get_pkgs(k, self.bindir) rpm_file = os.path.join(self.bindir, c.get_pkg_rpm_file_names(k)[0]) # Then install kernel rpm packages. self._kernel_install_rpm(rpm_file, deps_rpms, need_reboot)
def _expand_koji_pkgs_with_debuginfo(self): ''' Include debuginfo RPMs on koji_pkgs @returns: None ''' logging.debug("Koji package list to be updated with debuginfo pkgs") koji_pkgs_with_debug = [] for pkg_text in self.koji_pkgs: pkg = utils_misc.KojiPkgSpec(pkg_text) debuginfo_pkg_name = '%s-debuginfo' % pkg.package # if no subpackages are set, then all packages will be installed # so there's no need to manually include debuginfo packages if pkg.subpackages: # make sure we do not include the debuginfo package if # already specified in the list of subpackages if not debuginfo_pkg_name in pkg.subpackages: pkg.subpackages.append(debuginfo_pkg_name) pkg_with_debug_text = pkg.to_text() logging.debug("KojiPkgSpec with debuginfo package added: %s", pkg_with_debug_text) koji_pkgs_with_debug.append(pkg_with_debug_text) # swap current koji_pkgs with on that includes debuginfo pkgs self.koji_pkgs = koji_pkgs_with_debug
def _check_koji_packages(self): ''' Check if packages specification are valid and exist on koji/brew Configuration item on file is: koji_pkgs ''' all_packages_found = True if self.command_line_options.koji_pkg is not None: logging.debug('Checking koji packages specification') for pkg_spec_text in self.command_line_options.koji_pkg: pkg_spec = utils_misc.KojiPkgSpec(pkg_spec_text) if not (pkg_spec.is_valid() and self.koji_client.is_pkg_valid(pkg_spec)): logging.error('Koji package spec is not valid, skipping: ' '%s' % pkg_spec) all_packages_found = False else: rpms = self.koji_client.get_pkg_rpm_info( pkg_spec, self.command_line_options.koji_arch) for subpackage in pkg_spec.subpackages: if subpackage not in [rpm['name'] for rpm in rpms]: logging.error('Package specified but not found in ' 'koji: %s' % subpackage) all_packages_found = False rpms = ", ".join(rpm['nvr'] for rpm in rpms) logging.debug('Koji package spec is valid') logging.debug('Koji packages to be fetched and installed: ' '%s' % rpms) return all_packages_found
def _install_phase_download(self): koji_client = utils_misc.KojiClient(cmd=self.koji_cmd) for pkg_text in self.koji_pkgs: pkg = utils_misc.KojiPkgSpec(pkg_text) if pkg.is_valid(): koji_client.get_pkgs(pkg, dst_dir=self.test_srcdir) else: logging.error('Package specification (%s) is invalid: %s' % (pkg, pkg.describe_invalid())) for pkg_text in self.koji_scratch_pkgs: pkg = utils_misc.KojiScratchPkgSpec(pkg_text) koji_client.get_scratch_pkgs(pkg, dst_dir=self.test_srcdir)
def _get_rpm_file_names(self): all_rpm_file_names = [] koji_client = utils_misc.KojiClient(cmd=self.koji_cmd) for pkg_text in self.koji_pkgs: pkg = utils_misc.KojiPkgSpec(pkg_text) rpm_file_names = koji_client.get_pkg_rpm_file_names(pkg) all_rpm_file_names += rpm_file_names for scratch_pkg_text in self.koji_scratch_pkgs: pkg = utils_misc.KojiScratchPkgSpec(scratch_pkg_text) rpm_urls = koji_client.get_scratch_pkg_urls(pkg) file_names = map(os.path.basename, rpm_urls) all_rpm_file_names += file_names return all_rpm_file_names
def _get_rpm_names(self): all_rpm_names = [] koji_client = utils_misc.KojiClient(cmd=self.koji_cmd) for pkg_text in self.koji_pkgs: pkg = utils_misc.KojiPkgSpec(pkg_text) rpm_names = koji_client.get_pkg_rpm_names(pkg) all_rpm_names += rpm_names for scratch_pkg_text in self.koji_scratch_pkgs: pkg = utils_misc.KojiScratchPkgSpec(scratch_pkg_text) rpm_urls = koji_client.get_scratch_pkg_urls(pkg) file_names = map(os.path.basename, rpm_urls) for f in file_names: r = utils_misc.RPMFileNameInfo(f) all_rpm_names.append(r.get_nvr_info()['name']) return all_rpm_names
def main(self): self.parse_cmdline() self.koji_client = utils_misc.KojiClient() pkgs = [] if self.options.tag: utils_misc.set_default_koji_tag(self.options.tag) if self.options.config: tag, pkgs = self.get_koji_qemu_kvm_tag_pkgs(self.options.config) if tag is not None: utils_misc.set_default_koji_tag(tag) if pkgs is not None: pkgs = pkgs.split() else: pkgs = self.args if pkgs: for p in pkgs: koji_pkg_spec = utils_misc.KojiPkgSpec(p) self.check_koji_pkg_spec(koji_pkg_spec) self.print_koji_pkg_spec_info(koji_pkg_spec)