@phystack/cli 4.3.40-dev
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +19 -0
- package/README.md +24 -0
- package/bin/index.js +2 -0
- package/dist/commands/app/build-apps.js +66 -0
- package/dist/commands/app/build-apps.js.map +1 -0
- package/dist/commands/app/build-container-remote.js +171 -0
- package/dist/commands/app/build-container-remote.js.map +1 -0
- package/dist/commands/app/build-container.js +330 -0
- package/dist/commands/app/build-container.js.map +1 -0
- package/dist/commands/app/build.js +393 -0
- package/dist/commands/app/build.js.map +1 -0
- package/dist/commands/app/create.js +451 -0
- package/dist/commands/app/create.js.map +1 -0
- package/dist/commands/app/deploy.js +176 -0
- package/dist/commands/app/deploy.js.map +1 -0
- package/dist/commands/app/device-picker.js +150 -0
- package/dist/commands/app/device-picker.js.map +1 -0
- package/dist/commands/app/import.js +303 -0
- package/dist/commands/app/import.js.map +1 -0
- package/dist/commands/app/list.js +26 -0
- package/dist/commands/app/list.js.map +1 -0
- package/dist/commands/app/publish.js +327 -0
- package/dist/commands/app/publish.js.map +1 -0
- package/dist/commands/app/settings.js +129 -0
- package/dist/commands/app/settings.js.map +1 -0
- package/dist/commands/app/types.js +13 -0
- package/dist/commands/app/types.js.map +1 -0
- package/dist/commands/app/upload-description.js +139 -0
- package/dist/commands/app/upload-description.js.map +1 -0
- package/dist/commands/app/upload-settings.js +29 -0
- package/dist/commands/app/upload-settings.js.map +1 -0
- package/dist/commands/app/utils.js +86 -0
- package/dist/commands/app/utils.js.map +1 -0
- package/dist/commands/auth/login.js +111 -0
- package/dist/commands/auth/login.js.map +1 -0
- package/dist/commands/auth/logout.js +19 -0
- package/dist/commands/auth/logout.js.map +1 -0
- package/dist/commands/descriptor/create.js +143 -0
- package/dist/commands/descriptor/create.js.map +1 -0
- package/dist/commands/descriptor/index.js +36 -0
- package/dist/commands/descriptor/index.js.map +1 -0
- package/dist/commands/descriptor/publish.js +163 -0
- package/dist/commands/descriptor/publish.js.map +1 -0
- package/dist/commands/descriptor/show.js +68 -0
- package/dist/commands/descriptor/show.js.map +1 -0
- package/dist/commands/dev/develop.js +175 -0
- package/dist/commands/dev/develop.js.map +1 -0
- package/dist/commands/dev/forward.js +118 -0
- package/dist/commands/dev/forward.js.map +1 -0
- package/dist/commands/dev/index.js +66 -0
- package/dist/commands/dev/index.js.map +1 -0
- package/dist/commands/dev/list.js +96 -0
- package/dist/commands/dev/list.js.map +1 -0
- package/dist/commands/dev/screen-devtools.js +156 -0
- package/dist/commands/dev/screen-devtools.js.map +1 -0
- package/dist/commands/dev/select.js +118 -0
- package/dist/commands/dev/select.js.map +1 -0
- package/dist/commands/dev/shell.js +171 -0
- package/dist/commands/dev/shell.js.map +1 -0
- package/dist/commands/dev/vnc.js +75 -0
- package/dist/commands/dev/vnc.js.map +1 -0
- package/dist/commands/device/select.js +118 -0
- package/dist/commands/device/select.js.map +1 -0
- package/dist/commands/flash.js +1120 -0
- package/dist/commands/flash.js.map +1 -0
- package/dist/commands/inst/create.js +55 -0
- package/dist/commands/inst/create.js.map +1 -0
- package/dist/commands/inst/index.js +15 -0
- package/dist/commands/inst/index.js.map +1 -0
- package/dist/commands/inst/list.js +26 -0
- package/dist/commands/inst/list.js.map +1 -0
- package/dist/commands/legacydev/debug.js +11 -0
- package/dist/commands/legacydev/debug.js.map +1 -0
- package/dist/commands/legacydev/deploy.js +15 -0
- package/dist/commands/legacydev/deploy.js.map +1 -0
- package/dist/commands/legacydev/dumpTwin.js +27 -0
- package/dist/commands/legacydev/dumpTwin.js.map +1 -0
- package/dist/commands/legacydev/forward.js +104 -0
- package/dist/commands/legacydev/forward.js.map +1 -0
- package/dist/commands/legacydev/index.js +188 -0
- package/dist/commands/legacydev/index.js.map +1 -0
- package/dist/commands/legacydev/invoke.js +29 -0
- package/dist/commands/legacydev/invoke.js.map +1 -0
- package/dist/commands/legacydev/js.js +69 -0
- package/dist/commands/legacydev/js.js.map +1 -0
- package/dist/commands/legacydev/list.js +196 -0
- package/dist/commands/legacydev/list.js.map +1 -0
- package/dist/commands/legacydev/logs.js +60 -0
- package/dist/commands/legacydev/logs.js.map +1 -0
- package/dist/commands/legacydev/modules.js +50 -0
- package/dist/commands/legacydev/modules.js.map +1 -0
- package/dist/commands/legacydev/move.js +23 -0
- package/dist/commands/legacydev/move.js.map +1 -0
- package/dist/commands/legacydev/ota.js +88 -0
- package/dist/commands/legacydev/ota.js.map +1 -0
- package/dist/commands/legacydev/patchTwin.js +21 -0
- package/dist/commands/legacydev/patchTwin.js.map +1 -0
- package/dist/commands/legacydev/pin.js +23 -0
- package/dist/commands/legacydev/pin.js.map +1 -0
- package/dist/commands/legacydev/pub.js +25 -0
- package/dist/commands/legacydev/pub.js.map +1 -0
- package/dist/commands/legacydev/rdp.js +64 -0
- package/dist/commands/legacydev/rdp.js.map +1 -0
- package/dist/commands/legacydev/screen-devtools.js +142 -0
- package/dist/commands/legacydev/screen-devtools.js.map +1 -0
- package/dist/commands/legacydev/settingsShow.js +89 -0
- package/dist/commands/legacydev/settingsShow.js.map +1 -0
- package/dist/commands/legacydev/settingsUpdate.js +114 -0
- package/dist/commands/legacydev/settingsUpdate.js.map +1 -0
- package/dist/commands/legacydev/shell.js +167 -0
- package/dist/commands/legacydev/shell.js.map +1 -0
- package/dist/commands/legacydev/showTwin.js +9 -0
- package/dist/commands/legacydev/showTwin.js.map +1 -0
- package/dist/commands/legacydev/statusLog.js +56 -0
- package/dist/commands/legacydev/statusLog.js.map +1 -0
- package/dist/commands/legacydev/sub.js +39 -0
- package/dist/commands/legacydev/sub.js.map +1 -0
- package/dist/commands/legacydev/vnc.js +61 -0
- package/dist/commands/legacydev/vnc.js.map +1 -0
- package/dist/commands/tenant/index.js +21 -0
- package/dist/commands/tenant/index.js.map +1 -0
- package/dist/commands/tenant/list.js +14 -0
- package/dist/commands/tenant/list.js.map +1 -0
- package/dist/commands/tenant/select.js +87 -0
- package/dist/commands/tenant/select.js.map +1 -0
- package/dist/commands/vm/create.js +718 -0
- package/dist/commands/vm/create.js.map +1 -0
- package/dist/commands/vm/index.js +130 -0
- package/dist/commands/vm/index.js.map +1 -0
- package/dist/commands/vm/list.js +124 -0
- package/dist/commands/vm/list.js.map +1 -0
- package/dist/commands/vm/logs.js +66 -0
- package/dist/commands/vm/logs.js.map +1 -0
- package/dist/commands/vm/remove.js +180 -0
- package/dist/commands/vm/remove.js.map +1 -0
- package/dist/commands/vm/shell.js +400 -0
- package/dist/commands/vm/shell.js.map +1 -0
- package/dist/commands/vm/start.js +861 -0
- package/dist/commands/vm/start.js.map +1 -0
- package/dist/commands/vm/stop.js +232 -0
- package/dist/commands/vm/stop.js.map +1 -0
- package/dist/index.js +158 -0
- package/dist/index.js.map +1 -0
- package/dist/services/admin-api/admin-api.types.js +3 -0
- package/dist/services/admin-api/admin-api.types.js.map +1 -0
- package/dist/services/admin-api/device-modules.admin-api.service.js +58 -0
- package/dist/services/admin-api/device-modules.admin-api.service.js.map +1 -0
- package/dist/services/admin-api/devices-admin-api.service.js +213 -0
- package/dist/services/admin-api/devices-admin-api.service.js.map +1 -0
- package/dist/services/admin-api/gridapps-admin-api.service.js +59 -0
- package/dist/services/admin-api/gridapps-admin-api.service.js.map +1 -0
- package/dist/services/admin-api/index.js +157 -0
- package/dist/services/admin-api/index.js.map +1 -0
- package/dist/services/admin-api/installations-admin-api.service.js +29 -0
- package/dist/services/admin-api/installations-admin-api.service.js.map +1 -0
- package/dist/services/admin-api/organizations-admin-api.service.js +53 -0
- package/dist/services/admin-api/organizations-admin-api.service.js.map +1 -0
- package/dist/services/auth/device-grant-auth.service.js +224 -0
- package/dist/services/auth/device-grant-auth.service.js.map +1 -0
- package/dist/services/phyhub/index.js +200 -0
- package/dist/services/phyhub/index.js.map +1 -0
- package/dist/services/phyhub/phyhub.types.js +3 -0
- package/dist/services/phyhub/phyhub.types.js.map +1 -0
- package/dist/utils/device-fetcher.js +92 -0
- package/dist/utils/device-fetcher.js.map +1 -0
- package/dist/utils/devices.js +41 -0
- package/dist/utils/devices.js.map +1 -0
- package/dist/utils/docker-credentials.js +720 -0
- package/dist/utils/docker-credentials.js.map +1 -0
- package/dist/utils/emulated-device.js +91 -0
- package/dist/utils/emulated-device.js.map +1 -0
- package/dist/utils/index.js +180 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/modules.js +36 -0
- package/dist/utils/modules.js.map +1 -0
- package/dist/utils/org-selector.js +108 -0
- package/dist/utils/org-selector.js.map +1 -0
- package/dist/utils/proxy.js +31 -0
- package/dist/utils/proxy.js.map +1 -0
- package/dist/utils/registry-credentials.js +113 -0
- package/dist/utils/registry-credentials.js.map +1 -0
- package/dist/utils/statuses.js +124 -0
- package/dist/utils/statuses.js.map +1 -0
- package/dist/utils/templates.js +197 -0
- package/dist/utils/templates.js.map +1 -0
- package/dist/utils/tenant-storage.js +88 -0
- package/dist/utils/tenant-storage.js.map +1 -0
- package/dist/utils/vm.js +434 -0
- package/dist/utils/vm.js.map +1 -0
- package/dist/utils/with-spinner.js +20 -0
- package/dist/utils/with-spinner.js.map +1 -0
- package/package.json +103 -0
package/dist/utils/vm.js
ADDED
|
@@ -0,0 +1,434 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getVmsBaseDir = getVmsBaseDir;
|
|
7
|
+
exports.getVmsCacheDir = getVmsCacheDir;
|
|
8
|
+
exports.getVmDir = getVmDir;
|
|
9
|
+
exports.getVmConfigPath = getVmConfigPath;
|
|
10
|
+
exports.getVmSettingsPath = getVmSettingsPath;
|
|
11
|
+
exports.getVmLogPath = getVmLogPath;
|
|
12
|
+
exports.getVmPidPath = getVmPidPath;
|
|
13
|
+
exports.getVmSerialPath = getVmSerialPath;
|
|
14
|
+
exports.getPhyOsCachePath = getPhyOsCachePath;
|
|
15
|
+
exports.ensureVmDir = ensureVmDir;
|
|
16
|
+
exports.vmExists = vmExists;
|
|
17
|
+
exports.isVmRunning = isVmRunning;
|
|
18
|
+
exports.readVmConfig = readVmConfig;
|
|
19
|
+
exports.readVmSettings = readVmSettings;
|
|
20
|
+
exports.listVms = listVms;
|
|
21
|
+
exports.getVmPid = getVmPid;
|
|
22
|
+
exports.isPidFileRootOwned = isPidFileRootOwned;
|
|
23
|
+
exports.relaunchWithSudo = relaunchWithSudo;
|
|
24
|
+
exports.runBrewCommandAsUser = runBrewCommandAsUser;
|
|
25
|
+
exports.execPromise = execPromise;
|
|
26
|
+
exports.createPidFileForRunningVm = createPidFileForRunningVm;
|
|
27
|
+
const fs_1 = __importDefault(require("fs"));
|
|
28
|
+
const path_1 = __importDefault(require("path"));
|
|
29
|
+
const os_1 = __importDefault(require("os"));
|
|
30
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
31
|
+
const child_process_1 = require("child_process");
|
|
32
|
+
/**
|
|
33
|
+
* Get the base directory for VM storage
|
|
34
|
+
*/
|
|
35
|
+
function getVmsBaseDir() {
|
|
36
|
+
return path_1.default.join(os_1.default.homedir(), '.config', 'phygrid-cli', 'vms');
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Get the cache directory for VM downloads
|
|
40
|
+
*/
|
|
41
|
+
function getVmsCacheDir() {
|
|
42
|
+
return path_1.default.join(os_1.default.homedir(), '.config', 'phygrid-cli', 'cache');
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Get the directory for a specific VM
|
|
46
|
+
*/
|
|
47
|
+
function getVmDir(vmName) {
|
|
48
|
+
return path_1.default.join(getVmsBaseDir(), vmName);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Get the path to a VM's configuration file
|
|
52
|
+
*/
|
|
53
|
+
function getVmConfigPath(vmName) {
|
|
54
|
+
return path_1.default.join(getVmDir(vmName), 'config.json');
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Get the path to a VM's settings file
|
|
58
|
+
*/
|
|
59
|
+
function getVmSettingsPath(vmName) {
|
|
60
|
+
return path_1.default.join(getVmDir(vmName), 'settings.json');
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Get the path to a VM's log file
|
|
64
|
+
*/
|
|
65
|
+
function getVmLogPath(vmName) {
|
|
66
|
+
return path_1.default.join(getVmDir(vmName), 'vm.log');
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Get the path to a VM's pid file
|
|
70
|
+
*/
|
|
71
|
+
function getVmPidPath(vmName) {
|
|
72
|
+
return path_1.default.join(getVmDir(vmName), 'vm.pid');
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Get the path to a VM's serial file
|
|
76
|
+
*/
|
|
77
|
+
function getVmSerialPath(vmName) {
|
|
78
|
+
return path_1.default.join(getVmDir(vmName), 'serial.txt');
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Get the cache path for a PhyOS image based on version and architecture
|
|
82
|
+
*/
|
|
83
|
+
function getPhyOsCachePath(version, arch, fileType, extension) {
|
|
84
|
+
const cacheDir = getVmsCacheDir();
|
|
85
|
+
let filename;
|
|
86
|
+
let fileExt = extension;
|
|
87
|
+
switch (fileType) {
|
|
88
|
+
case 'tar':
|
|
89
|
+
filename = `phyos.${version}.qemu${arch}.tar.gz`;
|
|
90
|
+
break;
|
|
91
|
+
case 'image':
|
|
92
|
+
filename = `phyos.${version}.qemu${arch}.Image`;
|
|
93
|
+
break;
|
|
94
|
+
case 'initramfs':
|
|
95
|
+
filename = `phyos.${version}.qemu${arch}.cpio.gz`;
|
|
96
|
+
break;
|
|
97
|
+
case 'disk':
|
|
98
|
+
default:
|
|
99
|
+
fileExt = fileExt || 'zfs';
|
|
100
|
+
filename = `phyos.${version}.qemu${arch}.${fileExt}`;
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
return path_1.default.join(cacheDir, filename);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Ensure the VM base directory exists
|
|
107
|
+
*/
|
|
108
|
+
function ensureVmDir() {
|
|
109
|
+
const baseDir = getVmsBaseDir();
|
|
110
|
+
if (!fs_1.default.existsSync(baseDir)) {
|
|
111
|
+
fs_1.default.mkdirSync(baseDir, { recursive: true });
|
|
112
|
+
}
|
|
113
|
+
// Also ensure cache directory exists
|
|
114
|
+
const cacheDir = getVmsCacheDir();
|
|
115
|
+
if (!fs_1.default.existsSync(cacheDir)) {
|
|
116
|
+
fs_1.default.mkdirSync(cacheDir, { recursive: true });
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Check if a VM exists
|
|
121
|
+
*/
|
|
122
|
+
function vmExists(vmName) {
|
|
123
|
+
return fs_1.default.existsSync(getVmConfigPath(vmName));
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Check if a VM is running
|
|
127
|
+
*/
|
|
128
|
+
function isVmRunning(vmName) {
|
|
129
|
+
const pidPath = getVmPidPath(vmName);
|
|
130
|
+
if (!fs_1.default.existsSync(pidPath)) {
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
try {
|
|
134
|
+
const pidContent = fs_1.default.readFileSync(pidPath, 'utf8').trim();
|
|
135
|
+
// Check if PID file is empty or contains invalid data
|
|
136
|
+
if (!pidContent || isNaN(parseInt(pidContent, 10))) {
|
|
137
|
+
// Remove corrupted PID file
|
|
138
|
+
try {
|
|
139
|
+
fs_1.default.unlinkSync(pidPath);
|
|
140
|
+
}
|
|
141
|
+
catch (e) {
|
|
142
|
+
// Ignore cleanup errors
|
|
143
|
+
}
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
const pid = parseInt(pidContent, 10);
|
|
147
|
+
// On Unix-like systems, sending signal 0 checks process existence
|
|
148
|
+
process.kill(pid, 0);
|
|
149
|
+
return true;
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
// If process.kill throws an error, the process doesn't exist
|
|
153
|
+
// Clean up stale PID file
|
|
154
|
+
try {
|
|
155
|
+
if (fs_1.default.existsSync(pidPath)) {
|
|
156
|
+
fs_1.default.unlinkSync(pidPath);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
catch (e) {
|
|
160
|
+
// Ignore cleanup errors
|
|
161
|
+
}
|
|
162
|
+
return false;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Read a VM's configuration
|
|
167
|
+
*/
|
|
168
|
+
function readVmConfig(vmName) {
|
|
169
|
+
const configPath = getVmConfigPath(vmName);
|
|
170
|
+
if (!fs_1.default.existsSync(configPath)) {
|
|
171
|
+
throw new Error(`VM "${vmName}" not found`);
|
|
172
|
+
}
|
|
173
|
+
return JSON.parse(fs_1.default.readFileSync(configPath, 'utf8'));
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Read VM settings from settings.json, defaulting to values in config.json if not present
|
|
177
|
+
*/
|
|
178
|
+
function readVmSettings(name) {
|
|
179
|
+
try {
|
|
180
|
+
const settingsPath = getVmSettingsPath(name);
|
|
181
|
+
if (fs_1.default.existsSync(settingsPath)) {
|
|
182
|
+
const settings = JSON.parse(fs_1.default.readFileSync(settingsPath, 'utf8'));
|
|
183
|
+
return settings;
|
|
184
|
+
}
|
|
185
|
+
// If settings.json doesn't exist, try to read from config.json and serial.txt
|
|
186
|
+
const configPath = getVmConfigPath(name);
|
|
187
|
+
const serialPath = getVmSerialPath(name);
|
|
188
|
+
let config = {
|
|
189
|
+
memory: 2048,
|
|
190
|
+
arch: null,
|
|
191
|
+
version: null,
|
|
192
|
+
created: null
|
|
193
|
+
};
|
|
194
|
+
let serial = '';
|
|
195
|
+
if (fs_1.default.existsSync(configPath)) {
|
|
196
|
+
const configData = JSON.parse(fs_1.default.readFileSync(configPath, 'utf8'));
|
|
197
|
+
config = {
|
|
198
|
+
memory: configData.memory || 2048,
|
|
199
|
+
arch: configData.arch || null,
|
|
200
|
+
version: configData.version || null,
|
|
201
|
+
created: configData.created || null
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
if (fs_1.default.existsSync(serialPath)) {
|
|
205
|
+
serial = fs_1.default.readFileSync(serialPath, 'utf8').trim();
|
|
206
|
+
}
|
|
207
|
+
// Return default settings
|
|
208
|
+
return {
|
|
209
|
+
memory: config.memory,
|
|
210
|
+
serial,
|
|
211
|
+
arch: config.arch,
|
|
212
|
+
version: config.version,
|
|
213
|
+
created: config.created,
|
|
214
|
+
headless: false
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
catch (error) {
|
|
218
|
+
console.error(`Error reading VM settings: ${error.message}`);
|
|
219
|
+
// Return default settings
|
|
220
|
+
return {
|
|
221
|
+
memory: 2048,
|
|
222
|
+
serial: '',
|
|
223
|
+
arch: null,
|
|
224
|
+
version: null,
|
|
225
|
+
created: null,
|
|
226
|
+
headless: false
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* List all VMs
|
|
232
|
+
*/
|
|
233
|
+
function listVms() {
|
|
234
|
+
const baseDir = getVmsBaseDir();
|
|
235
|
+
if (!fs_1.default.existsSync(baseDir)) {
|
|
236
|
+
return [];
|
|
237
|
+
}
|
|
238
|
+
return fs_1.default.readdirSync(baseDir)
|
|
239
|
+
.filter(item => {
|
|
240
|
+
const vmDir = path_1.default.join(baseDir, item);
|
|
241
|
+
const configPath = path_1.default.join(vmDir, 'config.json');
|
|
242
|
+
return fs_1.default.statSync(vmDir).isDirectory() && fs_1.default.existsSync(configPath);
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Get the PID of a running VM
|
|
247
|
+
*/
|
|
248
|
+
function getVmPid(vmName) {
|
|
249
|
+
const pidPath = getVmPidPath(vmName);
|
|
250
|
+
if (!fs_1.default.existsSync(pidPath)) {
|
|
251
|
+
return null;
|
|
252
|
+
}
|
|
253
|
+
try {
|
|
254
|
+
const pidContent = fs_1.default.readFileSync(pidPath, 'utf8').trim();
|
|
255
|
+
// Check if PID file is empty or contains invalid data
|
|
256
|
+
if (!pidContent || isNaN(parseInt(pidContent, 10))) {
|
|
257
|
+
// Remove corrupted PID file
|
|
258
|
+
try {
|
|
259
|
+
fs_1.default.unlinkSync(pidPath);
|
|
260
|
+
}
|
|
261
|
+
catch (e) {
|
|
262
|
+
// Ignore cleanup errors
|
|
263
|
+
}
|
|
264
|
+
return null;
|
|
265
|
+
}
|
|
266
|
+
const pid = parseInt(pidContent, 10);
|
|
267
|
+
// Verify process exists
|
|
268
|
+
process.kill(pid, 0);
|
|
269
|
+
return pid;
|
|
270
|
+
}
|
|
271
|
+
catch (error) {
|
|
272
|
+
// If error, process doesn't exist
|
|
273
|
+
// Clean up stale PID file
|
|
274
|
+
try {
|
|
275
|
+
if (fs_1.default.existsSync(pidPath)) {
|
|
276
|
+
fs_1.default.unlinkSync(pidPath);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
catch (e) {
|
|
280
|
+
// Ignore cleanup errors
|
|
281
|
+
}
|
|
282
|
+
return null;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Checks if the PID file for a VM exists and is owned by root.
|
|
287
|
+
* Also returns true if the file exists but the current user lacks permission to stat it.
|
|
288
|
+
*/
|
|
289
|
+
function isPidFileRootOwned(name) {
|
|
290
|
+
const pidPath = getVmPidPath(name);
|
|
291
|
+
try {
|
|
292
|
+
// Check existence first to avoid error for non-existent file
|
|
293
|
+
if (fs_1.default.existsSync(pidPath)) {
|
|
294
|
+
// Attempt to get file stats
|
|
295
|
+
const stats = fs_1.default.statSync(pidPath);
|
|
296
|
+
return stats.uid === 0; // Check if UID is root (0)
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
catch (error) {
|
|
300
|
+
// If statSync fails with a permission error, assume it's root-owned
|
|
301
|
+
// because the current user lacks permissions.
|
|
302
|
+
if (error.code === 'EACCES' || error.code === 'EPERM') {
|
|
303
|
+
// console.warn(`Permission error accessing PID file ${pidPath}, assuming root-owned.`);
|
|
304
|
+
return true;
|
|
305
|
+
}
|
|
306
|
+
// Log other unexpected errors during stat
|
|
307
|
+
console.warn(`Warning: Error checking PID file ${pidPath}: ${error.message}`);
|
|
308
|
+
}
|
|
309
|
+
// Return false if file doesn't exist or other non-permission error occurred
|
|
310
|
+
return false;
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Relaunches the current phy command with sudo.
|
|
314
|
+
* This function assumes the check for needing sudo has already been made.
|
|
315
|
+
* It will exit the current process.
|
|
316
|
+
*
|
|
317
|
+
* @param commandArgs The original arguments passed to the phy command (e.g., process.argv.slice(2))
|
|
318
|
+
*/
|
|
319
|
+
function relaunchWithSudo(commandArgs) {
|
|
320
|
+
const phyCommand = process.argv[1]; // Path to the phy script being executed
|
|
321
|
+
const sudoArgs = [phyCommand, ...commandArgs];
|
|
322
|
+
console.log(chalk_1.default.yellow(`Relaunching with sudo: sudo phy ${commandArgs.join(' ')}`));
|
|
323
|
+
try {
|
|
324
|
+
const sudoProcess = (0, child_process_1.spawn)('sudo', sudoArgs, { stdio: 'inherit' });
|
|
325
|
+
sudoProcess.on('error', (err) => {
|
|
326
|
+
console.error(chalk_1.default.red(`Failed to execute sudo: ${err.message}`));
|
|
327
|
+
console.error(chalk_1.default.red('Please ensure \'sudo\' is available and try running the command manually.'));
|
|
328
|
+
process.exit(1); // Exit on sudo error
|
|
329
|
+
});
|
|
330
|
+
// Wait for the sudo process to exit and exit this script with the same code
|
|
331
|
+
sudoProcess.on('close', (code) => {
|
|
332
|
+
process.exit(code === null ? 1 : code); // Exit when sudo process finishes
|
|
333
|
+
});
|
|
334
|
+
// Keep the current process alive briefly to allow sudo process to start
|
|
335
|
+
// and handle prompt / errors. Exiting immediately can cause issues.
|
|
336
|
+
// The 'close' and 'error' handlers above will ultimately exit this process.
|
|
337
|
+
setTimeout(() => {
|
|
338
|
+
// If the process is still running after 15s (e.g., sudo hung), exit.
|
|
339
|
+
console.warn('Timeout waiting for sudo process, exiting original process.');
|
|
340
|
+
process.exit(1);
|
|
341
|
+
}, 15000); // 15 second timeout
|
|
342
|
+
}
|
|
343
|
+
catch (error) {
|
|
344
|
+
console.error(chalk_1.default.red(`Error attempting to spawn sudo: ${error.message}`));
|
|
345
|
+
process.exit(1); // Exit on spawn error
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Executes a brew command, ensuring it runs as the original user if sudo was used.
|
|
350
|
+
* Uses execSync for simplicity, throws error on failure.
|
|
351
|
+
*/
|
|
352
|
+
function runBrewCommandAsUser(args) {
|
|
353
|
+
const sudoUser = process.env.SUDO_USER;
|
|
354
|
+
const isRoot = process.getuid && process.getuid() === 0;
|
|
355
|
+
let cmd = 'brew';
|
|
356
|
+
let finalArgs = args;
|
|
357
|
+
if (isRoot && sudoUser) {
|
|
358
|
+
// If running as root via sudo, switch back to the original user for brew
|
|
359
|
+
cmd = 'sudo';
|
|
360
|
+
finalArgs = ['-u', sudoUser, 'brew', ...args];
|
|
361
|
+
console.log(chalk_1.default.gray(`Running brew as original user: sudo -u ${sudoUser} brew ${args.join(' ')}`));
|
|
362
|
+
}
|
|
363
|
+
else {
|
|
364
|
+
// Running as normal user or sudo without SUDO_USER (unlikely but handled)
|
|
365
|
+
console.log(chalk_1.default.gray(`Running brew: brew ${args.join(' ')}`));
|
|
366
|
+
}
|
|
367
|
+
try {
|
|
368
|
+
// Execute synchronously and return output
|
|
369
|
+
return (0, child_process_1.execSync)(`${cmd} ${finalArgs.join(' ')}`, { stdio: 'pipe' }).toString();
|
|
370
|
+
}
|
|
371
|
+
catch (error) {
|
|
372
|
+
// Throw a more specific error
|
|
373
|
+
const stderr = error.stderr ? error.stderr.toString() : '(no stderr)';
|
|
374
|
+
throw new Error(`Failed to run brew command: [${cmd} ${finalArgs.join(' ')}]. Error: ${error.message}. Stderr: ${stderr.trim()}`);
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* Promise-based wrapper for exec (keep for non-brew commands)
|
|
379
|
+
*/
|
|
380
|
+
function execPromise(command) {
|
|
381
|
+
return new Promise((resolve, reject) => {
|
|
382
|
+
// Import exec here locally if not already imported at top level
|
|
383
|
+
// Or ensure 'exec' is imported from 'child_process' at the top
|
|
384
|
+
const cp = require('child_process');
|
|
385
|
+
cp.exec(command, (error, stdout, stderr) => {
|
|
386
|
+
if (error) {
|
|
387
|
+
// Log stderr for context if available
|
|
388
|
+
if (stderr) {
|
|
389
|
+
// console.error(`Command failed: ${command}\nstderr: ${stderr.trim()}`);
|
|
390
|
+
}
|
|
391
|
+
reject(error);
|
|
392
|
+
return;
|
|
393
|
+
}
|
|
394
|
+
resolve(stdout.trim());
|
|
395
|
+
});
|
|
396
|
+
});
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* Check if QEMU is installed and available, prioritizing phygrid/qemu-virgl on macOS aarch64
|
|
400
|
+
*/
|
|
401
|
+
/**
|
|
402
|
+
* Manually create a PID file for a running VM by finding its process
|
|
403
|
+
* This is used when PID file creation fails but the VM is actually running
|
|
404
|
+
*/
|
|
405
|
+
function createPidFileForRunningVm(vmName) {
|
|
406
|
+
try {
|
|
407
|
+
const config = readVmConfig(vmName);
|
|
408
|
+
const qemuBin = config.arch === 'amd64' ? 'qemu-system-x86_64' : 'qemu-system-aarch64';
|
|
409
|
+
// Use ps to find the QEMU process for this VM
|
|
410
|
+
const psOutput = (0, child_process_1.execSync)(`ps aux | grep "${qemuBin}" | grep "${vmName}" | grep -v grep`, { encoding: 'utf8' });
|
|
411
|
+
if (psOutput.trim()) {
|
|
412
|
+
// Extract PID from ps output (second column)
|
|
413
|
+
const lines = psOutput.trim().split('\n');
|
|
414
|
+
for (const line of lines) {
|
|
415
|
+
const parts = line.trim().split(/\s+/);
|
|
416
|
+
if (parts.length >= 2) {
|
|
417
|
+
const pid = parseInt(parts[1], 10);
|
|
418
|
+
if (!isNaN(pid)) {
|
|
419
|
+
// Create the PID file
|
|
420
|
+
const pidPath = getVmPidPath(vmName);
|
|
421
|
+
fs_1.default.writeFileSync(pidPath, String(pid));
|
|
422
|
+
return true;
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
return false;
|
|
428
|
+
}
|
|
429
|
+
catch (error) {
|
|
430
|
+
// If we can't find the process or create the PID file, return false
|
|
431
|
+
return false;
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
//# sourceMappingURL=vm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vm.js","sourceRoot":"","sources":["../../src/utils/vm.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const clui_1 = require("clui");
|
|
4
|
+
async function withSpinner(action, message = '') {
|
|
5
|
+
if (!process.stdout.isTTY)
|
|
6
|
+
return action();
|
|
7
|
+
const spinner = new clui_1.Spinner(message);
|
|
8
|
+
try {
|
|
9
|
+
spinner.start();
|
|
10
|
+
const res = await action();
|
|
11
|
+
spinner.stop();
|
|
12
|
+
return res;
|
|
13
|
+
}
|
|
14
|
+
catch (e) {
|
|
15
|
+
spinner.stop();
|
|
16
|
+
throw e;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.default = withSpinner;
|
|
20
|
+
//# sourceMappingURL=with-spinner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"with-spinner.js","sourceRoot":"","sources":["../../src/utils/with-spinner.ts"],"names":[],"mappings":";;AAAA,+BAA+B;AAE/B,KAAK,UAAU,WAAW,CAAW,MAAwB,EAAE,OAAO,GAAG,EAAE;IACzE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;QAAE,OAAO,MAAM,EAAE,CAAC;IAE3C,MAAM,OAAO,GAAG,IAAI,cAAO,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,CAAC;QACH,OAAO,CAAC,KAAK,EAAE,CAAC;QAChB,MAAM,GAAG,GAAG,MAAM,MAAM,EAAE,CAAC;QAC3B,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,GAAG,CAAC;IACb,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,MAAM,CAAC,CAAC;IACV,CAAC;AACH,CAAC;AAED,kBAAe,WAAW,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@phystack/cli",
|
|
3
|
+
"version": "4.3.40-dev",
|
|
4
|
+
"description": "Phygrid CLI.",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"homepage": "./",
|
|
7
|
+
"license": "MIT",
|
|
8
|
+
"compilerOptions": {
|
|
9
|
+
"module": "ESNext",
|
|
10
|
+
"moduleResolution": "node"
|
|
11
|
+
},
|
|
12
|
+
"publishConfig": {
|
|
13
|
+
"access": "public"
|
|
14
|
+
},
|
|
15
|
+
"engines": {
|
|
16
|
+
"node": ">=20.0.0"
|
|
17
|
+
},
|
|
18
|
+
"scripts": {
|
|
19
|
+
"prepare-tmp": "npm run build",
|
|
20
|
+
"build": "tsc",
|
|
21
|
+
"start": "node dist/src/index.js",
|
|
22
|
+
"lint-tmp": "tsc --noEmit && eslint --ext .ts ./src --ignore-pattern '**/src/templates/react/template/node_modules/*' .",
|
|
23
|
+
"lint-fix-tmp": "yarn lint-tmp --fix",
|
|
24
|
+
"lint": "tsc --noEmit && eslint --ext .ts ./src --ignore-pattern '**/src/templates/react/template/node_modules/*' .",
|
|
25
|
+
"lint:fix": "yarn lint --fix",
|
|
26
|
+
"dev-tmp": "node -r ts-node/register src/index.ts",
|
|
27
|
+
"dev-watch-tmp": "yarn && yarn build-watch-tmp && yarn link",
|
|
28
|
+
"version-tmp": "npm run lint-fix && git add -A src",
|
|
29
|
+
"postversion-tmp": "git push && git push --tags",
|
|
30
|
+
"format-tmp": "yarn lint-fix-tmp"
|
|
31
|
+
},
|
|
32
|
+
"bin": {
|
|
33
|
+
"phy": "./bin/index.js"
|
|
34
|
+
},
|
|
35
|
+
"files": [
|
|
36
|
+
"bin/**/*",
|
|
37
|
+
"dist/**/*"
|
|
38
|
+
],
|
|
39
|
+
"author": "Kamil Placzek <kamil.placzek@ombori.com>",
|
|
40
|
+
"devDependencies": {
|
|
41
|
+
"@types/ajv": "^1.0.0",
|
|
42
|
+
"@types/clui": "^0.3.0",
|
|
43
|
+
"@types/cross-spawn": "^6.0.2",
|
|
44
|
+
"@types/fs-extra": "^8.0.1",
|
|
45
|
+
"@types/inquirer": "^6.5.0",
|
|
46
|
+
"@types/node": "^13.1.1",
|
|
47
|
+
"@types/tar": "^4.0.3",
|
|
48
|
+
"@typescript-eslint/eslint-plugin": "^2.13.0",
|
|
49
|
+
"@typescript-eslint/parser": "^2.13.0",
|
|
50
|
+
"bufferutil": "^4.0.6",
|
|
51
|
+
"copyfiles": "^2.1.1",
|
|
52
|
+
"eslint": "^6.8.0",
|
|
53
|
+
"eslint-config-airbnb-base": "^14.0.0",
|
|
54
|
+
"eslint-config-prettier": "^6.9.0",
|
|
55
|
+
"eslint-plugin-import": "^2.19.1",
|
|
56
|
+
"eslint-plugin-prettier": "^3.1.2",
|
|
57
|
+
"prettier": "^1.19.1",
|
|
58
|
+
"ts-loader": "^9.3.1",
|
|
59
|
+
"ts-node": "^8.5.4",
|
|
60
|
+
"utf-8-validate": "^5.0.9"
|
|
61
|
+
},
|
|
62
|
+
"dependencies": {
|
|
63
|
+
"@types/cheerio": "^0.22.35",
|
|
64
|
+
"@types/mkdirp": "^1.0.0",
|
|
65
|
+
"ajv": "^6.10.2",
|
|
66
|
+
"axios": "^1.7.9",
|
|
67
|
+
"axios-auth-refresh": "^3.3.6",
|
|
68
|
+
"azure-storage": "^2.10.3",
|
|
69
|
+
"boxen": "^4.2.0",
|
|
70
|
+
"chalk": "^3.0.0",
|
|
71
|
+
"cheerio": "^1.0.0-rc.12",
|
|
72
|
+
"cli-table3": "^0.6.3",
|
|
73
|
+
"clui": "^0.3.6",
|
|
74
|
+
"commander": "^5.0.0",
|
|
75
|
+
"cross-spawn": "^7.0.3",
|
|
76
|
+
"dotenv": "^8.2.0",
|
|
77
|
+
"fs-extra": "^8.1.0",
|
|
78
|
+
"fuzzy": "^0.1.3",
|
|
79
|
+
"http-proxy-agent": "^7.0.2",
|
|
80
|
+
"https-proxy-agent": "^7.0.6",
|
|
81
|
+
"inquirer": "^8.0.0",
|
|
82
|
+
"inquirer-autocomplete-prompt": "^2.0.0",
|
|
83
|
+
"isomorphic-fetch": "^2.2.1",
|
|
84
|
+
"lodash": "^4.17.15",
|
|
85
|
+
"md5": "^2.2.1",
|
|
86
|
+
"mkdirp": "^1.0.4",
|
|
87
|
+
"moment": "^2.29.1",
|
|
88
|
+
"node-fetch": "^3.3.2",
|
|
89
|
+
"open": "7.4.2",
|
|
90
|
+
"openid-client": "^5.6.5",
|
|
91
|
+
"rimraf": "^6.0.1",
|
|
92
|
+
"tar": "^5.0.5",
|
|
93
|
+
"typescript": "^5.4.5",
|
|
94
|
+
"uuid": "^11.0.5",
|
|
95
|
+
"websocket-stream": "^5.5.2",
|
|
96
|
+
"ws": "^7.4.5"
|
|
97
|
+
},
|
|
98
|
+
"resolutions": {
|
|
99
|
+
"string-width": "^4.2.3",
|
|
100
|
+
"strip-ansi": "^6.0.1"
|
|
101
|
+
},
|
|
102
|
+
"gitHead": "53c505b3ecad47ebd4f38819c07b0ec1227214a6"
|
|
103
|
+
}
|