使用 GitHub Actions 编译 OpenWrt

前言

Github Actions 是 GitHub 推出的持续集成(Continuous integration,简称CI)服务,它提供了配置非常不错的虚拟服务器环境(E5 2vCPU/7G RAM),基于它可以进行构建、测试、打包、部署项目。对于公共仓库可免费无时间限制的使用(指累积时间),不过要使用它首先需要知道如何编写 workflow 文件。但这篇文章并不是教你如何枯燥的去编写 workflow 文件,而是教你如何去使用博主已经编写好的 OpenWrt 编译解决方案。

教程更新

关注 GitHub Actions Channel 获得最新情报

  • 2019-12-06 添加 tmate 网页终端链接说明
  • 2019-12-05 优化基础使用教程,添加 @lietxia 大佬的图文教程链接
  • 2019-12-04 新增云menuconfig使用方法
  • 2019-12-03 新增并发编译使用方法
  • 2019-11-30 新增自定义源码编译使用方法
  • 2019-11-14 发文

方案特点

  • 免费
  • 一键快速编译
  • 定时自动编译
  • 客制化编译
  • 并发编译(可同时进行20个编译任务)
  • 无需搭建编译环境(在线make menuconfig生成配置文件)
  • 无需消耗自己的计算机与服务器的计算资源(性感E5在线编译)
  • 无需担心磁盘空间不足(近60G磁盘空间)
  • 无需使用清理文件(内核更新不怕 boom )
  • 编译速度快(x86_64架构编译时间仅2小时左右)
  • 全新环境(杜绝编译环境不干净导致编译失败)
本解决方案是一个开放平台,任何人都可以基于此打造自己专属的编译方案。

项目地址

https://github.com/P3TERX/Actions-OpenWrt

喜欢的小伙伴请点击star哦~

准备工作

TIPS: 关于编译环境的搭建,推荐去看我之前写的相关文章,Windows 10 可以使用 WSL ,macOS、Linux 可以使用 Docker

基础使用

默认配置编译

难度:

门槛: 基础计算机技能

使用L大钦定的配置进行编译,默认是 x86_64 平台。如果你刚好在使用软路由又懒得折腾,那么这是最好的选择。紧跟L大的步伐,随时随地进行编译。

TIPS: 默认引用L大的源码,有其它需求可自行修改 workflow 文件,方法后面的进阶使用中有说明。
  • fork 这个仓库
  • 在 releases 页面发布一个 release 编译工作就会自动开始,在 Actions 页面可以查看编译进度。
  • 进入这个页面,点击右上角的star按钮可加快编译速度和成功率(大雾
  • 编译完成点击 Actions 页面右上角的Artifacts按钮下载固件。

基础客制化编译

难度: ⭐️⭐️⭐️

门槛:

  • Linux 与 Git 基础知识
  • 一次纯手工编译 OpenWrt 成功的经历

如果你不满足于默认的配置或者想编译其它平台的固件,那么就开始你的客制化之旅吧。

  • fork 这个仓库
  • 在自己搭建编译环境中使用 Lean's OpenWrt 源码生成.config文件。(或使用后面
  • 把生成好的.config文件本地仓库根目录,然后 push 到 GitHub 远程仓库编译工作就会自动开始,在 Actions 页面可以查看编译进度。
  • 进入这个页面,点击右上角的star按钮可加快编译速度和成功率(大雾
  • 编译完成点击 Actions 页面右上角的Artifacts按钮下载固件。

如果不明白我在说什么,那么推荐去看 @lietxia 大佬写的图文并茂的教程

再次编译

难度: ⭐️⭐️⭐️⭐️

门槛:

  • Linux 与 Git 基础知识
  • 一次纯手工编译 OpenWrt 成功的经历
  • 小学语文、英语90分

当看见源码有更新,在 releases 页面发布一个 release 直接将直接使用最新源码进行编译。

TIPS: 如果你嫌发 release 麻烦,那么可以根据后面的进阶玩法开启真·一键编译

此时如果你想修改配置,那么还是生成.config文件并 push 到仓库触发编译的工作流程。

进阶使用

难度: ⭐️⭐️⭐️⭐️️⭐️

门槛:

DIY 脚本

仓库内有一个diy.sh文件,你可以把对源码修改的指令写到这个文件中,比如修改默认IP、主机名、主题、添加/删除软件包等操作。但不仅限于这些操作,发挥你强大的想象力,可做出更强大的功能。

TIPS: 脚本工作目录在源码目录,内附一个修改默认 IP 的例子供参考使用。

添加软件包

在 DIY 脚本中加入对指定软件包的远程仓库的克隆指令。就像下面这样:

git clone https://github.com/P3TERX/xxx package/xxx

这样做的好处是每一次编译都会拉取最新的源码。

TIPS: 生成.config文件时记得选中相应的软件。如果添加的软件包与 OpenWrt 中已有的软件包同名的情况,则需要把源码中的同名软件包删除,否则会优先编译 OpenWrt 中的软件包。这同样可以利用到的 DIY 脚本。

files 大法

在仓库根目录下新建files目录,剩下的就不赘述了。

定时自动编译


点击查看

编辑 workflow 文件(.github/workflows/build-openwrt.yml)取消注释下面两行。

#  schedule:
#    - cron: 0 8 * * 5

例子是北京时间每周五下午4点钟开始编译(周末下班回家直接下载最新固件开始折腾)。如需自定义则按照 cron 格式修改即可,Actions 虚拟环境中的时区是 UTC ,注意按照自己所在地时区进行转换。

真·一键编译

点击自己仓库页面上的 Star 开始编译,为了防止被滥用,这个功能默认没有开启。开启后如果被恶意点击轻则封号,严重可能会导致中美关系恶化、原子弹爆炸、第三次世界大战等后果。(大雾


点击查看

编辑 workflow 文件(.github/workflows/build-openwrt.yml)取消注释下面两行,后续点击自己仓库上的 star 即可开始编译。

#  watch:
#    types: [started]
TIPS: 字段started并不是“开始了”的意思,而是“已经点击 Star”。
吐槽: 官方并没有提供一个开始按钮,通过搜索找到过很多奇怪的一键触发方式,但都是通过 Webhook 来实现的。机智的我发现了可以通过点击 Star 来触发,这样就相当于把 Star 当成开始按钮。这个started有种一句双关的意思了。

自定义源码编译

此方案默认引用的是L大的源码,如果你觉得不好用或者有编译其它源码的需求可以进行替换,自由是本解决方案最大的特点。


点击查看

编辑 workflow 文件(.github/workflows/build-openwrt.yml),修改下面的相关环境变量字段。

        REPO_URL: https://github.com/coolsnowwolf/lede
        REPO_BRANCH: master

比如修改为 OpenWrt 官方源码19.07分支

        REPO_URL: https://github.com/openwrt/openwrt
        REPO_BRANCH: openwrt-19.07
TIPS: 注意冒号后面有空格

并发编译

基于 GitHub Actions 可同时运行多个工作流程的特性,最多可以同时进行20个编译任务。也可以单独选择其中一个进行编译,这充分的利用到了 GitHub Actions 为每个账户免费提供的20个虚拟服务环境。


点击查看

假设有三台路由器的固件需要编译,比如K2P、软路由、新路由3。

  • 生成它们的.config文件
  • 分别将它们重命名为k2p.configx64.configd2.config放入本地仓库根目录。
  • 复制多个 workflow 文件(.github/workflows/build-openwrt.yml)。为了更好的区分可以对它进行重命名,比如k2p.ymlx64.ymld2.yml。此外第一行name字段也可以进行相应的修改。
  • 然后分别用上面修改的文件名替换对应 workflow 文件中下面两个位置的.config
...
    paths:
      - '.config'
...
        CONFIG_FILE: '.config'
        DIY_SH: 'diy.sh'
...
TIPS: 不同的机型同样可以使用不同的 DIY 脚本,方法类似。
  • 最后 push。此时此就触发了3个并行的编译工作流程。

云 menuconfig(SSH 连接到 Actions)

通过 tmate 连接到 GitHub Actions 虚拟服务器环境,可直接进行make menuconfig操作生成编译配置,或者任意的客制化操作。也就是说,你不需要再自己搭建编译环境了。这可能改变之前所有使用 GitHub Actions 的编译 OpenWrt 方式。


点击查看

  • 编辑 workflow 文件(.github/workflows/build-openwrt.yml),取消注释下面两行开启这个功能。
#    - name: SSH connection to Actions
#      uses: p3terx/debugger-action@master
  • 在触发工作流程后,在 Actions 页面等待执行到SSH connection to Actions步骤,会出现下面的信息。
To connect to this session copy-n-paste the following into a terminal or browser:

ssh Y26QeagDtsPXp2mT6me5cnMRd@nyc1.tmate.io

https://tmate.io/t/Y26QeagDtsPXp2mT6me5cnMRd
  • 复制 SSH 连接命令粘贴到终端内执行,或者复制链接在浏览器中打开使用网页终端。
  • cd openwrt && make menuconfig
  • 完成后按快捷键Ctrl+D或执行exit命令退出,后续编译工作将自动进行。
TIPS: 可能由于 Actions 有限制措施,如果一段时间内(估计2分钟)不进行任何操作将会失去控制,即使连接正常也无法进行任何操作。考虑到这点,默认连接30分钟后会断开并终止编译工作流程,防止资源浪费与封号风险。如果你想解除这个限制,可以根据提示操作。

优秀修改方案集合

待定,欢迎投稿。

尾巴

希望大家不要滥用免费的开发资源,需要时再编译,让开发者来充分利用才能产生更多更好的软件,这样大家才能受益。


相关 TG 群组:GitHub Actions Group

欢迎订阅我的 TG 频道,接收最新的文章推送和有趣的内容。加入 TG 群组,和小伙伴们一同交流、学习、成♂长。

添加新评论

已有 3 条评论

你好 我已用lean的源碼 下好make menuconfig 所生成的.config文件 是指config這個目錄通通上傳到倉庫嗎

P3TERX P3TERX 回复 @中國熊貓
0 0

.config文件 push 到仓库就行了。

中國熊貓 中國熊貓 回复 @P3TERX
0 0

好的 我找到了 是隱藏檔 謝謝