mirror of
				https://github.com/Ylianst/MeshCentral.git
				synced 2025-03-09 15:40:18 +00:00 
			
		
		
		
	Fix package installs and set node 20 for docker (#5692)
* fix install packages and set docker to node 20 Signed-off-by: si458 <simonsmith5521@gmail.com> * missed a few no-package-lock and no-save Signed-off-by: si458 <simonsmith5521@gmail.com> * use --save-exact and only install missing modules Signed-off-by: si458 <simonsmith5521@gmail.com> --------- Signed-off-by: si458 <simonsmith5521@gmail.com>
This commit is contained in:
		
							parent
							
								
									7c2eea68b6
								
							
						
					
					
						commit
						ef6fd23a4f
					
				
					 6 changed files with 1713 additions and 13 deletions
				
			
		
							
								
								
									
										1
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -16,7 +16,6 @@
 | 
			
		|||
meshcentral.db
 | 
			
		||||
meshcentral.db.json
 | 
			
		||||
mesherrors.txt
 | 
			
		||||
package-lock.json
 | 
			
		||||
bob.json
 | 
			
		||||
.greenlockrc
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
FROM --platform=$BUILDPLATFORM node:current-alpine AS builder
 | 
			
		||||
FROM --platform=$BUILDPLATFORM node:20-alpine AS builder
 | 
			
		||||
 | 
			
		||||
RUN mkdir -p /opt/meshcentral/meshcentral
 | 
			
		||||
COPY ./ /opt/meshcentral/meshcentral/
 | 
			
		||||
| 
						 | 
				
			
			@ -34,7 +34,7 @@ RUN rm -rf /opt/meshcentral/meshcentral/docker
 | 
			
		|||
RUN rm -rf /opt/meshcentral/meshcentral/node_modules
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
FROM --platform=$TARGETPLATFORM alpine:latest
 | 
			
		||||
FROM --platform=$TARGETPLATFORM alpine:3.19
 | 
			
		||||
 | 
			
		||||
#Add non-root user, add installation directories and assign proper permissions
 | 
			
		||||
RUN mkdir -p /opt/meshcentral/meshcentral
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -471,7 +471,8 @@ function CreateMeshCentralServer(config, args) {
 | 
			
		|||
                const npmproxy = ((typeof obj.args.npmproxy == 'string') ? (' --proxy ' + obj.args.npmproxy) : '');
 | 
			
		||||
                const env = Object.assign({}, process.env); // Shallow clone
 | 
			
		||||
                if (typeof obj.args.npmproxy == 'string') { env['HTTP_PROXY'] = env['HTTPS_PROXY'] = env['http_proxy'] = env['https_proxy'] = obj.args.npmproxy; }
 | 
			
		||||
                const xxprocess = child_process.exec(npmpath + ' install --no-audit --no-package-lock meshcentral' + version + npmproxy, { maxBuffer: Infinity, cwd: obj.parentpath, env: env }, function (error, stdout, stderr) {
 | 
			
		||||
                // always use --save-exact - https://stackoverflow.com/a/64507176/1210734
 | 
			
		||||
                const xxprocess = child_process.exec(npmpath + ' install --save-exact --no-audit meshcentral' + version + npmproxy, { maxBuffer: Infinity, cwd: obj.parentpath, env: env }, function (error, stdout, stderr) {
 | 
			
		||||
                    if ((error != null) && (error != '')) { console.log('Update failed: ' + error); }
 | 
			
		||||
                });
 | 
			
		||||
                xxprocess.data = '';
 | 
			
		||||
| 
						 | 
				
			
			@ -3857,7 +3858,7 @@ function InstallModules(modules, args, func) {
 | 
			
		|||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        if (missingModules.length > 0) { if (args.debug) { console.log('Missing Modules: ' + missingModules.join(', ')); } InstallModuleEx(modules, args, func); } else { func(); }
 | 
			
		||||
        if (missingModules.length > 0) { if (args.debug) { console.log('Missing Modules: ' + missingModules.join(', ')); } InstallModuleEx(missingModules, args, func); } else { func(); }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -3865,23 +3866,23 @@ function InstallModules(modules, args, func) {
 | 
			
		|||
// this is to make sure NPM gives us exactly what we need. Also, we install the meshcentral with current version, so that NPM does not update it - which it will do if obmitted.
 | 
			
		||||
function InstallModuleEx(modulenames, args, func) {
 | 
			
		||||
    var names = modulenames.join(' ');
 | 
			
		||||
    console.log('Installing modules...');
 | 
			
		||||
    console.log('Installing modules', modulenames);
 | 
			
		||||
    const child_process = require('child_process');
 | 
			
		||||
    var parentpath = __dirname;
 | 
			
		||||
    function getCurrentVersion() { try { return JSON.parse(require('fs').readFileSync(require('path').join(__dirname, 'package.json'), 'utf8')).version; } catch (ex) { } return null; } // Fetch server version
 | 
			
		||||
    const meshCentralVersion = getCurrentVersion();
 | 
			
		||||
    if ((meshCentralVersion != null) && (args.dev == null)) { names = 'meshcentral@' + getCurrentVersion() + ' ' + names; }
 | 
			
		||||
    //const meshCentralVersion = getCurrentVersion();
 | 
			
		||||
    //if ((meshCentralVersion != null) && (args.dev == null)) { names = 'meshcentral@' + getCurrentVersion() + ' ' + names; }
 | 
			
		||||
 | 
			
		||||
    // Get the working directory
 | 
			
		||||
    if ((__dirname.endsWith('/node_modules/meshcentral')) || (__dirname.endsWith('\\node_modules\\meshcentral')) || (__dirname.endsWith('/node_modules/meshcentral/')) || (__dirname.endsWith('\\node_modules\\meshcentral\\'))) { parentpath = require('path').join(__dirname, '../..'); }
 | 
			
		||||
 | 
			
		||||
    if (args.debug) { console.log('NPM Command Line: ' + npmpath + ` install --no-audit --no-package-lock --omit=optional --no-save --no-fund ${names}`); }
 | 
			
		||||
 | 
			
		||||
    child_process.exec(npmpath + ` install --no-audit --no-package-lock --no-optional --omit=optional --no-save ${names}`, { maxBuffer: 512000, timeout: 300000, cwd: parentpath }, function (error, stdout, stderr) {
 | 
			
		||||
    if (args.debug) { console.log('NPM Command Line: ' + npmpath + ` install --save-exact --no-audit --omit=optional --no-fund ${names}`); }
 | 
			
		||||
    // always use --save-exact - https://stackoverflow.com/a/64507176/1210734
 | 
			
		||||
    child_process.exec(npmpath + ` install --save-exact --no-audit --no-optional --omit=optional ${names}`, { maxBuffer: 512000, timeout: 300000, cwd: parentpath }, function (error, stdout, stderr) {
 | 
			
		||||
        if ((error != null) && (error != '')) {
 | 
			
		||||
            var mcpath = __dirname;
 | 
			
		||||
            if (mcpath.endsWith('\\node_modules\\meshcentral') || mcpath.endsWith('/node_modules/meshcentral')) { mcpath = require('path').join(mcpath, '..', '..'); }
 | 
			
		||||
            console.log('ERROR: Unable to install required modules. MeshCentral may not have access to npm, or npm may not have suffisent rights to load the new module. To manualy install this module try:\r\n\r\n   cd "' + mcpath + '"\r\n   npm install --no-audit --no-package-lock --no-optional --omit=optional --no-save ' + names + '\r\n   node node_modules' + ((require('os').platform() == 'win32') ? '\\' : '/') + 'meshcentral');
 | 
			
		||||
            console.log('ERROR: Unable to install required modules. MeshCentral may not have access to npm, or npm may not have suffisent rights to load the new module. To manualy install this module try:\r\n\r\n   cd "' + mcpath + '"\r\n   npm install --no-audit --no-optional --omit=optional ' + names + '\r\n   node node_modules' + ((require('os').platform() == 'win32') ? '\\' : '/') + 'meshcentral');
 | 
			
		||||
            process.exit();
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										1699
									
								
								package-lock.json
									
										
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										1699
									
								
								package-lock.json
									
										
									
										generated
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							| 
						 | 
				
			
			@ -50,6 +50,7 @@
 | 
			
		|||
    "multiparty": "4.2.3",
 | 
			
		||||
    "@yetzt/nedb": "1.8.0",
 | 
			
		||||
    "node-forge": "1.3.1",
 | 
			
		||||
    "otplib": "10.2.3",
 | 
			
		||||
    "ua-parser-js": "1.0.37",
 | 
			
		||||
    "ws": "8.14.2",
 | 
			
		||||
    "yauzl": "2.10.0"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1108,7 +1108,7 @@ function InstallModuleEx(modulenames, func) {
 | 
			
		|||
    if ((__dirname.endsWith('/node_modules/meshcentral')) || (__dirname.endsWith('\\node_modules\\meshcentral')) || (__dirname.endsWith('/node_modules/meshcentral/')) || (__dirname.endsWith('\\node_modules\\meshcentral\\'))) { parentpath = require('path').join(__dirname, '../..'); }
 | 
			
		||||
 | 
			
		||||
    // Looks like we need to keep a global reference to the child process object for this to work correctly.
 | 
			
		||||
    InstallModuleChildProcess = child_process.exec(`npm install --no-audit --no-package-lock --no-optional --omit=optional --no-save ${names}`, { maxBuffer: 512000, timeout: 300000, cwd: parentpath }, function (error, stdout, stderr) {
 | 
			
		||||
    InstallModuleChildProcess = child_process.exec(`npm install --no-audit --no-optional --omit=optional ${names}`, { maxBuffer: 512000, timeout: 300000, cwd: parentpath }, function (error, stdout, stderr) {
 | 
			
		||||
        InstallModuleChildProcess = null;
 | 
			
		||||
        if ((error != null) && (error != '')) {
 | 
			
		||||
            log('ERROR: Unable to install required modules. May not have access to npm, or npm may not have suffisent rights to load the new modules. Try "npm install ' + names + '" to manualy install the modules.\r\n');
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue