oakctl 工具
oakctl 是一个命令行工具,允许您与 OAK4 相机进行交互。它可用于创建、部署和管理正在运行 oak-agent 服务且位于本地网络上的应用程序和设备。
oak-agent 已预装在 OAK4 设备上(它已集成到 Luxonis OS 中),因此您可以立即开始使用 oakctl。安装
Linux/MacOS
在 64 位系统上,运行:
Command Line
1bash -c "$(curl -fsSL https://oakctl-releases.luxonis.com/oakctl-installer.sh)"更新
oakctl 工具:Command Line
1oakctl self-updateWindows 更新问题
如果您在 Windows 上更新 oakctl 版本时遇到问题,请在此处下载安装程序:此处。
USB 网络共享
版本说明
USB 网络共享需要
oakctl v0.22.0 和 Luxonis OS 1.32.0 或更新版本。oakctl usbd 将主机计算机的互联网连接共享给设备。 这对于 oakctl app run、oakctl app build、使用 hub、更新设备操作系统以及任何其他需要互联网连接的操作等工作流程非常有用。启用后,oakctl-usbd 后台服务会监视支持的 OAK USB 以太网接口,并自动配置主机端网络,包括接口寻址、IP 转发和 NAT。在 Linux 上,它还会安装一个 udev 规则,以防止 NetworkManager 和 systemd-networkd 控制 OAK4 USB 以太网接口。oakctl usbd 是选择加入的,默认禁用。启用 oakctl usbd
Command Line
1oakctl usbd enableoakctl 可能会提示您输入管理员或 root 访问权限。您可以检查服务当前是否已启用:Command Line
1oakctl usbd status禁用 oakctl usbd
Command Line
1oakctl usbd disable用法
连接到设备
Command Line
1oakctl connectCommand Line
1oakctl connect 10.0.1.24--with-password 标志存储设备的密码。这将防止您在每次会话过期时都输入密码。查找设备
oakctl 允许您与安装了 oak-agent 的设备进行交互。您可以使用以下命令列出所有可用设备(在您的网络中找到):Command Line
1oakctl list
2+---+---------------+---------------+------------+----------------+---------------+-------+
3| # | Serial Number | Device | Connection | OS | Agent Version | Setup |
4+=========================================================================================+
5| 1 | 1623452492 | Luxonis, Inc. | 10.0.1.24 | OS RVC4 1.18.0 | 0.13.7 | OK |
6| | | OAK4-D R7 | | | | |
7+---+---------------+---------------+------------+----------------+---------------+-------+应用开发
Command Line
1oakctl app run /app/path/to/sourceoakctl app run 使用提供的应用程序目录中的 oakapp.toml。 使用 --oakapp-file 选择一个备用配置文件(例如 oakapp.dev.toml 或 oakapp.prod.toml),前提是该文件位于同一应用程序目录树内。可选标志:
| 标志 | 描述 |
|---|---|
-b, --detach | 在分离模式下运行应用程序。您可以使用 oakctl app stop <APP_ID> 停止它。 |
-d, --device [<DEVICE>] | 使用 IP、IP:PORT、索引或 oakctl list 中的序列号指定设备。 |
-i, --invalidate | 使缓存无效并强制重新构建。 |
-e, --env <KEY=VALUE> | 将运行时环境变量导出到应用程序(可以多次提供)。 |
--env-file <FILE> | 从 .env 文件导出运行时环境变量。 |
--oakapp-file [<PATH>] | 使用提供的应用程序目录树内的备用 oakapp.toml 文件(例如开发/生产变体)。 |
--preserve-line-endings | 在上传文件到设备之前禁用自动 CRLF 到 LF 的转换。 |
示例应用
oakapp.toml 文件:Command Line
1git clone https://github.com/luxonis/oak-examples.git
2cd oak-examples
3# 运行一个应用
4oakctl app run ./neural-networks/pose-estimation/human-pose # 或其他示例环境变量
-e, --env 标志或 --env-file 标志将环境变量传递给应用。这些变量将在应用的运行时环境中可用,可用于配置应用而无需更改代码。Command Line
1oakctl app run ./app/path --env KEY1=VALUE1 --env KEY2=VALUE2build_env 字段在 oakapp.toml 文件中设置这些变量,或在构建时使用 --build-arg 标志传递它们:Command Line
1oakctl app build ./app/path --build-arg KEY1=VALUE1 --build-arg KEY2=VALUE| 变量 | 描述 |
|---|---|
OAKAGENT_APP_ID | 唯一的应用 ID。 |
OAKAGENT_CONTAINER_ID | 容器 ID(如果应用已更新,可能与应用 ID 不同)。 |
OAKAGENT_APP_IDENTIFIER | 来自 oakapp.toml 的应用标识符。 |
OAKAGENT_APP_VERSION | 来自 oakapp.toml 的应用版本。 |
DEPTHAI_ZOO_MODELS_PATH | DepthAI Zoo 模型目录的路径;根据 oakapp.toml 中的 depthai_models 字段设置;建议不要手动修改。 |
DEPTHAI_ZOO_CACHE_PATH | DepthAI Zoo 缓存目录的路径;用于缓存下载的模型;建议不要手动修改。 |
DEPTHAI_ZOO_INTERNET_CHECK | 启用模型下载的互联网连接检查;根据 oakapp.toml 中的 depthai_models 字段设置;建议不要手动修改。 |
DEPTHAI_DEVICE_NAME_LIST | 在所有 RVC4 设备上设置为 127.0.0.1,以确保独立应用仅使用其正在运行的设备,即使网络上有多个设备。 |
OAKAPP_STATIC_FRONTEND_PATH | 应用静态前端文件的路径。 |
OAKAPP_STATIC_FRONTEND_PORT | 用于提供静态前端文件的端口。它从 9000-9128 的范围内设置,以避免与代理或应用程序使用的端口冲突。 |
OAKAGENT_STORAGE_APP | 应用特定的持久存储路径。 |
OAKAGENT_STORAGE_SHARED | 可跨具有相同标识符的应用访问的共享存储路径。 |
OAKAGENT_STORAGE_GLOBAL | 设备上的全局存储路径。 |
持久存储
持久存储路径用于存储应在应用重启和更新后保留的数据。这些路径会挂载到应用的容器中。您可以使用
oakapp.toml 配置(storage_dir_name)选择容器中存储的目标目录名称。OAKAGENT_STORAGE_APP是每个应用独有的存储路径,不与其他应用共享。它适用于存储不应被其他应用访问的应用特定数据。OAKAGENT_STORAGE_SHARED是所有具有相同标识符的应用之间共享的存储路径。它适用于存储应被不同应用实例访问的数据。OAKAGENT_STORAGE_GLOBAL是一个全局存储路径,不与任何特定应用绑定。它适用于存储无论安装或运行哪些应用都应可访问的数据。
应用管理
-d, --device <DEVICE>,用于指定要执行命令的设备(oakctl list 中的 IP 地址或索引)。列出已安装的应用
com.luxonis.default)。Command Line
1$ oakctl app list
2+---+--------+---------------------------+---------+-------------------+
3| E | App Id | Identifier | Status | Frontend URL |
4+====================================================================================================+
5| * | f8da5 | com.luxonis.default:1.3.8 | running | 10.0.1.24:9000 |
6+---+--------+---------------------------+---------+-------------------+E)中的星号表示该应用已启用。任何应用都可能处于以下状态之一:installing(安装中)、building(构建中)、ready(就绪)、starting(启动中)、running(运行中)、 stopping(停止中)、stopped(已停止)、deleting(删除中)、deleted(已删除)、unknown(未知)。Ready 表示应用已安装并准备运行,但自代理启动以来尚未启动;而 stopped 表示应用已安装但未运行,已被用户停止。注意
为提高可读性,应用 ID 在列表中已被截断。如果存在多个具有相同前缀的应用,截断长度会增加,直到所有应用 ID 都唯一。您也可以使用
--long 标志在列表中显示完整的应用 ID。所有应用控制命令都接受完整和截断的应用 ID,只要它们是唯一的。应用控制流
start、stop 和 delete。首先,我们来启动应用:Command Line
1$ oakctl app start 612a745c-8d68-4264-a3d6-d06d14275ef5
2Starting app 612a745c-8d68-4264-a3d6-d06d14275ef5 ...
3 App has been started!Command Line
1$ oakctl app start 612a745cCommand Line
1$ oakctl app logs <app-id>
2Reading logs ...
3 Press Ctrl+C to stop reading logs.
4 App output:
5 [2025-02-12T14:37:54Z] Hello cli 1 / Wed Feb 12 14:37:54 UTC 2025-n 标志指定要读取的先前行数:Command Line
1oakctl app logs <app-id> -n 10Command Line
1oakctl app logs <app-id> --no-followCommand Line
1$ oakctl app stop 612a745c-8d68-4264-a3d6-d06d14275ef5
2Stopping app 612a745c-8d68-4264-a3d6-d06d14275ef5 ...
3 App has been stopped!Command Line
1$ oakctl app delete 612a745c-8d68-4264-a3d6-d06d14275ef5
2Deleting app 612a745c-8d68-4264-a3d6-d06d14275ef5 ...
3 App has been deleted!Command Line
1oakctl app enable <app-id>disable 命令禁用该应用:Command Line
1oakctl app disable <app-id>exec 命令:Command Line
1oakctl app exec <app-id> -i /bin/bash注意
在容器内修改文件或保存数据时要小心,因为容器停止或移除时更改可能会丢失。更好的方法是使用挂载将主机设备上的持久文件夹挂载到容器中(请参阅
oakapp.toml 配置)或由 OAK 代理管理的持久存储(请参阅 OAKAGENT_STORAGE_APP、OAKAGENT_STORAGE_SHARED、OAKAGENT_STORAGE_GLOBAL 环境变量)。安装应用
--enable=false 或 --keep-others 标志来修改此行为。应用安装通过以下命令完成:Command Line
1$ oakctl app install com-example-emotion_recognition_1-0-1.oakapp
2Sending data to agent ...
3 Data sent successfully!
4
5✔ Oakapp package built successfully.
6Installed app has ID: ddb8a884-d9e1-4779-a88b-c30d5d1e265f
7
8Start the app: oakctl app start ddb8a884-d9e1-4779-a88b-c30d5d1e265f*.oakapp 文件、Hub(通过标识符)或 URL 安装。如果您想从 Hub 安装应用,请执行以下操作:Command Line
1# Install app by identifier
2oakctl app install -i com.example.appCommand Line
1# Install app by URL
2oakctl app install -u https://example.com/app.oakapp更新应用
oakctl app install 命令执行应用更新。默认情况下,oakctl app install 会尝试更新具有相同标识符的现有应用。使用 --force-new 标志安装新实例而不是更新(这对于自托管的 oak-agent 很重要;Luxonis OS 不允许同时运行多个 DepthAI 应用)。如果多个应用共享相同的标识符,请使用 --update <APP_ID> 标志指定要更新哪个应用。更新过程遵循以下步骤:- 新的应用版本将从 Hub、URL 或本地
*.oakapp文件(取决于源:-i、-u或文件路径)下载。在此步骤期间,当前版本将保持运行。 - 新版本下载并验证后,当前版本将停止,新版本将启动。然后删除任何先前的回滚版本。
- 暂存新版本:
oakctl app install --manual-update会下载并准备新版本,而不会停止当前版本。使用oakctl app list验证就绪状态。 - 提交更新:
oakctl app update <APP_ID> --commit会停止当前版本并启动新版本。 - 如有需要,回滚:如果出现问题,请使用
oakctl app update <APP_ID> --rollback回滚到之前的版本。 - 准备就绪后,完成更新:
oakctl app update <APP_ID> --finalize会在您确认新版本稳定后,移除为回滚而保留的旧版本。
构建和发布应用
*.oakapp 文件,该文件可以安装在其他设备上:Command Line
1oakctl app build ./folder/app/srcoakctl app build 使用提供的应用目录中的 oakapp.toml。 使用 --oakapp-file 选择备用配置文件(例如 oakapp.dev.toml 或 oakapp.prod.toml),前提是该文件位于同一应用目录树中。可选标志:-d, --device [<DEVICE>]- 使用 IP、IP:PORT、索引或oakctl list中的序列号指定设备-k, --keep- 构建后保留容器(如果您想在构建后立即使用oakctl app start启动它,这很有用)-p, --publish- 构建后将应用发布到 Hub(应用将显示在 Hub 的 OAK4 应用 中)。-O, --optimized- 以优化模式构建应用(体积更小,构建时间更长)-U, --update-description- 如果应用已发布,则更新 Hub 上的应用描述-N, --no-download- 构建后不将*.oakapp文件下载到主机-o, --output [<PATH>]- 构建的*.oakapp文件应下载到的目录路径--oakapp-file [<PATH>]- 使用来自提供的应用目录树内的备用oakapp.toml文件--preserve-line-endings- 上传文件到设备前禁用自动 CRLF 到 LF 的转换
oakapp.toml 文件中指定应用的标识符和唯一版本。Hub 连接
Command Line
1oakctl hub loginCommand Line
1oakctl hub statusoakctl hub login 并在 Web 登录流程中选择团队。 oakctl hub switch-team 是 oakctl hub login 的别名。使用以下命令注销:Command Line
1oakctl hub logout*.oakapp 包:Command Line
1oakctl hub publish <oakapp-file>Command Line
1oakctl hub run-script <script-file>设备管理
设备信息
Command Line
1$ oakctl device info
2Device Info:
3 OS: Luxonis OS RVC4 1.4.0
4 Agent Version: 2.0.11 (rvc4)
5 Architecture: linux/arm64
6 Serial Number: 2713799968
7 Model: Luxonis, Inc. KalamaP OAK4-D R1--check_internet 标志还可以检查互联网连接。设备更新
CHANNEL 的可能值为 stable 和 beta:Command Line
1oakctl device update --channel=[CHANNEL]--select 标志选择要更新到的特定版本:Command Line
1oakctl device update --select --channel=[CHANNEL]--url 或 --path 标志直接提供更新 URL 或本地文件路径:Command Line
1oakctl device update --url=[URL]
2oakctl device update --path=[PATH]--local 标志在本地计算机上下载文件,然后在下载完成后将其传输到设备:Command Line
1oakctl device update --local--local 标志也可以与其他标志结合使用。设备重启
oakctl 重启设备:Command Line
1oakctl device reboot设备解锁
Command Line
1oakctl device unlock设备刷新
Command Line
1oakctl device flash [<path-to-tar.xz>]*.tar.xz 映 像的路径是可选的;如果未指定,将下载并刷写最新的稳定映像。有关详细的刷写和操作系统更新说明,请参阅 更新操作系统页面。oak-agent
oak-agent 是运行在 OAK4 设备上并管理容器的服务。它负责:- 管理应用程序,运行容器
- 与
oakctl工具通信 - 与 Hub(云平台)通信
容器
runc 作为轻量级容器运行时,这也是 Docker/Podman 使用的运行时。 我们选择 runc 是因为它轻量级,并且能让我们完全控制容器的生命周期。oakctl 和 oak-agent 的发行说明
oakctl v0.23.0 (2026 年 5 月 29 日)
新增
- 向
oakctl添加了分析功能。可以通过环境变量OAKCTL_ANALYTICS=0禁用分析。
更改
- 移除了
oakctl app install --update上的弃用通知。
oakctl v0.22.0 (2026 年 5 月 21 日)
新增
oakctl app examples list用于显示可用的 OAK 应用程序示例,以及oakctl app examples clone <path>用于将oak-examples存储库克隆到本地。- 通过
oakctl usbd支持 USB 网络共享。- 添加了
oakctl-usbd后台服务,通过 USB 将主机的互联网连接共享给 OAK 设备。 - 添加了
oakctl usbd <status|enable|disable>来管理oakctl-usbd服务。
- 添加了
更改
- 移除了
oakctl list、oakctl connect、oakctl setup、oakctl setup-b64和oakctl start-setup上的弃用通知。 - 使
oakctl list和oakctl connect在帮助输出中再次可见。
agent v0.19.1, oakctl v0.20.0 (2026 年 5 月 5 日)
修复
oakctl adb有时会以退出码255退出,即使adb命令成功。oakctl在运行self-update时不再显示新版本可用提示。
新增
oakctl device update --url/--path用于从 URL 或本地文件更新 RVC 设备操作系统。oakctl device update --local用于在本地下载操作系统更新。oakctl device connection get|unset用于在使用了oakctl connect后检查或清除当前设备连接。
更改
oakctlCLI 一致性:oakctl list已移至oakctl device list(旧命令已隐藏并显示弃用通知)。oakctl connect已移至oakctl device connection set(旧命令已隐藏并显示弃用通知)。oakctl start-setup已移至oakctl device setup start(旧命令已隐藏并显示弃用通知)。oakctl setup已移至oakctl device setup apply(旧命令已隐藏并显示弃用通知)。oakctl device flash已重命名为oakctl device reflash(旧命令已隐藏并显示弃用通知)。oakctl app delete已重命名为oakctl app uninstall(旧命令已隐藏并显示弃用通知)。oakctl hub publish已移至oakctl app publish(旧命令已隐藏并显示弃用通知)。oakctl app config <app_id> set|get已重构为oakctl app config set|get <app_id>。oakctl setup-b64已移至oakctl device setup apply-b64(旧命令已隐藏并显示弃用通知)。
- 扩展了
oakctl的--help输出。帮助现在包括示例命令和核心概念的简要说明。
agent v0.18.6, oakctl v0.18.6 (2026 年 4 月 8 日)
新增
oakctl app install现在会在安装后删除不必要的文件以节省存储空间。oakctl app prune-storage现在也删除安装和下载文件。oakctl app delete现在也删除格式错误的应用程序。oakctl device info现在显示:- 日期
- 网络信息
- 用于下载已构建应用程序的 HTTP API 端口
oakctl app run在构建步骤中命令失败时不再重建整个应用程序;它会保留成功构建的层。- 新的
oakapp.toml定义:- 添加了
shell字段以指定RUN命令、build_steps和entrypoint的默认 shell(默认值:["/bin/sh", "-c"])。 - 命令现在可以以 shell 形式(字符串)或 exec 形式(字符串数组)编写。
- 移除了基于
shlex的解析,因为它不支持重定向和管道等构造。 - 添加了可选的
arg部分,用于构建时环境变量和oakctl app build及oakctl app run的--build-arg标志。 - 添加了可选的
additional_build_mounts部分,用于仅在构建阶段使用的挂载点。
- 添加了
- 所有 Hub 服务端点现在都可以通过 API 配置。
- 在
oakctl中使用OAKCTL_HUB_API_URL。 - 在
oak-agent的 setup-utility 配置中使用api=。
- 在
更改
- 重命名了
oakctl中选择 Hub 服务环境的环境变量,从ENV改为OAKCTL_ENV。
agent v0.18.3, oakctl v0.18.2 (2026 年 2 月 17 日)
新增
oakctl app build和oakctl app run命令在构建和运行时报告图像下载进度。- 自托管代理支持 GPU,允许 oak 应用使用主机上的 Nvidia GPU(如果已启用)。
oakctl app [build|run] --oakapp-file [PATH]参数,用于指定oakapp.toml文件的自定义路径。oakctl app logs --no-follow参数,用于避免附加到日志流。- 从 Luxonis Hub 远程执行命令。
oakctl setup的--*-b64参数已替换为新的子命令oakctl setup-b64。- 拒绝在
oakapp.toml的挂载字段中使用相对路径:required_mounts、required_devices、optional_mounts、optional_devices、additional_mounts。 oakctl device update支持自托管 oak-agent。
修复
- 在尝试使用具有许多图层(约 30 个)的基础映像时,
oakctl app build出现Failed to mount overlayfs错误。 - Jetson 上的
oakctl adb。 - 将 QDL udev 规则的安装添加到
oakctl self-update。- 修复了
oakctl device flash期间某些qdl: Failed to open device的实例。
- 修复了
- 在编辑
oakapp.toml后第二次运行应用时,容器中缺少/etc/resolv.conf。
agent v0.17.4, oakctl v0.17.4 (2026 年 1 月 15 日)
新增
oakctl app build --output [PATH]参数,用于指定构建后下载*.oakapp文件的位置。oakctl setup命令的 Base64 编码参数,以确保跨操作系统兼容地转义 Hub 生成的设置命令中的特殊字 符。- 每天自动检查一次新的
oakctl版本。 oakctl app prune-storage命令,用于删除不必要的应用文件。oakctl app list --long标志,用于显示完整的 App ID。oak-agent测试 WebRTC 连接。oakctl device info和oakctl list显示采用状态。- 欢迎 ACK 工厂重置支持。
oakctl app install默认更新现有应用。- 可使用
--force-new标志修改为将应用安装为新应用。 - 可使用
--update标志修改为更新特定的现有应用。
- 可使用
oakctl app install --env / --env-file,用于在应用安装期间设置环境变量。- 多平台自托管 Docker 映像。
更改
oakctl app list现在默认显示截断为 3 个字符的 App ID;当出现冲突时,截断会自动增加。oak-agent保存新的应用构建元数据。- 自托管 WebRTC 终端打开主机 shell 而不是容器 shell。
oakctl app <ACTION> <app-id>命令现在同时接受完整和截断的 App ID。
修复
- 修复了当一次读取接收到多个消息时 OTA 更新状态反序列化失败的问题。
- Windows 上的
oakctl自动将 CRLF 转换为 LF。 - 自托管
oak-agent/oakctl修复:- 修复了
oakctl device info --check_internet - 修复了
oakctl device reboot - 修复了
oakctl setup命令(在某些设备如 RPi 上失败) - 缺少 ARM 设备的
adb二进制文件(错误地包含了 x86 二进制文件)
- 修复了
- 修复了使用
OAKCTL_HUB_TOKEN发布应用时的上传问题。 - macOS ARM 和 Windows 的
oakctl构建未签名。 - 修复了
oak-agent的构建缓存失效问题。 - 修复了
oakctl未能正确保存和/或读取sn-data.json的问题。
弃用
OAKCTL_HUB_LOGIN_TOKEN环境已重命名为OAKCTL_HUB_TOKEN。oakctl hub switch-team现在是oakctl hub login的别名(团队在 Web 登录流程中选择)。--enabled标志已从-e重命名为-E。
oakctl v0.16.5 (2025 年 12 月 15 日)
新增
- 用于非交互式
oakctl device update的新标志--yes。 - 用于
oakctl device update的新标志--check_internet,用于在更新前检查互联网连接。 oakctl viewer命令用于打开 Viewer。- 用于
oakctl app build的新标志--no-download,用于跳过将构建的*.oakapp文件下载到主机;用于测试。 - 用于
oakctl app start的新标志--enable和--disable-others。
更改
oakctl hub login现在使用基于 Web 的身份验证流程。- 对集成到 Viewer 的小幅改进。