使用GitHub Actions云编译OpenWrt

前言

一开始在玩软路由时,需要下载安装别人编译好的固件,但别人的固件有很多的插件,如果自己的硬件性能强大还可以,如果硬件性能不行,那只能退而求次选择精简版的固件,但精简版可能又没有自己需要的功能。而有些人则有强迫症,不需要一些自己用不到的固件存在在系统里很碍眼。虽然可以自己卸载,但只是在界面去除了,就像系统还原一样,重置系统还会恢复到原来的样子很难爱……总之各种样的问题吧,这样的情况博主之前也有这样的焦虑,只能走上自编译固件这条路。自编译固件可以完美契合自己的需要,还可以为OpenWrt支持的各品牌路由器刷入固件。
但是博主本地编译过几次,都是以失败告终,博主不推荐本地编译,一是本地机器配置不强的话,编译时间太长,我记的第一次编译用了一上午,后面有一次编译用了一白天,啥也不敢动怕给机器增加负担,增加编译时长。二是网络不行,虽然挂了全局梯子,但也不能完全保证网络连通性,就放弃了。后来用了一段时间别人制作的固件,当时也看了别人写自己编译的教程文章,但是博主是小白一个,也没敢想,后来因为强迫症,抱着试试看的心情鼓捣了几天就成功了。
本教程以x86架构为例,由于楼主没有其他可以刷OpenWrt系统的品牌路由器,需要的自己试。

准备

windows10电脑、github账号、梯子。

搭建编译环境

● 系统安装

你可以使用虚拟机、物理机安装ubuntu,如果不会部署虚拟机那就直接在win10应用商店里下载ubuntu系统。

● 创建用户

Enter new UNIXusername 用户名
New password 密码
Retype new password 再输入一次密码

● 配置编译环境

依次执行以下命令。

				
					sudo apt update -y
				
			
				
					sudo apt full-upgrade -y
				
			
				
					sudo apt install -y ack antlr3 aria2 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 libpython3-dev qemu-utils \
rsync scons squashfs-tools subversion swig texinfo uglifyjs upx-ucl unzip vim wget xmlto xxd zlib1g-dev
				
			

下载源代码。

				
					git clone https://github.com/coolsnowwolf/lede
				
			

更新 feeds 并选择配置,依次执行以下代码。

				
					git clone https://github.com/coolsnowwolf/lede
				
			
				
					./scripts/feeds update -a
				
			
				
					./scripts/feeds install -a
				
			

配置openwrt

● X86

				
					make menuconfig
				
			

选择配置。
最上面的一行即代表的X86平台。如果编译X86,只要第一个选择X86第二项和第三项就不用变更。

● 为其他平台编译固件

第一行选择所属芯片,第二行看情况选择,我没有编译过品牌路由器的固件就没试过。第三行为选择路由器型号。比如我这里选择的是博通BCM47XX/53XX(ARM),在第三行里选择是使用这个架构的路由器型号斐讯K3。即可为斐讯K3编译固件。

然后是输出镜像格式,有ISO、和VM和VirtualBox等虚拟机支持的格式镜像等。一般X86不需要变动。

然后就是最激动人心的插件,在Applications菜单下。
按方上下键选择插件,空格键选择:“*”代表选中,会编译到固件里,M代表只编译成IPK格式的插件。尖括号代表插件,中括号代表插件可选功能。

选择完后返回到最开始选择X86的的界面,使用左右方向键选择”Sava”保存配置。
然后在电脑里找到以下路径C:\Users\Administrator\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04LTS_79rhkp1fndgsc\LocalState\rootfs\home\lulu\lede
把.config文件里的内容复制出来备用。

至此我们的目的完成了,忙碌这么多就是为了得到这个.config文件。

编译

进入 P3TERX/Actions-OpenWrt 项目页面,点击页面中的 Use this template (使用这个模版)按钮。

填写仓库名称,然后点击Create repository from template(从模版创建储存库)按钮。

经过几秒钟的等待,页面会跳转到新建的仓库,内容和我的项目是相同的。然后点击Create new file(创建新文件)按钮。

文件名填写为.config,把生成的.config文件的内容复制粘贴到下面的文本框中。

翻到页面最下方,点击Commit new file(提交新文件)按钮。

开始编译。

不出意外,根据你配置等一到四个小时左右就会看到编译好的固件。
默认用户名为:root,密码为Password,IP为192.168.1.1。

进阶使用

● SSH 连接到 Actions(不需要第一步本地搭建环境,在线选择配置)

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

在触发工作流程后,在 Actions 日志页面等待执行到SSH connection to Actions步骤,会出现类似下面的信息:

复制 SSH 连接命令粘贴到终端内执行,或者点击网址打开网页终端操作。(网页终端可能会遇到黑屏的情况,按 Ctrl+C 即可)。然后复制粘贴以下命令来进行配置。

				
					cd openwrt && make menuconfig
				
			

然后就和本地一样选择配置即可。

完成后按Ctrl+D组合键或执行exit命令退出,后续编译工作将自动进行。

● 自定义环境变量与功能

打开 work­flow 文件(.github/workflows/build-openwrt.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
环境变量功能说明
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-part1.sh 和 diy-part2.sh,它们分别在更新与安装 feeds 的前后执行,你可以把对源码修改的指令写到脚本中,比如修改默认 IP、主机名、主题、添加 / 删除软件包等操作。但不仅限于这些操作,发挥你强大的想象力,可做出更强大的功能。

● 添加额外的软件包

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

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

原理是把软件包源码放到 package 目录下,编译时会自动历遍,与本地编译是一样的。

● 自定义 feeds 配置文件

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

● 自定义源码

默认引用的是 Lean 的源码,如果你有编译其它源码的需求可以进行替换。
编辑 work­flow 文件,修改下面的相关环境变量字段。

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

● 多编译方案

基于 Github Ac­tions 可同时运行多个工作流程的特性,最多可以同时进行至少 20 个编译任务。也可以单独选择其中一个进行编译,这充分的利用到了 GitHub Ac­tions 为每个账户免费提供的 20 个 Ubuntu 虚拟服务器环境。
假设有三台路由器的固件需要编译,比如 K2P、x86_64 软路由、新路由 3。
生成它们的.config文件
分别将它们重命名为k2p.config、x64.config、d2.config放入本地仓库根目录。
复制多个 workflow 文件(.github/workflows/build-openwrt.yml)。为了更好的区分可以对它进行重命名,比如k2p.yml、x64.yml、d2.yml。此外第一行name字段也可以进行相应的修改。然后分别用上面修改的文件名替换对应 workflow 文件中下面两个位置的.config,不同的机型同样可以使用不同的 DIY 脚本。

				
					...
    paths:
      - '.config'
...
        CONFIG_FILE: '.config'
        DIY_SH: 'diy.sh'
...

				
			

二次编译

				
					进入lede目录
cd lede
拉取更新
git pull
升级feeds
./scripts/feeds update -a
安装feeds更新
./scripts/feeds install -a
配置固件
make defconfig
				
			
0 0 投票数
文章评分
订阅评论
提醒
guest
0 评论
最旧
最新 最多投票
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论!x