@machinen/runtime 0.1.2 → 0.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/API.md +134 -136
- package/dist/index.d.ts +97 -88
- package/dist/index.js +692 -630
- package/dist/index.js.map +1 -1
- package/package.json +3 -7
- package/dist/chunk-6SP6T537.js +0 -163
- package/dist/chunk-6SP6T537.js.map +0 -1
- package/dist/mount-server-bin.d.ts +0 -2
- package/dist/mount-server-bin.js +0 -1341
- package/dist/mount-server-bin.js.map +0 -1
package/API.md
CHANGED
|
@@ -35,6 +35,7 @@
|
|
|
35
35
|
- [`SnapshotOptions`](#snapshotoptions)
|
|
36
36
|
- [`SnapshotResult`](#snapshotresult)
|
|
37
37
|
- [`SnapshotMeta`](#snapshotmeta)
|
|
38
|
+
- [`SnapshotEngine`](#snapshotengine)
|
|
38
39
|
- [`bootSnapshotPath`](#bootsnapshotpath)
|
|
39
40
|
- [`writeBootSnapshot`](#writebootsnapshot)
|
|
40
41
|
- [`detachedLogRoot`](#detachedlogroot)
|
|
@@ -1448,10 +1449,17 @@ Called with each stderr chunk as it arrives (pass-through tee).
|
|
|
1448
1449
|
|
|
1449
1450
|
> **stdout**: `string`
|
|
1450
1451
|
|
|
1452
|
+
Concatenated stdout bytes, decoded as UTF-8. Always `""` when the
|
|
1453
|
+
caller passed `onStdout` — streaming callers already have the
|
|
1454
|
+
bytes and a parallel buffered copy would defeat the streaming
|
|
1455
|
+
(and at multi-GB volumes would crash with ERR_STRING_TOO_LONG).
|
|
1456
|
+
|
|
1451
1457
|
##### stderr
|
|
1452
1458
|
|
|
1453
1459
|
> **stderr**: `string`
|
|
1454
1460
|
|
|
1461
|
+
Same shape as `stdout` for the stderr channel + `onStderr`.
|
|
1462
|
+
|
|
1455
1463
|
***
|
|
1456
1464
|
|
|
1457
1465
|
### VsockExecPtyOptions
|
|
@@ -1771,14 +1779,6 @@ fnmatch patterns matched against each rootfs-relative path.
|
|
|
1771
1779
|
|
|
1772
1780
|
Optional path to the compiled /init. Default: ../microvm/test-fixtures/init relative to this file.
|
|
1773
1781
|
|
|
1774
|
-
##### fuseAgentPath?
|
|
1775
|
-
|
|
1776
|
-
> `optional` **fuseAgentPath?**: `string`
|
|
1777
|
-
|
|
1778
|
-
Optional host path to the compiled fuse-agent binary. When set,
|
|
1779
|
-
the binary is injected at `/fuse-agent` (mode 0755) inside the
|
|
1780
|
-
initramfs so /init can fork it per live-share mount. See #78.
|
|
1781
|
-
|
|
1782
1782
|
##### execAgentPath?
|
|
1783
1783
|
|
|
1784
1784
|
> `optional` **execAgentPath?**: `string`
|
|
@@ -1827,12 +1827,6 @@ not in the cpio. Must be an absolute path under `/mnt/`.
|
|
|
1827
1827
|
|
|
1828
1828
|
Optional override for the compiled /init. Default: ../microvm/test-fixtures/init relative to this file.
|
|
1829
1829
|
|
|
1830
|
-
##### fuseAgentPath?
|
|
1831
|
-
|
|
1832
|
-
> `optional` **fuseAgentPath?**: `string`
|
|
1833
|
-
|
|
1834
|
-
Optional path to the compiled fuse-agent; staged at /fuse-agent when set.
|
|
1835
|
-
|
|
1836
1830
|
***
|
|
1837
1831
|
|
|
1838
1832
|
### PackRootfsOptions
|
|
@@ -2173,7 +2167,7 @@ overriding on key collision.
|
|
|
2173
2167
|
> `optional` **binary?**: `string`
|
|
2174
2168
|
|
|
2175
2169
|
Optional VMM binary path. Same lookup rules as `boot()` — if
|
|
2176
|
-
omitted, resolves `@machinen/
|
|
2170
|
+
omitted, resolves `@machinen/native-<arch>-<os>`.
|
|
2177
2171
|
|
|
2178
2172
|
##### cwd?
|
|
2179
2173
|
|
|
@@ -2414,6 +2408,16 @@ Host-side path of the scratch disk attached to the guest. Used by
|
|
|
2414
2408
|
`attach().snapshot()` so an attach-owned handle can find the
|
|
2415
2409
|
guest-side scratch disk that backs the in-VM dump.
|
|
2416
2410
|
|
|
2411
|
+
##### vmstatePath?
|
|
2412
|
+
|
|
2413
|
+
> `optional` **vmstatePath?**: `string`
|
|
2414
|
+
|
|
2415
|
+
Vmstate engine only: absolute path the VMM writes its `.vmstate`
|
|
2416
|
+
whole-VM state file to (the `MACHINEN_SNAPSHOT_PATH` it booted
|
|
2417
|
+
with). Persisted so an attach-owned `vm.snapshot()` / `vm.fork()`
|
|
2418
|
+
can SIGUSR1 the VMM and pick the state file up. Undefined for VMs
|
|
2419
|
+
booted without the vmstate engine.
|
|
2420
|
+
|
|
2417
2421
|
##### forkedFrom?
|
|
2418
2422
|
|
|
2419
2423
|
> `optional` **forkedFrom?**: `string`
|
|
@@ -2525,16 +2529,6 @@ the VM was restored. Set on restore-derived entries, undefined
|
|
|
2525
2529
|
for plain boots and eager restores. Surfaced via
|
|
2526
2530
|
`vm.memoryStats().lazyPagesPending`.
|
|
2527
2531
|
|
|
2528
|
-
##### lazyPagesMountRoot?
|
|
2529
|
-
|
|
2530
|
-
> `optional` **lazyPagesMountRoot?**: `string`
|
|
2531
|
-
|
|
2532
|
-
Absolute path under which the lazy-restore FUSE mount serves
|
|
2533
|
-
`pages-*.img` reads. The mount-server tracks bytes served below
|
|
2534
|
-
this prefix; `vm.memoryStats()` divides that by 4096 and
|
|
2535
|
-
subtracts from `lazyPagesTotal` to derive `lazyPagesPending`.
|
|
2536
|
-
Undefined when the VM wasn't lazy-restored.
|
|
2537
|
-
|
|
2538
2532
|
##### mountDisk?
|
|
2539
2533
|
|
|
2540
2534
|
> `optional` **mountDisk?**: `object`
|
|
@@ -2564,15 +2558,13 @@ silently boots without the overlay.
|
|
|
2564
2558
|
|
|
2565
2559
|
> `optional` **liveMounts?**: `object`[]
|
|
2566
2560
|
|
|
2567
|
-
#273: live-share
|
|
2568
|
-
|
|
2569
|
-
|
|
2570
|
-
bundle
|
|
2571
|
-
|
|
2572
|
-
|
|
2573
|
-
|
|
2574
|
-
listening through the dump, so attach reconnects without having
|
|
2575
|
-
to bind anything).
|
|
2561
|
+
#273: live-share mounts (`liveMounts: [...]` at boot) the VM was
|
|
2562
|
+
started with. Persisted so an attach-owned `vm.snapshot()` /
|
|
2563
|
+
`vm.fork()` can record the same `meta.liveMounts` block in the
|
|
2564
|
+
bundle. Since #332 every live mount is served by an in-VMM
|
|
2565
|
+
virtio-fs device — there's no host-side process to record, reap,
|
|
2566
|
+
or reconnect to. The per-mount virtio-fs tag isn't recorded
|
|
2567
|
+
either; it's re-derived from the resolved order on restore.
|
|
2576
2568
|
|
|
2577
2569
|
###### guest
|
|
2578
2570
|
|
|
@@ -2586,27 +2578,6 @@ to bind anything).
|
|
|
2586
2578
|
|
|
2587
2579
|
> **mode**: `"ro"` \| `"rw"`
|
|
2588
2580
|
|
|
2589
|
-
##### liveMountServers?
|
|
2590
|
-
|
|
2591
|
-
> `optional` **liveMountServers?**: `object`[]
|
|
2592
|
-
|
|
2593
|
-
#150 phase 3: pids + exes of the detached mount-server helpers
|
|
2594
|
-
spawned alongside this VMM, one per live-mount. The helpers die
|
|
2595
|
-
with the VMM via `pdeathsig --watch-pid` already, but `machinen
|
|
2596
|
-
stop` SIGTERMs them up-front so the VMM exit hook doesn't race
|
|
2597
|
-
with the helper's own pdeathsig-driven shutdown, and `machinen
|
|
2598
|
-
gc` validates pid+exe to detect recycled pids the same way the
|
|
2599
|
-
VMM and gvproxy entries do. Empty / undefined for VMs booted
|
|
2600
|
-
without `liveMounts`.
|
|
2601
|
-
|
|
2602
|
-
###### pid
|
|
2603
|
-
|
|
2604
|
-
> **pid**: `number`
|
|
2605
|
-
|
|
2606
|
-
###### exe
|
|
2607
|
-
|
|
2608
|
-
> **exe**: `string`
|
|
2609
|
-
|
|
2610
2581
|
##### startedAt
|
|
2611
2582
|
|
|
2612
2583
|
> **startedAt**: `number`
|
|
@@ -3186,17 +3157,31 @@ Default: false (preserve TCP — current snapshot/restore behavior).
|
|
|
3186
3157
|
|
|
3187
3158
|
#### Properties
|
|
3188
3159
|
|
|
3160
|
+
##### engine
|
|
3161
|
+
|
|
3162
|
+
> **engine**: [`SnapshotEngine`](#snapshotengine)
|
|
3163
|
+
|
|
3164
|
+
Which backend produced the bundle.
|
|
3165
|
+
|
|
3189
3166
|
##### snapDir
|
|
3190
3167
|
|
|
3191
3168
|
> **snapDir**: `string`
|
|
3192
3169
|
|
|
3193
3170
|
Absolute path to the snapshot bundle directory.
|
|
3194
3171
|
|
|
3195
|
-
##### imgDir
|
|
3172
|
+
##### imgDir?
|
|
3196
3173
|
|
|
3197
|
-
> **imgDir
|
|
3174
|
+
> `optional` **imgDir?**: `string`
|
|
3198
3175
|
|
|
3199
3176
|
Absolute path to the CRIU image directory inside the bundle.
|
|
3177
|
+
Set by the criu engine only; undefined for vmstate bundles.
|
|
3178
|
+
|
|
3179
|
+
##### vmstatePath?
|
|
3180
|
+
|
|
3181
|
+
> `optional` **vmstatePath?**: `string`
|
|
3182
|
+
|
|
3183
|
+
Absolute path to the `.vmstate` whole-VM state file inside the
|
|
3184
|
+
bundle. Set by the vmstate engine only; undefined for criu bundles.
|
|
3200
3185
|
|
|
3201
3186
|
##### elapsedMs
|
|
3202
3187
|
|
|
@@ -3219,6 +3204,16 @@ to reconstruct the source VM's name when registering the fork.
|
|
|
3219
3204
|
|
|
3220
3205
|
#### Properties
|
|
3221
3206
|
|
|
3207
|
+
##### engine?
|
|
3208
|
+
|
|
3209
|
+
> `optional` **engine?**: [`SnapshotEngine`](#snapshotengine)
|
|
3210
|
+
|
|
3211
|
+
Which backend wrote this bundle — `"criu"` (process-tree images
|
|
3212
|
+
under `img/`) or `"vmstate"` (whole-VM `state.vmstate`). `restore()`
|
|
3213
|
+
also auto-detects from the bundle's contents; this field is the
|
|
3214
|
+
explicit record. Absent on bundles predating the vmstate engine
|
|
3215
|
+
(treated as `"criu"`).
|
|
3216
|
+
|
|
3222
3217
|
##### sourceName?
|
|
3223
3218
|
|
|
3224
3219
|
> `optional` **sourceName?**: `string`
|
|
@@ -3270,20 +3265,20 @@ consulting the host source dir.
|
|
|
3270
3265
|
|
|
3271
3266
|
> `optional` **liveMounts?**: `object`[]
|
|
3272
3267
|
|
|
3273
|
-
#273: live-share
|
|
3274
|
-
|
|
3275
|
-
|
|
3276
|
-
|
|
3277
|
-
|
|
3268
|
+
#273: live-share mounts (`liveMounts: [...]` at boot) the source
|
|
3269
|
+
VM had at snapshot time. Unlike `mountDisk`, no bytes are captured
|
|
3270
|
+
— `host` is the path on the host that was being live-shared,
|
|
3271
|
+
recorded so `restore()` can re-establish the same window on the
|
|
3272
|
+
restoring host. Each entry is the resolved config from the
|
|
3278
3273
|
source's `resolveLiveMounts()`:
|
|
3279
|
-
- `guest`: absolute guest path the
|
|
3274
|
+
- `guest`: absolute guest path the mount lands at.
|
|
3280
3275
|
- `host`: absolute host path that was being shared.
|
|
3281
3276
|
- `mode`: `"ro"` or `"rw"`, the share's write semantics.
|
|
3282
3277
|
|
|
3283
3278
|
Restore policy: the bundle's recorded mounts are re-established
|
|
3284
3279
|
verbatim by default. Pass `restore({ liveMounts })` to override
|
|
3285
|
-
per-guest `host`/`mode` — each override entry's `guest` must
|
|
3286
|
-
|
|
3280
|
+
per-guest `host`/`mode` — each override entry's `guest` must match
|
|
3281
|
+
a recorded entry, else BOOT_LIVE_MOUNT_OVERRIDE_UNKNOWN.
|
|
3287
3282
|
Cross-host bundles where a recorded `host` doesn't exist on the
|
|
3288
3283
|
restoring host fail loudly via the boot-time existence check —
|
|
3289
3284
|
users remap with the override knob.
|
|
@@ -3595,34 +3590,35 @@ Must be a positive multiple of 4096. Default 4 GiB.
|
|
|
3595
3590
|
|
|
3596
3591
|
> `optional` **liveMounts?**: `object`[]
|
|
3597
3592
|
|
|
3598
|
-
Host directories exposed to the guest as live-share
|
|
3599
|
-
|
|
3600
|
-
connected to the host: the guest reads on demand
|
|
3601
|
-
|
|
3602
|
-
|
|
3603
|
-
|
|
3593
|
+
Host directories exposed to the guest as live-share mounts (#78,
|
|
3594
|
+
#332). Unlike `mount` (copy-once into the boot rootfs), these stay
|
|
3595
|
+
connected to the host: the guest reads on demand and nothing is
|
|
3596
|
+
copied at boot. `mode` defaults to `"rw"` — guest writes land on
|
|
3597
|
+
the host (#151, #156). Set `"ro"` for a one-way share (host
|
|
3598
|
+
caches, untrusted guests).
|
|
3604
3599
|
|
|
3605
3600
|
Each guest path must live under `/mnt/` (same rule as `mount`).
|
|
3606
|
-
Repeatable
|
|
3601
|
+
Repeatable up to 4 entries per VM — each is served by its own
|
|
3602
|
+
in-VMM virtio-fs device (the VMM wires 4 virtio-fs slots). The
|
|
3603
|
+
FUSE opcode handlers run inside the VMM and the guest mounts each
|
|
3604
|
+
share directly with `mount -t virtiofs` — no agent process, no
|
|
3605
|
+
vsock hop. Requires a guest kernel with `CONFIG_VIRTIO_FS` — every
|
|
3606
|
+
machinen-built kernel has it. (The older FUSE-over-vsock transport
|
|
3607
|
+
and its `protocol` knob were removed in #338.)
|
|
3607
3608
|
|
|
3608
3609
|
Snapshot / restore / fork (#273): liveMount has no guest-side
|
|
3609
3610
|
state worth checkpointing — reads come from the host on demand,
|
|
3610
|
-
writes (in `"rw"`) land on the host immediately. The
|
|
3611
|
-
|
|
3612
|
-
|
|
3613
|
-
true })` and `vm.fork()`
|
|
3614
|
-
disappear for the dump duration (typically seconds, scales with
|
|
3615
|
-
memory size) before reappearing under fresh server state. Open
|
|
3616
|
-
fds across that window see EBADF on next syscall — same shape
|
|
3617
|
-
as "don't snapshot during a database write." Workloads that
|
|
3618
|
-
quiesce before snapshot are unaffected.
|
|
3611
|
+
writes (in `"rw"`) land on the host immediately. The in-VMM
|
|
3612
|
+
virtio-fs device persists across the CRIU dump, so the workload's
|
|
3613
|
+
view of `/mnt/<guest>/` survives `vm.snapshot({ leaveRunning:
|
|
3614
|
+
true })` and `vm.fork()` without an unmount/remount window.
|
|
3619
3615
|
|
|
3620
3616
|
Concurrent writes from multiple forks against the same host
|
|
3621
3617
|
directory are no different from any other shared filesystem —
|
|
3622
|
-
|
|
3623
|
-
|
|
3624
|
-
|
|
3625
|
-
|
|
3618
|
+
each VM gets its own device but the runtime doesn't coordinate
|
|
3619
|
+
writes between siblings. If two forks need non-overlapping write
|
|
3620
|
+
surfaces, point each at a distinct `host` path or use `mount`
|
|
3621
|
+
(copy-once, per-VM upper).
|
|
3626
3622
|
|
|
3627
3623
|
Restore on a host where the recorded `host` path doesn't exist:
|
|
3628
3624
|
fails loudly via `BOOT_MOUNT_HOST_NOT_FOUND`. Pass
|
|
@@ -4006,34 +4002,35 @@ Must be a positive multiple of 4096. Default 4 GiB.
|
|
|
4006
4002
|
|
|
4007
4003
|
> `optional` **liveMounts?**: `object`[]
|
|
4008
4004
|
|
|
4009
|
-
Host directories exposed to the guest as live-share
|
|
4010
|
-
|
|
4011
|
-
connected to the host: the guest reads on demand
|
|
4012
|
-
|
|
4013
|
-
|
|
4014
|
-
|
|
4005
|
+
Host directories exposed to the guest as live-share mounts (#78,
|
|
4006
|
+
#332). Unlike `mount` (copy-once into the boot rootfs), these stay
|
|
4007
|
+
connected to the host: the guest reads on demand and nothing is
|
|
4008
|
+
copied at boot. `mode` defaults to `"rw"` — guest writes land on
|
|
4009
|
+
the host (#151, #156). Set `"ro"` for a one-way share (host
|
|
4010
|
+
caches, untrusted guests).
|
|
4015
4011
|
|
|
4016
4012
|
Each guest path must live under `/mnt/` (same rule as `mount`).
|
|
4017
|
-
Repeatable
|
|
4013
|
+
Repeatable up to 4 entries per VM — each is served by its own
|
|
4014
|
+
in-VMM virtio-fs device (the VMM wires 4 virtio-fs slots). The
|
|
4015
|
+
FUSE opcode handlers run inside the VMM and the guest mounts each
|
|
4016
|
+
share directly with `mount -t virtiofs` — no agent process, no
|
|
4017
|
+
vsock hop. Requires a guest kernel with `CONFIG_VIRTIO_FS` — every
|
|
4018
|
+
machinen-built kernel has it. (The older FUSE-over-vsock transport
|
|
4019
|
+
and its `protocol` knob were removed in #338.)
|
|
4018
4020
|
|
|
4019
4021
|
Snapshot / restore / fork (#273): liveMount has no guest-side
|
|
4020
4022
|
state worth checkpointing — reads come from the host on demand,
|
|
4021
|
-
writes (in `"rw"`) land on the host immediately. The
|
|
4022
|
-
|
|
4023
|
-
|
|
4024
|
-
true })` and `vm.fork()`
|
|
4025
|
-
disappear for the dump duration (typically seconds, scales with
|
|
4026
|
-
memory size) before reappearing under fresh server state. Open
|
|
4027
|
-
fds across that window see EBADF on next syscall — same shape
|
|
4028
|
-
as "don't snapshot during a database write." Workloads that
|
|
4029
|
-
quiesce before snapshot are unaffected.
|
|
4023
|
+
writes (in `"rw"`) land on the host immediately. The in-VMM
|
|
4024
|
+
virtio-fs device persists across the CRIU dump, so the workload's
|
|
4025
|
+
view of `/mnt/<guest>/` survives `vm.snapshot({ leaveRunning:
|
|
4026
|
+
true })` and `vm.fork()` without an unmount/remount window.
|
|
4030
4027
|
|
|
4031
4028
|
Concurrent writes from multiple forks against the same host
|
|
4032
4029
|
directory are no different from any other shared filesystem —
|
|
4033
|
-
|
|
4034
|
-
|
|
4035
|
-
|
|
4036
|
-
|
|
4030
|
+
each VM gets its own device but the runtime doesn't coordinate
|
|
4031
|
+
writes between siblings. If two forks need non-overlapping write
|
|
4032
|
+
surfaces, point each at a distinct `host` path or use `mount`
|
|
4033
|
+
(copy-once, per-VM upper).
|
|
4037
4034
|
|
|
4038
4035
|
Restore on a host where the recorded `host` path doesn't exist:
|
|
4039
4036
|
fails loudly via `BOOT_MOUNT_HOST_NOT_FOUND`. Pass
|
|
@@ -4352,34 +4349,35 @@ Must be a positive multiple of 4096. Default 4 GiB.
|
|
|
4352
4349
|
|
|
4353
4350
|
> `optional` **liveMounts?**: `object`[]
|
|
4354
4351
|
|
|
4355
|
-
Host directories exposed to the guest as live-share
|
|
4356
|
-
|
|
4357
|
-
connected to the host: the guest reads on demand
|
|
4358
|
-
|
|
4359
|
-
|
|
4360
|
-
|
|
4352
|
+
Host directories exposed to the guest as live-share mounts (#78,
|
|
4353
|
+
#332). Unlike `mount` (copy-once into the boot rootfs), these stay
|
|
4354
|
+
connected to the host: the guest reads on demand and nothing is
|
|
4355
|
+
copied at boot. `mode` defaults to `"rw"` — guest writes land on
|
|
4356
|
+
the host (#151, #156). Set `"ro"` for a one-way share (host
|
|
4357
|
+
caches, untrusted guests).
|
|
4361
4358
|
|
|
4362
4359
|
Each guest path must live under `/mnt/` (same rule as `mount`).
|
|
4363
|
-
Repeatable
|
|
4360
|
+
Repeatable up to 4 entries per VM — each is served by its own
|
|
4361
|
+
in-VMM virtio-fs device (the VMM wires 4 virtio-fs slots). The
|
|
4362
|
+
FUSE opcode handlers run inside the VMM and the guest mounts each
|
|
4363
|
+
share directly with `mount -t virtiofs` — no agent process, no
|
|
4364
|
+
vsock hop. Requires a guest kernel with `CONFIG_VIRTIO_FS` — every
|
|
4365
|
+
machinen-built kernel has it. (The older FUSE-over-vsock transport
|
|
4366
|
+
and its `protocol` knob were removed in #338.)
|
|
4364
4367
|
|
|
4365
4368
|
Snapshot / restore / fork (#273): liveMount has no guest-side
|
|
4366
4369
|
state worth checkpointing — reads come from the host on demand,
|
|
4367
|
-
writes (in `"rw"`) land on the host immediately. The
|
|
4368
|
-
|
|
4369
|
-
|
|
4370
|
-
true })` and `vm.fork()`
|
|
4371
|
-
disappear for the dump duration (typically seconds, scales with
|
|
4372
|
-
memory size) before reappearing under fresh server state. Open
|
|
4373
|
-
fds across that window see EBADF on next syscall — same shape
|
|
4374
|
-
as "don't snapshot during a database write." Workloads that
|
|
4375
|
-
quiesce before snapshot are unaffected.
|
|
4370
|
+
writes (in `"rw"`) land on the host immediately. The in-VMM
|
|
4371
|
+
virtio-fs device persists across the CRIU dump, so the workload's
|
|
4372
|
+
view of `/mnt/<guest>/` survives `vm.snapshot({ leaveRunning:
|
|
4373
|
+
true })` and `vm.fork()` without an unmount/remount window.
|
|
4376
4374
|
|
|
4377
4375
|
Concurrent writes from multiple forks against the same host
|
|
4378
4376
|
directory are no different from any other shared filesystem —
|
|
4379
|
-
|
|
4380
|
-
|
|
4381
|
-
|
|
4382
|
-
|
|
4377
|
+
each VM gets its own device but the runtime doesn't coordinate
|
|
4378
|
+
writes between siblings. If two forks need non-overlapping write
|
|
4379
|
+
surfaces, point each at a distinct `host` path or use `mount`
|
|
4380
|
+
(copy-once, per-VM upper).
|
|
4383
4381
|
|
|
4384
4382
|
Restore on a host where the recorded `host` path doesn't exist:
|
|
4385
4383
|
fails loudly via `BOOT_MOUNT_HOST_NOT_FOUND`. Pass
|
|
@@ -4709,6 +4707,12 @@ tarball-producing tool can pre-populate the lookup cache.
|
|
|
4709
4707
|
|
|
4710
4708
|
> `optional` **cwd?**: `string`
|
|
4711
4709
|
|
|
4710
|
+
***
|
|
4711
|
+
|
|
4712
|
+
### SnapshotEngine
|
|
4713
|
+
|
|
4714
|
+
> **SnapshotEngine** = `"criu"` \| `"vmstate"`
|
|
4715
|
+
|
|
4712
4716
|
## Variables
|
|
4713
4717
|
|
|
4714
4718
|
### STATS\_FILE\_SIZE
|
|
@@ -4895,14 +4899,6 @@ tarball-producing tool can pre-populate the lookup cache.
|
|
|
4895
4899
|
|
|
4896
4900
|
> `readonly` **MOUNT\_PATH\_ESCAPE**: `"MOUNT_PATH_ESCAPE"` = `"MOUNT_PATH_ESCAPE"`
|
|
4897
4901
|
|
|
4898
|
-
##### MOUNT\_SERVER\_BIN\_MISSING
|
|
4899
|
-
|
|
4900
|
-
> `readonly` **MOUNT\_SERVER\_BIN\_MISSING**: `"MOUNT_SERVER_BIN_MISSING"` = `"MOUNT_SERVER_BIN_MISSING"`
|
|
4901
|
-
|
|
4902
|
-
##### MOUNT\_SERVER\_SPAWN\_FAILED
|
|
4903
|
-
|
|
4904
|
-
> `readonly` **MOUNT\_SERVER\_SPAWN\_FAILED**: `"MOUNT_SERVER_SPAWN_FAILED"` = `"MOUNT_SERVER_SPAWN_FAILED"`
|
|
4905
|
-
|
|
4906
4902
|
##### SECRETS\_VALUE\_INVALID
|
|
4907
4903
|
|
|
4908
4904
|
> `readonly` **SECRETS\_VALUE\_INVALID**: `"SECRETS_VALUE_INVALID"` = `"SECRETS_VALUE_INVALID"`
|
|
@@ -5469,7 +5465,6 @@ Layout:
|
|
|
5469
5465
|
blk slots 5+6, not in the cpio.
|
|
5470
5466
|
/dev/console char node 5,1 — kernel needs it
|
|
5471
5467
|
before /init re-opens the console
|
|
5472
|
-
/fuse-agent optional, only when liveMounts
|
|
5473
5468
|
/tmp sticky 1777
|
|
5474
5469
|
|
|
5475
5470
|
No /lib/modules tree, no kmod, no /modules/*.ko, no Debian userland.
|
|
@@ -6143,9 +6138,12 @@ much the snapshot path is (or isn't) buying us.
|
|
|
6143
6138
|
|
|
6144
6139
|
Locate the VMM binary using the same lookup order as `@machinen/cli`:
|
|
6145
6140
|
1. `MACHINEN_VMM` env var (dev-mode override)
|
|
6146
|
-
2. `require.resolve("@machinen/
|
|
6141
|
+
2. `require.resolve("@machinen/native-<arch>-<os>")` → `binary` export
|
|
6147
6142
|
|
|
6148
|
-
|
|
6143
|
+
`@machinen/native-arm64-{darwin,linux}` is the consolidated host-tool
|
|
6144
|
+
package — it carries the VMM, gvproxy, guest ELFs, mke2fs,
|
|
6145
|
+
mksquashfs, and the mount server. Callers can pass an explicit
|
|
6146
|
+
`binary` to `boot()` to bypass this.
|
|
6149
6147
|
|
|
6150
6148
|
#### Returns
|
|
6151
6149
|
|