This is an automated email from the ASF dual-hosted git repository. fgerlits pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git
commit 4ff993eb671fdfb3d57841d7c2937582bacb1bac Author: Martin Zink <[email protected]> AuthorDate: Thu Jul 4 15:48:21 2024 +0200 MINIFICPP-2374 Add python bootstrap support for fedora, debian and openSUSE Signed-off-by: Ferenc Gerlits <[email protected]> This closes #1841 --- bootstrap/package_manager.py | 47 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 43 insertions(+), 4 deletions(-) diff --git a/bootstrap/package_manager.py b/bootstrap/package_manager.py index 96cb3a909..38ffe3637 100644 --- a/bootstrap/package_manager.py +++ b/bootstrap/package_manager.py @@ -139,12 +139,17 @@ class AptPackageManager(PackageManager): class DnfPackageManager(PackageManager): - def __init__(self, no_confirm): + def __init__(self, no_confirm, needs_epel): PackageManager.__init__(self, no_confirm) + self.needs_epel = needs_epel def install(self, dependencies: Dict[str, Set[str]]) -> bool: + if self.needs_epel: + install_cmd = "sudo dnf --enablerepo=crb install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm" + else: + install_cmd = "sudo dnf install -y" return self._install(dependencies=dependencies, - install_cmd="sudo dnf --enablerepo=crb install -y epel-release", + install_cmd=install_cmd, replace_dict={"gpsd": {"gpsd-devel"}, "python": {"python3-devel"}}) @@ -177,6 +182,36 @@ class PacmanPackageManager(PackageManager): return "" +class ZypperPackageManager(PackageManager): + def __init__(self, no_confirm): + PackageManager.__init__(self, no_confirm) + + def install(self, dependencies: Dict[str, Set[str]]) -> bool: + return self._install(dependencies=dependencies, + install_cmd="sudo zypper install -y", + replace_dict={"libarchive": {"libarchive-devel"}, + "python": {"python3-devel"}}) + + def _get_installed_packages(self) -> Set[str]: + result = subprocess.run(['zypper', 'se', '--installed-only'], text=True, capture_output=True, check=True) + lines = result.stdout.splitlines() + packages = set() + for line in lines: + if line.startswith('S |') or line.startswith('--') or line.startswith(' ') or not line: + continue + + parts = line.split('|') + if len(parts) > 2: + package_name = parts[1].strip() + packages.add(package_name) + + return packages + + def install_compiler(self) -> str: + self.install({"compiler": {"gcc-c++"}}) + return "" + + def _get_vs_dev_cmd_path(vs_where_location: VsWhereLocation): if vs_where_location == VsWhereLocation.CHOCO: vs_where_path = "vswhere" @@ -293,12 +328,16 @@ def get_package_manager(no_confirm: bool) -> PackageManager: return BrewPackageManager(no_confirm) elif platform_system == "Linux": distro_id = distro.id() - if distro_id == "ubuntu": + if distro_id == "ubuntu" or "debian" in distro_id: return AptPackageManager(no_confirm) elif "arch" in distro_id or "manjaro" in distro_id: return PacmanPackageManager(no_confirm) elif "rocky" in distro_id: - return DnfPackageManager(no_confirm) + return DnfPackageManager(no_confirm, True) + elif "fedora" in distro_id: + return DnfPackageManager(no_confirm, False) + elif "opensuse" in distro_id: + return ZypperPackageManager(no_confirm) else: sys.exit(f"Unsupported platform {distro_id} exiting") elif platform_system == "Windows":
