最近在折腾 OpenWrt 编译,包括固件编译和单个插件编译,记录下踩过的坑,将持续更新。
固件编译流程
首先架设好编译环境:Linux 平台(推荐 Ubuntu),把软件包更新到最新并且按照固件的源码说明安装好依赖。至于流程说起来比较简单,就是以下几步:
# 第一步
git clone <源码地址>
# 或是在现有仓库(也就是编译所在的根目录)中执行
git pull # 更新源码仓库
# 第二步
# 在仓库根目录执行
./scripts/feeds update -a # 更新插件源
./scripts/feeds install -a # 执行后在下一步创建 .config 时才能看到相应的插件
# 第三步
make menuconfig
# 创建 .config 文件,这一步正是让许多小白玩家迷惑的步骤。
# 图形化的菜单虽然简化了操作,但里面那么多选项,到底哪些该选哪些不该选,完全是摸不着头脑
# 虽然能搜索到主菜单的一些说明,但很多具体选项依然不知道是干嘛用的
# 如果不清楚该选啥,最简单的办法是执行
make defconfig # 生成一个默认配置后再 make menuconfig
# 然后在图形选项菜单中的 Luci ---> Applications 中选择想要的插件就行
# ====原则上,选择越少,编译越容易成功====重点,重点,重点
# 因为选项越多,越容易产生依赖冲突,少选为佳
# 缺少的功能可以以后再单独进行编译
# 第四步
make download -j$
# 在软件源中下载上一步选中的插件的源码
# 软件源在 feeds.conf.default 中进行编辑,暂时略过,以后再说
# $ 代表的是线程数,用你的 CPU 线程+1就行,经测试,j5 以上就没有太明显的速度区别了
# 最后一步
make V=s -j1
# 开始编译,j1 表示用单线程编译,速度慢些,但首次编译成功率高些
# 根据官方文档还可以
make -j1 V=99 2>&1 | tee build.log | grep -i error
# 执行上条命令可以将编译过程的信息存储到 ./build.log, 在控制台仅高亮显示 error 信息
# 但蛋疼的是它会把所有含 error 字符串的信息全部高亮显示,包括一些正常的函数,比如 strerror()
# 平添诸多烦恼啊有木有
编译避坑指东
我本人感觉“墙”所带来的困扰是巨大的,编译过程中需要接入很多被“墙”的地址下载软件包,编译失败的原因有 99% 是下载失败造成的。
意思就是下面所说,可以避掉99%的坑。
梯子
几乎每个源码提供者都声明:“编译时要备好梯子”。备梯子是没问题,问题是不管 Ubuntu 还是 CentOS 所设置的系统代理,对于终端是无效的。
那么就得设置终端也要走代理。
# 终端全局代理配置:
vi ~/.bashrc # 如果终端是 bash
vi ~/.zshrc # 如果终端是 zsh
# 打开终端配置文件,加入以下命令:
export ALL_PROXY=socks5://<your_proxy_add>:<your_proxy_port>
# 你也可以直接在终端执行这条命令,区别是关闭终端后代理就取消了
# 当然也可以单独配置 http 和 https 代理(如果你的梯子不支持 socks)
export HTTP_PROXY=http://<your_proxy_add>:<your_proxy_port>
export HTTPS_PROXY=https://<your_proxy_add>:<your_proxy_port>
# 还有 golang 源也是无法下载成功的,需要换成国内镜像
# 在终端执行,或是在 ~/.bashrc 加入
export GOPROXY=https://proxy.golang.com.cn,direct
export GOPRIVATE=git.mycompany.com,github.com/my/private
# 国内 goproxy 的镜像还是蛮多的,可以自行搜索一下,然后根据官方的说明进行修改
# 最后如果修改了 ~/.bashrc 还需要执行
source ~/. bashrc # 重载配置
# 有时候还会用到 wget 命令,也需要单独设置
# “特喵的怎么那么烦,一个全局代理搞不定么?”
vi /etc/wgetrc
# 然后把 use_proxy = off 改为 on,并取消注释
use_proxy = on
经过前面的设置,软件包的下载就比较流畅了。前提是你的梯子要没问题。
个人认为这种时候还是在路由器上开启代理比较好,可以实现全局代理,没必要进行繁琐的设置。
更多
排除 Makefile 自带的错误,大神可以自行修改,我等小白无能为力以外;以上也说过了,编译中所含的软件包越少越好,能有效提高成功率。
至此,如果固件包没问题应该能顺利编译,再踩到坑的话继续在这里更新。
原文标题:Openwrt 编译失败原因汇总(持续更新)
原文链接:https://ixcrap.com/reasons-for-openwrt-compilation-failure.html
本站文章部分素材来源于网络,如有侵权请联系博主删除。文章可随意转载,但请保留原文出处。
尊重他人知识产权和劳动成果是互联网共享精神的基石!
原文链接:https://ixcrap.com/reasons-for-openwrt-compilation-failure.html
本站文章部分素材来源于网络,如有侵权请联系博主删除。文章可随意转载,但请保留原文出处。
尊重他人知识产权和劳动成果是互联网共享精神的基石!
还没有评论,快来坐沙发吧~