Skip to content

Latest commit

 

History

History
117 lines (83 loc) · 8.33 KB

README_CN.md

File metadata and controls

117 lines (83 loc) · 8.33 KB

OpenWrt在线增量编译

目前主要编译流程已大幅优化,现在用起来会简单一些。

本项目最适合于经常修改编译设置,或时不时需要添加新的软件包的人群。它默认不会在每次编译时拉取最新的OpenWrt和packages的代码(除非你指定它这样做),因为这样会影响增量编译的实用性和稳定性。

如果你并不喜欢这样,或者不在乎长时间的编译过程,或者认为以下说明比较复杂,你也可以使用P3TERX's Actions-OpenwrtKFERMercer's OpenWrt-CI。它们用起来非常简单,除了编译比较花费时间。

本项目灵感来自于P3TERX's Actions-Openwrt

Github Actions和Actions-Openwrt让我们可以很方便地自动化编译OpenWrt固件,而不必在本地编译。然而Github Actions不存储缓存,已编译过的文件也不会在下次编译重新被使用。这就意味着,即便只是很小的改动,每次编译我们要等上很久来重新编译整个固件。

本项目使用Docker Hub或任何Docker Registry存储编译状态,使得后续的编译可以增量进行。

特点

  • 在Docker Hub或其他Registry加载和存储OpenWrt编译状态
  • 支持编译选项
  • 多种触发模式
  • 两个编译模式(冒号前是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_URLREPO_BRANCH

如果你想查看我个人的编译配置,打开"sample"分支

基础用法

第一次编译

第一次编译通常花费1.5至3小时,取决于你的配置。

  1. 注册GitHub Actions
  2. Fork本项目
  3. 注册Docker Hub. 这步很重要
  4. 取得Docker Hub的personal access token。在你自己Fork的Repo中的Settings->Secrets页面填写你的Docker Hub用户名和token。使用“docker_username”填写用户名,使用“docker_password”填写token。详见Secrets页面
  5. (可选,debug时必须) 在Secrets页面设置SLACK_WEBHOOK_URLTMATE_ENCRYPT_PASSWORD以保护你的敏感信息。 请参考调试和手动配置.
  6. (可选) 定制.github/workflows/build-openwrt.yml以修改你想在Docker Hub保存的builder名和其他选项
  7. 生成你的.config文件,并把它重命名为config.diff。把它放在根目录。
  8. (可选) 如果你想放置额外安装包,定制scripts/update_feeds.sh。(Wiki-如何添加自定义安装包?)
  9. (可选) 在patches目录放置补丁文件。补丁会自动在update_feeds.sh之后,download.sh之前执行。
  10. Commit并Push。这一步骤会自动触发编译。
  11. 等待build-inc任务完成。
  12. build-inc任务的Artifacts目录下载编译好的文件。
Secrets页面

Secrets页面

后续编译

第一次编译完成后,当你更改配置时,你只需要使用以下的步骤编译你的固件和软件包。这一编译过程通常只花费20分钟至1小时时间,取决于你的具体配置。

  1. (可选) 根据需要修改你的config.diff
  2. (可选) 根据需要修改你的scripts/update_feeds.sh
  3. (可选) 根据需要添加新的补丁至patches目录
  4. Commit并Push。如果你想执行build-inc任务,你不需要进行任何特殊操作。如果你需要执行build-package,你可以在Push前的最后一个commit message中包含这一字符串:#build-package#
  5. 等待build-incbuild-package完成
  6. 在“Artifacts”目录收集文件

高级用法(未完成)

抱歉,这部分还没完成。请参考Advanced Usage

细节(未完成)

请参考Details

调试和手动配置

通过tmate,你可以通过SSH进入docker容器或Github Actions虚拟机以便你调试或更改配置,例如执行make menuconfig。如要进入这个模式,你需要开启构建选项debug。请参考Manually trigger building and its options以了解如何使用构建选项。

为了你敏感信息的安全,你必须Secrets页面设置SLACK_WEBHOOK_URLTMATE_ENCRYPT_PASSWORD以保护你的tmate连接信息。参考tete1030/debugger-action/README.md以了解原因和它们的用法。

请注意你在docker容器内做出的手动配置应当仅仅是为了临时使用的。尽管你在docker容器内的更改会被保存并上传Docker Hub,仍有许多情况会导致你的这些手动配置丢失:

  1. 使用了rebuild选项以完全重建你的base builder并rebase你的incremental builder(参考Mechanism
  2. 使用了use_baseuse_inc选项以rebase你的incremental builder
  3. 部分文件会在每次编译时被覆盖。例如,如果你在docker 容器内使用了make menuconfig.config文件会被修改并保存到Docker Hub。但是当下次编译时,config.diff文件会被复制到.config文件上并覆盖它。这将导致你上次编译时使用make menuconfig做出的更改丢失。

为了作出永久的配置改变,你仍应使用本仓库内提供的config.diff文件及其他自定义方法。

FAQs

为什么Docker Hub的repo页面我看不到任何tag?

这些tag实际上存在,只是在网页上看不到。这是有buildx的已知bug导致:

如何添加自定义安装包,并定制部分文件?

Wiki-如何添加自定义安装包?