> For the complete documentation index, see [llms.txt](https://tinyhumans.gitbook.io/openhuman/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://tinyhumans.gitbook.io/openhuman/zh/gai-lan/auto-update.md).

# 自动更新

OpenHuman 如何自我更新：一个已签名的清单、有限次数的下载重试，以及一次同时覆盖应用及其核心的更新。

OpenHuman 会一步更新整个应用。核心模块直接链接到桌面外壳中，因此没有单独的核心更新。更新外壳会同时升级两者。

## 你所看到的

当有更新的构建可用时，应用会在后台下载。下载准备就绪后会出现提示，并依次进入 **可安装**, **安装中** 和 **重启中**。如果你已是最新版本，你会看到 **已是最新版本**。如果失败，则会显示失败，而不是无限重试。

在安装之前，应用会在与其他地方相同的重启锁下关闭进程内核心。这样替换包时就不会与仍持有文件句柄的核心发生竞争，从而使 `.app` 在 macOS 上的替换保持干净。

## 更新来源

只有一个端点，即每次发布时都会发布的清单：

```
https://github.com/tinyhumansai/openhuman/releases/latest/download/latest.json
```

每个构件都经过签名，公钥已编译进应用中。签名无法验证的构建会被拒绝。这里没有需要信任的更新服务器，也没有第二个渠道。

## 重试

一次下载有三次尝试：首次尝试加上两次重试，每次间隔为尝试次数乘以两秒。

只有暂时性的网络故障才会重试。签名失败、文件系统错误以及“没有适用于此目标的构件”都不会重试。再次下载无法修复错误的签名，而对失败的验证循环重试会浪费带宽，并可能掩盖篡改。该策略位于 `crates/openhuman-app/src/app_update.rs`，其中 `classify` 和 `is_transient_updater_err` 决定。

## 定期检查

核心会运行该计划，其设置位于 `[update]` 中，放在 `config.toml`:

| 键                       | 默认值            | 功能                                                           |
| ----------------------- | -------------- | ------------------------------------------------------------ |
| `enabled`               | `true`         | 设置为时会关闭定期检查 `false`.                                         |
| `interval_minutes`      | `60`           | 检查频率。最小值为 10 分钟。                                             |
| `restart_strategy`      | `self_replace` | `self_replace` 在暂存后原地重启。 `supervisor` 负责暂存更新，并将重启交给管理该进程的机制。 |
| `rpc_mutations_enabled` | `true`         | 带有 bearer 身份验证的 RPC 客户端是否可以调用会修改状态的更新方法。                     |

使用 `supervisor` 适用于无头或容器化的核心，此时由其他组件负责进程生命周期，更新不应重启它。

## 无头和自托管核心

你自己运行的核心（`openhuman-core serve`）会通过 `更新` 命名空间检查并暂存更新，而不是通过桌面提示。因此 `rpc_mutations_enabled` 是一个单独的开关。旧的桌面命令 `check_core_update` 和 `apply_core_update` 仍然存在以兼容前端，但不会执行任何操作。

## 另请参见

* [平台与可用性](/openhuman/zh/gong-neng/platform.md)：各操作系统上会发布什么。
* [发布策略](/openhuman/zh/kai-fa/release-policy.md)：如何切出一个发布版本，以及 OAuth 最低版本门槛。
* [云端部署](/openhuman/zh/gong-neng/cloud-deploy.md)：在别处运行核心。
