PHP Deployment Scripts
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.
 
 
neatoDeploy/app/traits/packages.php

177 lines
5.5 KiB

<?php
namespace traits;
trait packages {
private static function call_pkg_mgt(string $pkg, string $method, string $param="") {
$call = "\\package_managers\\{$pkg}::{$method}";
if (!class_exists($call)) {
throw new \Exception('A class with the name of '. $call. 'could not be found');
}
return (! empty($param)) ? $call($param) : $call();
}
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($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"
*/