From 1e5706208ccb5fc5187d65f20d98811a3e3e2870 Mon Sep 17 00:00:00 2001 From: "ryan.kuba" Date: Tue, 1 Nov 2022 15:44:15 -0700 Subject: [PATCH 1/5] KASM-3512 adding select dropdown during installation to force a GPU on all containers --- index.js | 23 ++++++++++++++++++++++- public/js/index.js | 12 ++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/index.js b/index.js index 46778a2..cd7c119 100644 --- a/index.js +++ b/index.js @@ -19,6 +19,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 @@ -68,6 +69,15 @@ io.on('connection', async function (socket) { imagesD.images[image].hidden = true; } } + if (installSettings.forceGpu !== 'disabled') { + let card = installSettings.forceGpu.slice(-1); + let render = (Number(card) + 128).toString(); + console.log(card, render); + for await (let image of Object.keys(images.images)) { + imagesD.images[image]['run_config'] = '{"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"]}' + imagesD.images[image]['exec_config'] = '{"first_launch":{"user":"root","cmd": "bash -c \'chown -R kasm-user:kasm-user /dev/dri/*\'"}}' + } + } 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 +102,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 diff --git a/public/js/index.js b/public/js/index.js index d908e91..f22ce80 100644 --- a/public/js/index.js +++ b/public/js/index.js @@ -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 = $('
', {id: 'EULA'}).text(EULA); $('#container').append(EULADiv); let EULAButton = $('