Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
    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
Ejemplo n.º 3
0
    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
Ejemplo n.º 4
0
 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)
Ejemplo n.º 5
0
 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
Ejemplo n.º 6
0
 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
Ejemplo n.º 7
0
    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)