ITADN
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

有人值守 Sysupgrade 服务器

codecov

本项目简化了升级运行 OpenWrt 或基于其的发行版设备固件的 sysupgrade 流程。这些工具提供了一种简便的方式,无需使用 opkg 即可使用新的固件版本(包括所有软件包)重新刷写路由器。

ASU 基于一个 API,用于请求预装任意所选软件包的定制固件镜像。这避免了搭建构建环境的需要,并使得即使使用移动设备也能创建定制固件镜像。

Sysupgrade Server 的客户端

OpenWrt 固件选择器

一个使用原生 JavaScript 开发的简单 Web 界面,目前由 @mwarning 开发。 它提供基于型号名称的设备搜索,并显示指向 官方镜像 的链接,或通过 asu API 请求镜像。请加入 GitHub 仓库 的开发。

ofs

LuCI 应用

软件包 luci-app-attendedsysupgradeSystem > Attended Sysupgrade 下提供了一个简单的工具。它会请求一个包含当前软件包集合的新固件镜像,等待其构建完成并刷入。如果 GUI 中勾选了“保留配置”,设备将升级到新固件,无需重新输入任何配置或重新安装任何软件包。

luci

CLI

OpenWrt SNAPSHOT-r26792 or newer(以及 24.10 版本)中,CLI 应用 auc 已被替换为 owut 作为更全面的 CLI 工具,以提供升级设备的便捷方式。

owut

服务器

服务器监听镜像请求,如果请求有效,则自动生成 镜像。它协调多个 OpenWrt ImageBuilder,并将生成的 镜像缓存在 Redis 数据库中。如果镜像已缓存,服务器可以 立即提供该镜像,而无需重新构建。

活跃服务器

[!NOTE] 使用在 OpenWrt Downloads 上发布的 ImageBuilder 的官方服务器。

[!NOTE] 非官方服务器,可能运行修改过的 ImageBuilder

运行您自己的服务器

出于安全原因,每次构建都在容器内进行,以便一个构建 不会影响另一个构建。使用 Podman socket,以便 worker 可以在 容器内执行构建。

安装

服务器使用 podman-compose 来管理容器。在基于 Debian 的 系统上,安装以下软件包:

sudo apt install podman-compose

一个 Python 库 用于 通过 socket 与 Podman 进行通信。将 socket 符号链接到项目 目录中:

ln -sf /run/user/$(id -u)/podman/podman.sock podman.sock

如果 Podman 套接字未运行,请启用它:

systemctl --user enable --now podman.socket

为构建容器创建隔离网络(无法访问 Redis 或其他服务):

podman network create asu-build

复制示例配置并根据需要进行调整:

cp asu.example.toml asu.toml

现在您可以使用最新的 ASU 容器,也可以自行构建:

# use existing containers
podman-compose pull

# build containers locally
podman-compose build

启动所有服务:

podman-compose up -d

这将启动服务器、一个 Redis 实例和一个 worker。运行后, API 可在 http://localhost:8000 访问。修改 podman-compose.yml 以更改端口。

可选:缓存代理

要在构建之间缓存上游软件包下载,请启用 nginx 缓存 代理:

podman-compose -f podman-compose.yml -f podman-compose.cache.yml up -d

cache_url = "http://cache" 设置为 asu.toml,以通过缓存路由构建容器的 软件包下载。

生产环境

对于生产环境,建议使用 nginxcaddy 等反向代理。 您可以在 misc/Caddyfile 中找到 Caddy 示例配置。

如果您希望服务器在注销后保持活动状态,请启用 "linger":

loginctl enable-linger

系统要求

  • 2 GB 内存(推荐 4 GB)
  • 2 个 CPU 核心(推荐 4 个核心)
  • 50 GB 磁盘空间(推荐 200 GB)

开发

克隆此仓库后,安装 uv 以管理 Python 依赖项。

# Install uv
curl -LsSf https://astral.sh/uv/install.sh | sh

# Install dependencies
uv sync --extra dev

运行 Redis

podman run -d --name redis -p 6379:6379 redis:alpine

运行服务器

uv run fastapi dev asu/main.py

运行一个 worker

uv run rq worker

API

API 通过 OpenAPI 进行文档化,并可在服务器上交互式查看: