From 1fa6d12da3a3cdf14eb3f5a73e5efa80cbe27170 Mon Sep 17 00:00:00 2001 From: siiky Date: Wed, 11 Sep 2024 13:57:14 +0100 Subject: [PATCH 1/6] chore: remove all `node_modules`, not just `genmega` --- deploy/codebase/lamassu-machine-manager.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deploy/codebase/lamassu-machine-manager.js b/deploy/codebase/lamassu-machine-manager.js index 830b2735a..22cd613a9 100644 --- a/deploy/codebase/lamassu-machine-manager.js +++ b/deploy/codebase/lamassu-machine-manager.js @@ -152,7 +152,7 @@ const upgrade = () => { const commands = [ async.apply(command, `tar zxf ${basePath}/package/subpackage.tgz -C ${basePath}/package/`), - async.apply(command, `rm -rf ${applicationParentFolder}/lamassu-machine/node_modules/genmega`), + async.apply(command, `rm -rf ${applicationParentFolder}/lamassu-machine/node_modules/`), async.apply(command, `cp -PR ${basePath}/package/subpackage/lamassu-machine ${applicationParentFolder}`), async.apply(command, `cp -PR ${basePath}/package/subpackage/hardware/${hardwareCode}/node_modules ${applicationParentFolder}/lamassu-machine/`), async.apply(command, `mv ${applicationParentFolder}/lamassu-machine/verify/verify.${arch} ${applicationParentFolder}/lamassu-machine/verify/verify`), From 6b9a1a77c0e789aa6c666ffe74b1f2760160cea7 Mon Sep 17 00:00:00 2001 From: siiky Date: Wed, 11 Sep 2024 13:57:41 +0100 Subject: [PATCH 2/6] chore: drop unnecessary `systemctl` command --- deploy/codebase/lamassu-machine-manager.js | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/deploy/codebase/lamassu-machine-manager.js b/deploy/codebase/lamassu-machine-manager.js index 22cd613a9..c837c4aa9 100644 --- a/deploy/codebase/lamassu-machine-manager.js +++ b/deploy/codebase/lamassu-machine-manager.js @@ -63,20 +63,14 @@ function updateSupervisor (cb) { (machineWithMultipleCodes.includes(hardwareCode) ? getOSUser() : Promise.resolve('lamassu')) .then(osuser => { - cp.exec('systemctl enable supervisor', {timeout: TIMEOUT}, function(err) { - if (err) { - console.log('failure activating systemctl') - } - - async.series([ - async.apply(command, `cp ${supervisorPath}/* /etc/supervisor/conf.d/`), - async.apply(command, `sed -i 's|^user=.*\$|user=${osuser}|;' /etc/supervisor/conf.d/lamassu-browser.conf || true`), - async.apply(command, 'supervisorctl update'), - async.apply(command, 'supervisorctl restart all'), - ], (err) => { - if (err) throw err; - cb() - }) + async.series([ + async.apply(command, `cp ${supervisorPath}/* /etc/supervisor/conf.d/`), + async.apply(command, `sed -i 's|^user=.*\$|user=${osuser}|;' /etc/supervisor/conf.d/lamassu-browser.conf || true`), + async.apply(command, 'supervisorctl update'), + async.apply(command, 'supervisorctl restart all'), + ], (err) => { + if (err) throw err; + cb() }) }) } From cd476fd5db4a5b919a5e0bbd9467e9e7c365e201 Mon Sep 17 00:00:00 2001 From: siiky Date: Wed, 11 Sep 2024 13:57:55 +0100 Subject: [PATCH 3/6] refactor: split commands in two --- deploy/codebase/lamassu-machine-manager.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/deploy/codebase/lamassu-machine-manager.js b/deploy/codebase/lamassu-machine-manager.js index c837c4aa9..ed8ee33a6 100644 --- a/deploy/codebase/lamassu-machine-manager.js +++ b/deploy/codebase/lamassu-machine-manager.js @@ -39,7 +39,8 @@ function updateUdev (cb) { if (hardwareCode !== 'aaeon') return cb() return async.series([ async.apply(command, `cp ${udevPath}/* /etc/udev/rules.d/`), - async.apply(command, 'udevadm control --reload-rules && udevadm trigger'), + async.apply(command, 'udevadm control --reload-rules'), + async.apply(command, 'udevadm trigger'), ], (err) => { if (err) throw err; cb() From c7e5a9f1cfc1dd719ecd14603c6380fd59483f79 Mon Sep 17 00:00:00 2001 From: siiky Date: Wed, 11 Sep 2024 18:04:28 +0100 Subject: [PATCH 4/6] feat: `gunzip` Node.js executable --- deploy/node-update/nodejs-manager.js | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/deploy/node-update/nodejs-manager.js b/deploy/node-update/nodejs-manager.js index ad8b3080f..888e2ca0b 100644 --- a/deploy/node-update/nodejs-manager.js +++ b/deploy/node-update/nodejs-manager.js @@ -35,6 +35,8 @@ const unlink = path => new Promise((resolve, reject) => fs.unlink(path, err => err ? reject(err) : resolve()) ) +const fileExists = path => new Promise(resolve => fs.access(path, err => resolve(!!err))) + const execFile = (cmd, args) => new Promise((resolve, reject) => child_process.execFile(cmd, args, null, err => err ? reject(err) : resolve()) ) @@ -44,9 +46,10 @@ const mv = args => execFile('mv', args) const rm = args => execFile('rm', args) const sed = args => execFile('sed', args) const supervisorctl = args => execFile('supervisorctl', args) +const tar = args => execFile('tar', args) -const PACKAGE = path.resolve(__dirname) // TODO: confirm this +const PACKAGE = path.resolve(__dirname) const OPT = '/opt/' const BACKUP = path.join(OPT, 'backup/') @@ -56,6 +59,7 @@ const LAMASSU_MACHINE_BACKUP = path.join(BACKUP, 'lamassu-machine/') const NODE = '/usr/bin/node' const NODE_BACKUP = path.join(BACKUP, 'node') const NEW_NODE = path.join(PACKAGE, 'node') +const NEW_NODE_TGZ = path.join(PACKAGE, 'node.tgz') const SUPERVISOR_CONF = '/etc/supervisor/conf.d/' const WATCHDOG_CONF = path.join(SUPERVISOR_CONF, 'lamassu-watchdog.conf') @@ -142,6 +146,20 @@ const installOldServices = () => { ])) } +const gunzip_new_node = () => { + console.log("Checking if the new Node.js executable already exists") + return fileExists(NEW_NODE) + .then(exists => { + if (exists) { + console.log("Node.js executable exists -- skipping gunzip") + return Promise.resolve() + } else { + console.log("Gunzipping Node.js executable") + return tar(['xf', NEW_NODE_TGZ, '-C', PACKAGE]) + } + }) +} + // Install new node const upgradeNode = () => { console.log("Upgrading Node.js executable") @@ -154,6 +172,7 @@ const upgradeNode = () => { const upgrade = () => { console.log("Starting Node.js upgrade process") return ensure_x64 + .then(gunzip_new_node) .then(respawn_if_needed) .then(stopSupervisorServices) .then(backupMachine) @@ -197,6 +216,7 @@ const removeBackup = () => { const downgrade = () => { console.log("Starting Node.js downgrade process") return ensure_x64 + .then(gunzip_new_node) .then(respawn_if_needed) .then(stopSupervisorServices) .then(downgradeMachine) From c07d8d11523326585dcb3ce1a354eee4f693caf3 Mon Sep 17 00:00:00 2001 From: siiky Date: Fri, 13 Sep 2024 15:57:55 +0100 Subject: [PATCH 5/6] fix: `fileExists()` --- deploy/codebase/lamassu-machine-manager.js | 9 ++++++++- deploy/node-update/nodejs-manager.js | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/deploy/codebase/lamassu-machine-manager.js b/deploy/codebase/lamassu-machine-manager.js index ed8ee33a6..4da45f8fc 100644 --- a/deploy/codebase/lamassu-machine-manager.js +++ b/deploy/codebase/lamassu-machine-manager.js @@ -59,10 +59,17 @@ function updateSupervisor (cb) { .includes('IMAGE_ID=lamassu-machine-xubuntu') ? 'lamassu' : 'ubilinux', - _err => 'ubilinux', + err => { + console.log("Error reading /etc/os-release") + return 'ubilinux' + } ) (machineWithMultipleCodes.includes(hardwareCode) ? getOSUser() : Promise.resolve('lamassu')) + .catch(err => { + console.log(err) + return 'lamassu' + }) .then(osuser => { async.series([ async.apply(command, `cp ${supervisorPath}/* /etc/supervisor/conf.d/`), diff --git a/deploy/node-update/nodejs-manager.js b/deploy/node-update/nodejs-manager.js index 888e2ca0b..b00d1099b 100644 --- a/deploy/node-update/nodejs-manager.js +++ b/deploy/node-update/nodejs-manager.js @@ -35,7 +35,7 @@ const unlink = path => new Promise((resolve, reject) => fs.unlink(path, err => err ? reject(err) : resolve()) ) -const fileExists = path => new Promise(resolve => fs.access(path, err => resolve(!!err))) +const fileExists = path => new Promise(resolve => fs.access(path, err => resolve(!err))) const execFile = (cmd, args) => new Promise((resolve, reject) => child_process.execFile(cmd, args, null, err => err ? reject(err) : resolve()) From b86f12848a0fadebfbb485e34c4d7c770847e6c5 Mon Sep 17 00:00:00 2001 From: siiky Date: Fri, 13 Sep 2024 16:35:27 +0100 Subject: [PATCH 6/6] fix: getting OS user in `updateSupervisor()` --- deploy/codebase/lamassu-machine-manager.js | 54 ++++++++++------------ 1 file changed, 24 insertions(+), 30 deletions(-) diff --git a/deploy/codebase/lamassu-machine-manager.js b/deploy/codebase/lamassu-machine-manager.js index 4da45f8fc..421e48832 100644 --- a/deploy/codebase/lamassu-machine-manager.js +++ b/deploy/codebase/lamassu-machine-manager.js @@ -51,36 +51,30 @@ function updateSupervisor (cb) { console.log("Updating Supervisor services") if (hardwareCode === 'aaeon') return cb() - const getOSUser = () => - fs.promises.readFile('/etc/os-release', { encoding: 'utf8' }) - .then( - text => text - .split('\n') - .includes('IMAGE_ID=lamassu-machine-xubuntu') ? - 'lamassu' : - 'ubilinux', - err => { - console.log("Error reading /etc/os-release") - return 'ubilinux' - } - ) - - (machineWithMultipleCodes.includes(hardwareCode) ? getOSUser() : Promise.resolve('lamassu')) - .catch(err => { - console.log(err) - return 'lamassu' - }) - .then(osuser => { - async.series([ - async.apply(command, `cp ${supervisorPath}/* /etc/supervisor/conf.d/`), - async.apply(command, `sed -i 's|^user=.*\$|user=${osuser}|;' /etc/supervisor/conf.d/lamassu-browser.conf || true`), - async.apply(command, 'supervisorctl update'), - async.apply(command, 'supervisorctl restart all'), - ], (err) => { - if (err) throw err; - cb() - }) - }) + const isLMX = () => + fs.readFileSync('/etc/os-release', { encoding: 'utf8' }) + .split('\n') + .includes('IMAGE_ID=lamassu-machine-xubuntu') + + const getOSUser = () => { + try { + return (!machineWithMultipleCodes.includes(hardwareCode) || isLMX()) ? 'lamassu' : 'ubilinux' + } catch (err) { + return 'ubilinux' + } + } + + const osuser = getOSUser() + + async.series([ + async.apply(command, `cp ${supervisorPath}/* /etc/supervisor/conf.d/`), + async.apply(command, `sed -i 's|^user=.*\$|user=${osuser}|;' /etc/supervisor/conf.d/lamassu-browser.conf || true`), + async.apply(command, 'supervisorctl update'), + async.apply(command, 'supervisorctl restart all'), + ], err => { + if (err) throw err; + cb() + }) } function updateAcpChromium (cb) {