mirror of
https://github.com/kasmtech/kasm-install-wizard.git
synced 2026-01-23 02:34:27 +00:00
Merge pull request #1 from kasmtech/feature/KASM-3512-gpu-option
Feature/kasm 3512 gpu option
This commit is contained in:
commit
675ca12955
3 changed files with 56 additions and 2 deletions
45
index.js
45
index.js
|
|
@ -6,6 +6,7 @@ var fsw = require('fs').promises;
|
|||
var fs = require('fs');
|
||||
var os = require('os');
|
||||
var yaml = require('js-yaml');
|
||||
var _ = require('lodash');
|
||||
var si = require('systeminformation');
|
||||
var express = require('express');
|
||||
var app = require('express')();
|
||||
|
|
@ -19,6 +20,7 @@ var arch = os.arch().replace('x64', 'amd64');
|
|||
var baseUrl = process.env.SUBFOLDER || '/';
|
||||
var version = process.env.VERSION || 'stable';
|
||||
var port = process.env.KASM_PORT || '443';
|
||||
const { spawn } = require('node:child_process');
|
||||
var EULA;
|
||||
var images;
|
||||
// Grab installer variables
|
||||
|
|
@ -48,7 +50,7 @@ io.on('connection', async function (socket) {
|
|||
installSettings = data[0];
|
||||
let imagesI = data[1];
|
||||
let imagesD = images;
|
||||
installFlags = ['/kasm_release/install.sh', '-B' ,'-H', '-e', '-L', port, '-P', installSettings.adminPass, '-U', installSettings.userPass];
|
||||
installFlags = ['/kasm_release/install.sh', '-A', '-B' ,'-H', '-e', '-L', port, '-P', installSettings.adminPass, '-U', installSettings.userPass];
|
||||
if (installSettings.useRolling == true) {
|
||||
installFlags.push('-O');
|
||||
}
|
||||
|
|
@ -68,6 +70,34 @@ io.on('connection', async function (socket) {
|
|||
imagesD.images[image].hidden = true;
|
||||
}
|
||||
}
|
||||
if (installSettings.forceGpu !== 'disabled') {
|
||||
let gpu = installSettings.forceGpu.split('|')[0];
|
||||
let gpuName = installSettings.forceGpu.split('|')[1];
|
||||
let card = gpu.slice(-1);
|
||||
let render = (Number(card) + 128).toString();
|
||||
// Handle NVIDIA Gpus
|
||||
var baseRun;
|
||||
if (gpuName.indexOf('NVIDIA') !== -1) {
|
||||
baseRun = JSON.parse('{"environment":{"KASM_EGL_CARD":"/dev/dri/card' + card + '","KASM_RENDERD":"/dev/dri/renderD' + render + '"},"devices":["/dev/dri/card' + card + ':/dev/dri/card' + card + ':rwm","/dev/dri/renderD' + render + ':/dev/dri/renderD' + render + ':rwm"],"device_requests":[{"driver": "","count": -1,"device_ids": null,"capabilities":[["gpu"]],"options":{}}]}');
|
||||
} else {
|
||||
baseRun = JSON.parse('{"environment":{"KASM_EGL_CARD":"/dev/dri/card' + card + '","KASM_RENDERD":"/dev/dri/renderD' + render + '"},"devices":["/dev/dri/card' + card + ':/dev/dri/card' + card + ':rwm","/dev/dri/renderD' + render + ':/dev/dri/renderD' + render + ':rwm"]}');
|
||||
}
|
||||
let baseExec = JSON.parse('{"first_launch":{"user":"root","cmd": "bash -c \'chown -R kasm-user:kasm-user /dev/dri/*\'"}}');
|
||||
for await (let image of Object.keys(images.images)) {
|
||||
if (imagesD.images[image]['run_config']) {
|
||||
finalRun = _.merge(JSON.parse(imagesD.images[image]['run_config']), baseRun)
|
||||
} else {
|
||||
finalRun = baseRun;
|
||||
}
|
||||
if (imagesD.images[image]['exec_config']) {
|
||||
finalExec = _.merge(JSON.parse(imagesD.images[image]['exec_config']), baseExec)
|
||||
} else {
|
||||
finalExec = baseExec;
|
||||
}
|
||||
imagesD.images[image]['run_config'] = JSON.stringify(finalRun);
|
||||
imagesD.images[image]['exec_config'] = JSON.stringify(finalExec);
|
||||
}
|
||||
}
|
||||
let yamlStr = yaml.dump(imagesD);
|
||||
await fsw.writeFile('/kasm_release/conf/database/seed_data/default_images_' + arch + '.yaml', yamlStr);
|
||||
let cmd = pty.spawn('/bin/bash', installFlags);
|
||||
|
|
@ -92,7 +122,18 @@ io.on('connection', async function (socket) {
|
|||
dashinfo['port'] = port;
|
||||
socket.emit('renderdash', dashinfo);
|
||||
} else {
|
||||
socket.emit('renderinstall', [EULA, images]);
|
||||
let gpuData = [];
|
||||
let gpuCmd = spawn('/gpuinfo.sh');
|
||||
gpuCmd.stdout.on('data', function(data) {
|
||||
gpuData.push(data);
|
||||
});
|
||||
gpuCmd.on('close', function(code) {
|
||||
if (code == 0) {
|
||||
socket.emit('renderinstall', [EULA, images, JSON.parse(gpuData.join(''))]);
|
||||
} else {
|
||||
socket.emit('renderinstall', [EULA, images, {}]);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
// Disable wizard
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@
|
|||
"dockerode": "^3.3.2",
|
||||
"express": "^4.18.1",
|
||||
"js-yaml": "^4.1.0",
|
||||
"lodash": "^4.17.21",
|
||||
"node-pty": "^0.10.1",
|
||||
"socket.io": "^4.5.1",
|
||||
"systeminformation": "^5.11.16"
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
// Variables
|
||||
var EULA;
|
||||
var images;
|
||||
var gpus;
|
||||
var term;
|
||||
var installImages = [];
|
||||
var installSettings = {};
|
||||
|
|
@ -73,6 +74,7 @@ function renderInstall(data) {
|
|||
titleChange('EULA');
|
||||
EULA = data[0];
|
||||
images = data[1];
|
||||
gpus = data[2];
|
||||
let EULADiv = $('<div>', {id: 'EULA'}).text(EULA);
|
||||
$('#container').append(EULADiv);
|
||||
let EULAButton = $('<button>', {id: 'EULAButton', onclick: 'pickSettings()', class: 'btn btn-default btn-ghost'}).text('Accept and continue');
|
||||
|
|
@ -195,6 +197,14 @@ async function pickSettings() {
|
|||
$('<label>', {for: 'noDownload'}).text('Skip Image Download: '),
|
||||
$('<input>', {name: 'noDownload', id: 'noDownload', type: 'checkbox'})
|
||||
]);
|
||||
let gpuOptions = [$('<option>', {value: 'disabled'}).text('Disabled')];
|
||||
for await (let card of Object.keys(gpus)) {
|
||||
gpuOptions.push($('<option>', {value: card + '|' + gpus[card]}).text(card + ' - ' + gpus[card]));
|
||||
}
|
||||
let forceGpu = $('<div>', {class: 'form-group'}).append([
|
||||
$('<label>', {for: 'forceGpu'}).text('Use GPU on all images: '),
|
||||
$('<select>', {name: 'forceGpu', id: 'forceGpu',}).append(gpuOptions)
|
||||
]);
|
||||
let submit = $('<div>', {class: 'form-group'}).append([
|
||||
$('<input>', {name: 'submit', type: 'submit', value: 'Next', class: 'btn btn-default btn-ghost'})
|
||||
]);
|
||||
|
|
@ -203,6 +213,7 @@ async function pickSettings() {
|
|||
userPass,
|
||||
useRolling,
|
||||
noDownload,
|
||||
forceGpu,
|
||||
submit
|
||||
]);
|
||||
form.append(fieldset);
|
||||
|
|
@ -214,6 +225,7 @@ async function pickSettings() {
|
|||
installSettings.userPass = $('#userPass').val();
|
||||
installSettings.useRolling = $('#useRolling').is(":checked");
|
||||
installSettings.noDownload = $('#noDownload').is(":checked");
|
||||
installSettings.forceGpu = $('#forceGpu').val();
|
||||
pickImages();
|
||||
});
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue