'apt', 'debian' => 'apt_get', 'fedora' => 'dnf', 'centos' => 'yum', 'arch linux' => 'pacman', 'arch' => 'pacman', 'opensuse' => 'zypper', 'gentoo' => 'emerge', 'slackware' => 'slackpkg', 'rhel' => 'yum', 'mageia' => 'dnf', 'alpine linux' => 'apk', 'alpine' => 'apk', 'manjaro' => 'pacman', 'linux mint' => 'apt', 'elementary os' => 'apt', 'solus' => 'eopkg', 'void linux' => 'xbps_install', 'mx linux' => 'apt', 'kali linux' => 'apt', 'pclinuxos' => 'apt_get', 'funtoo' => 'emerge', 'fedora silverblue' => 'rpm_ostree', // Add more distributions and their package managers as needed ]; $selected_distribution = strtolower($os); if (isset($linux_package_managers[$selected_distribution])) { return $linux_package_managers[$selected_distribution]; } return false; } private static function find_package_managers($pkg_mgr): string|false { $list = [ 'nala'=>'/usr/bin/nala', 'apt'=>'/usr/bin/apt', 'apt_get'=>'/usr/bin/apt-get', 'dnf'=>'/usr/bin/dnf', 'yum'=>'/usr/bin/yum', 'pacman'=>'/usr/bin/pacman', 'zypper'=>'/usr/bin/zypper', 'flatpak'=>'/usr/bin/flatpak', 'snap'=>'/usr/bin/snap', ]; foreach($list as $name=>$app) { if (is_executable($app)) { return $name; } } return false; } private static function get_OS_and_package_manager($pkg_mgr=false, $user_os = false) { $pkg_name = self::find_package_managers($pkg_mgr); if ($pkg_name !== false) { return $pkg_name; } $os = $GLOBALS['os']; $detected_os = $os['id'] ?? "ubuntu"; $selected_OS = ($user_os !== false) ? $user_os : $detected_os; return self::get_package_manager($selected_OS); } public static function is_installed(string $prog, $pkg_mgr=false, $user_os = false) { $pkg = self::get_OS_and_package_manager($pkg_mgr, $user_os); if ($pkg === false) { return false; } $namespaced = "\\package_managers\\{$pkg}::is_installed"; return $namespaced($prog); } public static function upgrade(string $prog, $pkg_mgr=false, $user_os = false) { $pkg = self::get_OS_and_package_manager($pkg_mgr, $user_os); if ($pkg === false) { return false; } $namespaced = "\\package_managers\\{$pkg}::upgrade"; return $namespaced($prog); } public static function install(string $prog, $pkg_mgr=false, $user_os = false) { $pkg = self::get_OS_and_package_manager($pkg_mgr, $user_os); if ($pkg === false) { return false; } $namespaced = "\\package_managers\\{$pkg}::install"; return $namespaced($prog); } public static function purge(string $prog, $pkg_mgr=false, $user_os = false) { $pkg = self::get_OS_and_package_manager($pkg_mgr, $user_os); if ($pkg === false) { return false; } $namespaced = "\\package_managers\\{$pkg}::purge"; return $namespaced($prog); } public static function uninstall(string $prog, $pkg_mgr=false, $user_os = false) { $pkg = self::get_OS_and_package_manager($pkg_mgr, $user_os); if ($pkg === false) { return false; } $namespaced = "\\package_managers\\{$pkg}::uninstall"; return $namespaced($prog); } public static function add_repo(string $repo, $pkg_mgr=false, $user_os = false) { $pkg = self::get_OS_and_package_manager($pkg_mgr, $user_os); if ($pkg === false) { return false; } $namespaced = "\\package_managers\\{$pkg}::add_repo"; return $namespaced($repo); } public static function update($pkg_mgr=false, $user_os = false) { $pkg = self::get_OS_and_package_manager($pkg_mgr, $user_os); if ($pkg === false) { return false; } $namespaced = "\\package_managers\\{$pkg}::update"; return $namespaced(); } public static function full_update($pkg_mgr=false, $user_os = false) { $pkg = self::get_OS_and_package_manager($pkg_mgr, $user_os); if ($pkg === false) { return false; } $namespaced = "\\package_managers\\{$pkg}::full_update"; return $namespaced(); } // Have a Backup!! public static function full_system_upgrade($pkg_mgr=false, $user_os = false) { $pkg = self::get_OS_and_package_manager($pkg_mgr, $user_os); if ($pkg === false) { return false; } $namespaced = "\\package_managers\\{$pkg}::full_system_upgrade"; return $namespaced(); } } /* osInfo[/etc/redhat-release]="yum install" osInfo[/etc/arch-release]="pacman -S" osInfo[/etc/gentoo-release]="emerge" osInfo[/etc/SuSE-release]="zypper install" osInfo[/etc/debian_version]="apt install" osInfo[/etc/alpine-release]="apk add --no-cache" */