import * as plugins from './moxytool.plugins.ts'; import * as paths from './moxytool.paths.ts'; import { logger } from './moxytool.logging.ts'; export const runCli = async () => { const smartshellInstance = new plugins.smartshell.Smartshell({ executor: 'bash', }); const smartcliInstance = new plugins.smartcli.Smartcli(); // Standard command (no arguments) smartcliInstance.standardCommand().subscribe(async () => { logger.log('info', 'MOXYTOOL - Proxmox Administration Tool'); logger.log('info', ''); logger.log('info', 'Available commands:'); logger.log('info', '* vgpu-setup - Install and configure Proxmox vGPU support'); logger.log('info', ''); logger.log('info', 'Usage: moxytool [options]'); }); // vGPU setup command smartcliInstance.addCommand('vgpu-setup').subscribe(async (argvArg) => { logger.log('ok', 'Starting Proxmox vGPU setup process'); logger.log('info', 'This will install vGPU support for NVIDIA GPUs on Proxmox'); logger.log('info', ''); // Check for arguments const step = argvArg.step; const url = argvArg.url; const file = argvArg.file; const debug = argvArg.debug; // Check if running on Proxmox try { const result = await smartshellInstance.exec('which pveversion'); if (result.exitCode !== 0) { logger.log('error', 'This system does not appear to be running Proxmox'); logger.log('error', 'Please run this command on a Proxmox host'); Deno.exit(1); } } catch (e) { logger.log('error', 'Failed to verify Proxmox installation'); logger.log('error', 'Please ensure you are running this on a Proxmox host'); Deno.exit(1); } // Create temporary directory const tmpDir = '/tmp/moxytool-vgpu-setup'; await smartshellInstance.exec(`mkdir -p ${tmpDir}`); try { // Step 1: Clone and run the installer script logger.log('info', 'Step 1: Downloading Proxmox vGPU installer (supports v9)...'); const cloneResult = await smartshellInstance.exec( `cd ${tmpDir} && git clone https://github.com/anomixer/proxmox-vgpu-installer.git`, ); if (cloneResult.exitCode !== 0) { logger.log('error', 'Failed to clone the installer repository'); logger.log('error', cloneResult.stderr || 'Unknown error'); Deno.exit(1); } logger.log('ok', 'Installer downloaded successfully'); logger.log('info', ''); // Build command with arguments let command = 'bash proxmox-installer.sh'; if (step) { command += ` --step ${step}`; } if (url) { command += ` --url ${url}`; } if (file) { command += ` --file ${file}`; } if (debug) { command += ' --debug'; } logger.log('info', 'Running installer script...'); logger.log('info', 'Please follow the interactive prompts'); logger.log('info', ''); // Run the installer script interactively const installResult = await smartshellInstance.exec( `cd ${tmpDir}/proxmox-vgpu-installer && ${command}`, ); if (installResult.exitCode !== 0) { logger.log('error', 'Installer script failed'); logger.log('error', installResult.stderr || 'Unknown error'); Deno.exit(1); } logger.log('ok', 'vGPU setup process completed'); logger.log('info', ''); logger.log('info', 'Next steps:'); logger.log('info', '1. If prompted, reboot your system'); logger.log('info', '2. After reboot, run this command again to continue setup'); logger.log('info', '3. Verify installation with: mdevctl types'); logger.log('info', '4. Configure your VMs with vGPU in the Proxmox web UI'); } catch (error) { logger.log('error', `Setup failed: ${error instanceof Error ? error.message : String(error)}`); Deno.exit(1); } }); smartcliInstance.startParse(); };