Example #1
0
 def pre_build():
     build_requirements = self.requirements.get("build-requires")
     if build_requirements:
         utils.log_iterable(build_requirements,
                            header="Installing build requirements",
                            logger=LOG)
         self.helper.transaction(install_pkgs=build_requirements,
                                 tracewriter=self.tracewriter)
     build_requirements = ''
     try:
         build_requirements = sh.load_file(self.rpm_build_requires_filename)
     except IOError as e:
         if e.errno != errno.ENOENT:
             raise
     build_requirements = set(pkg_resources.yield_lines(build_requirements))
     for repo_name in self.REPOS:
         repo_dir = sh.joinpths(self.anvil_repo_dir, self.SRC_REPOS[repo_name])
         matched_paths = []
         paths = list_src_rpms(repo_dir)
         envra_details = self.envra_helper.explode(*paths)
         for (path, envra_detail) in zip(paths, envra_details):
             package_name = envra_detail.get('name')
             if package_name in build_requirements:
                 matched_paths.append(path)
                 build_requirements.discard(package_name)
         if matched_paths:
             with sh.remove_before(self.prebuild_dir) as prebuild_dir:
                 if not sh.isdir(prebuild_dir):
                     sh.mkdirslist(prebuild_dir, tracewriter=self.tracewriter)
                 for path in matched_paths:
                     sh.move(path, sh.joinpths(prebuild_dir, sh.basename(path)))
                 build(prebuild_dir, repo_name,
                       'Prebuilding %s RPM packages from their SRPMs'
                       ' for repo %s using %s jobs')
     return build_requirements
Example #2
0
 def build(repo_dir, repo_name, header_tpl):
     repo_files = list_src_rpms(repo_dir)
     if not repo_files:
         return
     utils.log_iterable(repo_files,
                        header=header_tpl % (len(repo_files),
                                             self.SRC_REPOS[repo_name],
                                             self.jobs),
                        logger=LOG)
     rpmbuild_flags = "--rebuild"
     if self.opts.get("usr_only", False):
         rpmbuild_flags += " --define 'usr_only 1'"
     with sh.remove_before(self.rpmbuild_dir):
         self._create_rpmbuild_subdirs()
         try:
             self.py2rpm_helper.build_all_binaries(repo_name,
                                                   repo_dir,
                                                   rpmbuild_flags,
                                                   self.tracewriter,
                                                   self.jobs)
         finally:
             # If we made any rpms (even if a failure happened, make
             # sure that we move them to the right target repo).
             if move_rpms(repo_name) > 0:
                 self._create_repo(repo_name)
Example #3
0
File: yum.py Project: jzako/anvil
 def package_instance(self, instance):
     with sh.remove_before(self.rpmbuild_dir):
         self._create_rpmbuild_subdirs()
         if instance.name in ["general"]:
             self._build_dependencies()
             self._record_srpm_files(self._move_srpms("anvil-deps"))
         else:
             # Meta packages don't get built.
             app_dir = instance.get_option("app_dir")
             if sh.isdir(app_dir):
                 self._build_openstack_package(instance)
                 self._record_srpm_files(self._move_srpms("anvil"))
Example #4
0
File: yum.py Project: jzako/anvil
 def pre_build():
     build_requirements = self.requirements.get("build-requires")
     if build_requirements:
         utils.log_iterable(build_requirements,
                            header="Installing build requirements",
                            logger=LOG)
         self.helper.transaction(install_pkgs=build_requirements,
                                 tracewriter=self.tracewriter)
     build_requirements = []
     try:
         build_requirements.extend(_get_lines(self.rpm_build_requires_filename))
     except IOError as e:
         if e.errno != errno.ENOENT:
             raise
     built_files = []
     built_requirements = []
     for repo_name in self.REPOS:
         repo_dir = sh.joinpths(self.anvil_repo_dir, self.SRC_REPOS[repo_name])
         matched_paths = []
         available_paths = list_src_rpms(repo_dir)
         envra_path_details = self.envra_helper.explode(*available_paths)
         for (path, envra_detail) in zip(available_paths, envra_path_details):
             package_name = envra_detail.get('name')
             if package_name in build_requirements:
                 matched_paths.append(path)
                 built_requirements.append(package_name)
         if matched_paths:
             with sh.remove_before(self.prebuild_dir) as prebuild_dir:
                 sh.mkdirslist(prebuild_dir, tracewriter=self.tracewriter)
                 for path in matched_paths:
                     sh.copy(path,
                             sh.joinpths(prebuild_dir, sh.basename(path)))
                 built_files.extend(
                     build(prebuild_dir, repo_name,
                           'Prebuilding %s RPM packages from their'
                           ' SRPMs for repo %s using %s jobs',
                           "%s-prebuild" % self.group, built_files))
     leftover_requirements = set()
     for req in build_requirements:
         if req not in built_requirements:
             leftover_requirements.add(req)
     return (leftover_requirements, built_files)
Example #5
0
File: yum.py Project: jzako/anvil
 def build(repo_dir, repo_name, header_tpl, group, built_files):
     repo_files = []
     for srpm in list_src_rpms(repo_dir):
         if srpm not in built_files:
             repo_files.append(srpm)
     if not repo_files:
         return []
     utils.log_iterable(repo_files,
                        header=header_tpl % (len(repo_files),
                                             self.SRC_REPOS[repo_name],
                                             self.jobs),
                        logger=LOG)
     rpmbuild_flags = "--rebuild"
     if self.opts.get("usr_only", False):
         rpmbuild_flags += " --define 'usr_only 1'"
     if self.opts.get("overwrite_configs", False):
         rpmbuild_flags += " --define 'overwrite_configs 1'"
     with sh.remove_before(self.rpmbuild_dir):
         self._create_rpmbuild_subdirs()
         # This is needed so that make correctly identifies the right
         # files and the right *.mark files and so-on; instead of
         # grabbing all the files (including ones we don't want to
         # build just yet...)
         files_dirname = '%s-%s-build' % (repo_name, group)
         files_dir = sh.joinpths(self.deps_dir, files_dirname)
         sh.mkdirslist(files_dir)
         for srpm in repo_files:
             sh.copy(srpm, sh.joinpths(files_dir, sh.basename(srpm)))
         try:
             self.py2rpm_helper.build_all_binaries(repo_name,
                                                   files_dir,
                                                   rpmbuild_flags,
                                                   self.tracewriter,
                                                   self.jobs)
         finally:
             # If we made any rpms (even if a failure happened, make
             # sure that we move them to the right target repo).
             moved_rpms = move_rpms(repo_name)
             if len(moved_rpms) > 0:
                 self._create_repo(repo_name)
     return repo_files
Example #6
0
    def build_binary(self):
        def is_src_rpm(path):
            if not path:
                return False
            if not sh.isfile(path):
                return False
            if not path.lower().endswith('.src.rpm'):
                return False
            return True

        def list_src_rpms(path):
            path_files = []
            if sh.isdir(path):
                path_files = sh.listdir(path, filter_func=is_src_rpm)
            return sorted(path_files)

        def move_rpms(repo_name):
            repo_dir = sh.joinpths(self.anvil_repo_dir, repo_name)
            search_dirs = [
                sh.joinpths(self.rpmbuild_dir, "RPMS"),
            ]
            for sub_dir in sh.listdir(self.rpmbuild_dir, dirs_only=True):
                search_dirs.append(sh.joinpths(sub_dir, "RPMS"))
            moved = 0
            for d in search_dirs:
                moved += self._move_rpm_files(d, repo_dir)
            return moved

        build_requirements = self.requirements.get("build-requires")
        if build_requirements:
            utils.log_iterable(build_requirements,
                               header="Installing build requirements",
                               logger=LOG)
            self.helper.transaction(install_pkgs=build_requirements,
                                    tracewriter=self.tracewriter)

        for repo_name in self.REPOS:
            src_repo_dir = sh.joinpths(self.anvil_repo_dir, self.SRC_REPOS[repo_name])
            src_repo_files = list_src_rpms(src_repo_dir)
            if not src_repo_files:
                continue
            utils.log_iterable(src_repo_files,
                               header=('Building %s RPM packages from their'
                                       ' SRPMs for repo %s using %s jobs') %
                                      (len(src_repo_files), self.SRC_REPOS[repo_name], self.jobs),
                               logger=LOG)
            rpmbuild_flags = "--rebuild"
            if self.opts.get("usr_only", False):
                rpmbuild_flags += " --define 'usr_only 1'"
            with sh.remove_before(self.rpmbuild_dir):
                self._create_rpmbuild_subdirs()
                try:
                    self.py2rpm_helper.build_all_binaries(repo_name,
                                                          src_repo_dir,
                                                          rpmbuild_flags,
                                                          self.tracewriter,
                                                          self.jobs)
                finally:
                    # If we made any rpms (even if a failure happened, make
                    # sure that we move them to the right target repo).
                    if move_rpms(repo_name) > 0:
                        self._create_repo(repo_name)