typescript-virtual-container 1.2.9 → 1.3.0
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/.vscode/settings.json +0 -1
- package/README.md +141 -50
- package/biome.json +7 -0
- package/dist/SSHMimic/exec.d.ts.map +1 -1
- package/dist/SSHMimic/executor.d.ts.map +1 -1
- package/dist/SSHMimic/executor.js +32 -16
- package/dist/SSHMimic/index.d.ts.map +1 -1
- package/dist/SSHMimic/index.js +20 -6
- package/dist/VirtualFileSystem/binaryPack.d.ts.map +1 -1
- package/dist/VirtualFileSystem/binaryPack.js +29 -6
- package/dist/VirtualFileSystem/index.d.ts.map +1 -1
- package/dist/VirtualFileSystem/index.js +36 -13
- package/dist/VirtualPackageManager/index.d.ts.map +1 -1
- package/dist/VirtualPackageManager/index.js +192 -43
- package/dist/VirtualShell/index.d.ts +10 -4
- package/dist/VirtualShell/index.d.ts.map +1 -1
- package/dist/VirtualShell/index.js +18 -7
- package/dist/VirtualShell/shell.d.ts.map +1 -1
- package/dist/VirtualShell/shell.js +3 -1
- package/dist/VirtualShell/shellParser.d.ts.map +1 -1
- package/dist/VirtualUserManager/index.d.ts.map +1 -1
- package/dist/commands/adduser.d.ts +6 -0
- package/dist/commands/adduser.d.ts.map +1 -1
- package/dist/commands/adduser.js +6 -0
- package/dist/commands/alias.d.ts +5 -0
- package/dist/commands/alias.d.ts.map +1 -1
- package/dist/commands/alias.js +5 -0
- package/dist/commands/apt.d.ts +5 -0
- package/dist/commands/apt.d.ts.map +1 -1
- package/dist/commands/apt.js +32 -9
- package/dist/commands/awk.d.ts +11 -0
- package/dist/commands/awk.d.ts.map +1 -1
- package/dist/commands/awk.js +15 -2
- package/dist/commands/base64.d.ts +5 -0
- package/dist/commands/base64.d.ts.map +1 -1
- package/dist/commands/base64.js +9 -1
- package/dist/commands/cat.d.ts +5 -0
- package/dist/commands/cat.d.ts.map +1 -1
- package/dist/commands/cat.js +10 -2
- package/dist/commands/cd.d.ts +5 -0
- package/dist/commands/cd.d.ts.map +1 -1
- package/dist/commands/cd.js +5 -0
- package/dist/commands/chmod.d.ts +5 -0
- package/dist/commands/chmod.d.ts.map +1 -1
- package/dist/commands/chmod.js +5 -0
- package/dist/commands/cp.d.ts +5 -0
- package/dist/commands/cp.d.ts.map +1 -1
- package/dist/commands/cp.js +5 -0
- package/dist/commands/curl.d.ts +5 -0
- package/dist/commands/curl.d.ts.map +1 -1
- package/dist/commands/curl.js +34 -6
- package/dist/commands/cut.d.ts +5 -0
- package/dist/commands/cut.d.ts.map +1 -1
- package/dist/commands/cut.js +8 -1
- package/dist/commands/date.d.ts +5 -0
- package/dist/commands/date.d.ts.map +1 -1
- package/dist/commands/date.js +7 -1
- package/dist/commands/declare.d.ts +3 -0
- package/dist/commands/declare.d.ts.map +1 -0
- package/dist/commands/declare.js +39 -0
- package/dist/commands/diff.d.ts +5 -0
- package/dist/commands/diff.d.ts.map +1 -1
- package/dist/commands/diff.js +5 -0
- package/dist/commands/dpkg.d.ts +5 -0
- package/dist/commands/dpkg.d.ts.map +1 -1
- package/dist/commands/dpkg.js +24 -7
- package/dist/commands/du.d.ts.map +1 -1
- package/dist/commands/du.js +8 -2
- package/dist/commands/echo.d.ts +5 -0
- package/dist/commands/echo.d.ts.map +1 -1
- package/dist/commands/echo.js +13 -4
- package/dist/commands/env.d.ts +5 -0
- package/dist/commands/env.d.ts.map +1 -1
- package/dist/commands/env.js +11 -1
- package/dist/commands/exit.d.ts +5 -0
- package/dist/commands/exit.d.ts.map +1 -1
- package/dist/commands/exit.js +12 -2
- package/dist/commands/export.d.ts.map +1 -1
- package/dist/commands/export.js +3 -1
- package/dist/commands/find.d.ts +5 -0
- package/dist/commands/find.d.ts.map +1 -1
- package/dist/commands/find.js +5 -0
- package/dist/commands/free.d.ts +5 -0
- package/dist/commands/free.d.ts.map +1 -1
- package/dist/commands/free.js +5 -0
- package/dist/commands/grep.d.ts +5 -0
- package/dist/commands/grep.d.ts.map +1 -1
- package/dist/commands/grep.js +12 -2
- package/dist/commands/gzip.d.ts +5 -0
- package/dist/commands/gzip.d.ts.map +1 -1
- package/dist/commands/gzip.js +18 -2
- package/dist/commands/head.d.ts +5 -0
- package/dist/commands/head.d.ts.map +1 -1
- package/dist/commands/head.js +5 -0
- package/dist/commands/help.d.ts.map +1 -1
- package/dist/commands/help.js +98 -45
- package/dist/commands/history.d.ts +5 -0
- package/dist/commands/history.d.ts.map +1 -1
- package/dist/commands/history.js +5 -0
- package/dist/commands/hostname.d.ts +5 -0
- package/dist/commands/hostname.d.ts.map +1 -1
- package/dist/commands/hostname.js +5 -0
- package/dist/commands/id.d.ts.map +1 -1
- package/dist/commands/id.js +4 -1
- package/dist/commands/index.d.ts +2 -17
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +2 -340
- package/dist/commands/ls.d.ts.map +1 -1
- package/dist/commands/ls.js +3 -1
- package/dist/commands/lsb-release.d.ts.map +1 -1
- package/dist/commands/lsb-release.js +8 -2
- package/dist/commands/nano.js +1 -1
- package/dist/commands/neofetch.js +1 -1
- package/dist/commands/node.d.ts +9 -0
- package/dist/commands/node.d.ts.map +1 -0
- package/dist/commands/node.js +316 -0
- package/dist/commands/npm.d.ts +19 -0
- package/dist/commands/npm.d.ts.map +1 -0
- package/dist/commands/npm.js +109 -0
- package/dist/commands/ping.d.ts.map +1 -1
- package/dist/commands/ping.js +3 -1
- package/dist/commands/printf.d.ts +3 -0
- package/dist/commands/printf.d.ts.map +1 -0
- package/dist/commands/printf.js +113 -0
- package/dist/commands/ps.d.ts.map +1 -1
- package/dist/commands/ps.js +4 -1
- package/dist/commands/python.d.ts +30 -0
- package/dist/commands/python.d.ts.map +1 -0
- package/dist/commands/python.js +2058 -0
- package/dist/commands/read.d.ts +3 -0
- package/dist/commands/read.d.ts.map +1 -0
- package/dist/commands/read.js +34 -0
- package/dist/commands/registry.d.ts +8 -0
- package/dist/commands/registry.d.ts.map +1 -0
- package/dist/commands/registry.js +229 -0
- package/dist/commands/runtime.d.ts +6 -0
- package/dist/commands/runtime.d.ts.map +1 -0
- package/dist/commands/runtime.js +280 -0
- package/dist/commands/sed.d.ts.map +1 -1
- package/dist/commands/sed.js +11 -3
- package/dist/commands/set.d.ts.map +1 -1
- package/dist/commands/set.js +9 -3
- package/dist/commands/sh.d.ts.map +1 -1
- package/dist/commands/sh.js +57 -36
- package/dist/commands/shift.d.ts +5 -0
- package/dist/commands/shift.d.ts.map +1 -0
- package/dist/commands/shift.js +52 -0
- package/dist/commands/sleep.d.ts.map +1 -1
- package/dist/commands/sort.d.ts.map +1 -1
- package/dist/commands/sort.js +4 -2
- package/dist/commands/source.d.ts.map +1 -1
- package/dist/commands/source.js +5 -2
- package/dist/commands/sudo.js +1 -1
- package/dist/commands/tar.d.ts.map +1 -1
- package/dist/commands/tar.js +11 -3
- package/dist/commands/tee.d.ts.map +1 -1
- package/dist/commands/tee.js +8 -6
- package/dist/commands/test.d.ts.map +1 -1
- package/dist/commands/test.js +46 -24
- package/dist/commands/tr.d.ts.map +1 -1
- package/dist/commands/tr.js +3 -1
- package/dist/commands/true.d.ts +4 -0
- package/dist/commands/true.d.ts.map +1 -0
- package/dist/commands/true.js +14 -0
- package/dist/commands/type.d.ts.map +1 -1
- package/dist/commands/type.js +1 -1
- package/dist/commands/uname.d.ts.map +1 -1
- package/dist/commands/uname.js +4 -1
- package/dist/commands/uniq.d.ts.map +1 -1
- package/dist/commands/uptime.d.ts.map +1 -1
- package/dist/commands/uptime.js +4 -1
- package/dist/commands/wget.d.ts.map +1 -1
- package/dist/commands/wget.js +32 -7
- package/dist/commands/which.d.ts.map +1 -1
- package/dist/commands/xargs.d.ts.map +1 -1
- package/dist/commands/xargs.js +1 -1
- package/dist/index.d.ts +15 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -9
- package/dist/modules/linuxRootfs.d.ts +18 -1
- package/dist/modules/linuxRootfs.d.ts.map +1 -1
- package/dist/modules/linuxRootfs.js +160 -17
- package/dist/standalone-wo-sftp.d.ts +2 -0
- package/dist/standalone-wo-sftp.d.ts.map +1 -0
- package/dist/standalone-wo-sftp.js +30 -0
- package/dist/utils/expand.d.ts +50 -0
- package/dist/utils/expand.d.ts.map +1 -0
- package/dist/utils/expand.js +183 -0
- package/dist/utils/vfsDiff.d.ts +90 -0
- package/dist/utils/vfsDiff.d.ts.map +1 -0
- package/dist/utils/vfsDiff.js +177 -0
- package/package.json +2 -1
- package/src/SSHMimic/exec.ts +10 -1
- package/src/SSHMimic/executor.ts +104 -18
- package/src/SSHMimic/index.ts +49 -15
- package/src/VirtualFileSystem/binaryPack.ts +35 -8
- package/src/VirtualFileSystem/index.ts +78 -28
- package/src/VirtualPackageManager/index.ts +208 -49
- package/src/VirtualShell/index.ts +35 -7
- package/src/VirtualShell/shell.ts +23 -3
- package/src/VirtualShell/shellParser.ts +134 -36
- package/src/VirtualUserManager/index.ts +7 -2
- package/src/commands/adduser.ts +6 -0
- package/src/commands/alias.ts +5 -1
- package/src/commands/apt.ts +47 -17
- package/src/commands/awk.ts +20 -6
- package/src/commands/base64.ts +13 -2
- package/src/commands/cat.ts +13 -5
- package/src/commands/cd.ts +5 -0
- package/src/commands/chmod.ts +5 -0
- package/src/commands/cp.ts +5 -0
- package/src/commands/curl.ts +56 -12
- package/src/commands/cut.ts +8 -1
- package/src/commands/date.ts +7 -1
- package/src/commands/declare.ts +44 -0
- package/src/commands/diff.ts +17 -3
- package/src/commands/dpkg.ts +33 -11
- package/src/commands/du.ts +17 -5
- package/src/commands/echo.ts +22 -9
- package/src/commands/env.ts +11 -1
- package/src/commands/exit.ts +12 -2
- package/src/commands/export.ts +3 -1
- package/src/commands/find.ts +5 -0
- package/src/commands/free.ts +9 -2
- package/src/commands/grep.ts +12 -2
- package/src/commands/gzip.ts +28 -4
- package/src/commands/head.ts +5 -0
- package/src/commands/help.ts +121 -47
- package/src/commands/history.ts +7 -2
- package/src/commands/hostname.ts +5 -0
- package/src/commands/id.ts +4 -1
- package/src/commands/index.ts +9 -360
- package/src/commands/ls.ts +5 -3
- package/src/commands/lsb-release.ts +8 -2
- package/src/commands/nano.ts +1 -1
- package/src/commands/neofetch.ts +1 -1
- package/src/commands/node.ts +341 -0
- package/src/commands/npm.ts +132 -0
- package/src/commands/ping.ts +6 -2
- package/src/commands/printf.ts +112 -0
- package/src/commands/ps.ts +21 -9
- package/src/commands/python.ts +2229 -0
- package/src/commands/read.ts +41 -0
- package/src/commands/registry.ts +244 -0
- package/src/commands/runtime.ts +353 -0
- package/src/commands/sed.ts +27 -9
- package/src/commands/set.ts +9 -3
- package/src/commands/sh.ts +159 -55
- package/src/commands/shift.ts +53 -0
- package/src/commands/sleep.ts +2 -1
- package/src/commands/sort.ts +10 -6
- package/src/commands/source.ts +15 -3
- package/src/commands/sudo.ts +1 -1
- package/src/commands/tar.ts +28 -7
- package/src/commands/tee.ts +7 -1
- package/src/commands/test.ts +61 -26
- package/src/commands/tr.ts +3 -1
- package/src/commands/true.ts +17 -0
- package/src/commands/type.ts +6 -3
- package/src/commands/uname.ts +5 -1
- package/src/commands/uniq.ts +8 -2
- package/src/commands/uptime.ts +4 -1
- package/src/commands/wget.ts +51 -12
- package/src/commands/which.ts +5 -2
- package/src/commands/xargs.ts +11 -2
- package/src/index.ts +23 -24
- package/src/modules/linuxRootfs.ts +233 -30
- package/src/standalone-wo-sftp.ts +38 -0
- package/src/utils/expand.ts +238 -0
- package/src/utils/vfsDiff.ts +275 -0
- package/standalone-wo-sftp.js +507 -0
- package/standalone-wo-sftp.js.map +7 -0
- package/standalone.js +253 -191
- package/standalone.js.map +4 -4
- package/tests/bun-test-shim.ts +9 -1
- package/tests/command-helpers.test.ts +1 -5
- package/tests/new-features.test.ts +415 -5
- package/tests/parser-executor.test.ts +27 -27
- package/tests/sftp.test.ts +122 -42
- package/tests/users.test.ts +23 -5
- package/CHANGELOG.md +0 -150
|
@@ -244,15 +244,24 @@ class VirtualFileSystem extends EventEmitter {
|
|
|
244
244
|
if (node.type === "file") {
|
|
245
245
|
const f = node;
|
|
246
246
|
return {
|
|
247
|
-
type: "file",
|
|
248
|
-
|
|
249
|
-
|
|
247
|
+
type: "file",
|
|
248
|
+
name,
|
|
249
|
+
path: normalized,
|
|
250
|
+
mode: f.mode,
|
|
251
|
+
createdAt: f.createdAt,
|
|
252
|
+
updatedAt: f.updatedAt,
|
|
253
|
+
compressed: f.compressed,
|
|
254
|
+
size: f.content.length,
|
|
250
255
|
};
|
|
251
256
|
}
|
|
252
257
|
const d = node;
|
|
253
258
|
return {
|
|
254
|
-
type: "directory",
|
|
255
|
-
|
|
259
|
+
type: "directory",
|
|
260
|
+
name,
|
|
261
|
+
path: normalized,
|
|
262
|
+
mode: d.mode,
|
|
263
|
+
createdAt: d.createdAt,
|
|
264
|
+
updatedAt: d.updatedAt,
|
|
256
265
|
childrenCount: d.children.size,
|
|
257
266
|
};
|
|
258
267
|
}
|
|
@@ -287,7 +296,8 @@ class VirtualFileSystem extends EventEmitter {
|
|
|
287
296
|
lines.push(`${connector}${name}`);
|
|
288
297
|
if (child.type === "directory") {
|
|
289
298
|
const sub = this.renderTreeLines(child, "")
|
|
290
|
-
.split("\n")
|
|
299
|
+
.split("\n")
|
|
300
|
+
.slice(1)
|
|
291
301
|
.map((l) => `${nextPrefix}${l}`);
|
|
292
302
|
lines.push(...sub);
|
|
293
303
|
}
|
|
@@ -342,14 +352,19 @@ class VirtualFileSystem extends EventEmitter {
|
|
|
342
352
|
: targetPath;
|
|
343
353
|
const { parent, name } = getParentDirectory(this.root, normalizedLink, true, (p) => this.mkdirRecursive(p, 0o755));
|
|
344
354
|
const symNode = {
|
|
345
|
-
type: "file",
|
|
355
|
+
type: "file",
|
|
356
|
+
name,
|
|
346
357
|
content: Buffer.from(normalizedTarget, "utf8"),
|
|
347
358
|
mode: 0o120777,
|
|
348
359
|
compressed: false,
|
|
349
|
-
createdAt: new Date(),
|
|
360
|
+
createdAt: new Date(),
|
|
361
|
+
updatedAt: new Date(),
|
|
350
362
|
};
|
|
351
363
|
parent.children.set(name, symNode);
|
|
352
|
-
this.emit("symlink:create", {
|
|
364
|
+
this.emit("symlink:create", {
|
|
365
|
+
link: normalizedLink,
|
|
366
|
+
target: normalizedTarget,
|
|
367
|
+
});
|
|
353
368
|
}
|
|
354
369
|
/** Returns true when the path is a symbolic link node. */
|
|
355
370
|
isSymlink(targetPath) {
|
|
@@ -437,7 +452,9 @@ class VirtualFileSystem extends EventEmitter {
|
|
|
437
452
|
: this.serializeDir(child));
|
|
438
453
|
}
|
|
439
454
|
return {
|
|
440
|
-
type: "directory",
|
|
455
|
+
type: "directory",
|
|
456
|
+
name: dir.name,
|
|
457
|
+
mode: dir.mode,
|
|
441
458
|
createdAt: dir.createdAt.toISOString(),
|
|
442
459
|
updatedAt: dir.updatedAt.toISOString(),
|
|
443
460
|
children,
|
|
@@ -445,7 +462,9 @@ class VirtualFileSystem extends EventEmitter {
|
|
|
445
462
|
}
|
|
446
463
|
serializeFile(file) {
|
|
447
464
|
return {
|
|
448
|
-
type: "file",
|
|
465
|
+
type: "file",
|
|
466
|
+
name: file.name,
|
|
467
|
+
mode: file.mode,
|
|
449
468
|
createdAt: file.createdAt.toISOString(),
|
|
450
469
|
updatedAt: file.updatedAt.toISOString(),
|
|
451
470
|
compressed: file.compressed,
|
|
@@ -480,7 +499,9 @@ class VirtualFileSystem extends EventEmitter {
|
|
|
480
499
|
}
|
|
481
500
|
deserializeDir(snap, name) {
|
|
482
501
|
const dir = {
|
|
483
|
-
type: "directory",
|
|
502
|
+
type: "directory",
|
|
503
|
+
name,
|
|
504
|
+
mode: snap.mode,
|
|
484
505
|
createdAt: new Date(snap.createdAt),
|
|
485
506
|
updatedAt: new Date(snap.updatedAt),
|
|
486
507
|
children: new Map(),
|
|
@@ -489,7 +510,9 @@ class VirtualFileSystem extends EventEmitter {
|
|
|
489
510
|
if (child.type === "file") {
|
|
490
511
|
const f = child;
|
|
491
512
|
dir.children.set(f.name, {
|
|
492
|
-
type: "file",
|
|
513
|
+
type: "file",
|
|
514
|
+
name: f.name,
|
|
515
|
+
mode: f.mode,
|
|
493
516
|
createdAt: new Date(f.createdAt),
|
|
494
517
|
updatedAt: new Date(f.updatedAt),
|
|
495
518
|
compressed: f.compressed,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/VirtualPackageManager/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/VirtualPackageManager/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,iBAAiB,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAIhE;;GAEG;AACH,MAAM,WAAW,WAAW;IAC3B,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IACjC,+EAA+E;IAC/E,IAAI,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,OAAO,EAAE,MAAM,CAAC;IAChB,kDAAkD;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,+EAA+E;IAC/E,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;IACtB;;;OAGG;IACH,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,iBAAiB,EAAE,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACxE,iEAAiE;IACjE,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,iBAAiB,KAAK,IAAI,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAChC,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,wBAAwB;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,iCAAiC;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,wBAAwB;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,0BAA0B;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,yCAAyC;IACzC,eAAe,EAAE,MAAM,CAAC;IACxB,4DAA4D;IAC5D,WAAW,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,KAAK,EAAE,MAAM,EAAE,CAAC;CAChB;AAqeD;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,qBAAqB;IAWhC,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAXvB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuC;IACjE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA0B;IACvD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuB;IAC/C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA8B;IAEzD;;;OAGG;gBAEe,GAAG,EAAE,iBAAiB,EACtB,KAAK,EAAE,kBAAkB;IAG3C;;;;;OAKG;IACI,IAAI,IAAI,IAAI;IAyBnB,uDAAuD;IACvD,OAAO,CAAC,OAAO;IAsBf,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,GAAG;IASX,OAAO,CAAC,MAAM;IAed;;;;;OAKG;IACI,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAMlE;;;;OAIG;IACI,aAAa,IAAI,iBAAiB,EAAE;IAI3C;;;;OAIG;IACI,aAAa,IAAI,gBAAgB,EAAE;IAM1C;;;;OAIG;IACI,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIzC;;;;OAIG;IACI,cAAc,IAAI,MAAM;IAI/B;;;;;;;;;;;;;OAaG;IACI,OAAO,CACb,KAAK,EAAE,MAAM,EAAE,EACf,IAAI,GAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAO,GAC5B;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;IAiHvC;;;;;;;;;;;;OAYG;IACI,MAAM,CACZ,KAAK,EAAE,MAAM,EAAE,EACf,IAAI,GAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAO,GAC7C;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;IA4DvC;;;;;;OAMG;IACI,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,EAAE;IAUhD;;;;;;OAMG;IACI,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAiBxC"}
|
|
@@ -8,9 +8,20 @@ const PACKAGE_REGISTRY = [
|
|
|
8
8
|
shortDesc: "Vi IMproved",
|
|
9
9
|
installedSizeKb: 3812,
|
|
10
10
|
files: [
|
|
11
|
-
{
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
{
|
|
12
|
+
path: "/usr/bin/vim",
|
|
13
|
+
content: "#!/bin/sh\necho 'vim: use nano for editing in this environment'\n",
|
|
14
|
+
mode: 0o755,
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
path: "/usr/bin/vi",
|
|
18
|
+
content: '#!/bin/sh\nexec vim "$@"\n',
|
|
19
|
+
mode: 0o755,
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
path: "/usr/share/doc/vim/README",
|
|
23
|
+
content: "Vim editor — virtual package.\n",
|
|
24
|
+
},
|
|
14
25
|
],
|
|
15
26
|
},
|
|
16
27
|
{
|
|
@@ -21,8 +32,15 @@ const PACKAGE_REGISTRY = [
|
|
|
21
32
|
shortDesc: "fast distributed version control system",
|
|
22
33
|
installedSizeKb: 11240,
|
|
23
34
|
files: [
|
|
24
|
-
{
|
|
25
|
-
|
|
35
|
+
{
|
|
36
|
+
path: "/usr/bin/git",
|
|
37
|
+
content: "#!/bin/sh\necho 'git: virtual stub — no host access'\n",
|
|
38
|
+
mode: 0o755,
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
path: "/usr/share/doc/git/README.Debian",
|
|
42
|
+
content: "Git virtual package for Fortune GNU/Linux.\n",
|
|
43
|
+
},
|
|
26
44
|
],
|
|
27
45
|
},
|
|
28
46
|
{
|
|
@@ -34,8 +52,16 @@ const PACKAGE_REGISTRY = [
|
|
|
34
52
|
installedSizeKb: 512,
|
|
35
53
|
depends: ["python3-minimal"],
|
|
36
54
|
files: [
|
|
37
|
-
{
|
|
38
|
-
|
|
55
|
+
{
|
|
56
|
+
path: "/usr/bin/python3",
|
|
57
|
+
content: "#!/bin/sh\necho 'Python 3.11.2 (virtual)'\n",
|
|
58
|
+
mode: 0o755,
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
path: "/usr/bin/python3.11",
|
|
62
|
+
content: '#!/bin/sh\nexec python3 "$@"\n',
|
|
63
|
+
mode: 0o755,
|
|
64
|
+
},
|
|
39
65
|
{ path: "/usr/lib/python3.11/.keep", content: "" },
|
|
40
66
|
],
|
|
41
67
|
},
|
|
@@ -46,9 +72,7 @@ const PACKAGE_REGISTRY = [
|
|
|
46
72
|
description: "Minimal subset of the Python language (version 3)",
|
|
47
73
|
shortDesc: "minimal subset of Python language",
|
|
48
74
|
installedSizeKb: 196,
|
|
49
|
-
files: [
|
|
50
|
-
{ path: "/usr/lib/python3-minimal/.keep", content: "" },
|
|
51
|
-
],
|
|
75
|
+
files: [{ path: "/usr/lib/python3-minimal/.keep", content: "" }],
|
|
52
76
|
},
|
|
53
77
|
{
|
|
54
78
|
name: "nodejs",
|
|
@@ -58,9 +82,20 @@ const PACKAGE_REGISTRY = [
|
|
|
58
82
|
shortDesc: "Node.js JavaScript runtime",
|
|
59
83
|
installedSizeKb: 15360,
|
|
60
84
|
files: [
|
|
61
|
-
{
|
|
62
|
-
|
|
63
|
-
|
|
85
|
+
{
|
|
86
|
+
path: "/usr/bin/node",
|
|
87
|
+
content: "#!/bin/sh\necho 'node v18.19.0 (virtual)'\n",
|
|
88
|
+
mode: 0o755,
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
path: "/usr/bin/nodejs",
|
|
92
|
+
content: '#!/bin/sh\nexec node "$@"\n',
|
|
93
|
+
mode: 0o755,
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
path: "/usr/share/doc/nodejs/README",
|
|
97
|
+
content: "Node.js virtual package.\n",
|
|
98
|
+
},
|
|
64
99
|
],
|
|
65
100
|
},
|
|
66
101
|
{
|
|
@@ -72,7 +107,16 @@ const PACKAGE_REGISTRY = [
|
|
|
72
107
|
installedSizeKb: 9814,
|
|
73
108
|
depends: ["nodejs"],
|
|
74
109
|
files: [
|
|
75
|
-
{
|
|
110
|
+
{
|
|
111
|
+
path: "/usr/bin/npm",
|
|
112
|
+
content: '#!/bin/sh\nexec builtin npm "$@"\n',
|
|
113
|
+
mode: 0o755,
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
path: "/usr/bin/npx",
|
|
117
|
+
content: '#!/bin/sh\nexec builtin npx "$@"\n',
|
|
118
|
+
mode: 0o755,
|
|
119
|
+
},
|
|
76
120
|
],
|
|
77
121
|
},
|
|
78
122
|
{
|
|
@@ -83,7 +127,11 @@ const PACKAGE_REGISTRY = [
|
|
|
83
127
|
shortDesc: "command line tool for transferring data",
|
|
84
128
|
installedSizeKb: 368,
|
|
85
129
|
files: [
|
|
86
|
-
{
|
|
130
|
+
{
|
|
131
|
+
path: "/usr/bin/curl",
|
|
132
|
+
content: '#!/bin/sh\nexec builtin curl "$@"\n',
|
|
133
|
+
mode: 0o755,
|
|
134
|
+
},
|
|
87
135
|
],
|
|
88
136
|
},
|
|
89
137
|
{
|
|
@@ -94,7 +142,11 @@ const PACKAGE_REGISTRY = [
|
|
|
94
142
|
shortDesc: "retrieves files from the web",
|
|
95
143
|
installedSizeKb: 952,
|
|
96
144
|
files: [
|
|
97
|
-
{
|
|
145
|
+
{
|
|
146
|
+
path: "/usr/bin/wget",
|
|
147
|
+
content: '#!/bin/sh\nexec builtin wget "$@"\n',
|
|
148
|
+
mode: 0o755,
|
|
149
|
+
},
|
|
98
150
|
],
|
|
99
151
|
},
|
|
100
152
|
{
|
|
@@ -105,7 +157,11 @@ const PACKAGE_REGISTRY = [
|
|
|
105
157
|
shortDesc: "interactive process viewer",
|
|
106
158
|
installedSizeKb: 412,
|
|
107
159
|
files: [
|
|
108
|
-
{
|
|
160
|
+
{
|
|
161
|
+
path: "/usr/bin/htop",
|
|
162
|
+
content: "#!/bin/sh\nexec builtin htop\n",
|
|
163
|
+
mode: 0o755,
|
|
164
|
+
},
|
|
109
165
|
],
|
|
110
166
|
},
|
|
111
167
|
{
|
|
@@ -116,9 +172,20 @@ const PACKAGE_REGISTRY = [
|
|
|
116
172
|
shortDesc: "secure shell (SSH) client",
|
|
117
173
|
installedSizeKb: 4540,
|
|
118
174
|
files: [
|
|
119
|
-
{
|
|
120
|
-
|
|
121
|
-
|
|
175
|
+
{
|
|
176
|
+
path: "/usr/bin/ssh",
|
|
177
|
+
content: "#!/bin/sh\necho 'ssh: virtual stub'\n",
|
|
178
|
+
mode: 0o755,
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
path: "/usr/bin/ssh-keygen",
|
|
182
|
+
content: "#!/bin/sh\necho 'ssh-keygen: virtual stub'\n",
|
|
183
|
+
mode: 0o755,
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
path: "/etc/ssh/ssh_config",
|
|
187
|
+
content: "Host *\n StrictHostKeyChecking ask\n",
|
|
188
|
+
},
|
|
122
189
|
],
|
|
123
190
|
},
|
|
124
191
|
{
|
|
@@ -130,8 +197,15 @@ const PACKAGE_REGISTRY = [
|
|
|
130
197
|
installedSizeKb: 1732,
|
|
131
198
|
depends: ["openssh-client"],
|
|
132
199
|
files: [
|
|
133
|
-
{
|
|
134
|
-
|
|
200
|
+
{
|
|
201
|
+
path: "/usr/sbin/sshd",
|
|
202
|
+
content: "#!/bin/sh\necho 'sshd: virtual — server already running'\n",
|
|
203
|
+
mode: 0o755,
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
path: "/etc/ssh/sshd_config",
|
|
207
|
+
content: "Port 22\nPermitRootLogin yes\nPasswordAuthentication yes\n",
|
|
208
|
+
},
|
|
135
209
|
],
|
|
136
210
|
},
|
|
137
211
|
{
|
|
@@ -142,9 +216,21 @@ const PACKAGE_REGISTRY = [
|
|
|
142
216
|
shortDesc: "networking toolkit",
|
|
143
217
|
installedSizeKb: 988,
|
|
144
218
|
files: [
|
|
145
|
-
{
|
|
146
|
-
|
|
147
|
-
|
|
219
|
+
{
|
|
220
|
+
path: "/usr/bin/ifconfig",
|
|
221
|
+
content: "#!/bin/sh\necho 'eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500'\necho ' inet 10.0.0.2 netmask 255.255.255.0 broadcast 10.0.0.255'\necho ' ether 02:42:0a:00:00:02 txqueuelen 0 (Ethernet)'\n",
|
|
222
|
+
mode: 0o755,
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
path: "/usr/bin/netstat",
|
|
226
|
+
content: "#!/bin/sh\necho 'Active Internet connections (only servers)'\necho 'Proto Recv-Q Send-Q Local Address Foreign Address State'\n",
|
|
227
|
+
mode: 0o755,
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
path: "/usr/bin/route",
|
|
231
|
+
content: "#!/bin/sh\necho 'Kernel IP routing table'\necho 'Destination Gateway Genmask Flags Metric Ref Use Iface'\necho '0.0.0.0 10.0.0.1 0.0.0.0 UG 0 0 0 eth0'\n",
|
|
232
|
+
mode: 0o755,
|
|
233
|
+
},
|
|
148
234
|
],
|
|
149
235
|
},
|
|
150
236
|
{
|
|
@@ -155,7 +241,11 @@ const PACKAGE_REGISTRY = [
|
|
|
155
241
|
shortDesc: "test reachability of network hosts",
|
|
156
242
|
installedSizeKb: 164,
|
|
157
243
|
files: [
|
|
158
|
-
{
|
|
244
|
+
{
|
|
245
|
+
path: "/usr/bin/ping",
|
|
246
|
+
content: '#!/bin/sh\nexec builtin ping "$@"\n',
|
|
247
|
+
mode: 0o755,
|
|
248
|
+
},
|
|
159
249
|
],
|
|
160
250
|
},
|
|
161
251
|
{
|
|
@@ -166,7 +256,11 @@ const PACKAGE_REGISTRY = [
|
|
|
166
256
|
shortDesc: "command-line JSON processor",
|
|
167
257
|
installedSizeKb: 296,
|
|
168
258
|
files: [
|
|
169
|
-
{
|
|
259
|
+
{
|
|
260
|
+
path: "/usr/bin/jq",
|
|
261
|
+
content: "#!/bin/sh\necho 'jq: virtual stub — pipe JSON here'\n",
|
|
262
|
+
mode: 0o755,
|
|
263
|
+
},
|
|
170
264
|
],
|
|
171
265
|
},
|
|
172
266
|
{
|
|
@@ -178,7 +272,10 @@ const PACKAGE_REGISTRY = [
|
|
|
178
272
|
installedSizeKb: 12,
|
|
179
273
|
depends: ["gcc", "g++", "make"],
|
|
180
274
|
files: [
|
|
181
|
-
{
|
|
275
|
+
{
|
|
276
|
+
path: "/usr/share/doc/build-essential/README",
|
|
277
|
+
content: "Build-essential virtual meta-package.\n",
|
|
278
|
+
},
|
|
182
279
|
],
|
|
183
280
|
},
|
|
184
281
|
{
|
|
@@ -189,8 +286,16 @@ const PACKAGE_REGISTRY = [
|
|
|
189
286
|
shortDesc: "GNU C compiler",
|
|
190
287
|
installedSizeKb: 24448,
|
|
191
288
|
files: [
|
|
192
|
-
{
|
|
193
|
-
|
|
289
|
+
{
|
|
290
|
+
path: "/usr/bin/gcc",
|
|
291
|
+
content: "#!/bin/sh\necho 'gcc (Fortune GNU/Linux) 12.2.0 (virtual)'\n",
|
|
292
|
+
mode: 0o755,
|
|
293
|
+
},
|
|
294
|
+
{
|
|
295
|
+
path: "/usr/bin/gcc-12",
|
|
296
|
+
content: '#!/bin/sh\nexec gcc "$@"\n',
|
|
297
|
+
mode: 0o755,
|
|
298
|
+
},
|
|
194
299
|
],
|
|
195
300
|
},
|
|
196
301
|
{
|
|
@@ -202,7 +307,11 @@ const PACKAGE_REGISTRY = [
|
|
|
202
307
|
installedSizeKb: 1024,
|
|
203
308
|
depends: ["gcc"],
|
|
204
309
|
files: [
|
|
205
|
-
{
|
|
310
|
+
{
|
|
311
|
+
path: "/usr/bin/g++",
|
|
312
|
+
content: "#!/bin/sh\necho 'g++ (Fortune GNU/Linux) 12.2.0 (virtual)'\n",
|
|
313
|
+
mode: 0o755,
|
|
314
|
+
},
|
|
206
315
|
],
|
|
207
316
|
},
|
|
208
317
|
{
|
|
@@ -213,7 +322,11 @@ const PACKAGE_REGISTRY = [
|
|
|
213
322
|
shortDesc: "build utility",
|
|
214
323
|
installedSizeKb: 504,
|
|
215
324
|
files: [
|
|
216
|
-
{
|
|
325
|
+
{
|
|
326
|
+
path: "/usr/bin/make",
|
|
327
|
+
content: "#!/bin/sh\necho 'make: *** No targets specified and no makefile found. Stop.'\nexit 2\n",
|
|
328
|
+
mode: 0o755,
|
|
329
|
+
},
|
|
217
330
|
],
|
|
218
331
|
},
|
|
219
332
|
{
|
|
@@ -224,7 +337,7 @@ const PACKAGE_REGISTRY = [
|
|
|
224
337
|
shortDesc: "pager program",
|
|
225
338
|
installedSizeKb: 328,
|
|
226
339
|
files: [
|
|
227
|
-
{ path: "/usr/bin/less", content:
|
|
340
|
+
{ path: "/usr/bin/less", content: '#!/bin/sh\ncat "$@"\n', mode: 0o755 },
|
|
228
341
|
],
|
|
229
342
|
},
|
|
230
343
|
{
|
|
@@ -235,7 +348,11 @@ const PACKAGE_REGISTRY = [
|
|
|
235
348
|
shortDesc: "de-archiver for .zip files",
|
|
236
349
|
installedSizeKb: 464,
|
|
237
350
|
files: [
|
|
238
|
-
{
|
|
351
|
+
{
|
|
352
|
+
path: "/usr/bin/unzip",
|
|
353
|
+
content: "#!/bin/sh\necho 'unzip: virtual stub'\n",
|
|
354
|
+
mode: 0o755,
|
|
355
|
+
},
|
|
239
356
|
],
|
|
240
357
|
},
|
|
241
358
|
{
|
|
@@ -246,7 +363,11 @@ const PACKAGE_REGISTRY = [
|
|
|
246
363
|
shortDesc: "fast remote file copy program",
|
|
247
364
|
installedSizeKb: 716,
|
|
248
365
|
files: [
|
|
249
|
-
{
|
|
366
|
+
{
|
|
367
|
+
path: "/usr/bin/rsync",
|
|
368
|
+
content: "#!/bin/sh\necho 'rsync: virtual stub'\n",
|
|
369
|
+
mode: 0o755,
|
|
370
|
+
},
|
|
250
371
|
],
|
|
251
372
|
},
|
|
252
373
|
{
|
|
@@ -257,7 +378,11 @@ const PACKAGE_REGISTRY = [
|
|
|
257
378
|
shortDesc: "terminal multiplexer",
|
|
258
379
|
installedSizeKb: 812,
|
|
259
380
|
files: [
|
|
260
|
-
{
|
|
381
|
+
{
|
|
382
|
+
path: "/usr/bin/tmux",
|
|
383
|
+
content: "#!/bin/sh\necho 'tmux: terminal multiplexer (virtual stub)'\n",
|
|
384
|
+
mode: 0o755,
|
|
385
|
+
},
|
|
261
386
|
],
|
|
262
387
|
},
|
|
263
388
|
{
|
|
@@ -268,7 +393,11 @@ const PACKAGE_REGISTRY = [
|
|
|
268
393
|
shortDesc: "list files in tree format",
|
|
269
394
|
installedSizeKb: 108,
|
|
270
395
|
files: [
|
|
271
|
-
{
|
|
396
|
+
{
|
|
397
|
+
path: "/usr/bin/tree",
|
|
398
|
+
content: '#!/bin/sh\nexec builtin tree "$@"\n',
|
|
399
|
+
mode: 0o755,
|
|
400
|
+
},
|
|
272
401
|
],
|
|
273
402
|
},
|
|
274
403
|
{
|
|
@@ -299,7 +428,10 @@ const PACKAGE_REGISTRY = [
|
|
|
299
428
|
installedSizeKb: 16484,
|
|
300
429
|
files: [
|
|
301
430
|
{ path: "/etc/locale.gen", content: "en_US.UTF-8 UTF-8\n" },
|
|
302
|
-
{
|
|
431
|
+
{
|
|
432
|
+
path: "/etc/default/locale",
|
|
433
|
+
content: "LANG=en_US.UTF-8\nLANGUAGE=en_US:en\n",
|
|
434
|
+
},
|
|
303
435
|
],
|
|
304
436
|
},
|
|
305
437
|
{
|
|
@@ -310,8 +442,15 @@ const PACKAGE_REGISTRY = [
|
|
|
310
442
|
shortDesc: "super user privilege execution",
|
|
311
443
|
installedSizeKb: 2304,
|
|
312
444
|
files: [
|
|
313
|
-
{
|
|
314
|
-
|
|
445
|
+
{
|
|
446
|
+
path: "/usr/bin/sudo",
|
|
447
|
+
content: '#!/bin/sh\nexec builtin sudo "$@"\n',
|
|
448
|
+
mode: 0o755,
|
|
449
|
+
},
|
|
450
|
+
{
|
|
451
|
+
path: "/etc/sudoers",
|
|
452
|
+
content: "root ALL=(ALL:ALL) ALL\n%sudo ALL=(ALL:ALL) ALL\n",
|
|
453
|
+
},
|
|
315
454
|
],
|
|
316
455
|
},
|
|
317
456
|
{
|
|
@@ -322,8 +461,16 @@ const PACKAGE_REGISTRY = [
|
|
|
322
461
|
shortDesc: "system and service manager",
|
|
323
462
|
installedSizeKb: 26624,
|
|
324
463
|
files: [
|
|
325
|
-
{
|
|
326
|
-
|
|
464
|
+
{
|
|
465
|
+
path: "/usr/bin/systemctl",
|
|
466
|
+
content: "#!/bin/sh\necho 'systemd is not running in this virtual container.'\nexit 1\n",
|
|
467
|
+
mode: 0o755,
|
|
468
|
+
},
|
|
469
|
+
{
|
|
470
|
+
path: "/usr/bin/journalctl",
|
|
471
|
+
content: "#!/bin/sh\necho 'journalctl: virtual stub'\n",
|
|
472
|
+
mode: 0o755,
|
|
473
|
+
},
|
|
327
474
|
],
|
|
328
475
|
},
|
|
329
476
|
];
|
|
@@ -531,7 +678,9 @@ export class VirtualPackageManager {
|
|
|
531
678
|
}
|
|
532
679
|
if (toInstall.length === 0) {
|
|
533
680
|
return {
|
|
534
|
-
output: names
|
|
681
|
+
output: names
|
|
682
|
+
.map((n) => `${n} is already the newest version.`)
|
|
683
|
+
.join("\n"),
|
|
535
684
|
exitCode: 0,
|
|
536
685
|
};
|
|
537
686
|
}
|
|
@@ -2,8 +2,8 @@ import { EventEmitter } from "node:events";
|
|
|
2
2
|
import type { CommandContext, CommandResult } from "../types/commands";
|
|
3
3
|
import type { ShellStream } from "../types/streams";
|
|
4
4
|
import VirtualFileSystem, { type VfsOptions } from "../VirtualFileSystem";
|
|
5
|
-
import { VirtualUserManager } from "../VirtualUserManager";
|
|
6
5
|
import { VirtualPackageManager } from "../VirtualPackageManager";
|
|
6
|
+
import { VirtualUserManager } from "../VirtualUserManager";
|
|
7
7
|
/**
|
|
8
8
|
* Virtual machine identity strings surfaced by system-info commands
|
|
9
9
|
* (`uname`, `neofetch`, `lsb_release`, `/proc/version`, `/etc/os-release`).
|
|
@@ -120,13 +120,19 @@ declare class VirtualShell extends EventEmitter {
|
|
|
120
120
|
* Refreshes the `/proc` virtual filesystem with current system state.
|
|
121
121
|
*
|
|
122
122
|
* Updates `/proc/uptime`, `/proc/meminfo`, `/proc/cpuinfo`,
|
|
123
|
-
* `/proc/version`,
|
|
123
|
+
* `/proc/version`, `/proc/loadavg`, `/proc/self`, and per-session
|
|
124
|
+
* `/proc/<pid>` entries from live session and host data.
|
|
124
125
|
*
|
|
125
126
|
* Called automatically during `bootstrapLinuxRootfs`. Call again before
|
|
126
|
-
* reading `/proc` files for up-to-date values
|
|
127
|
-
* or `free` in long-running processes).
|
|
127
|
+
* reading `/proc` files for up-to-date values.
|
|
128
128
|
*/
|
|
129
129
|
refreshProcFs(): void;
|
|
130
|
+
/**
|
|
131
|
+
* Updates only the session-dependent `/proc` entries (`/proc/<pid>`,
|
|
132
|
+
* `/proc/self`). Cheaper than a full `refreshProcFs()` — call this
|
|
133
|
+
* whenever a session is registered or unregistered.
|
|
134
|
+
*/
|
|
135
|
+
refreshProcSessions(): void;
|
|
130
136
|
/**
|
|
131
137
|
* Syncs `/etc/passwd`, `/etc/group`, and `/etc/shadow` from the current
|
|
132
138
|
* `VirtualUserManager` state.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/VirtualShell/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/VirtualShell/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAQ3C,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD,OAAO,iBAAiB,EAAE,EAAE,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAG3D;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,eAAe;IAC/B,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,EAAE,EAAE,MAAM,CAAC;IACX,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;CACb;AAmBD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,cAAM,YAAa,SAAQ,YAAY;IACtC,mEAAmE;IACnE,GAAG,EAAE,iBAAiB,CAAC;IACvB,0EAA0E;IAC1E,KAAK,EAAE,kBAAkB,CAAC;IAC1B,wEAAwE;IACxE,cAAc,EAAE,qBAAqB,CAAC;IACtC,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,CAAC;IACjB,oEAAoE;IACpE,UAAU,EAAE,eAAe,CAAC;IAC5B,iFAAiF;IACjF,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,WAAW,CAAgB;IAEnC;;;;;;OAMG;gBAEF,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,eAAe,EAC5B,UAAU,CAAC,EAAE,UAAU;IA+BxB;;;OAGG;IACU,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAK/C;;;;;;OAMG;IACH,UAAU,CACT,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EAAE,EAChB,QAAQ,EAAE,CAAC,GAAG,EAAE,cAAc,KAAK,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,GACvE,IAAI;IASP;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAMrE;;;;;;;;;;;;;OAaG;IACH,uBAAuB,CACtB,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAC1C,IAAI;IAkBP;;;;;;;;;OASG;IACI,aAAa,IAAI,IAAI;IAU5B;;;;OAIG;IACI,mBAAmB,IAAI,IAAI;IAUlC;;;;;;;OAOG;IACI,UAAU,IAAI,IAAI;IAIzB;;;;OAIG;IACI,MAAM,IAAI,iBAAiB,GAAG,IAAI;IAIzC;;;;OAIG;IACI,QAAQ,IAAI,kBAAkB,GAAG,IAAI;IAI5C;;;;OAIG;IACI,WAAW,IAAI,MAAM;IAI5B;;;;;;OAMG;IACI,eAAe,CACrB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GAAG,MAAM,GACtB,IAAI;CAKP;AAED,OAAO,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { EventEmitter } from "node:events";
|
|
2
|
-
import { createCustomCommand, registerCommand
|
|
2
|
+
import { createCustomCommand, registerCommand } from "../commands/registry";
|
|
3
|
+
import { runCommand } from "../commands/runtime";
|
|
4
|
+
import { bootstrapLinuxRootfs, refreshProc, syncEtcPasswd, } from "../modules/linuxRootfs";
|
|
3
5
|
import { createPerfLogger } from "../utils/perfLogger";
|
|
4
6
|
import VirtualFileSystem, {} from "../VirtualFileSystem";
|
|
5
|
-
import { VirtualUserManager } from "../VirtualUserManager";
|
|
6
7
|
import { VirtualPackageManager } from "../VirtualPackageManager";
|
|
7
|
-
import {
|
|
8
|
+
import { VirtualUserManager } from "../VirtualUserManager";
|
|
8
9
|
import { startShell } from "./shell";
|
|
9
10
|
const defaultShellProperties = {
|
|
10
11
|
kernel: "1.0.0+itsrealfortune+1-amd64",
|
|
@@ -147,19 +148,29 @@ class VirtualShell extends EventEmitter {
|
|
|
147
148
|
// Interactive shell logic
|
|
148
149
|
this.emit("session:start", { user: authUser, sessionId, remoteAddress });
|
|
149
150
|
startShell(this.properties, stream, authUser, this.hostname, sessionId, remoteAddress, terminalSize, this);
|
|
151
|
+
// Refresh /proc/<pid> and /proc/self after session is registered
|
|
152
|
+
this.refreshProcSessions();
|
|
150
153
|
}
|
|
151
154
|
/**
|
|
152
155
|
* Refreshes the `/proc` virtual filesystem with current system state.
|
|
153
156
|
*
|
|
154
157
|
* Updates `/proc/uptime`, `/proc/meminfo`, `/proc/cpuinfo`,
|
|
155
|
-
* `/proc/version`,
|
|
158
|
+
* `/proc/version`, `/proc/loadavg`, `/proc/self`, and per-session
|
|
159
|
+
* `/proc/<pid>` entries from live session and host data.
|
|
156
160
|
*
|
|
157
161
|
* Called automatically during `bootstrapLinuxRootfs`. Call again before
|
|
158
|
-
* reading `/proc` files for up-to-date values
|
|
159
|
-
* or `free` in long-running processes).
|
|
162
|
+
* reading `/proc` files for up-to-date values.
|
|
160
163
|
*/
|
|
161
164
|
refreshProcFs() {
|
|
162
|
-
refreshProc(this.vfs, this.properties, this.hostname, this.startTime);
|
|
165
|
+
refreshProc(this.vfs, this.properties, this.hostname, this.startTime, this.users.listActiveSessions());
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Updates only the session-dependent `/proc` entries (`/proc/<pid>`,
|
|
169
|
+
* `/proc/self`). Cheaper than a full `refreshProcFs()` — call this
|
|
170
|
+
* whenever a session is registered or unregistered.
|
|
171
|
+
*/
|
|
172
|
+
refreshProcSessions() {
|
|
173
|
+
refreshProc(this.vfs, this.properties, this.hostname, this.startTime, this.users.listActiveSessions());
|
|
163
174
|
}
|
|
164
175
|
/**
|
|
165
176
|
* Syncs `/etc/passwd`, `/etc/group`, and `/etc/shadow` from the current
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../src/VirtualShell/shell.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,GAAG,CAAC;AAOvD,OAAO,EAGN,KAAK,YAAY,EAEjB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAmBpD,wBAAgB,UAAU,CACzB,UAAU,EAAE,eAAe,EAC3B,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,aAAa,oBAAY,EACzB,YAAY,EAAE,YAAY,YAAyB,EACnD,KAAK,EAAE,YAAY,GACjB,IAAI,
|
|
1
|
+
{"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../src/VirtualShell/shell.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,GAAG,CAAC;AAOvD,OAAO,EAGN,KAAK,YAAY,EAEjB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAmBpD,wBAAgB,UAAU,CACzB,UAAU,EAAE,eAAe,EAC3B,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,aAAa,oBAAY,EACzB,YAAY,EAAE,YAAY,YAAyB,EACnD,KAAK,EAAE,YAAY,GACjB,IAAI,CAkoBN"}
|
|
@@ -35,7 +35,9 @@ export function startShell(properties, stream, authUser, hostname, sessionId, re
|
|
|
35
35
|
await runCommand(l, authUser, hostname, "shell", cwd, shell, undefined, shellEnv);
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
|
-
catch {
|
|
38
|
+
catch {
|
|
39
|
+
/* ignore bashrc errors */
|
|
40
|
+
}
|
|
39
41
|
}
|
|
40
42
|
})();
|
|
41
43
|
function renderLine() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shellParser.d.ts","sourceRoot":"","sources":["../../src/VirtualShell/shellParser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"shellParser.d.ts","sourceRoot":"","sources":["../../src/VirtualShell/shellParser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,QAAQ,EAER,MAAM,EAGN,MAAM,mBAAmB,CAAC;AAI3B;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAUpD;AAED,0DAA0D;AAC1D,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAS7D;AAID;;;;;GAKG;AACH,wBAAgB,WAAW,CAC1B,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3B,QAAQ,EAAE,MAAM,EAChB,YAAY,SAAI,GACd,MAAM,CA8BR;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAKvE"}
|