You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
reference-value comparison
Aggregator runtime now goes through the dstack SDK for KMS keys and TDX
quotes against /var/run/dstack.sock, so the launcher's docs/examples
need to (a) match the entry-script name workloads adopt and (b) make
the dstack agent socket visible inside the workload container. The
verifier-side review also asked for an explicit reference-values vs
attestation-measurements comparison.
Changes:
- bin/trusted-workload-launcher: rename default entry script to
entrypoint.sh and accept a new optional ENTRYPOINT_SCRIPT key (relative
path, validated against absolute paths and '..'). Default mode still
runs `bash <entry>` with no exec-bit requirement. Updated usage/help
text, top comments, parse_config comment, and the `mode:` / `entry:`
log lines.
- tests/run-tests.sh: fixture's c3 now adds sub/entrypoint.sh and a
sub/alt-entry.sh; added entrypoint_script_override and
entrypoint_script_escape_rejected; updated default-mode marker
assertions. 21/21 PASS.
- examples/web-app.conf: now describes entrypoint.sh as the convention
and documents ENTRYPOINT_SCRIPT as an optional override.
- README.md (example): same convention; intro now lists
`REPO_SUBDIR` / `ENTRYPOINT_SCRIPT` as the two path-selection trust-
bearing fields. Added a `Mounting the dstack socket` subsection and
added `/var/run/dstack.sock:/var/run/dstack.sock` to every compose
snippet (local dev, production option A, and a note for option B).
Workload-specific endpoint envs (e.g. DSTACK_LLM_ROUTER_DSTACK_ENDPOINT)
are explicitly directed to CHILD_ENV_FILE, not to launcher config.
- VERIFY.md: added a `Reference values to compare` block under step 2
with the concrete extraction shell snippet for `mrtd`, `rtmr0..2`,
`compose-hash`, `os-image-hash`, `app-id`, and the launcher image
digest inside the attested compose. Updated the quick-path step 1 to
state explicitly that this comparison is what makes the attestation
useful. Mentions of `REPO_SUBDIR` now also list `ENTRYPOINT_SCRIPT`.
- README.md (root): unchanged in this commit (still the one-liner from
b0478b6).
No Rust-specific logic added to the launcher; it remains a build-system-
agnostic bash launcher. Removed nothing about ALLOW_INSECURE /
DSTACK_LLM_ROUTER_DSTACK_QUOTER_URL because neither was ever referenced
here (confirmed via grep).
The launcher is a single bash script (`bin/trusted-workload-launcher`). It
116
116
depends only on `bash`, `git`, and POSIX coreutils. It is **not** sourced
117
117
and **does not source** the config. In default mode, the only bytes it
118
-
executes are those of the workload repo's `tee-launch.sh` at the pinned
118
+
executes are those of the workload repo's `entrypoint.sh` at the pinned
119
119
`COMMIT_SHA`. In advanced mode (see below), it additionally executes the
120
120
configured `INSTALL_CMD` / `RUN_CMD` via `bash -c`.
121
121
@@ -139,36 +139,37 @@ no shell expansion in the parse step.
139
139
| Key | Meaning |
140
140
| --- | --- |
141
141
|`REPO_SUBDIR`| Relative directory inside the repo to `cd` into before running the entry point or `RUN_CMD`. Must not be absolute and must not contain `..`. |
142
-
|`CHILD_ENV_FILE`| Path to a separate env file. Each `KEY=VALUE` line is `export`ed into the environment seen by `tee-launch.sh` / `INSTALL_CMD` / `RUN_CMD`. The file is parsed line-by-line just like the main config (not sourced). |
143
-
|`RUN_CMD`|**Advanced.** Shell command to exec instead of the default `tee-launch.sh`. Use only when the workload repo cannot host its own entry script. |
142
+
|`ENTRYPOINT_SCRIPT`| Relative path (inside `REPO_SUBDIR` or repo root) to the bash entry script for default mode. Defaults to `entrypoint.sh`. Must not be absolute and must not contain `..`. Trust-bearing in default mode — like `REPO_SUBDIR`, it selects which script runs. |
143
+
|`CHILD_ENV_FILE`| Path to a separate env file. Each `KEY=VALUE` line is `export`ed into the environment seen by `entrypoint.sh` / `INSTALL_CMD` / `RUN_CMD`. The file is parsed line-by-line just like the main config (not sourced). |
144
+
|`RUN_CMD`|**Advanced.** Shell command to exec instead of the default `entrypoint.sh`. Use only when the workload repo cannot host its own entry script. |
144
145
|`INSTALL_CMD`|**Advanced.** Shell command to run before `RUN_CMD`. Only valid alongside `RUN_CMD`. |
145
146
146
-
### Default mode: `tee-launch.sh` in the workload repo
147
+
### Default mode: `entrypoint.sh` in the workload repo
147
148
148
149
Recommended for every workload you control. The workload repo provides a
149
-
bash script at the fixed path `tee-launch.sh` (at the repo root, or at
150
-
`REPO_SUBDIR/tee-launch.sh` if `REPO_SUBDIR` is set). The launcher runs it
151
-
with `bash tee-launch.sh` after checkout — **no executable bit is
150
+
bash script at the fixed path `entrypoint.sh` (at the repo root, or at
151
+
`REPO_SUBDIR/entrypoint.sh` if `REPO_SUBDIR` is set). The launcher runs it
152
+
with `bash entrypoint.sh` after checkout — **no executable bit is
152
153
required**. All install/build/run logic lives in that script.
153
154
154
155
In this mode the trust-bearing config in the launcher's config file is
155
156
`REPO_URL` + `COMMIT_SHA` (and `REPO_SUBDIR` if used, since it selects
156
-
which `tee-launch.sh` runs). `WORK_DIR` is local plumbing — it names
157
+
which `entrypoint.sh` runs). `WORK_DIR` is local plumbing — it names
157
158
where on the in-TEE filesystem to keep the checkout — and is not
158
159
trust-bearing. `CHILD_ENV_FILE` (and any env it provides) can change the
159
160
script's runtime behavior but does not change the bytes that run; if the
160
161
deployment uses it, audit it the same way you audit any other runtime
161
162
configuration the deployment ships with.
162
163
163
-
Because `tee-launch.sh`'s bytes are pinned by `COMMIT_SHA` and stored in
164
+
Because `entrypoint.sh`'s bytes are pinned by `COMMIT_SHA` and stored in
164
165
the workload repo, they are covered by source provenance of the pinned
165
166
commit. The verifier does not need to extract or audit any command string
0 commit comments