Files
wehub-resource-sync e0e362d700
SDK Tests / SDK CI (push) Blocked by required conditions
SDK Tests / changes (push) Successful in 2m29s
Real E2E Tests / changes (push) Successful in 2m29s
SDK Tests / Python SDK Tests (sandbox) (push) Waiting to run
SDK Tests / CLI Quality (push) Waiting to run
SDK Tests / CLI Tests (push) Waiting to run
SDK Tests / Python SDK Quality (code-interpreter) (push) Waiting to run
SDK Tests / Python SDK Quality (sandbox) (push) Waiting to run
SDK Tests / Python SDK Tests (code-interpreter) (push) Waiting to run
SDK Tests / JavaScript SDK Quality And Tests (code-interpreter) (push) Waiting to run
SDK Tests / JavaScript SDK Quality And Tests (sandbox) (push) Waiting to run
SDK Tests / Kotlin SDK Quality And Tests (sandbox) (push) Waiting to run
SDK Tests / Kotlin SDK Quality And Tests (code-interpreter) (push) Waiting to run
SDK Tests / C# SDK Quality And Tests (code-interpreter) (push) Waiting to run
SDK Tests / C# SDK Quality And Tests (sandbox) (push) Waiting to run
SDK Tests / Go SDK Quality And Tests (push) Waiting to run
Deploy Docs Pages / build (push) Has been cancelled
Deploy Docs Pages / deploy (push) Has been cancelled
Real E2E Tests / JavaScript E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / Python E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / Java E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / C# E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / Go E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / Real E2E CI (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:39:33 +08:00

190 lines
6.4 KiB
Markdown

---
title: Execd Path Migration
description: Migration guide for the execd install path change from /opt/opensandbox/bin/ to /opt/opensandbox/.
---
# Execd Path Migration Guide
PR: [#1014](https://github.com/opensandbox-group/OpenSandbox/pull/1014)
## Background
OpenSandbox previously installed execd and bootstrap.sh to `/opt/opensandbox/bin/`, creating
unnecessary nesting. The execd image already places these artifacts at the root:
```
/execd
/bootstrap.sh
```
While bootstrap.sh defaults to `EXECD=/opt/opensandbox/execd` (no `bin/`), the Kubernetes
provider and Pool CR templates historically injected files into a `bin/` subdirectory. This
PR flattens the layout:
| Before | After |
|---|---|
| `/opt/opensandbox/bin/execd` | `/opt/opensandbox/execd` |
| `/opt/opensandbox/bin/bootstrap.sh` | `/opt/opensandbox/bootstrap.sh` |
| `/opt/opensandbox/bin/task-executor` | `/opt/opensandbox/task-executor` |
Additionally, the Docker runtime now uses the **full** `bootstrap.sh` from the execd image
instead of a minimal 15-line inline-generated shim. This gives Docker sandboxes the same
capabilities as Kubernetes: MITM CA trust setup, SIGTERM forwarding, pre-script sourcing,
and chained commands.
## Who is affected
| User profile | Impact |
|---|---|
| **code-interpreter image `<=v1.0.2`** | **Must upgrade to `v1.1.0`** — emptyDir at `/opt/opensandbox` shadows old scripts under `/opt/opensandbox/` |
| **Pool CR with custom templates** | Must update execd init container paths and volume mount |
| **Custom execd images** | Must now include `/bootstrap.sh` alongside `/execd` |
| **Docker runtime users (default)** | No manual action — bootstrap.sh is auto-installed |
## Migration steps
### 1. code-interpreter image
**Must upgrade the image from `v1.0.2` to `v1.1.0`.**
In code-interpreter `v1.0.2`, the entrypoint scripts (`code-interpreter.sh`,
`code-interpreter-env.sh`) live directly under `/opt/opensandbox/`. Before this PR,
the emptyDir volume was mounted at `/opt/opensandbox/bin/`, shadowing only that
subdirectory. Now the emptyDir mounts at `/opt/opensandbox/`, shadowing the entire
directory — including those scripts. The pod starts but cannot find its own entrypoint.
[PR #1012](https://github.com/opensandbox-group/OpenSandbox/pull/1012) moved all
code-interpreter scripts from `/opt/opensandbox/` to `/opt/code-interpreter/`,
avoiding the conflict. Version `v1.1.0` is the first image with that change.
```yaml
# In your Pool CR or sandbox creation request:
image: sandbox-registry.cn-zhangjiakou.cr.aliyuncs.com/opensandbox/code-interpreter:v1.1.0
```
The Python SDK (`opensandbox-code-interpreter`) does not require an upgrade — it
communicates with execd over the network and does not reference filesystem paths.
### 2. Pool CR template
If you maintain a custom Pool CR that defines the execd init container, update it:
```yaml
# Before
initContainers:
- name: execd-installer
image: opensandbox/execd:latest
args:
- |
cp ./execd /opt/opensandbox/bin/execd &&
cp ./bootstrap.sh /opt/opensandbox/bin/bootstrap.sh &&
chmod +x /opt/opensandbox/bin/execd &&
chmod +x /opt/opensandbox/bin/bootstrap.sh
volumeMounts:
- name: opensandbox-bin
mountPath: /opt/opensandbox/bin
# After
initContainers:
- name: execd-installer
image: opensandbox/execd:latest
args:
- |
cp ./execd /opt/opensandbox/execd &&
cp ./bootstrap.sh /opt/opensandbox/bootstrap.sh &&
chmod +x /opt/opensandbox/execd &&
chmod +x /opt/opensandbox/bootstrap.sh
volumeMounts:
- name: opensandbox-bin
mountPath: /opt/opensandbox
```
The same update applies to the task-executor init container if used:
```yaml
# Before
cp /workspace/server /opt/opensandbox/bin/task-executor && chmod +x /opt/opensandbox/bin/task-executor
# After
cp /workspace/server /opt/opensandbox/task-executor && chmod +x /opt/opensandbox/task-executor
```
And the main container's env vars and volume mount:
```yaml
# Before
- name: EXECD
value: /opt/opensandbox/bin/execd
volumeMounts:
- name: opensandbox-bin
mountPath: /opt/opensandbox/bin
# After
- name: EXECD
value: /opt/opensandbox/execd
volumeMounts:
- name: opensandbox-bin
mountPath: /opt/opensandbox
```
### 3. Custom execd images (Docker)
If you override `[runtime].execd_image` with a custom image, that image must now
contain `/bootstrap.sh` **in addition to** `/execd`. Previously only `/execd` was
required because the Docker runtime generated a minimal inline bootstrap script.
If your custom execd image is built from a Dockerfile that only copies the execd
binary, add bootstrap.sh:
```dockerfile
COPY bootstrap.sh /bootstrap.sh
```
The official `opensandbox/execd` image already includes both files and requires
no change.
### 4. Custom entrypoint scripts
If you hardcode `/opt/opensandbox/bin/execd` or `/opt/opensandbox/bin/bootstrap.sh`
in entrypoint scripts or build pipelines, update those references to `/opt/opensandbox/`.
## Compatibility
### Old paths are not available
After this change, the paths `/opt/opensandbox/bin/execd` and
`/opt/opensandbox/bin/bootstrap.sh` no longer exist. Any script, tool, or
template referencing them will fail with "file not found".
### How failures manifest
| Scenario | Failure mode |
|---|---|
| Old code-interpreter image (`<=v1.0.2`) | emptyDir at `/opt/opensandbox` shadows `code-interpreter.sh`; pod starts but entrypoint not found |
| Old Pool CR template | execd init container succeeds (it copies to its own mount), but main container cannot find `/opt/opensandbox/bin/bootstrap.sh` |
| Old custom execd image (no bootstrap.sh) | Docker sandbox creation fails with "bootstrap.sh not found in execd image cache" |
### Verification
After migration, confirm the sandbox starts successfully:
```bash
# In a running sandbox:
ls /opt/opensandbox/execd /opt/opensandbox/bootstrap.sh
# Both should exist. Verify /opt/opensandbox/bin/ does NOT exist:
test -d /opt/opensandbox/bin && echo "STALE PATH EXISTS" || echo "OK"
```
## Release notes
For release note authors: include a summary that links to this document.
```markdown
### Breaking: execd install path flattened
execd and bootstrap.sh are now installed to `/opt/opensandbox/` instead of
`/opt/opensandbox/bin/`. code-interpreter image users must upgrade to `>=v1.1.0`.
Custom Pool CR templates and custom execd images require updates.
See [execd Path Migration Guide](/reference/execd-path-migration) for full details.
```