该项目简化了升级运行 OpenWrt 或基于 OpenWrt 的发行版的设备固件的 sysupgrade 过程。这些工具提供了一种使用新固件版本(包括所有软件包)重新刷新路由器的简单方法,而无需使用opkg
。
ASU 基于 API 来请求自定义固件映像以及预安装的任何软件包选择。这避免了设置构建环境的需要,并且甚至可以使用移动设备创建自定义固件映像。
使用 vanilla JavaScript 的简单 Web 界面,目前由 @mwarning 开发。它提供基于型号名称的设备搜索,并显示官方图像的链接或通过asu API 请求图像。请参与 GitLab 存储库的开发
luci-app-attendedsysupgrade
包在System > Attended Sysupgrade
下提供了一个简单的工具。它请求一个包含当前软件包集的新固件映像,等待它构建并刷新它。如果在 GUI 中选中“保留配置”,设备将升级到新固件,无需重新输入任何配置或重新安装任何软件包。
在OpenWrt SNAPSHOT-r26792 or newer
中,CLI 应用程序auc
被owut
取代,作为更全面的 CLI 工具,提供了一种简单的方法来升级您的设备。
auc
包执行与通过 SSH/命令行执行luci-app-attendedsysupgrade
相同的过程。
服务器侦听图像请求,如果有效,则自动生成它们。它协调多个 OpenWrt ImageBuilder 并将生成的图像缓存在 Redis 数据库中。如果图像被缓存,服务器可以立即提供它而无需重建。
出于安全原因,每个构建都发生在容器内,以便一个构建不会影响另一个构建。为此,Podman 容器运行 API 服务,以便工作人员可以自己在容器内执行构建。
请安装 Podman 并测试是否有效:
podman run --rm -it docker.io/library/alpine:latest
Podman 工作后,安装podman-compose
:
pip install podman-compose
现在可以通过podman-compose
运行所有服务:
# where to store images and json files
echo "PUBLIC_PATH=$(pwd)/public" > .env
# absolute path to podman socket mounted into worker containers
echo "CONTAINER_SOCK=/run/user/$(id -u)/podman/podman.sock" >> .env
podman-compose up -d
这将启动服务器、Podman API 容器和两个工作线程。第一次运行需要几分钟,因为可用的包是从上游服务器解析的。服务器运行后,就可以通过http://localhost:8000
上的 API 请求图像。修改podman-compose.yml
以更改端口。
对于生产,建议使用反向代理,例如nginx
或caddy
。
克隆此存储库后,创建 Python 虚拟环境并安装依赖项:
poetry install
poetry run fastapi dev asu/main.py
# podman unix socket (not path), no need to mount anything
export CONTAINER_HOST=unix:///run/user/1001/podman/podman.sock
poetry run rq worker
要更新可用目标列表,请运行:
poetry run python3 misc/update_all_targets.py
这可以添加到 cron 作业中以定期更新目标。如果您想从不同的源更新目标或在不同的端口上运行服务器,则必须更改脚本。
该 API 通过OpenAPI进行记录,可以在服务器上交互式查看: