目前主要编译流程已大幅优化,现在用起来会简单一些。
本项目最适合于经常修改编译设置,或时不时需要添加新的软件包的人群。它默认不会在每次编译时拉取最新的OpenWrt和packages的代码(除非你指定它这样做),因为这样会影响增量编译的实用性和稳定性。
如果你并不喜欢这样,或者不在乎长时间的编译过程,或者认为以下说明比较复杂,你也可以使用P3TERX's Actions-Openwrt或KFERMercer's OpenWrt-CI。它们用起来非常简单,除了编译比较花费时间。
本项目灵感来自于P3TERX's Actions-Openwrt。
Github Actions和Actions-Openwrt让我们可以很方便地自动化编译OpenWrt固件,而不必在本地编译。然而Github Actions不存储缓存,已编译过的文件也不会在下次编译重新被使用。这就意味着,即便只是很小的改动,每次编译我们要等上很久来重新编译整个固件。
本项目使用Docker Hub或任何Docker Registry存储编译状态,使得后续的编译可以增量进行。
- 在Docker Hub或其他Registry加载和存储OpenWrt编译状态
- 支持编译选项
- 多种触发模式
- Push触发,支持在commit message中包含指令
- Deployment事件触发(可使用tete1030/github-repo-dispatcher)
- Repository dispatch事件触发(可使用tete1030/github-repo-dispatcher)
- 自己给自己Star触发(可指定Star的触发者)
- 定时触发
- 两个编译模式(冒号前是Github Actions中的job名称)
build-inc
:增量编译固件和软件包(每次push自动进行,标准配置下大约每次40分钟,第一次编译时耗时大约3小时)build-package
:增量编译软件包(每次push自动进行,标准配置下大约每次25分钟,当仅需要编译软件安装包时比较有用)
- 支持通过SSH调试和配置(e.g.
make menuconfig
)
默认配置使用了coolsnowwolf/lede作为OpenWrt源码。如果你想要官方的Openwrt 19.07,请使用"openwrt_official"分支。(它仅仅是更改了.github/workflows/build-openwrt.yml
中的REPO_URL
、REPO_BRANCH
)
如果你想查看我个人的编译配置,打开"sample"分支。
第一次编译通常花费1.5至3小时,取决于你的配置。
- 注册GitHub Actions
- Fork本项目
- 注册Docker Hub. 这步很重要
- 取得Docker Hub的personal access token。在你自己Fork的Repo中的Settings->Secrets页面填写你的Docker Hub用户名和token。使用“docker_username”填写用户名,使用“docker_password”填写token。详见Secrets页面。
- (可选,debug时必须) 在Secrets页面设置
SLACK_WEBHOOK_URL
或TMATE_ENCRYPT_PASSWORD
以保护你的敏感信息。 请参考调试和手动配置. - (可选) 定制
.github/workflows/build-openwrt.yml
以修改你想在Docker Hub保存的builder名和其他选项。 - 生成你的
.config
文件,并把它重命名为config.diff
。把它放在user
目录。 - (可选) 如果你想放置额外安装包,定制
scripts/update_feeds.sh
。(Wiki-如何添加自定义安装包?) - (可选) 在
user/patches
目录放置补丁文件。补丁会自动在update_feeds.sh
之后,download.sh
之前执行。 - Commit并Push。这一步骤会自动触发编译。
- 等待
build-inc
任务完成。 - 在
build-inc
任务的Artifacts
目录下载编译好的文件。
第一次编译完成后,当你更改配置时,你只需要使用以下的步骤编译你的固件和软件包。这一编译过程通常只花费20分钟至1小时时间,取决于你的具体配置。
- (可选) 根据需要修改你的
user/config.diff
- (可选) 根据需要修改你的
scripts/update_feeds.sh
- (可选) 根据需要添加新的补丁至
user/patches
目录 - Commit并Push。如果你想执行
build-inc
任务,你不需要进行任何特殊操作。如果你需要执行build-package
,你可以在Push前的最后一个commit message中包含这一字符串:#build-package#
- 等待
build-inc
或build-package
完成 - 在“Artifacts”目录收集文件
抱歉,这部分还没完成。请参考Advanced Usage
请参考Details
通过tmate,你可以通过SSH进入docker容器或Github Actions虚拟机以便你调试或更改配置,例如执行make menuconfig
。如要进入这个模式,你需要开启构建选项debug
。请参考Manually trigger building and its options以了解如何使用构建选项。
为了你敏感信息的安全,你必须在Secrets页面设置SLACK_WEBHOOK_URL
或TMATE_ENCRYPT_PASSWORD
以保护你的tmate连接信息。参考tete1030/safe-debugger-action/README.md以了解原因和它们的用法。
请注意你在docker容器内做出的手动配置应当仅仅是为了临时使用的。尽管你在docker容器内的更改会被保存并上传Docker Hub,仍有许多情况会导致你的这些手动配置丢失:
- 使用了
rebuild
选项以完全重建你的base builder并rebase你的incremental builder(参考Mechanism) - 使用了
use_base
或use_inc
选项以rebase你的incremental builder - 部分文件会在每次编译时被覆盖。例如,如果你在docker 容器内使用了
make menuconfig
,.config
文件会被修改并保存到Docker Hub。但是当下次编译时,user/config.diff
文件会被复制到.config
文件上并覆盖它。这将导致你上次编译时使用make menuconfig
做出的更改丢失。
为了作出永久的配置改变,你仍应使用user/config.diff
文件及本仓库内提供的其他自定义方法。
这些tag实际上存在,只是在网页上看不到。这是有buildx的已知bug导致: