microsandbox-rb 0.17.0 → 0.17.1
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +136 -1
- data/Cargo.lock +45 -46
- data/DESIGN.md +6 -37
- data/README.md +176 -667
- data/SECURITY.md +65 -0
- data/docs/configuration.md +154 -0
- data/docs/errors.md +74 -0
- data/docs/execution.md +101 -0
- data/docs/filesystem.md +45 -0
- data/docs/images.md +65 -0
- data/docs/lifecycle.md +108 -0
- data/docs/observability.md +99 -0
- data/docs/releasing.md +66 -0
- data/docs/runtime.md +152 -0
- data/docs/surface.md +70 -0
- data/ext/microsandbox/Cargo.toml +1 -1
- data/ext/microsandbox/src/host_path.rs +108 -0
- data/ext/microsandbox/src/lib.rs +1 -0
- data/ext/microsandbox/src/sandbox.rs +61 -31
- data/ext/microsandbox/src/volume.rs +43 -12
- data/lib/microsandbox/fs.rb +4 -8
- data/lib/microsandbox/image.rb +2 -2
- data/lib/microsandbox/log_entry.rb +1 -1
- data/lib/microsandbox/metrics.rb +1 -1
- data/lib/microsandbox/outbound_proxy.rb +8 -0
- data/lib/microsandbox/sandbox.rb +53 -9
- data/lib/microsandbox/snapshot.rb +1 -1
- data/lib/microsandbox/ssh.rb +2 -10
- data/lib/microsandbox/streams.rb +8 -5
- data/lib/microsandbox/version.rb +1 -1
- data/lib/microsandbox/volume.rb +31 -14
- data/lib/microsandbox-rb.rb +7 -0
- data/lib/microsandbox.rb +88 -31
- metadata +14 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8fbc8d09d8029bef1ec00d128bf554b037c937e51ebe8b9b8a6014043fce178e
|
|
4
|
+
data.tar.gz: 626313c0471102e108793f3880bcd1f1e30ba9f48470274bf53495a86cfadff7
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 49461a4a9ca44f5af82d62fe30086bd4b153d3885267274fce7de8328b071cb418055f202b3b2feea3f149d76572a2a78874596c707ac094d62f7cc5171269aa
|
|
7
|
+
data.tar.gz: 929b0a19b88eb839d371899191e6a0229eded4eb616100dbd8d316352eac3bf68dcfefa91fb04c4ce41ad540deaa41233c1533d2471222bbf4772d8708451be6
|
data/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,137 @@ All notable changes to this gem are documented here. The format is based on
|
|
|
6
6
|
microsandbox runtime it embeds; each release notes the upstream runtime tag it
|
|
7
7
|
wraps, and the README's Versioning section keeps the full gem→runtime map.
|
|
8
8
|
|
|
9
|
+
## [Unreleased]
|
|
10
|
+
|
|
11
|
+
## [0.17.1] - 2026-10-12
|
|
12
|
+
|
|
13
|
+
Gem-only security and hardening release; the embedded runtime stays at
|
|
14
|
+
**`v0.6.18`**. Upgrading is recommended for everyone on `0.17.0` or earlier.
|
|
15
|
+
Two fixes tighten input handling and can reject input that used to be
|
|
16
|
+
accepted: `Volume.fs` paths containing a `..` segment, and
|
|
17
|
+
`Microsandbox.runtime_path = nil`.
|
|
18
|
+
|
|
19
|
+
### Security
|
|
20
|
+
|
|
21
|
+
- **Relative host paths are pinned when a sandbox is created**
|
|
22
|
+
([GHSA-mcw9-9rf6-p4rm](https://github.com/superradcompany/microsandbox/security/advisories/GHSA-mcw9-9rf6-p4rm),
|
|
23
|
+
high; fixed upstream in runtime `v0.7.6`, which this gem does not embed yet).
|
|
24
|
+
The embedded runtime stored a relative host path exactly as written and
|
|
25
|
+
resolved it against the working directory of whichever process later
|
|
26
|
+
started the sandbox, so restarting a sandbox from another directory mounted
|
|
27
|
+
a different host directory than the one originally intended. The native
|
|
28
|
+
layer now anchors every relative host path to the creating process's
|
|
29
|
+
directory before the configuration is persisted: bind and disk mount
|
|
30
|
+
sources in `volumes:`, a directory or disk-image `image:`, a `root_disk:`
|
|
31
|
+
image path, `Patch.copy_file` / `Patch.copy_dir` sources, the `tls:`
|
|
32
|
+
certificate paths, and a path-form `from_snapshot:`. This covers sandboxes
|
|
33
|
+
created through the gem; the `msb` CLI the gem installs is unchanged, so use
|
|
34
|
+
absolute paths with it. Paths are anchored
|
|
35
|
+
without following symlinks and without requiring the target to exist, so a
|
|
36
|
+
symlinked bind-mount root is still refused unless
|
|
37
|
+
`follow_root_symlinks: true`. Absolute paths, named volumes, and OCI
|
|
38
|
+
references are unchanged, and on a cloud backend paths are forwarded as
|
|
39
|
+
written (they belong to the remote host).
|
|
40
|
+
|
|
41
|
+
**Existing sandboxes are not rewritten.** A sandbox created by an earlier
|
|
42
|
+
gem version with a relative path keeps that saved path and its old
|
|
43
|
+
behaviour: recreate it, or only ever start it from its original directory.
|
|
44
|
+
Affects every earlier `microsandbox-rb` release; the upstream advisory does
|
|
45
|
+
not list this gem.
|
|
46
|
+
- **Errors no longer repeat values that can be credentials.** A URL-style
|
|
47
|
+
proxy address (`socks5://user:pass@host:port`) is refused by shape without
|
|
48
|
+
being echoed; an `env:` / `labels:` / `scripts:` value that is not a Hash
|
|
49
|
+
(or convertible to one, like `ENV`), a malformed patch, and a non-Hash
|
|
50
|
+
secret spec are reported by class name only.
|
|
51
|
+
- **Dependencies with published advisories updated in `Cargo.lock`**:
|
|
52
|
+
`russh` 0.63.1 → 0.63.3 (GHSA-35g8-35p8-c8fw, SSH server side),
|
|
53
|
+
`rustls` 0.23.41 → 0.23.45 (RUSTSEC-2026-0285), `h2` 0.4.15 → 0.4.16
|
|
54
|
+
(RUSTSEC-2026-0258), plus `anyhow` 1.0.104 and `event-listener` 5.4.2
|
|
55
|
+
(unsoundness fixes). Those pulled in `aws-lc-rs` 1.18.1, `aws-lc-sys`
|
|
56
|
+
0.45.0, `rustls-webpki` 0.103.15, and `num-bigint` 0.5.1 in place of
|
|
57
|
+
`internal-russh-num-bigint`. `rkyv` and `rsa` have no compatible fixed
|
|
58
|
+
release at the pinned runtime and are unchanged.
|
|
59
|
+
|
|
60
|
+
### Added
|
|
61
|
+
|
|
62
|
+
- `SECURITY.md`: how to report a vulnerability privately, and a table mapping
|
|
63
|
+
upstream microsandbox advisories to the `microsandbox-rb` versions they
|
|
64
|
+
affect (upstream advisories do not list this gem). Shipped in the gem.
|
|
65
|
+
- `require "microsandbox-rb"` as an entry point named after the gem. Outside
|
|
66
|
+
Bundler, `require "microsandbox"` can resolve to the unrelated `microsandbox`
|
|
67
|
+
gem on RubyGems.
|
|
68
|
+
|
|
69
|
+
### Fixed
|
|
70
|
+
|
|
71
|
+
- **Documentation examples that did not run.** The README quick start failed
|
|
72
|
+
on its second run (`SandboxAlreadyExistsError`; it now uses
|
|
73
|
+
`ephemeral: true`), and the README / configuration-guide `secrets:` example
|
|
74
|
+
used the `#modify` shape and raised `TypeError`. The observability and
|
|
75
|
+
errors guides named the wrong error class for the metrics startup window
|
|
76
|
+
(it is the base `Microsandbox::Error`, matched by message), and
|
|
77
|
+
`log_stream(follow: true)` was documented as ending when the sandbox stops
|
|
78
|
+
(it does not). The guides now also state that an inline secret `value:` is
|
|
79
|
+
stored in cleartext in the local catalog until the sandbox is removed, that
|
|
80
|
+
the block form stops but does not remove, that a runtime home belongs to one
|
|
81
|
+
runtime line (`MSB_HOME`), and list known issues at the pinned runtime
|
|
82
|
+
(including guest `fallocate` truncating bind-mounted files on macOS hosts).
|
|
83
|
+
- **A rejected option no longer triggers a runtime download.** The first-use
|
|
84
|
+
runtime check ran before most argument validation, so `Sandbox.create` with
|
|
85
|
+
a bad option downloaded and installed `msb` before raising. It now runs
|
|
86
|
+
after the options are validated, in `create`, `connect_or_create` and
|
|
87
|
+
`create_with_progress`.
|
|
88
|
+
- **First-use provisioning is serialized within a process.** Several threads
|
|
89
|
+
making their first `Sandbox.create` at once each ran the installer, which
|
|
90
|
+
replaces files in place. `Microsandbox.install`, `Microsandbox.setup` and
|
|
91
|
+
the first-use check now share one lock, and the check runs once.
|
|
92
|
+
- **`Microsandbox.runtime_path = nil` / `libkrunfw_path = nil`** (or `""`)
|
|
93
|
+
raise `ArgumentError` instead of writing an empty path into the set-once
|
|
94
|
+
slot for the rest of the process.
|
|
95
|
+
- **Companion gem detection no longer depends on the host project's name.**
|
|
96
|
+
When the host project is itself a gem with its bundle installed inside the
|
|
97
|
+
project directory, `microsandbox-rb-binaries` could be attributed to the
|
|
98
|
+
host project and ignored, depending on gem load order. The owner is now
|
|
99
|
+
the gem with the innermost matching root.
|
|
100
|
+
- **`patches:` with `from_snapshot:`** raises `ArgumentError` up front. The
|
|
101
|
+
runtime rejects the pair only after claiming the sandbox name on disk,
|
|
102
|
+
which left an empty directory holding the name.
|
|
103
|
+
- **Block forms keep the caller's exception.** `fs.write_stream { }`,
|
|
104
|
+
`ssh.open_client { }` and `client.sftp { }` closed in a bare `ensure`, so a
|
|
105
|
+
failing close replaced whatever the block had raised. The block's exception
|
|
106
|
+
now wins; a close failure is still raised when the block itself succeeded.
|
|
107
|
+
- **`PullSession#sandbox`** re-raises the original create failure when called
|
|
108
|
+
again, instead of an unrelated "already taken" error.
|
|
109
|
+
- **Timestamps are exact to the millisecond.** `Time.at(ms / 1000.0)` went
|
|
110
|
+
through a Float and reported one millisecond low for about half of all
|
|
111
|
+
values (`FsEntry#modified`, `FsMetadata#modified` / `#created`,
|
|
112
|
+
`LogEntry#timestamp`, `Metrics#timestamp`, and every `created_at` /
|
|
113
|
+
`updated_at` / `last_used_at` / `observed_at` reader).
|
|
114
|
+
- **`secrets:` given as a `{ "NAME" => { ... } }` Hash** (the `#modify`
|
|
115
|
+
shape) raises a descriptive `ArgumentError` instead of `TypeError`; a single
|
|
116
|
+
bare spec Hash is accepted as a list of one, as is a single patch Hash for
|
|
117
|
+
`patches:`.
|
|
118
|
+
|
|
119
|
+
### Changed
|
|
120
|
+
|
|
121
|
+
- **`Volume.fs` paths may not contain a `..` segment.** Every `VolumeFs` operation
|
|
122
|
+
(`read`, `read_text`, `write`, `list`, `mkdir`, `remove_file`, `remove_dir`,
|
|
123
|
+
`exists?`, `copy`, `rename`, `stat`) now refuses a path that contains a `..`
|
|
124
|
+
segment with `FilesystemError`, in the native layer as well as the Ruby
|
|
125
|
+
wrapper. Volume paths are relative to the volume root and never need one.
|
|
126
|
+
A path such as `"a/../b"` that used to be accepted must now be written as
|
|
127
|
+
`"b"`. Names that merely contain dots (`"..hidden"`, `"a..b"`) are fine.
|
|
128
|
+
- **README restructured** along the lines of a conventional Ruby SDK README:
|
|
129
|
+
badges, a Highlights list, a short install + quick start, a Documentation
|
|
130
|
+
table, and a sourced comparison with the official `microsandbox` gem. The
|
|
131
|
+
detailed guides moved into `docs/` (`lifecycle`, `configuration`,
|
|
132
|
+
`execution`, `filesystem`, `observability`, `images`, `runtime`, `errors`,
|
|
133
|
+
`surface`, `releasing`), which the gem now ships (`spec.files`), so the
|
|
134
|
+
links resolve on rubygems.org and rubydoc.info. `docs/surface.md` replaces
|
|
135
|
+
the duplicated implemented-surface prose in README and `DESIGN.md` as the
|
|
136
|
+
single scope statement. `docs/errors.md` lists every error class and marks
|
|
137
|
+
the four the native layer does not currently raise (`PathNotFoundError`,
|
|
138
|
+
`ImagePullFailedError`, `SecretViolationError`, `TlsError`) as reserved.
|
|
139
|
+
|
|
9
140
|
## [0.17.0] - 2026-09-13
|
|
10
141
|
|
|
11
142
|
Adopts upstream runtime **`v0.6.16` → `v0.6.18`**, stepping through the
|
|
@@ -1260,7 +1391,11 @@ microsandbox runtime, aligned with the official Python/Node/Go SDKs.
|
|
|
1260
1391
|
core crate has Apple-native deps). Until precompiled gems are published,
|
|
1261
1392
|
installing from source requires a Rust toolchain (stable >= 1.91).
|
|
1262
1393
|
|
|
1263
|
-
[Unreleased]: https://github.com/ya-luotao/microsandbox-rb/compare/v0.
|
|
1394
|
+
[Unreleased]: https://github.com/ya-luotao/microsandbox-rb/compare/v0.17.1...HEAD
|
|
1395
|
+
[0.17.1]: https://github.com/ya-luotao/microsandbox-rb/compare/v0.17.0...v0.17.1
|
|
1396
|
+
[0.17.0]: https://github.com/ya-luotao/microsandbox-rb/compare/v0.16.0...v0.17.0
|
|
1397
|
+
[0.16.0]: https://github.com/ya-luotao/microsandbox-rb/compare/v0.15.0...v0.16.0
|
|
1398
|
+
[0.15.0]: https://github.com/ya-luotao/microsandbox-rb/compare/v0.14.0...v0.15.0
|
|
1264
1399
|
[0.14.0]: https://github.com/ya-luotao/microsandbox-rb/compare/v0.13.0...v0.14.0
|
|
1265
1400
|
[0.9.0]: https://github.com/ya-luotao/microsandbox-rb/compare/v0.8.2...v0.9.0
|
|
1266
1401
|
[0.8.2]: https://github.com/ya-luotao/microsandbox-rb/compare/v0.8.1...v0.8.2
|
data/Cargo.lock
CHANGED
|
@@ -169,9 +169,9 @@ dependencies = [
|
|
|
169
169
|
|
|
170
170
|
[[package]]
|
|
171
171
|
name = "anyhow"
|
|
172
|
-
version = "1.0.
|
|
172
|
+
version = "1.0.104"
|
|
173
173
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
174
|
-
checksum = "
|
|
174
|
+
checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470"
|
|
175
175
|
|
|
176
176
|
[[package]]
|
|
177
177
|
name = "argon2"
|
|
@@ -249,7 +249,7 @@ checksum = "b9552f96391c005e6ab449fa941420935e7e062489b12b8b1b08879b2163f5b5"
|
|
|
249
249
|
dependencies = [
|
|
250
250
|
"bytes",
|
|
251
251
|
"half",
|
|
252
|
-
"num-bigint",
|
|
252
|
+
"num-bigint 0.4.6",
|
|
253
253
|
"num-traits",
|
|
254
254
|
]
|
|
255
255
|
|
|
@@ -579,9 +579,9 @@ checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53"
|
|
|
579
579
|
|
|
580
580
|
[[package]]
|
|
581
581
|
name = "aws-lc-rs"
|
|
582
|
-
version = "1.
|
|
582
|
+
version = "1.18.1"
|
|
583
583
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
584
|
-
checksum = "
|
|
584
|
+
checksum = "b281d307588d634de920874890732659e2e7672f72b5e10e81badc1a8a83621e"
|
|
585
585
|
dependencies = [
|
|
586
586
|
"aws-lc-sys",
|
|
587
587
|
"untrusted 0.7.1",
|
|
@@ -590,14 +590,15 @@ dependencies = [
|
|
|
590
590
|
|
|
591
591
|
[[package]]
|
|
592
592
|
name = "aws-lc-sys"
|
|
593
|
-
version = "0.
|
|
593
|
+
version = "0.45.0"
|
|
594
594
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
595
|
-
checksum = "
|
|
595
|
+
checksum = "9bff6c3b54fad79a2e60b8102caf565819711497c1f5f092f49508e2f5c31b27"
|
|
596
596
|
dependencies = [
|
|
597
597
|
"cc",
|
|
598
598
|
"cmake",
|
|
599
599
|
"dunce",
|
|
600
600
|
"fs_extra",
|
|
601
|
+
"pkg-config",
|
|
601
602
|
]
|
|
602
603
|
|
|
603
604
|
[[package]]
|
|
@@ -643,7 +644,7 @@ checksum = "4d6867f1565b3aad85681f1015055b087fcfd840d6aeee6eee7f2da317603695"
|
|
|
643
644
|
dependencies = [
|
|
644
645
|
"autocfg",
|
|
645
646
|
"libm",
|
|
646
|
-
"num-bigint",
|
|
647
|
+
"num-bigint 0.4.6",
|
|
647
648
|
"num-integer",
|
|
648
649
|
"num-traits",
|
|
649
650
|
"serde",
|
|
@@ -1614,7 +1615,7 @@ dependencies = [
|
|
|
1614
1615
|
"asn1-rs",
|
|
1615
1616
|
"displaydoc",
|
|
1616
1617
|
"nom",
|
|
1617
|
-
"num-bigint",
|
|
1618
|
+
"num-bigint 0.4.6",
|
|
1618
1619
|
"num-traits",
|
|
1619
1620
|
"rusticata-macros",
|
|
1620
1621
|
]
|
|
@@ -1922,7 +1923,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
1922
1923
|
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
|
|
1923
1924
|
dependencies = [
|
|
1924
1925
|
"libc",
|
|
1925
|
-
"windows-sys 0.
|
|
1926
|
+
"windows-sys 0.52.0",
|
|
1926
1927
|
]
|
|
1927
1928
|
|
|
1928
1929
|
[[package]]
|
|
@@ -1937,11 +1938,10 @@ dependencies = [
|
|
|
1937
1938
|
|
|
1938
1939
|
[[package]]
|
|
1939
1940
|
name = "event-listener"
|
|
1940
|
-
version = "5.4.
|
|
1941
|
+
version = "5.4.2"
|
|
1941
1942
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1942
|
-
checksum = "
|
|
1943
|
+
checksum = "5a23add41df1562121a9393cb065eab5146a1242410f23a644851e90cfd669d2"
|
|
1943
1944
|
dependencies = [
|
|
1944
|
-
"concurrent-queue",
|
|
1945
1945
|
"parking",
|
|
1946
1946
|
"pin-project-lite",
|
|
1947
1947
|
]
|
|
@@ -2051,7 +2051,7 @@ checksum = "94e7099f6313ecacbe1256e8ff9d617b75d1bcb16a6fddef94866d225a01a14a"
|
|
|
2051
2051
|
dependencies = [
|
|
2052
2052
|
"io-lifetimes 2.0.4",
|
|
2053
2053
|
"rustix",
|
|
2054
|
-
"windows-sys 0.
|
|
2054
|
+
"windows-sys 0.52.0",
|
|
2055
2055
|
]
|
|
2056
2056
|
|
|
2057
2057
|
[[package]]
|
|
@@ -2300,9 +2300,9 @@ dependencies = [
|
|
|
2300
2300
|
|
|
2301
2301
|
[[package]]
|
|
2302
2302
|
name = "h2"
|
|
2303
|
-
version = "0.4.
|
|
2303
|
+
version = "0.4.16"
|
|
2304
2304
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2305
|
-
checksum = "
|
|
2305
|
+
checksum = "a9f37a958b41b3b19ee2707c06439c0e9e547e847223eb791ecb0cb821c65e27"
|
|
2306
2306
|
dependencies = [
|
|
2307
2307
|
"atomic-waker",
|
|
2308
2308
|
"bytes",
|
|
@@ -2851,18 +2851,6 @@ dependencies = [
|
|
|
2851
2851
|
"hybrid-array",
|
|
2852
2852
|
]
|
|
2853
2853
|
|
|
2854
|
-
[[package]]
|
|
2855
|
-
name = "internal-russh-num-bigint"
|
|
2856
|
-
version = "0.5.0"
|
|
2857
|
-
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2858
|
-
checksum = "ae8e22120c32fb4d19ec55fba35015f57095cd95a2e3b732e44457f5915b2ee8"
|
|
2859
|
-
dependencies = [
|
|
2860
|
-
"num-integer",
|
|
2861
|
-
"num-traits",
|
|
2862
|
-
"rand 0.10.2",
|
|
2863
|
-
"rand_core 0.10.1",
|
|
2864
|
-
]
|
|
2865
|
-
|
|
2866
2854
|
[[package]]
|
|
2867
2855
|
name = "io-extras"
|
|
2868
2856
|
version = "0.19.0"
|
|
@@ -2870,7 +2858,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
2870
2858
|
checksum = "20fd6de4ccfcc187e38bc21cfa543cb5a302cb86a8b114eb7f0bf0dc9f8ac00f"
|
|
2871
2859
|
dependencies = [
|
|
2872
2860
|
"io-lifetimes 3.0.1",
|
|
2873
|
-
"windows-sys 0.
|
|
2861
|
+
"windows-sys 0.52.0",
|
|
2874
2862
|
]
|
|
2875
2863
|
|
|
2876
2864
|
[[package]]
|
|
@@ -3672,7 +3660,7 @@ dependencies = [
|
|
|
3672
3660
|
|
|
3673
3661
|
[[package]]
|
|
3674
3662
|
name = "microsandbox_rb"
|
|
3675
|
-
version = "0.17.
|
|
3663
|
+
version = "0.17.1"
|
|
3676
3664
|
dependencies = [
|
|
3677
3665
|
"chrono",
|
|
3678
3666
|
"futures",
|
|
@@ -4033,7 +4021,7 @@ version = "0.4.3"
|
|
|
4033
4021
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
4034
4022
|
checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23"
|
|
4035
4023
|
dependencies = [
|
|
4036
|
-
"num-bigint",
|
|
4024
|
+
"num-bigint 0.4.6",
|
|
4037
4025
|
"num-complex",
|
|
4038
4026
|
"num-integer",
|
|
4039
4027
|
"num-iter",
|
|
@@ -4051,6 +4039,18 @@ dependencies = [
|
|
|
4051
4039
|
"num-traits",
|
|
4052
4040
|
]
|
|
4053
4041
|
|
|
4042
|
+
[[package]]
|
|
4043
|
+
name = "num-bigint"
|
|
4044
|
+
version = "0.5.1"
|
|
4045
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
4046
|
+
checksum = "93e7820bc0a80a0238e650327316f929ba18d5be054b647490a3a6a339f3e7c0"
|
|
4047
|
+
dependencies = [
|
|
4048
|
+
"num-integer",
|
|
4049
|
+
"num-traits",
|
|
4050
|
+
"rand 0.10.2",
|
|
4051
|
+
"rand_core 0.10.1",
|
|
4052
|
+
]
|
|
4053
|
+
|
|
4054
4054
|
[[package]]
|
|
4055
4055
|
name = "num-complex"
|
|
4056
4056
|
version = "0.4.6"
|
|
@@ -4092,7 +4092,7 @@ version = "0.4.2"
|
|
|
4092
4092
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
4093
4093
|
checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824"
|
|
4094
4094
|
dependencies = [
|
|
4095
|
-
"num-bigint",
|
|
4095
|
+
"num-bigint 0.4.6",
|
|
4096
4096
|
"num-integer",
|
|
4097
4097
|
"num-traits",
|
|
4098
4098
|
]
|
|
@@ -4733,7 +4733,7 @@ dependencies = [
|
|
|
4733
4733
|
"once_cell",
|
|
4734
4734
|
"socket2",
|
|
4735
4735
|
"tracing",
|
|
4736
|
-
"windows-sys 0.
|
|
4736
|
+
"windows-sys 0.52.0",
|
|
4737
4737
|
]
|
|
4738
4738
|
|
|
4739
4739
|
[[package]]
|
|
@@ -5106,9 +5106,9 @@ dependencies = [
|
|
|
5106
5106
|
|
|
5107
5107
|
[[package]]
|
|
5108
5108
|
name = "russh"
|
|
5109
|
-
version = "0.63.
|
|
5109
|
+
version = "0.63.3"
|
|
5110
5110
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
5111
|
-
checksum = "
|
|
5111
|
+
checksum = "036204edbd199552a5b3832f63c60dcdf395dc44c7f06b4af1c0e8139cc11bce"
|
|
5112
5112
|
dependencies = [
|
|
5113
5113
|
"aes 0.9.1",
|
|
5114
5114
|
"aws-lc-rs",
|
|
@@ -5137,13 +5137,12 @@ dependencies = [
|
|
|
5137
5137
|
"hex-literal",
|
|
5138
5138
|
"hmac 0.13.0",
|
|
5139
5139
|
"inout 0.2.2",
|
|
5140
|
-
"internal-russh-num-bigint",
|
|
5141
5140
|
"keccak",
|
|
5142
5141
|
"log",
|
|
5143
5142
|
"md5",
|
|
5144
5143
|
"ml-kem",
|
|
5145
5144
|
"module-lattice",
|
|
5146
|
-
"num-bigint",
|
|
5145
|
+
"num-bigint 0.5.1",
|
|
5147
5146
|
"p256",
|
|
5148
5147
|
"p384",
|
|
5149
5148
|
"p521",
|
|
@@ -5271,7 +5270,7 @@ dependencies = [
|
|
|
5271
5270
|
"errno",
|
|
5272
5271
|
"libc",
|
|
5273
5272
|
"linux-raw-sys",
|
|
5274
|
-
"windows-sys 0.
|
|
5273
|
+
"windows-sys 0.52.0",
|
|
5275
5274
|
]
|
|
5276
5275
|
|
|
5277
5276
|
[[package]]
|
|
@@ -5286,9 +5285,9 @@ dependencies = [
|
|
|
5286
5285
|
|
|
5287
5286
|
[[package]]
|
|
5288
5287
|
name = "rustls"
|
|
5289
|
-
version = "0.23.
|
|
5288
|
+
version = "0.23.45"
|
|
5290
5289
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
5291
|
-
checksum = "
|
|
5290
|
+
checksum = "0d41d731c7d2f962d1ccc364cec258de3c0e93b38c2fb3ba97ac74513048d634"
|
|
5292
5291
|
dependencies = [
|
|
5293
5292
|
"aws-lc-rs",
|
|
5294
5293
|
"log",
|
|
@@ -5340,7 +5339,7 @@ dependencies = [
|
|
|
5340
5339
|
"security-framework 3.7.0",
|
|
5341
5340
|
"security-framework-sys",
|
|
5342
5341
|
"webpki-root-certs",
|
|
5343
|
-
"windows-sys 0.
|
|
5342
|
+
"windows-sys 0.52.0",
|
|
5344
5343
|
]
|
|
5345
5344
|
|
|
5346
5345
|
[[package]]
|
|
@@ -5351,9 +5350,9 @@ checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f"
|
|
|
5351
5350
|
|
|
5352
5351
|
[[package]]
|
|
5353
5352
|
name = "rustls-webpki"
|
|
5354
|
-
version = "0.103.
|
|
5353
|
+
version = "0.103.15"
|
|
5355
5354
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
5356
|
-
checksum = "
|
|
5355
|
+
checksum = "f3c3cf1d8b1e7d4927e2d154c3fcb02979afb9939629c62cd9048d4f07b60ac2"
|
|
5357
5356
|
dependencies = [
|
|
5358
5357
|
"aws-lc-rs",
|
|
5359
5358
|
"ring",
|
|
@@ -6414,7 +6413,7 @@ dependencies = [
|
|
|
6414
6413
|
"getrandom 0.4.2",
|
|
6415
6414
|
"once_cell",
|
|
6416
6415
|
"rustix",
|
|
6417
|
-
"windows-sys 0.
|
|
6416
|
+
"windows-sys 0.52.0",
|
|
6418
6417
|
]
|
|
6419
6418
|
|
|
6420
6419
|
[[package]]
|
|
@@ -7211,7 +7210,7 @@ version = "0.1.11"
|
|
|
7211
7210
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
7212
7211
|
checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
|
|
7213
7212
|
dependencies = [
|
|
7214
|
-
"windows-sys 0.
|
|
7213
|
+
"windows-sys 0.52.0",
|
|
7215
7214
|
]
|
|
7216
7215
|
|
|
7217
7216
|
[[package]]
|
|
@@ -7522,7 +7521,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
7522
7521
|
checksum = "3f3fd376f71958b862e7afb20cfe5a22830e1963462f3a17f49d82a6c1d1f42d"
|
|
7523
7522
|
dependencies = [
|
|
7524
7523
|
"bitflags 2.13.0",
|
|
7525
|
-
"windows-sys 0.
|
|
7524
|
+
"windows-sys 0.52.0",
|
|
7526
7525
|
]
|
|
7527
7526
|
|
|
7528
7527
|
[[package]]
|
data/DESIGN.md
CHANGED
|
@@ -211,7 +211,7 @@ git. The override must never be committed — it would break container builds.
|
|
|
211
211
|
The job is gated to `workflow_dispatch` and **not** auto-published on tags:
|
|
212
212
|
since CI can't boot a microVM to prove a built gem actually works, gems are
|
|
213
213
|
promoted to the publish path manually after per-platform validation. Published
|
|
214
|
-
to RubyGems via Trusted Publishing (OIDC). See [
|
|
214
|
+
to RubyGems via Trusted Publishing (OIDC). See [docs/releasing.md](docs/releasing.md).
|
|
215
215
|
* **Runtime binaries gems** (`microsandbox-rb-binaries`): a distinct artifact
|
|
216
216
|
from the precompiled *extension* gems above — no Ruby code beyond a small
|
|
217
217
|
locator module, just the verified upstream `msb` + `libkrunfw` for one
|
|
@@ -232,42 +232,11 @@ git. The override must never be committed — it would break container builds.
|
|
|
232
232
|
|
|
233
233
|
## Implemented surface (v1) vs roadmap
|
|
234
234
|
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
`wait_until_stopped` (→ `SandboxStopResult`) controls — the v0.5.8 live-vs-handle
|
|
241
|
-
split that mirrors the official SDKs), backend routing (`set_default_backend`/
|
|
242
|
-
`with_backend`/`default_backend_kind`), block form), `exec`/`shell` with collected `ExecOutput`,
|
|
243
|
-
**streaming** `exec_stream`/`shell_stream` (`ExecHandle` is `Enumerable` over
|
|
244
|
-
`ExecEvent`s, with stdin sink + signal/kill/resize), the full guest filesystem
|
|
245
|
-
API (`fs.read`/`write`/`list`/`mkdir`/`remove`/`stat`/…), `metrics`,
|
|
246
|
-
`Microsandbox.all_sandbox_metrics`, **streaming `metrics_stream`/`log_stream`**
|
|
247
|
-
(`Enumerable` over `Metrics`/`LogEntry`), `logs`,
|
|
248
|
-
**OCI image-cache management** (`Image.get`/`list`/`inspect`/`remove`/`prune`),
|
|
249
|
-
**named volumes** (`Volume.create`/`get`/`list`/`remove` + `volumes:` mounts),
|
|
250
|
-
**snapshots** (`Snapshot.create`/`get`/`list`/`remove`/`verify`/`export`/`import`
|
|
251
|
-
+ `from_snapshot:` boot), **rootfs patches** (`Patch.text`/`file`/`append`/
|
|
252
|
-
`copy_file`/`copy_dir`/`symlink`/`mkdir`/`remove` via `create(patches:)`),
|
|
253
|
-
**custom per-rule network policies** (`NetworkPolicy`/`Rule`/`Destination` —
|
|
254
|
-
CIDR/IP/domain/suffix/group allow-deny rules with per-direction defaults and
|
|
255
|
-
bulk domain denials, alongside the presets), interactive **`attach`/
|
|
256
|
-
`attach_shell`** (host-TTY coupled — raw mode + SIGWINCH), **SSH**
|
|
257
|
-
(`Sandbox#ssh` → `SshClient`/`SftpClient`/`SshServer`), the **raw agent client**
|
|
258
|
-
(`AgentClient` → `AgentStream`/`AgentFrame`),
|
|
259
|
-
`version`/`install`/`installed?`/`ensure_runtime!`, **registry auth**
|
|
260
|
-
(`registry_auth`/`registry_insecure`/`registry_ca_certs` on `create`, for
|
|
261
|
-
private/authenticated registries), and the typed error hierarchy.
|
|
262
|
-
|
|
263
|
-
Create options now cover `image`, `cpus`, `memory`, `oci_upper_size`, `env`,
|
|
264
|
-
`workdir`, `shell`, `user`, `hostname`, `labels`, `scripts`, `entrypoint`,
|
|
265
|
-
`ports`/`ports_udp`, `volumes`, `patches`, `network` (policy presets
|
|
266
|
-
`public_only`/`none`/`allow_all`/`non_local`, or a custom `NetworkPolicy`/Hash),
|
|
267
|
-
`log_level`, `quiet_logs`, `security`, `max_duration`, `idle_timeout`, `rlimits`,
|
|
268
|
-
`pull_policy`, `registry_auth`/`registry_insecure`/`registry_ca_certs`,
|
|
269
|
-
`secrets`, `from_snapshot`, `detached`, and `replace`/`replace_with_timeout`.
|
|
270
|
-
`exec`/`shell` add per-call `rlimits`.
|
|
235
|
+
The authoritative, up-to-date scope statement — every implemented API family,
|
|
236
|
+
the full create-option list, and the handful of upstream knobs not yet exposed —
|
|
237
|
+
lives in [docs/surface.md](docs/surface.md), with the typed counterpart in
|
|
238
|
+
`sig/microsandbox.rbs`. It is maintained there (and only there) so this file
|
|
239
|
+
and the README cannot drift from each other.
|
|
271
240
|
|
|
272
241
|
## Verification
|
|
273
242
|
|