diff --git a/MeshCentralServer.njsproj b/MeshCentralServer.njsproj
index c88789c8..93f8c626 100644
--- a/MeshCentralServer.njsproj
+++ b/MeshCentralServer.njsproj
@@ -24,6 +24,7 @@
+
diff --git a/agents/meshinstall-linux.js b/agents/meshinstall-linux.js
index bf9e6d17..a41d23e2 100644
--- a/agents/meshinstall-linux.js
+++ b/agents/meshinstall-linux.js
@@ -14,12 +14,10 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
-var msh = {};
-var s = null;
+var s = null, msh = {}, buttons = ['Cancel'], skip = false;
try { s = require('service-manager').manager.getService('meshagent'); } catch (e) { }
-function _install()
-{
+function _install(parms) {
var mstr = require('fs').createWriteStream(process.execPath + '.msh', { flags: 'wb' });
mstr.write('MeshName=' + msh.MeshName + '\n');
mstr.write('MeshType=' + msh.MeshType + '\n');
@@ -27,160 +25,187 @@ function _install()
mstr.write('ServerID=' + msh.ServerID + '\n');
mstr.write('MeshServer=' + msh.MeshServer + '\n');
mstr.end();
-
- global._child = require('child_process').execFile(process.execPath,
- [process.execPath.split('/').pop(), '-fullinstall', '--no-embedded=1', '--copy-msh=1']);
-
- global._child.stdout.on('data', function (c) { process.stdout.write(c.toString()); });
- global._child.stderr.on('data', function (c) { process.stdout.write(c.toString()); });
- global._child.waitExit();
-}
-function _uninstall()
-{
- global._child = require('child_process').execFile(process.execPath,
- [process.execPath.split('/').pop(), '-fulluninstall', '--no-embedded=1']);
-
+
+ if (parms == null) { parms = []; }
+ parms.unshift('--copy-msh=1');
+ parms.unshift('--no-embedded=1');
+ parms.unshift('-fullinstall');
+ parms.unshift(process.execPath.split('/').pop());
+
+ global._child = require('child_process').execFile(process.execPath, parms);
global._child.stdout.on('data', function (c) { process.stdout.write(c.toString()); });
global._child.stderr.on('data', function (c) { process.stdout.write(c.toString()); });
global._child.waitExit();
}
-var s = null;
-try { s = require('service-manager').manager.getService('meshagent'); } catch (e) { }
-var buttons = ['Cancel'];
+function _uninstall() {
+ global._child = require('child_process').execFile(process.execPath,
+ [process.execPath.split('/').pop(), '-fulluninstall', '--no-embedded=1']);
+
+ global._child.stdout.on('data', function (c) { process.stdout.write(c.toString()); });
+ global._child.stderr.on('data', function (c) { process.stdout.write(c.toString()); });
+ global._child.waitExit();
+}
-if (msh.InstallFlags == null)
-{
+if (msh.InstallFlags == null) {
msh.InstallFlags = 3;
-}
-else
-{
+} else {
msh.InstallFlags = parseInt(msh.InstallFlags.toString());
}
-
-if ((msh.InstallFlags & 1) == 1) { buttons.unshift("Connect"); }
-if ((msh.InstallFlags & 2) == 2)
-{
- if (!require('user-sessions').isRoot())
- {
+if ((msh.InstallFlags & 1) == 1) { buttons.unshift('Connect'); }
+if ((msh.InstallFlags & 2) == 2) {
+ if (!require('user-sessions').isRoot()) {
console.log('\n' + "Elevated permissions is required to install/uninstall the agent.");
console.log("Please try again with sudo.");
process.exit();
}
- if (s)
- {
- if (process.platform == 'darwin' || require('message-box').kdialog)
- {
+ if (s) {
+ if (process.platform == 'darwin' || require('message-box').kdialog) {
buttons.unshift("Setup");
- }
- else
- {
+ } else {
buttons.unshift("Uninstall");
buttons.unshift("Update");
}
- }
- else
- {
+ } else {
buttons.unshift("Install");
}
}
-if (process.platform != 'darwin')
-{
- if (!require('message-box').kdialog && (require('message-box').zenity == null || (!require('message-box').zenity.extra)))
- {
- console.log('\n' + "This installer cannot run on this system.");
- console.log("Try installing/updating Zenity, and run again." + '\n');
- process.exit();
+if (process.platform != 'darwin') {
+ if (!require('message-box').kdialog && (require('message-box').zenity == null || (!require('message-box').zenity.extra))) {
+ if (process.argv.includes('-install') || process.argv.includes('-update')) {
+ var p = [];
+ for (var i = 0; i < process.argv.length; ++i) {
+ if (process.argv[i].startsWith('--installPath=')) {
+ p.push('--installPath="' + process.argv[i].split('=').pop() + '"');
+ }
+ }
+ _install(p);
+ process.exit();
+ }
+ else if (process.argv.includes('-uninstall')) {
+ _uninstall();
+ process.exit();
+ }
+ else if (process.argv.includes('-connect')) {
+ global._child = require('child_process').execFile(process.execPath,
+ [process.execPath.split('/').pop(), '--no-embedded=1', '--disableUpdate=1',
+ '--MeshName="' + msh.MeshName + '"', '--MeshType="' + msh.MeshType + '"',
+ '--MeshID="' + msh.MeshID + '"',
+ '--ServerID="' + msh.ServerID + '"',
+ '--MeshServer="' + msh.MeshServer + '"',
+ '--AgentCapabilities="0x00000020"']);
+
+ global._child.stdout.on('data', function (c) { });
+ global._child.stderr.on('data', function (c) { });
+ global._child.on('exit', function (code) { process.exit(code); });
+
+ console.log("\nConnecting to: " + msh.MeshServer);
+ console.log("Device Group: " + msh.MeshName);
+ console.log('\nPress Ctrl-c to exit\n');
+ skip = true;
+ } else {
+ console.log('\n' + "The graphical version of this installer cannot run on this system.");
+ console.log("Try installing/updating Zenity, and run again." + '\n');
+ console.log("You can also run the text version from the command line with the following command(s): ");
+ if ((msh.InstallFlags & 1) == 1) {
+ console.log('./' + process.execPath.split('/').pop() + ' -connect');
+ }
+ if ((msh.InstallFlags & 2) == 2) {
+ if (s) {
+ console.log('./' + process.execPath.split('/').pop() + ' -update');
+ console.log('./' + process.execPath.split('/').pop() + ' -uninstall');
+ }
+ else {
+ console.log('./' + process.execPath.split('/').pop() + ' -install');
+ console.log('./' + process.execPath.split('/').pop() + ' -install --installPath="/alternate/path"');
+ }
+ }
+ console.log('');
+ process.exit();
+ }
}
}
-else
-{
+else {
if (!require('user-sessions').isRoot()) { console.log('\n' + "This utility requires elevated permissions. Please try again with sudo."); process.exit(); }
}
-if (!s)
-{
- msg = "Agent: " + "NOT INSTALLED" + '\n';
-} else
-{
- msg = "Agent: " + (s.isRunning() ? "RUNNING" : "NOT RUNNING") + '\n';
-}
-msg += ("Device Group: " + msh.MeshName + '\n');
-msg += ("Server URL: " + msh.MeshServer + '\n');
-
-var p = require('message-box').create("MeshCentral Agent Setup", msg, 99999, buttons);
-p.then(function (v)
-{
- switch (v)
- {
- case "Cancel":
- process.exit();
- break;
- case "Setup":
- var d = require('message-box').create("MeshCentral Agent", msg, 99999, ["Update", "Uninstall", "Cancel"]);
- d.then(function (v)
- {
- switch (v)
- {
- case "Update":
- case "Install":
- _install();
- break;
- case "Uninstall":
- _uninstall();
- break;
- default:
- break;
- }
+if (!skip) {
+ if (!s) {
+ msg = "Agent: " + "NOT INSTALLED" + '\n';
+ } else {
+ msg = "Agent: " + (s.isRunning() ? "RUNNING" : "NOT RUNNING") + '\n';
+ }
+
+ msg += ("Device Group: " + msh.MeshName + '\n');
+ msg += ("Server URL: " + msh.MeshServer + '\n');
+
+ var p = require('message-box').create("MeshCentral Agent Setup", msg, 99999, buttons);
+ p.then(function (v) {
+ switch (v) {
+ case "Cancel":
process.exit();
- }).catch(function (v) { process.exit(); });
- break;
- case "Connect":
- global._child = require('child_process').execFile(process.execPath,
- [process.execPath.split('/').pop(), '--no-embedded=1', '--disableUpdate=1',
+ break;
+ case 'Setup':
+ var d = require('message-box').create("MeshCentral Agent", msg, 99999, ['Update', 'Uninstall', 'Cancel']);
+ d.then(function (v) {
+ switch (v) {
+ case 'Update':
+ case 'Install':
+ _install();
+ break;
+ case 'Uninstall':
+ _uninstall();
+ break;
+ default:
+ break;
+ }
+ process.exit();
+ }).catch(function (v) { process.exit(); });
+ break;
+ case "Connect":
+ global._child = require('child_process').execFile(process.execPath,
+ [process.execPath.split('/').pop(), '--no-embedded=1', '--disableUpdate=1',
'--MeshName="' + msh.MeshName + '"', '--MeshType="' + msh.MeshType + '"',
'--MeshID="' + msh.MeshID + '"',
'--ServerID="' + msh.ServerID + '"',
'--MeshServer="' + msh.MeshServer + '"',
'--AgentCapabilities="0x00000020"']);
-
- global._child.stdout.on('data', function (c) { });
- global._child.stderr.on('data', function (c) { });
- global._child.on('exit', function (code) { process.exit(code); });
-
- msg = ("Device Group: " + msh.MeshName + '\n');
- msg += ("Server URL: " + msh.MeshServer + '\n');
-
- if (process.platform != 'darwin')
- {
- if (!require('message-box').zenity && require('message-box').kdialog)
- {
- msg += ('\n'+"Press OK to Disconnect");
+
+ global._child.stdout.on('data', function (c) { });
+ global._child.stderr.on('data', function (c) { });
+ global._child.on('exit', function (code) { process.exit(code); });
+
+ msg = ("Device Group: " + msh.MeshName + '\n');
+ msg += ("Server URL: " + msh.MeshServer + '\n');
+
+ if (process.platform != 'darwin') {
+ if (!require('message-box').zenity && require('message-box').kdialog) {
+ msg += ('\nPress OK to Disconnect');
+ }
}
- }
-
- var d = require('message-box').create("MeshCentral Agent", msg, 99999, ["Disconnect"]);
- d.then(function (v) { process.exit(); }).catch(function (v) { process.exit(); });
- break;
- case "Uninstall":
- _uninstall();
- process.exit();
- break;
- case "Install":
- case "Update":
- _install();
- process.exit();
- break;
- default:
- console.log(v);
- process.exit();
- break;
- }
-}).catch(function (e)
-{
- console.log(e);
- process.exit();
-});
\ No newline at end of file
+
+ var d = require('message-box').create("MeshCentral Agent", msg, 99999, ['Disconnect']);
+ d.then(function (v) { process.exit(); }).catch(function (v) { process.exit(); });
+ break;
+ case "Uninstall":
+ _uninstall();
+ process.exit();
+ break;
+ case "Install":
+ case "Update":
+ _install();
+ process.exit();
+ break;
+ default:
+ console.log(v);
+ process.exit();
+ break;
+ }
+ }).catch(function (e) {
+ console.log(e);
+ process.exit();
+ });
+}
\ No newline at end of file