From 7311b2374347948961902b280189374751b53500 Mon Sep 17 00:00:00 2001 From: Ylian Saint-Hilaire Date: Thu, 10 Sep 2020 15:18:33 -0700 Subject: [PATCH] Updated Linux interactive installer. --- MeshCentralServer.njsproj | 1 + agents/meshinstall-linux.js | 277 ++++++++++++++++++++---------------- 2 files changed, 152 insertions(+), 126 deletions(-) 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