def setup_repositories(self, clear_cache=False, signing_keys=None): """ Set up repositories for software installation and return a package manager for performing software installation tasks :return: Instance of PackageManager :rtype: PackageManager """ repository_options = [] repository_sections = \ self.xml_state.get_repository_sections_used_for_build() package_manager = self.xml_state.get_package_manager() if self.xml_state.get_rpm_check_signatures(): repository_options.append('check_signatures') if self.xml_state.get_rpm_excludedocs(): repository_options.append('exclude_docs') repo = Repository(self.root_bind, package_manager, repository_options) if signing_keys: repo.import_trusted_keys(signing_keys) for xml_repo in repository_sections: repo_type = xml_repo.get_type() repo_source = xml_repo.get_source().get_path() repo_user = xml_repo.get_username() repo_secret = xml_repo.get_password() repo_alias = xml_repo.get_alias() repo_priority = xml_repo.get_priority() repo_dist = xml_repo.get_distribution() repo_components = xml_repo.get_components() repo_repository_gpgcheck = xml_repo.get_repository_gpgcheck() repo_package_gpgcheck = xml_repo.get_package_gpgcheck() log.info('Setting up repository %s', repo_source) log.info('--> Type: %s', repo_type) if repo_priority: log.info('--> Priority: %s', repo_priority) uri = Uri(repo_source, repo_type) repo_source_translated = uri.translate() log.info('--> Translated: %s', repo_source_translated) if not repo_alias: repo_alias = uri.alias() log.info('--> Alias: %s', repo_alias) if not uri.is_remote() and not os.path.exists( repo_source_translated): log.warning('repository %s does not exist and will be skipped', repo_source) continue if not uri.is_remote(): self.root_bind.mount_shared_directory(repo_source_translated) repo.add_repo(repo_alias, repo_source_translated, repo_type, repo_priority, repo_dist, repo_components, repo_user, repo_secret, uri.credentials_file_name(), repo_repository_gpgcheck, repo_package_gpgcheck) if clear_cache: repo.delete_repo_cache(repo_alias) self.uri_list.append(uri) repo.cleanup_unused_repos() return PackageManager(repo, package_manager)
def pinch_system(self, manager=None, force=False): """ Delete packages marked for deletion in the XML description. If force param is set to False uninstalls packages marked with `type="uninstall"` if any; if force is set to True deletes packages marked with `type="delete"` if any. :param object manager: instance of :class:`PackageManager` :param bool force: Forced deletion True|False :raises KiwiPackagesDeletePhaseFailed: if the deletion packages process fails """ to_become_deleted_packages = \ self.xml_state.get_to_become_deleted_packages(force) if to_become_deleted_packages: log.info('{0} system packages (chroot)'.format( 'Force deleting' if force else 'Uninstalling')) try: if manager is None: package_manager = self.xml_state.get_package_manager() manager = PackageManager( Repository(self.root_bind, package_manager), package_manager) self.delete_packages(manager, to_become_deleted_packages, force) except Exception as issue: raise KiwiPackagesDeletePhaseFailed( self.issue_message.format( headline='System package deletion failed', reason=issue))
def clean_package_manager_leftovers(self): """ This methods cleans some package manager artifacts created at run time such as macros """ package_manager = self.xml_state.get_package_manager() manager = PackageManager( Repository(self.root_bind, package_manager), package_manager ) manager.clean_leftovers()
def test_package_manager_not_implemented(self): with raises(KiwiPackageManagerSetupError): PackageManager('repository', 'ms-manager')
def test_manager_pacman(self, mock_manager): repository = Mock() PackageManager(repository, 'pacman') mock_manager.assert_called_once_with(repository, None)
def test_manager_apt(self, mock_manager): repository = Mock() PackageManager(repository, 'apt-get') mock_manager.assert_called_once_with(repository, None)
def test_manager_yum(self, mock_manager): repository = mock.Mock() PackageManager(repository, 'yum') mock_manager.assert_called_once_with(repository, None)
def test_package_manager_not_implemented(self): PackageManager('repository', 'ms-manager')
def test_manager_microdnf(self, mock_manager): repository = Mock() PackageManager(repository, 'microdnf') mock_manager.assert_called_once_with(repository, None)