【教程】会本地编译的情况下,怎么用GitHub Actions云编译?
lietxia opened this issue · 16 comments
为啥写这个
-
我看到其他2个教程把【怎么选机型】的部分略过了,这个很蛋疼,
因为并不是每个人都要编译x86固件,而且每个机型的机型写法都不相同,
你一个个的告诉他们哪个机型怎么写很麻烦,反而是直接make menuconfig产生.config文件反而更简单。 -
其他2个教程是让你fork源码,但是你fork的话,不会自动和lean的项目同步。等于说你要想办法解决冲突+想办法同步上游
基于以上两点,我是比较推荐用P3TERX
的actions代码的,简单说就是编译的时候抓取一次lean的项目,这样你一直是最新的。
前提
- 已经会本地编译
- 有GitHub账号
第1步
打开自己编译目录,先和大屌源码同步一下
git pull
./scripts/feeds update -a
./scripts/feeds install -a
然后执行 make menuconfig
选好后执行
make defconfig
./scripts/diffconfig.sh > seed.config
这样配置的差异部分就写入seed.config
这个文件了
在命令行可以输入cat seed.config
查看这个文件,也可以用别的软件打开
反正你先复制一下这个seed.config的文本内容,后面步骤要
第2步
- 打开 https://github.com/P3TERX/Actions-OpenWrt fork这个项目
点击绿色的按钮
第3步
其实已经没有第三步了,当你修改.config
文件的时候,他就会触发自动编译,点击Actions就能看到编译的状况
要下载固件的话,等他编译完(一般需要2小时)
- 进项目的Actions页面
- 点页面左侧的
Build OpenWrt
查看编译详情 - 页面
Artifacts
有个OpenWrt firmware
就是你要的固件( OpenWrt packages是插件包※没啥用)
详细的教程可以看https://p3terx.com/archives/build-openwrt-with-github-actions.html
OpenWrt-CI现在已经可以自动更新上游并推送了. 至于为什么不支持直接读取.config
, 我在教程里说过了, 但是我承认说的确实不太明白, 在这里我解释一下. 实际上是基于这几点考虑:
- 直接读取.config会造成后期依赖混乱. (这是最重要的一点. 在不断的update配置文件的过程中, 势必会提高混乱度. 不利于配置可控.)
- 这个问题很重要, 属于任何自己编译固件的人都需要了解的. 我可能会展开说下, 但是连续爆肝几天我已经累了(待编辑).
- 由于需要直接在首层目录下直接添加一个
.config
, 会随着克隆到本地而取代默认配置. - 补充上一条, 实际上, 在根目录下添加任何文件都是需要经过慎重考虑的.
- P3的脚本已有此功能.
- 我做这个脚本的初衷是伸手党友好以及自用, P3的脚本确实很方便, 但是不适合开发者.
其实我一直在推荐基础薄弱的玩家去使用P3的脚本.
我看@P3TERX 的教程,自己的编译环境生成
.config
后可以直接上传使用,不需要通过diffconfig.sh
来找出差异部分上传,两者有何区别呢?
diffconfig出来的比较小,只有差异部分。
.config原本是隐藏文件而且文件很长很大,这么操作一下方便一些。
区别用一个例子解释,(使用旧配置编译,用到新版的时候有区别。如果都是用最新源码产生的就没区别)
-
我选了samba插件
make memuconfig出来的完整配置文件:会写着启用samba
而diffconfig比较后,因为和默认选项一样,所以整个一行都没有,也不会写到seed.config里 -
然后lean更新了一个插件cifsd,用来取代samba和samba4,把samba的默认启用取消了。
如果直接用diffconfig产生的旧的seed.config直接编译的话:
samba消失,cifsd编进来了(重建.config的时候,samba因为默认值变成不选择了,所以新固件samba会消失。cifsd因为是默认值所以会编译进来)
如果用make menucongfig产生的旧的.config文件直接编译:
就会变成samba和cifsd一起编译进来
我看@P3TERX 的教程,自己的编译环境生成
.config
后可以直接上传使用,不需要通过diffconfig.sh
来找出差异部分上传,两者有何区别呢?diffconfig出来的比较小,只有差异部分。
.config原本是隐藏文件而且文件很长很大,这么操作一下方便一些。区别用一个例子解释,(使用旧配置编译,用到新版的时候有区别。如果都是用最新源码产生的就没区别)
- 我选了samba插件
make memuconfig出来的完整配置文件:会写着启用samba
而diffconfig比较后,因为和默认选项一样,所以整个一行都没有,也不会写到seed.config里- 然后lean更新了一个插件cifsd,用来取代samba和samba4,把samba的默认启用取消了。
如果直接用diffconfig产生的旧的seed.config直接编译的话:
samba消失,cifsd编进来了(重建.config的时候,samba因为默认值变成不选择了,所以新固件samba会消失。cifsd因为是默认值所以会编译进来)如果用make menucongfig产生的旧的.config文件直接编译:
就会变成samba和cifsd一起编译进来
感谢解答!
基于以上两点,我是比较推荐用
P3TERX
的actions代码的,简单说就是编译的时候抓取一次lean的项目,这样你一直是最新的。
😯我是萌新,村里刚通网
Actions-OpenWrt对于上传自定义package是无效的,如果想进阶添加自己专属的定制可以试试build-openwrt
基于以上两点,我是比较推荐用
P3TERX
的actions代码的,简单说就是编译的时候抓取一次lean的项目,这样你一直是最新的。我是萌新,村里刚通网
Actions-OpenWrt对于上传自定义package是无效的,如果想进阶添加自己专属的定制可以试试build-openwrt
如果你是直接 push 到仓库,那么确实无效,因为我已经删除了相关代码。但这并不代表不能添加,你可以以拉取代码仓库的方式去添加,相关的使用方法可以去看我的博客。如果使用上有什么问题,欢迎随时提出来,后续我会持续改进我的方案。
OpenWrt-CI现在已经可以自动更新上游并推送了. 至于为什么不支持直接读取
.config
, 我在教程里说过了, 但是我承认说的确实不太明白, 在这里我解释一下. 实际上是基于这几点考虑:
直接读取.config会造成后期依赖混乱. (这是最重要的一点. 在不断的update配置文件的过程中, 势必会提高混乱度. 不利于配置可控.)
- 这个问题很重要, 属于任何自己编译固件的人都需要了解的. 我可能会展开说下, 但是连续爆肝几天我已经累了(待编辑).
由于需要直接在首层目录下直接添加一个
.config
, 会随着克隆到本地而取代默认配置.补充上一条, 实际上, 在根目录下添加任何文件都是需要经过慎重考虑的.
P3的脚本已有此功能.
我做这个脚本的初衷是伸手党友好以及自用, P3的脚本确实很方便, 但是不适合开发者.
其实我一直在推荐基础薄弱的玩家去使用P3的脚本.
请问那个upstream的脚本会自动与L大的源码同步?是定时的还是什么时候?它自动同步完后会自动编译一次吗?
不错哦
虽然有点一知半解,但是感觉大神就是大神,考虑问题比我这样的萌新全面多了
最近几天编译的不能下载了是怎么回事,那个Build OpenWrt不能点进去了。。。
最近几天编译的不能下载了是怎么回事,那个Build OpenWrt不能点进去了。。。
连这个都要到这里问了?
最近几天编译的不能下载了是怎么回事,那个Build OpenWrt不能点进去了。。。
临时解决方法
按f12打开控制台,切换到console
(或者叫控制台
),输入以下代码回车
(function () {
var a = document.querySelectorAll("a.link-gray-dark.css-truncate.css-truncate-target");
for (var i = a.length; i--;) { a[i].innerText = "openwrt"; }
})()
彻底解决方法
检查yaml文件的
#=================================================
# https://github.com/P3TERX/Actions-OpenWrt
# Description: Build OpenWrt using GitHub Actions
# Lisence: MIT
# Author: P3TERX
# Blog: https://p3terx.com
#=================================================
name: Build OpenWrt
这里的名字是不是删掉了
最近几天编译的不能下载了是怎么回事,那个Build OpenWrt不能点进去了。。。
临时解决方法
按f12打开控制台,切换到
console
(或者叫控制台
),输入以下代码回车(function () { var a = document.querySelectorAll("a.link-gray-dark.css-truncate.css-truncate-target"); for (var i = a.length; i--;) { a[i].innerText = "openwrt"; } })()
彻底解决方法
检查yaml文件的
#================================================= # https://github.com/P3TERX/Actions-OpenWrt # Description: Build OpenWrt using GitHub Actions # Lisence: MIT # Author: P3TERX # Blog: https://p3terx.com #================================================= name: Build OpenWrt
这里的名字是不是删掉了
如果以release方式触发的话删除当前release就能显示名字了
我看@P3TERX 的教程,自己的编译环境生成
.config
后可以直接上传使用,不需要通过diffconfig.sh
来找出差异部分上传,两者有何区别呢?diffconfig出来的比较小,只有差异部分。
.config原本是隐藏文件而且文件很长很大,这么操作一下方便一些。区别用一个例子解释,(使用旧配置编译,用到新版的时候有区别。如果都是用最新源码产生的就没区别)
- 我选了samba插件
make memuconfig出来的完整配置文件:会写着启用samba
而diffconfig比较后,因为和默认选项一样,所以整个一行都没有,也不会写到seed.config里- 然后lean更新了一个插件cifsd,用来取代samba和samba4,把samba的默认启用取消了。
如果直接用diffconfig产生的旧的seed.config直接编译的话:
samba消失,cifsd编进来了(重建.config的时候,samba因为默认值变成不选择了,所以新固件samba会消失。cifsd因为是默认值所以会编译进来)如果用make menucongfig产生的旧的.config文件直接编译:
就会变成samba和cifsd一起编译进来
如果说我要禁用Lean大默认选中的插件呢 在config里加入 =n吗?还是is not set ? 如果实现 make memuconfig中M的功能 只编译成ipk但不进入固件呢,是=m还是=“!”?
为什么新建了.config之后action没反应呢?在此之前我修改了默认的仓库地址到了我fork的仓库,跟这个有关系吗?action里手动开始可以吗?
有没有大佬教教GitHub Actions云编译如何把指定的ipk也发布出来?
例如ssp或passwall