使用 GitHub Actions 编译openwrt固件

前言

Github Ac­tions 是 GitHub 推出的持续集成 (Con­tin­u­ous in­te­gra­tion,简称 CI) 服务,它提供了配置非常不错的虚拟服务器环境,基于它可以进行构建、测试、打包、部署项目。所以就有了 P3TERX 大佬已编写好的 Open­Wrt 编译解决方案。这篇文章就是介绍如何使用P3TERX 大佬项目,进行云编译 OpenWrt固件,并且还可以自定义自己想要的插件。

项目地址

准备工作

  • 注册一个Github账号
  • 搭建编译环境,用来生成.config配置文件,推荐使用Vmware安装Ubuntu虚拟机(需要自定义插件的这个必选)

    基础编译

    TIPS:这个编译只能编译出一个能正常使用的固件,很多插件都是没有的,关于自定义插件请看后面的进阶编译。
  • 首先必须要熟悉整个 Open­Wrt 的编译过程,这会让你非常容易上手并使用 GitHub Ac­tions 进行编译,即使你没有成功过。因为实际上本地编译近 90% 失败的原因是因为网络问题导致的,中国大陆特色,咱也不敢多说。GitHub Ac­tions 服务器由 Mi­crosoft Azure 提供,拥有万兆带宽,可以使编译成功率大大提升
  • 打开 P3TERX 编译项目,点击页面中的 Use this template (使用这个模版)按钮
  • 填写仓库名称,然后点击Create repository from template(从模版创建储存库)按钮
  • 经过几秒钟的等待,页面会跳转到新建的仓库,内容和P3TERX的项目是相同的。
  • 点击 Actions 选择 Build OpenWrt,然后点击 Run Workflow 选项,在点击 Run Workflow(运行工作流)按钮即可开始编译
  • 在等待编译完成的过程中,你可以进入这个项目点击右上角的star,这是对项目最大的支持。
  • 经过几个小时的等待,不出意外你就可以在 Actions 页面看到已经打包好的固件目录压缩包

    进阶编译

  • 如果你想要编译出更多的固件,可以使用这个方法,这个编译可以编译出多个固件,比如支持更多的插件,比如支持更多的系统,比如支持更多的平台。
  • 接下来说下如何自定义插件,首先得搭建一个编译环境,这个编译环境可以是虚拟机,也可以是本地编译,我这里使用的是VMware安装的Ubuntu,具体安装方法我就不说了,百度上有很多资料,我就不多说了,具体请看下面的编译过程。
  • 然后打开虚拟机,右键打开终端,然后输入以下指令更新软件包和安装编译依赖
    1
    2
    3
    4
    5
    6
    7
    8
    sudo apt update -y
    sudo apt full-upgrade -y
    sudo apt install -y ack antlr3 asciidoc autoconf automake autopoint binutils bison build-essential \
    bzip2 ccache cmake cpio curl device-tree-compiler fastjar flex gawk gettext gcc-multilib g++-multilib \
    git gperf haveged help2man intltool libc6-dev-i386 libelf-dev libglib2.0-dev libgmp3-dev libltdl-dev \
    libmpc-dev libmpfr-dev libncurses5-dev libncursesw5-dev libreadline-dev libssl-dev libtool lrzsz \
    mkisofs msmtp nano ninja-build p7zip p7zip-full patch pkgconf python2.7 python3 python3-pip qemu-utils \
    rsync scons squashfs-tools subversion swig texinfo uglifyjs upx-ucl unzip vim wget xmlto xxd zlib1g-dev
  • 接下来需要下载源代码,然后进入到源代码目录
    1
    2
    git clone https://github.com/coolsnowwolf/lede
    cd lede
  • 然后将插件库地址添加到配置文件进去,这里我使用的是kenzok8的插件库,打开feeds.conf.default,将插件库地址添加到最后一行并保存
    1
    2
    src-git kenzo https://github.com/kenzok8/openwrt-packages.git
    src-git small https://github.com/kenzok8/small.git
  • 配置文件修改好之后,输入以下指令更新feeds并安装插件
    1
    2
    ./scripts/feeds update -a
    ./scripts/feeds install -a
  • 然后输入make menuconfig进入编译配置
  • 在这个界面可以设置很多参数,包括平台,插件,系统,编译器等等,我这里就只设置了插件,其他参数没有设置,如果你想设置其他参数,可以自己点击这里查看,插件的详细设置可以看这里
  • 设置好参数之后,点击Save保存退出,然后打开源代码目录下的.config文件,把里面的内容全部复制
  • 然后打开刚刚新建的仓库,然后点击 Add file 选择 Create new file(创建新文件),文件名填.Config,把刚刚虚拟机上的.config复制的内容粘贴到里面去

  • 然后再次点击 Actions 选择 Build OpenWrt,然后点击 Run Workflow 选项,在点击 Run Workflow(运行工作流)按钮即可开始编译你的自定义固件,等待几个小时就可以在 Actions 页面看到已经打包好的固件目录压缩包

  • 更多进阶方法在p3terx博客查看,这里就不在赘述了