1
0
mirror of https://github.com/Ylianst/MeshAgent synced 2025-12-21 18:53:32 +00:00

1. Added Wayland helper

2. Fixed agent customization support for Docker/PseudoService
This commit is contained in:
Bryan Roe
2023-01-20 13:10:05 -08:00
parent 7ea36ae572
commit aa4590ce53
3 changed files with 178 additions and 16 deletions

File diff suppressed because one or more lines are too long

View File

@@ -120,6 +120,126 @@ if (process.platform == 'linux')
return (uu);
}
function waylandStatus()
{
var wayland = true;
if (require('fs').existsSync('/etc/gdm/custom.conf'))
{
var child = require('child_process').execFile('/bin/sh', ['sh']);
child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); });
child.stdin.write("cat /etc/gdm/custom.conf | grep WaylandEnable= | tr '\\n' '`' | awk -F'`' '");
child.stdin.write('{');
child.stdin.write(' wayland=1;');
child.stdin.write(' for(n=1;n<NF;++n) ');
child.stdin.write(' {');
child.stdin.write(' if($n~/^#/) { continue; }')
child.stdin.write(' gsub(/ /, "", $n);');
child.stdin.write(' if($n~/^WaylandEnable=/)');
child.stdin.write(' {');
child.stdin.write(' split($n, dummy, "WaylandEnable=");');
child.stdin.write(' if(dummy[2]=="false")');
child.stdin.write(' {');
child.stdin.write(' wayland=0;');
child.stdin.write(' }');
child.stdin.write(' break;');
child.stdin.write(' }');
child.stdin.write(' }');
child.stdin.write(' print wayland;');
child.stdin.write("}'\nexit\n");
child.waitExit();
if (child.stdout.str.trim() == '0')
{
wayland = false;
}
}
if (require('fs').existsSync('/etc/gdm3/custom.conf'))
{
var child = require('child_process').execFile('/bin/sh', ['sh']);
child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); });
child.stdin.write("cat /etc/gdm3/custom.conf | grep WaylandEnable= | tr '\\n' '`' | awk -F'`' '");
child.stdin.write('{');
child.stdin.write(' wayland=1;');
child.stdin.write(' for(n=1;n<NF;++n) ');
child.stdin.write(' {');
child.stdin.write(' if($n~/^#/) { continue; }')
child.stdin.write(' gsub(/ /, "", $n);');
child.stdin.write(' if($n~/^WaylandEnable=/)');
child.stdin.write(' {');
child.stdin.write(' split($n, dummy, "WaylandEnable=");');
child.stdin.write(' if(dummy[2]=="false")');
child.stdin.write(' {');
child.stdin.write(' wayland=0;');
child.stdin.write(' }');
child.stdin.write(' break;');
child.stdin.write(' }');
child.stdin.write(' }');
child.stdin.write(' print wayland;');
child.stdin.write("}'\nexit\n");
child.waitExit();
if (child.stdout.str.trim() == '0')
{
wayland = false;
}
}
return (wayland);
}
function disableWayland()
{
if (waylandStatus())
{
if (require('fs').existsSync('/etc/gdm/custom.conf'))
{
var child = require('child_process').execFile('/bin/sh', ['sh']);
child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); });
child.stdin.write('sed "s/#WaylandEnable=false/WaylandEnable=false/g" /etc/gdm/custom.conf > /etc/gdm/custom_2.conf\n');
child.stdin.write("mv /etc/gdm/custom_2.conf /etc/gdm/custom.conf\n");
child.stdin.write("\nexit\n");
child.waitExit();
}
if (require('fs').existsSync('/etc/gdm3/custom.conf'))
{
var child = require('child_process').execFile('/bin/sh', ['sh']);
child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); });
child.stdin.write('sed "s/#WaylandEnable=false/WaylandEnable=false/g" /etc/gdm3/custom.conf > /etc/gdm3/custom_2.conf\n');
child.stdin.write("mv /etc/gdm3/custom_2.conf /etc/gdm3/custom.conf\n");
child.stdin.write("\nexit\n");
child.waitExit();
}
}
}
function enableWayland()
{
if (!waylandStatus())
{
if (require('fs').existsSync('/etc/gdm/custom.conf'))
{
var child = require('child_process').execFile('/bin/sh', ['sh']);
child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); });
child.stdin.write('sed "s/WaylandEnable=false/#WaylandEnable=false/g" /etc/gdm/custom.conf > /etc/gdm/custom_2.conf\n');
child.stdin.write("mv /etc/gdm/custom_2.conf /etc/gdm/custom.conf\n");
child.stdin.write("\nexit\n");
child.waitExit();
}
if (require('fs').existsSync('/etc/gdm3/custom.conf'))
{
var child = require('child_process').execFile('/bin/sh', ['sh']);
child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); });
child.stdin.write('sed "s/WaylandEnable=false/#WaylandEnable=false/g" /etc/gdm3/custom.conf > /etc/gdm3/custom_2.conf\n');
child.stdin.write("mv /etc/gdm3/custom_2.conf /etc/gdm3/custom.conf\n");
child.stdin.write("\nexit\n");
child.waitExit();
}
}
}
function waylandDM()
{
if (require('fs').existsSync('/etc/gdm/custom.conf')) { return ('gdm'); }
if (require('fs').existsSync('/etc/gdm3/custom.conf')) { return ('gdm3'); }
return ('');
}
module.exports =
{
createVirtualSession: spawnVirtualSession,
@@ -127,6 +247,10 @@ if (process.platform == 'linux')
users: getUsers,
loginUids: loginUids,
allowed: allowedUIDs,
waylandStatus: waylandStatus,
disableWayland: disableWayland,
enableWayland: enableWayland,
waylandDM: waylandDM
}
}
else

View File

@@ -1954,7 +1954,7 @@ function serviceManager()
}
break;
default:
// Peudo Service (meshDaemon)
// Pseudo Service (meshDaemon)
if (require('fs').existsSync('/usr/local/mesh_daemons/' + name + '.service'))
{
ret.conf = '/usr/local/mesh_daemons/' + name + '.service';
@@ -1988,14 +1988,15 @@ function serviceManager()
var parameters = this.parameters();
var location = wd + parameters.shift();
var options = { pidPath: wd + 'pid', logOutputs: false, crashRestart: respawn, cwd: wd };
var options = { pidPath: wd + 'pid', logOutputs: true, crashRestart: respawn, cwd: wd };
require('service-manager').manager.daemon(location, parameters, options);
};
ret.stop = function stop()
{
var pidpath = this.appWorkingDirectory().split(' ').join('\\ ') + 'pid';
var child = require('child_process').execFile('/bin/sh', ['sh']);
child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); });
child.stdin.write('cat /usr/local/mesh_daemons/' + name + '/pid \nexit\n');
child.stdin.write('cat ' + pidpath + '\nexit\n');
child.waitExit();
try
{
@@ -2020,9 +2021,10 @@ function serviceManager()
}
ret.isMe = function isMe()
{
var pidpath = this.appWorkingDirectory().split(' ').join('\\ ') + 'pid';
var child = require('child_process').execFile('/bin/sh', ['sh']);
child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); });
child.stdin.write('cat /usr/local/mesh_daemons/' + name + '/pid \nexit\n');
child.stdin.write('cat ' + pidpath + '\nexit\n');
child.waitExit();
var pid = child.stdout.str.trim();
if (pid == '') { return (false); }
@@ -2050,11 +2052,14 @@ function serviceManager()
};
ret.isRunning = function isRunning()
{
if(require('fs').existsSync('/usr/local/mesh_daemons/' + name + '/pid'))
var pidpath = this.appWorkingDirectory() + 'pid';
console.log('pidpath', pidpath);
if(require('fs').existsSync(pidpath))
{
var child = require('child_process').execFile('/bin/sh', ['sh']);
child.stdout.str = ''; child.stdout.on('data', function (c) { this.str += c.toString(); });
child.stdin.write('cat /usr/local/mesh_daemons/' + name + '/pid \nexit\n');
child.stdin.write('cat ' + pidpath.split(' ').join('\\ ') + '\nexit\n');
child.waitExit();
var pid = child.stdout.str.trim();
@@ -2806,10 +2811,10 @@ function serviceManager()
require('fs').chmodSync('/usr/local/mesh_daemons/' + options.name + '/' + options.target, m);
conf = require('fs').createWriteStream('/usr/local/mesh_daemons/' + options.name + '.service', { flags: 'wb' });
conf.write('workingDirectory=' + '/usr/local/mesh_daemons/' + options.name + '\n');
conf.write('workingDirectory=' + '/usr/local/mesh_daemons/' + (options.companyName!=null?(options.companyName + '/'):'') + options.name + '\n');
if(!options.parameters) {options.parameters = [];}
options.parameters.unshift(options.name);
options.parameters.unshift(options.target);
conf.write('parameters=' + JSON.stringify(options.parameters) + '\n');
options.parameters.shift();
if (options.failureRestart == null || options.failureRestart > 0)
@@ -3330,6 +3335,7 @@ function serviceManager()
}
break;
}
this._platform = platform;
return (platform);
};
@@ -3370,14 +3376,40 @@ function serviceManager()
this.daemon = function daemon(path, parameters, options)
{
require('code-utils');
console.log('PATH => ' + JSON.stringify(path, null, 1));
console.log('parameters => ' + JSON.stringify(parameters, null, 1));
console.log('options => ' + JSON.stringify(options, null, 1));
var z = parameters.getParameterIndex('meshServiceName');
console.log('meshServiceName => ' + z);
if (z >= 0)
{
parameters.splice(z, 1);
console.log('parameters => ' + JSON.stringify(parameters, null, 1));
}
var tmp = JSON.stringify(parameters);
tmp = tmp.substring(1, tmp.length - 1);
if (options.cwd)
{
process.chdir(options.cwd);
console.log('Setting CWD to: ' + options.cwd);
}
console.log('\n\n');
console.log("child = require('child_process').execFile('" + path + "', ['" + (process.platform == 'win32' ? path.split('\\').pop() : path.split('/').pop() + "'" + (tmp != '' ? (", " + tmp) : "")) + "]);");
console.log('\n\n');
if (!options) { options = {}; }
var childParms = "\
var child = null; \
var options = " + JSON.stringify(options) + ";\
if(options.logOutput)\
if(options.logOutputs)\
{ console.setDestination(console.Destinations.LOGFILE); console.log('Logging Outputs...'); }\
else\
{\
@@ -3397,8 +3429,14 @@ function serviceManager()
child.stderr.on('data', function(c) { console.log(c.toString()); });\
child.once('exit', function (code) \
{\
console.log('Child Exited');\
if(options.crashRestart) { spawnChild(); } else { cleanupAndExit(); }\
});\
console.log('Child Spawned');\
}\
else\
{\
console.log('Child Spawn Failed');\
}\
}\
if(options.pidPath) { require('fs').writeFileSync(options.pidPath, process.pid.toString()); }\