You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
168 lines
5.2 KiB
168 lines
5.2 KiB
<?php
|
|
|
|
namespace traits;
|
|
|
|
trait packages {
|
|
|
|
private static function get_package_manager(string $os): string|false {
|
|
$linux_package_managers = [
|
|
'ubuntu' => '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($prog);
|
|
|
|
}
|
|
|
|
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($prog);
|
|
|
|
}
|
|
|
|
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($prog);
|
|
}
|
|
|
|
// 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($prog);
|
|
}
|
|
|
|
|
|
}
|
|
|
|
/*
|
|
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"
|
|
*/ |