关于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固件,并不需要太多的编程基础。也就是说难度并不大,但需要一定的耐心。
具体编译过程我们下面会详细介绍,争取让初级用户也能看懂会操作。
5.有其它类似Lean固件的OpenWrt/LEDE源码可供编译吗?
Lienol的OpenWrt/Lede固件源码,是在Lean源码的基础上,做了比较多的修改和定制,比如较有特色的Passwall等一些新插件。
如果在编译本文Lean的固件时出现问题,或者想要尝试其它固件,可以尝试Lienol版路由器固件。
具体内容可以参考:
Lienol Openwrt固件编译教程 重新添加Passwall(Shadowsocks/SSR/V2Ray/Trojan)
编译环境要求
建议在搭建编译环境时,参考以下要求,以提高编译成功率。
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功能。
各种插件可以在Luci项目下的Applications中找到,在路由器flash足够的情况下,像Adbyby Plus+、ShadowsocksR Plus+等插件,都是默认集成的。
关于各插件的详细功能介绍,可以参考:Lean OpenWrt/Lede固件编译所含全部插件列表功能注释
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
|
以上采用恢复快照的方式,可以省去首次编译的大量时间消耗,快速完成二次编译,同时节省成本花销。