抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

前言

本文基于该博客进行二次编写,补充自己的理解
Github Ac­tions提供了性能配置非常不错的虚拟服务器环境,基于它可以进行构建、测试、打包、部署项目。对于公开仓库可免费无时间限制的使用,且单次使用时间长达 6 个小时,这对于编译 Open­Wrt 来说是非常充足的。不过 GitHub Ac­tions 有一定的使用门槛,首先要了解如何编写 workflow 文件。
博客云编译 OpenWrt配置

方案特点

  • 免费
  • 一键快速编译
  • 定时自动编译
  • 客制化编译
  • 并发编译(可同时进行20个编译任务)
  • 无需搭建编译环境(在线make menuconfig生成配置文件)
  • 无需消耗自己的计算机与服务器的计算资源(性感E5在线编译)
  • 无需担心磁盘空间不足(近60G磁盘空间)
  • 无需使用清理文件(内核更新不怕 boom )
  • 编译速度快(编译时间1-2小时)
  • 编译成功率提升200%(万兆自由网络环境)
  • 全新环境(杜绝编译环境不干净导致编译失败)

    准备工作

  • GitHub 账号
  • 搭建编译环境,生成.config文件。(如果自己会配置就可选)

    基础使用

  1. 使用P3TERX大佬的工作流模板,以后可以自己编写.
    进入 P3TERX/Actions-OpenWrt 项目页面,点击页面中的 Use this template (使用这个模版)按钮。
    博客云编译 OpenWrt使用模板
  2. 填写仓库名称,然后点击Create repository from template(从模版创建储存库)按钮。
    博客云编译 OpenWrt使用模板2
  3. 经过几秒钟的等待,页面会跳转到新建的仓库,内容和模板是相同的。然后点击在英文输入法状态下按键盘上的.号,网页会打开github的在线vscode编辑器.
    博客云编译 OpenWrt打开在线vscode
  4. 获得lede生成的.config文件
    如果不知道怎么生成.config文件,参考我的这篇文章
    不出意外的话,使用ls -a能在lede目录看见.config文件
    博客云编译 OpenWrt查找config文件
  5. 在github新建.config文件,且将配置好的.config内容复制且提交.
    博客云编译 OpenWrt提交config文件
  6. 在 Actions 页面选择Build OpenWrt,然后点击Run Workflow按钮,即可开始编译。(如果需要 SSH 连接则把SSH connection to Actions的值改为true。其它详情参见进阶使用相关章节)
    博客云编译 OpenWrt基础编译开始
  7. 最后经过一两个小时的等待,不出意外你就可以在 Actions 页面看到已经打包好的固件目录压缩包。

进阶使用

SSH 连接到 Actions(新号易封)

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

  1. Run Workflow时把SSH connection to Actions的值改为true(或者也可以不修改,而是通过 webhook 方式发送带有ssh触发关键词的请求。)
  2. 在触发工作流程后,在 Actions 日志页面等待执行到SSH connection to Actions步骤,会出现类似下面的信息:
    ```log
    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 连接命令粘贴到终端内执行,或者复制链接在浏览器中打开使用网页终端。(网页终端可能会遇到黑屏的情况,按 `Ctrl+C` 即可)
- `cd openwrt && make menuconfig`
- 完成后按`Ctrl+D`组合键或执行`exit`命令退出,后续编译工作将自动进行。
> TIPS: 固件目录下有个config.seed或者config.buildinfo文件,如果你需要再次编译可以使用它。

## 自定义环境变量与功能
打开 work­flow 文件(`.github/workflows/build-openwrt.yml`),你会看到有如下一些环境变量,可按照自己的需求对这些变量进行定义。
```yml
env:
  REPO_URL: https://github.com/coolsnowwolf/lede
  REPO_BRANCH: master
  FEEDS_CONF: feeds.conf.default
  CONFIG_FILE: .config
  DIY_P1_SH: diy-part1.sh
  DIY_P2_SH: diy-part2.sh
  UPLOAD_BIN_DIR: false
  UPLOAD_FIRMWARE: true
  UPLOAD_COWTRANSFER: false
  UPLOAD_WETRANSFER: false
  UPLOAD_RELEASE: false
  TZ: Asia/Shanghai
环境变量 功能
REPO_URL 源码仓库地址
REPO_BRANCH 源码分支
FEEDS_CONF 自定义feeds.conf.default文件名
CONFIG_FILE 自定义.config文件名
DIY_P1_SH 自定义diy-part1.sh文件名
DIY_P2_SH 自定义diy-part2.sh文件名
UPLOAD_BIN_DIR 上传 bin 目录。即包含所有 ipk 文件和固件的目录。默认false
UPLOAD_FIRMWARE 上传固件目录。默认true
UPLOAD_COWTRANSFER 上传固件到奶牛快传。默认false
UPLOAD_WERANSFER 上传固件到 WeTransfer 。默认false
UPLOAD_RELEASE 上传固件到 releases 。默认false
TZ 时区设置

DIY 脚本

仓库根目录目前有两个 DIY 脚本:diy-part1.shdiy-part2.sh,它们分别在更新与安装 feeds 的前后执行,你可以把对源码修改的指令写到脚本中,比如修改默认 IP、主机名、主题、添加 / 删除软件包等操作。但不仅限于这些操作,发挥你强大的想象力,可做出更强大的功能。

脚本工作目录在源码目录,内附几个简单的例子供参考。

添加额外的软件包

  1. 在 DIY 脚本中加入对指定软件包源码的远程仓库的克隆指令。就像下面这样:
    git clone https://github.com/P3TERX/xxx package/xxx
    
    本地make menuconfig生成.config文件时添加相应的软件包,如果你知道包名可以直接写到.config文件中。

    如果额外添加的软件包与 Open­Wrt 源码中已有的软件包同名的情况,则需要把 Open­Wrt 源码中的同名软件包删除,否则会优先编译 Open­Wrt 中的软件包。这同样可以利用到的 DIY 脚本,相关指令应写在diy-part2.sh。

原理是把软件包源码放到 package 目录下,编译时会自动遍历,与本地编译是一样的。当然方法不止一种,其它方式请自行探索。

自定义 feeds 配置文件

把 feeds.conf.default 文件放入仓库根目录即可,它会覆盖 Open­Wrt 源码目录下的相关文件。

Custom files(自定义文件)

俗称 “files 大法”,在仓库根目录下新建 files 目录,把相关文件放入即可。有关详情请自行搜索了解。

自定义源码

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

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

比如修改为 Open­Wrt 官方源码 19.07 分支

REPO_URL: https://github.com/openwrt/openwrt
REPO_BRANCH: openwrt-19.07

注意冒号后面有空格

源码更新自动编译

在检测到源码更新后自动进行编译。

  1. 创建 Personal access token(PAT) ,勾选repo权限,这将用于自动触发编译工作流程。
    博客云编译 OpenWrt创建token
  2. 然后点击自己仓库的Settings选项卡,再点击Secrets。添加名为ACTIONS_TRIGGER_PAT的加密环境变量,保存刚刚创建的 PAT 。
    博客云编译 OpenWrt设置自动更新库
  3. 在 Actions 页面选择Update Checker,点击Run workflow手动进行一次测试运行。如果没有报错且 OpenWrt 编译工作流程被触发,则代表测试通过。
  4. 最后编辑Update Checker的 workflow 文件(.github/workflows/update-checker.yml),取消注释(删除#)定时触发相关的部分。这里可以根据 cron 格式来设定检测的时间,时区为 UTC 。
    #  schedule:
    #    - cron: 0 */18 * * *
    
    此外还可以根据实际情况对监视的源码仓库进行更改,如果有多个源码仓库需要监视则多复制几份相应的 work­flow 文件。

编译多个固件

  1. 方法一:
    通过 P3TERX/Actions-OpenWrt 复制项目创建多个仓库来编译不同架构机型的 Open­Wrt 固件。
  2. 方法二:
    基于 GitHub Ac­tions 可同时运行多个工作流程的特性,最多可以同时进行至少 20 个编译任务。也可以单独选择其中一个进行编译,这充分的利用到了 GitHub Ac­tions 为每个账户免费提供的 20 个 Ubuntu 虚拟服务器环境。
    详细的参考这里

上传固件到 WeTransfer

WeTransfer 是荷兰的一款临时文件传输分享服务网盘,前面提到的奶牛快传实际上师从自它,二者的网站都非常相似。We­Trans­fer 使用的是 Ama­zon S3 存储并通过 Ama­zon Cloud­Front CDN 全球加速,它在中国大陆的下载体验完全不输奶牛快传,甚至某些情况下要更好。

  1. 编辑 workflow 文件(.github/workflows/build-openwrt.yml),将环境变量UPLOAD_WERANSFER的值修改为true
    UPLOAD_WERANSFER: true
    
  2. 编译完成后你可以在相关的 workflow 页面或者Upload firmware to WeTransfer步骤的日志中找到下载链接。

上传固件到 Releases 页面

GitHub 的 Re­leases 页面通常用于发布打包好的二进制文件,无需登录即可下载。Ar­ti­facts 和网盘有保存期限,Re­leases 则是永久保存的。

  1. 编辑 work­flow 文件(.github/workflows/build-openwrt.yml),将环境变量 UPLOAD_WERANSFER 的值修改为 true
    UPLOAD_RELEASE: true
    
    译完成后你可以在 re­leases 页面找到下载链接。

    TIPS: 为了不给 GitHub 服务器带来负担,默认保留 3 个历史记录。

延迟编译时间

  1. 修改yml文件如下
    jobs:
    test:
     runs-on: ubuntu-latest
     timeout-minutes: 360 # 自己加时间
    

评论