关于OpenWrt/Lede固件编译
在介绍固件编译流程前,我们先介绍一些基础内容,以方便部分初级用户。
1.路由器固件
路由器的固件,相当于路由器上运行的系统。一般来说,路由器的出厂固件,相对比较稳定,但是在功能上会有所欠缺。比如你想要在官方固件下实现科学上网功能,基本是不可能实现的。
而OpenWrt/Lede则属于第三方开发的路由器固件,开源,基于Linux。相对官方固件来说,OpenWrt/Lede更加的开放,可以选装各种第三方插件,实现更多功能。
2.OpenWrt/Lede的特点
优点:
- 开放,可定制
- 支持安装或修改第三方插件
不足:
- OpenWrt/Lede官方固件功能非常有限,只提供基础功能。如果要实现去广告、科学上网、内网穿透等功能,需要另外安装插件。
- 在不同的硬件或内核下、各插件并不通用,也就是插件碎片化。
3.Lean OpenWrt/Lede的特点
Lean的OpenWrt/Lede,是在OpenWrt/Lede官方源码的基础上,额外添加多个常用插件,功能可选,基本解决了OpenWrt/Lede官方原版固件的不足。
优点:
- 基于OpenWrt最新源码,可自由定制插件功能,生成符合自己需求的个性化固件。
- 集成多个常用插件,可选安装,比如独有的Adbyby Plus+、ShadowsocksR Plus+(SSR Plus+)。
- SSR Plus+又集成了常用的科学上网工具:Shadowsokcs/SSR/V2Ray/Trojan/Kcptun路由器客户端。
- 可选集成OpenVPN、WireGuard路由器客户端。
不足:
- Lean的固件,提供的是源码,目前并不提供成品固件,所以使用前需要自己动手编译。这一点其实不算不足,更多是由于路由器硬件的碎片化、以及个人功能定制的差异化。
4.编译Lean的固件难度大吗?
编译,只是路由器固件成品前的最后一步。相当于在生产线上,各种原材料已经为你准备好了,你要做的,就是根据几个操作指令,让机器将原材料组装为成品。
因此,编译OpenWrt/Lede固件,并不需要太多的编程基础。也就是说难度并不大,但需要一定的耐心。
具体编译过程我们下面会详细介绍,争取让初级用户也能看懂会操作。
编译环境要求
建议在搭建编译环境时,参考以下要求,以提高编译成功率。
1.硬件环境:
编译过程比较消耗CPU和内存,另外对硬盘空间也有一定要求。
建议:
- CPU:双核或以上
- 内存:2G或以上
- 硬盘:30G以上,推荐50G起步。
2.系统环境:
编译固件需要在Linux系统下进行,作者推荐的是Ubuntu 18.04。
如果你暂时没有这个系统,那么有两种方法供参考:
- 在国外VPS服务器上,安装Ubuntu系统(推荐)。
- 在Windows系统下,使用虚拟机搭建Ubuntu系统(不推荐)。
为什么不推荐本地设备上安装Ubuntu呢,因为网络环境问题,下面具体解释。
3.网络环境:
在OpenWrt/Lede固件编译过程中,需要下载很多依赖,其中大部分资源都在国外服务器。
在国内网络环境下,下载速度会非常慢,甚至部分资源会下载失败,可能会造成两种后果:
- 部分资源下载失败,造成编译报错,白白浪费时间。
- 侥幸下载成功,但会大幅拉长编译时间,甚至一到两天都无法完成。
那如果挂代理编译呢,这种方法也不推荐,因为这样只能避免下载失败,但是下载速度仍然得不到保证,编译时间可能被大幅拖长。
综合以上几点,还是推荐在国外VPS服务器上完成编译,下载速度轻松达到几十MB/s。
符合以上要求的VPS服务器太贵?放心,我们下面介绍的方法,可以让你在最低成本下,使用符合要求的VPS完成编译。
编译环境的搭建
根据上文的要求,我们需要一台较高配置的国外VPS服务器。但是在完成编译任务后,就没有使用需求了。
这种情况下,年付的VPS是不现实的,价格太贵。
而Vultr的按时计费规则,恰好可以满足我们的要求,可以临时购买一台高配置VPS,使用完成后销毁即可停止计费。
Vultr VPS服务器的选择:
1.进入Vultr官方网站:https://www.vultr.com,登录Vultr账号。
如果你还没有Vultr账号,建议先完成账号注册和充值,具体可以参考:Vultr VPS服务器购买及使用教程 可支付宝哦
2.登录Vultr后,点击界面中的+号,进入VPS购买界面。
3.在选择配置时,建议选择High frequency(高频)系列,编译速度更快。
4.地区可以选Los Angeles(洛杉矶),系统选Ubuntu 18.04,硬件配置可以选 双核4G内存。
关于价格:
Vultr是按小时计费,以下图的$24/月为例,如果你在8个小时内完成编译后销毁,那么所需费用大概在0.3左右,非常便宜了。
5.其它各项可以不填,点击Deploy Now按钮就可以创建服务器了。
6.稍等几分钟,服务器创建完成后,建议先为服务器安装BBR,以提高编译过程中的网络稳定性:
编译前最后一步:创建非root用户。
Lean固件源码作者,要求使用非root用户进行编译。但是默认情况下,Vultr提供的是root用户。
这样我们就需要在编译前,为服务器创建一个新的用户,下面以创建名称为free的用户为例。
具体步骤:
1.先以root用户使用Putty登录,右键复制以下命令运行,创建用户free:
1 | sudo useradd –m free –d /home/free –s /bin/bash |
2.设置新用户密码,注意设置时密码不显示:
1 | sudo passwd free |
3.修改用户权限文件sudoers为可写:
1 | sudo chmod +w /etc/sudoers |
4.用Winscp打开/etc/sudoers文件,找到如下位置:
1 2 | # User privilege specification root ALL=(ALL:ALL) ALL |
在以上内容的下面一行,添加如下代码后保存:
1 | free ALL=(ALL:ALL) ALL |
5.修改sudoers文件权限为只读:在Winscp中右键点击sudoers文件——属性,去掉W权限前的对勾。
Lean OpenWrt/Lede 固件编译流程
建议避开晚上网络高峰期,以避免中途掉线,提高编译成功率。
注意:
Lean源码在最近的更新后,默认去除了ssr plus+模块,如果你想要重新添加这一模块,建议提前参考:
解决Lean固件源码编译时找不到luci-app-ssr-plus的问题 重新添加ssr plus+
具体编译流程:
1.使用Putty以刚才创建的free用户登录VPS,右键复制以下命令运行:
1 | sudo apt–get update |
2.运行以下命令安装部分编译依赖:
1 | sudo apt–get –y install build–essential asciidoc binutils bzip2 gawk gettext git libncurses5–dev libz–dev patch python3.5 unzip zlib1g–dev lib32gcc1 libc6–dev–i386 subversion flex uglifyjs git–core gcc–multilib p7zip p7zip–full msmtp libssl–dev texinfo libglib2.0–dev xmlto qemu–utils upx libelf–dev autoconf automake libtool autopoint device–tree–compiler g++–multilib antlr3 gperf |
3.运行如下命令将Lean的源码下载至服务器:
1 | git clone https://github.com/coolsnowwolf/lede |
4.依次运行如下命令开始配置编译参数:
1 2 3 4 | cd /home/free/lede ./scripts/feeds update –a ./scripts/feeds install –a make menuconfig |
5.出现下图界面时,就可以对路由器固件进行功能定制了。依次选好最上面的三项,找到自己的路由器型号。
其中:
- Target System:可以选择路由器的CPU品牌、架构等信息。
- Subtarget:进一步精确选择,一般可以精确到CPU型号(部分路由器可能不显示此项)。
- Target Profile:可以选择具体的路由器型号。
- Luci:可自定义插件,建议首次编译时,先不要修改默认配置,以提高编译成功率。
- 其它各项:一般无需修改,保持默认即可。
如果你不清楚自己路由器的CPU品牌、架构、型号等信息,那么可以进入以下文章链接,按Ctrl+F5,根据路由器型号进行反查。
哪些路由器支持刷OpenWrt/LEDE固件实现科学上网?品牌型号及CPU架构查询列表
按键指南:
- 上下键:选中项目
- 回车键:进入所选项目,或者在进入项目后,可以选择小项并退出。
- 左右键:可以选中最下面的菜单项,包括Exit(退出)、Save(保存)等。
- y键:小项目中按y添加功能模块
- n键:小项目中按n取消功能模块
6.选好路由器型号后,其它各项目都已经随之调整好。
额外调整(可选):
IPv6支持:进入Extra packages项目,使用方向键选中ipv6helper,按y键添加功能。
U盘/移动硬盘支持:如果你的路由器有USB接口,建议选中并添加automount和autosamba功能。
在路由器flash足够的情况下,其它像Adbyby Plus+、ShadowsocksR Plus+等,都是默认集成的。
7.以上选择完成后,就可以保存配置,然后退出参数配置界面
如何保存配置:
键盘右键选中菜单中的Save,按回车键进入保存界面。在下图界面中,直接按回车键保存:
出现下图界面后,回车退出:
最后一路Exit退出配置界面。
8.完全退出配置界面后,运行以下命令下载dl库
1 | make –j8 download V=s |
9.运行以下命令开始编译。
1 | make –j1 V=s |
注意:
- 首次编译耗时较长,可能需要2-5个小时耐心等待。首次编译成功后,再次编译的时间会大幅缩短。
- 以上命令中的-j1,表示单线程编译,目的是为了万一出现错误时,可以按顺序查看错误提示,找出问题所在。如果多线程编译的话,错误提示可能是乱序的。
- 如果你对编译效率要求较高,可以修改参数提高线程数,比如双核CPU改为-j2。
10.最后编译成功后,会出现下图提示。编译成功后的固件,位于/home/free/lede/bin/targets,我们一般选择名称中带有factory的固件下载使用。
路由器固件刷写成功后,默认配置如下:
- IP地址:192.168.1.1
- 登录用户名:root
- 登录密码:password
编译失败报错怎么办
在进行固件编译时,有一定机率会报错,同时编译会提前中止,也就是编译失败。
如果出现这种情况,建议查看编译中止时的报错信息(error)。
看下报错信息与哪个组件有关,找到后重新配置编译参数,暂时去除这个组件再尝试进行编译。
如何重新配置参数、添加/删除插件,进行个性化定制
我们上文提到过,首次编译时,建议不要修改默认配置,以提高编译成功率。
首次编译成功后,我们就可以再次修改配置,根据自己的需要,添加或删除部分插件。
注意:
可选插件的多少,与你的路由器闪存大小相关,请在默认配置的基础上,有限添加插件,否则可能会造成编译生成的固件太大,无法成功刷入路由器。
具体步骤:
1.删除原配置:
1 2 | cd /home/free/lede rm –rf ./tmp && rm –rf .config |
2.重新配置参数:
1 | make menuconfig |
3.在配置界面选好路由器型号后,进入Luci项目下的Applications,选择需要添加的插件,按y添加,或者选中不需要的插件,按n删除。
配置完成后保存,退出配置界面。
4.开始二次编译,第二次编译速度很快,可能十几分钟就可以完成。
1 | make –j$(($(nproc) + 1)) V=s |
如何更新源码,进行二次编译
在OpenWrt/Lede固件编译完成后,如果你觉得在一段时间之后,可能还需要根据最新源码进行二次编译。
那么低成本二次编译流程:
1.将当前系统做一个快照(Snapshots),并记住当前用户密码,以备下次直接使用,具体可以参考:Vultr VPS服务器购买及使用教程 可支付宝哦
2.销毁当前服务器,以停止计费。
3.在下次需要编译时,重新创建Vultr服务器,记得选择创建好的快照进行恢复。
4.使用原free用户名和密码登录,依次运行以下命令更新源码,并开始编译:
1 2 3 4 5 6 | cd /home/free/lede git pull ./scripts/feeds update –a && ./scripts/feeds install –a make defconfig make –j8 download make –j$(($(nproc) + 1)) V=s |
以上采用恢复快照的方式,可以省去首次编译的大量时间消耗,快速完成二次编译,同时节省成本花销。