Added files
This commit is contained in:
commit
fdc8852fcd
5 changed files with 219 additions and 0 deletions
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
*~
|
||||||
|
composer.lock
|
||||||
|
vendor/*
|
||||||
|
!vendor/phangoapp
|
||||||
|
settings/
|
||||||
16
composer.json
Normal file
16
composer.json
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
{
|
||||||
|
"repositories": [
|
||||||
|
{
|
||||||
|
"type": "path",
|
||||||
|
"url": "./vendor/phangoapp/leviathanutils"
|
||||||
|
}
|
||||||
|
|
||||||
|
],
|
||||||
|
"require": {
|
||||||
|
"phangoapp/leviathanutils": "dev-main",
|
||||||
|
"symfony/process": "^6.3"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/phpunit": "^10.4"
|
||||||
|
}
|
||||||
|
}
|
||||||
20
vendor/phangoapp/leviathanutils/composer.json
vendored
Normal file
20
vendor/phangoapp/leviathanutils/composer.json
vendored
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
{
|
||||||
|
"name": "phangoapp/leviathanutils",
|
||||||
|
"description": "A set of classes and methods for make shell operations in linux",
|
||||||
|
"require-dev": {
|
||||||
|
"phpunit/phpunit": "~4.8@dev"
|
||||||
|
},
|
||||||
|
"license": "GPL3",
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Antonio de la Rosa",
|
||||||
|
"email": "antonio.delarosa@cuchulu.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"minimum-stability": "stable",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"PhangoApp\\LeviathanUtils\\": "src"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
157
vendor/phangoapp/leviathanutils/src/Linux.php
vendored
Normal file
157
vendor/phangoapp/leviathanutils/src/Linux.php
vendored
Normal file
|
|
@ -0,0 +1,157 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace PhangoApp\LeviathanUtils;
|
||||||
|
use Symfony\Component\Process\Process;
|
||||||
|
|
||||||
|
class Linux {
|
||||||
|
|
||||||
|
static public function shell_command($arr_command, $exit_if_error=0) {
|
||||||
|
|
||||||
|
$error=0;
|
||||||
|
|
||||||
|
/*$process=new Process($arr_command);
|
||||||
|
|
||||||
|
$process->run(function ($type, $buffer): bool {
|
||||||
|
|
||||||
|
if (Process::ERR === $type) {
|
||||||
|
|
||||||
|
echo $buffer;
|
||||||
|
|
||||||
|
$error=1;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
echo $buffer;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
if($error && $exit_if_error) {
|
||||||
|
|
||||||
|
exit(1);
|
||||||
|
|
||||||
|
}
|
||||||
|
echo 'Error'.$error;
|
||||||
|
return $error;*/
|
||||||
|
|
||||||
|
$cmd=implode(' ', $arr_command);
|
||||||
|
|
||||||
|
$a = popen($cmd, 'r');
|
||||||
|
|
||||||
|
while($b = fgets($a, 2048)) {
|
||||||
|
|
||||||
|
echo $b."\n";
|
||||||
|
|
||||||
|
//ob_flush();flush();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if(pclose($a)>0) {
|
||||||
|
|
||||||
|
echo 'Error executing command '.$cmd."\n";
|
||||||
|
|
||||||
|
exit(1);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static public function get_linux_distro() {
|
||||||
|
|
||||||
|
$file_distro=__DIR__.'/../../../../settings/distro.php';
|
||||||
|
|
||||||
|
$dir_distro=__DIR__.'/../../../../settings/';
|
||||||
|
|
||||||
|
if(!is_file($file_distro)) {
|
||||||
|
|
||||||
|
ob_start();
|
||||||
|
|
||||||
|
Linux::shell_command(['python', '-c', '"import distro;print(distro.id())"']);
|
||||||
|
|
||||||
|
$distro=trim(ob_get_contents());
|
||||||
|
|
||||||
|
ob_end_clean();
|
||||||
|
|
||||||
|
$distro_data="<?php\n\n\define('DISTRO_LINUX', '".$distro."');";
|
||||||
|
|
||||||
|
if(!is_dir($dir_distro)) {
|
||||||
|
|
||||||
|
if(!mkdir($dir_distro)) {
|
||||||
|
|
||||||
|
throw new \Exception('Sorry, cannot create settings directory');
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!file_put_contents($file_distro, $distro_data)) {
|
||||||
|
|
||||||
|
throw new \Exception('Sorry, cannot create settings config file');
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
|
||||||
|
if(!defined('DISTRO_LINUX')) {
|
||||||
|
|
||||||
|
include_once($file_distro);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$distro=DISTRO_LINUX;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return $distro;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static public function add_new_user() {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static public function delete_user() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static public function install_package($package) {
|
||||||
|
|
||||||
|
$distro=Linux::get_linux_distro();
|
||||||
|
|
||||||
|
if(!isset($package[$distro])) {
|
||||||
|
|
||||||
|
echo 'Sorry, you don\'t have a package for this distro';
|
||||||
|
|
||||||
|
return false;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if($distro=='debian' || $distro=='ubuntu') {
|
||||||
|
|
||||||
|
Linux::shell_command('sudo DEBIAN_FRONTEND="noninteractive" apt-get install -y '.$package[$distro]);
|
||||||
|
|
||||||
|
}
|
||||||
|
else if($distro=='fedora' || $distro=='almalinux' || $distro=='rocky') {
|
||||||
|
|
||||||
|
//if call("sudo dnf install -y {}".format(package[linux_distro]), shell=True) > 0:
|
||||||
|
Linux::shell_command('sudo dnf install -y '.$package[$distro]);
|
||||||
|
|
||||||
|
}
|
||||||
|
else if($distro=='arch') {
|
||||||
|
|
||||||
|
//sudo pacman -S --noconfirm
|
||||||
|
Linux::shell_command('sudo pacman -S --noconfirm '.$package[$distro]);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static public function patch_file() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
21
vendor/phangoapp/leviathanutils/tests/LinuxTest.php
vendored
Normal file
21
vendor/phangoapp/leviathanutils/tests/LinuxTest.php
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
|
||||||
|
include("vendor/autoload.php");
|
||||||
|
|
||||||
|
final class LinuxTest extends TestCase {
|
||||||
|
|
||||||
|
public function testDistro() {
|
||||||
|
|
||||||
|
$distro=PhangoApp\LeviathanUtils\Linux::get_linux_distro();
|
||||||
|
|
||||||
|
$this->assertEquals($distro, 'manjaro');
|
||||||
|
|
||||||
|
unlink('./settings/distro.php');
|
||||||
|
|
||||||
|
rmdir('./settings');
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue