快速开始
在一台 Linux 机器上装好 OpenDsec 的全部组件,并用 Python SDK、E2B SDK 或命令行创建 sandbox。在全新的 8 核虚拟机上,整个过程约 11 分钟,大部分时间在编译。
准备
- Linux x86_64,systemd,cgroup v2,内核 5.15 以上。完整验证过的是 Ubuntu 24.04。
- 有
/dev/kvm时同时装好 microVM,没有就只装容器。microVM 需要裸金属机器,或开启了嵌套虚拟化的云主机。 - 以 root 执行下面的每一步:安装脚本要装系统服务,生成的文件放在
/root/opendsec-ops。
1. 安装依赖
sh
sudo -i
apt update && apt install -y make git python3-venv
curl -fsSL https://go.dev/dl/go1.27.3.linux-amd64.tar.gz | tar -C /usr/local -xz2. 安装 OpenDsec
sh
git clone https://github.com/kernflux/opendsec
cd opendsec
deploy/quickstart.sh脚本会:
- 检查机器,编译程序,下载 Firecracker 和 guest 内核(按
deploy/deps.lock校验); - 以 systemd 服务装好 IAM、watcher、apiserver、edge 和 E2B 网关;
- 导入
python:3.12镜像,创建项目root/demo和它的调用方; - 各跑一个容器和 microVM sandbox 做检查。
其他选项
--no-microvm:只装容器。--kernel FILE:用现成的 guest 内核,不下载。--build-kernel:自己编译 guest 内核。- 机器不能访问外网时,用离线安装包。
3. 创建 sandbox
先加载调用方的环境变量,再装 SDK:
sh
. /root/opendsec-ops/demo.env
python3 -m venv .venv
.venv/bin/pip install ./sdk/python
.venv/bin/python sdk/python/examples/quickstart.pydemo.env 里有调用方的地址、token 和 CA,也设好了 E2B SDK 需要的三个变量。下面三种方式任选:
python
import asyncio
from opendsec import DSecClient, DSecRunArgs
async def main():
# 读取 OPENDSEC_ADDR、OPENDSEC_TOKEN 等环境变量
async with DSecClient() as client:
sb = await client.run_sandbox(DSecRunArgs(
backend="microvm", image="root/py:3.12",
cpu_cores_limit=1, memory_limit_mb=1024))
try:
r = await sb.run_shell("python3 -c 'print(6*7)'")
print(r.stdout)
# 4 个副本,连同内存
forks = await sb.fork(count=4)
for f in forks:
await f.stop()
finally:
await sb.stop()
asyncio.run(main())python
# pip install e2b
# E2B_API_URL、E2B_SANDBOX_URL、E2B_API_KEY 已由 demo.env 设置
from e2b import Sandbox
sbx = Sandbox.create()
print(sbx.commands.run("uname -r").stdout)
# microVM 上,快照连同内存
snap = sbx.create_snapshot()
copy = Sandbox.create(snap.snapshot_id)
copy.kill()
sbx.kill()sh
. /root/opendsec-ops/env # 管理员环境
opendsecctl status
ID=$(opendsecctl sandbox create -backend microvm \
-image root/py:3.12 | grep -m1 '"id"' | cut -d'"' -f4)
opendsecctl exec "$ID" python3 -c 'print(6*7)'
opendsecctl sandbox stop "$ID"4. 卸载
sh
deploy/quickstart.sh --uninstall