如何编译移植lean的固件到官方固件

以我现在的3865u软路由为例,移植lean的固件,打造最新版本的Openwrt固件。

作为用了lean的固件几年的老用户,lean的固件一直比较稳。lean的固件是开源的,ssr plus功能稳定且强大,因此更加有折腾的乐趣。看了好多软路由视频,基本上都是用的koolshare的,以前我也用过,觉得不是很稳,主要问题是koolshare默认开了多拨均衡,易掉线。另外软件中心有时刷不出来,没法安装科学上网等等。lean的固件基本没以上问题,编译时候可以根据自己的选择编译出自己的固件。
lean开源的openwrt地址是https://github.com/coolsnowwolf/lede ,直接编译肯定能成功。但是lean的固件由于某种原因,luci的版本固化在旧版本,且内核比官方有一定延迟。对于喜欢折腾的我来说,还是希望能用最新的openwrt固件来科学上网。

如何编译移植lean的固件到官方固件

    要编译自己的固件,你是windows系统的话,首先可以装上vmware虚拟机,再安装ubuntu18.04 lts版本,18.10版本我试了,有一些依赖错误,解决起来稍麻烦,不建议使用。另外编译固件,因为里面有GFW不喜的ss及V2ray,不全程翻墙将很难编译成功,将会在编译ss及v2ray时反复下载程序(因为被屏蔽了),请选择全局翻墙。安装vmware及ubuntu就略过了,网上教程很多。ubuntu装好后也装一下VMware tools,方便拷贝复制文件。安装VMware tools的方法是在ubuntu里面把VMware tools解压到主文件夹,进入到解压后的文件夹。然后运行下列命令进行安装。按提示操作。

sudo ./wmware-install.pl

ubuntu安装处理好了后,在桌面右键“打开终端”,运行下列命令

sudo apt-get update
sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch 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

依赖包安装好了后,我们克隆openwrt及lean的包到本地

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

—————————————————————————-

注1:2019-05-16 lean删除了ssr-plus代码,我们需要对lean的lede进行下面操作:
进入lede文件夹,右键“在终端打开”执行下列命令

#git checkout 2915c44a11ca0ee40b51ff5d9c18a0da1951e170

这样ssr-plus又回来了。建议把这个文件夹拷贝到其他地方备份,以后git pull大雕最新版本时再把备份的ssr-plus加到lede/packgage/lean里,也不影响后续版本更新。

注2:2019-07-08 风平浪静,lean又恢复了ssr-plus安装包,这一步git checkout 不再需要。
—————————————————————————-
这样,我们本地即有lede 和openwrt两个文件夹。lede文件夹是lean的源码,openwrt文件夹是官方的源码。

下面正式进入移植步骤。以下修改是基于我esxi下的软路由进行处理。
一、拷贝lede/packgage/lean文件夹到openwrt/package 里面
二、如果你不喜欢新版的luci可以修改openwrt的feeds, 在openwrt/feeds.conf.default 把这个文件换成lede下面的同名文件即可,需要最新版的luci此步略过。我没做修改,以下我们都是在新版luci下面操作。
三、自定义要安装的包,修改openwrt的include/target.mk文件,在DEFAULT_PACKAGES:=base-files libc libgcc busybox dropbear mtd uci opkg netifd fstools uclient-fetch logd 后面加上自己想要编译的内容,我修改好的文件是这样的

DEFAULT_PACKAGES:=base-files libc libgcc busybox dropbear mtd uci opkg netifd fstools uclient-fetch logd default-settings luci luci-app-aliddns luci-app-upnp luci-app-adbyby-plus luci-app-autoreboot luci-app-ssr-plus ddns-scripts_aliyun luci-app-vlmcsd luci-app-ramfree luci-app-flowoffload
其中,default-settings luci 必须要有,luci-app-ddns luci-app-upnp luci-app-adbyby-plus luci-app-autoreboot luci-app-ssr-plus ddns-scripts_aliyun luci-app-vlmcsd luci-app-ramfree luci-app-flowoffload  你根据选择使用。
把DEFAULT_PACKAGES.router:=dnsmasq iptables ip6tables…其中的dnsmasq改为dnsmasq-full,我修改好的内容见下方。
DEFAULT_PACKAGES.router:=dnsmasq-full iptables ip6tables ppp ppp-mod-pppoe firewall odhcpd-ipv6only odhcp6c kmod-ipt-offload

建议把 ip6tables odhcpd-ipv6only odhcp6c这几个去掉,不然手机浏览有ipv6地址的网站时,可能不能访问;另外出国科学上网时也有干扰。

四、修改目标路由器固件的包,在/target/linux/x86/Makefile 里DEFAULT_PACKAGES 处修改,我就加了个htop,方便观察,注意不要加autocore,加了后会和新版luci冲突,导致主页错误。如果你是实体机写盘安装,注意此处要加上相关硬件驱动,可参考lean此处的设置。如果你是只编译一个固件,也可加在上一步的DEFAULT_PACKAGES 处。
五、应用fullconenat ,拷贝lede/package/network/config/firewall/里的makefile文件及patches文件夹到openwrt下面的同目录里,覆盖openwrt官方的。
六、openwrt官方的活动连接数较少,修改“活动连接数”在package/kernel/linux/files/sysctl-nf-conntrack.conf里net.netfilter.nf_conntrack_max=16384修改为65536,或者更大。
七、修改主机名和ssr-plus彩蛋,openwrt/package/lean/default-settings/files/zzz-default-settings,  在zzz文件中uci set system.@system[0].timezone=CST-8后增加

uci set system.@system[0].hostname=Openwrt-x86
   Openwrt-x86可以改为你想要的名字
解封ssr彩蛋,在该文件exit 0 上方适当的位置加上下列命令,安装后可以直接看到ssr-plus
echo 0xDEADBEEF > /etc/config/google_fu_mode

如果仅是自用固件,可以在该文件exit 0 上方适当的位置加上加入下列命令,设置Wan网口,添加路由器pppoe拨号账户密码,装好即可上网

uci set network.wan.proto='pppoe'
uci set network.wan.username='宽带账号'
uci set network.wan.password='宽带密码'
uci set network.wan.ifname='eth3'   //我的wan接口是eth3,你要根据自己的路由器情况改
uci set network.wan6.ifname='eth3'
uci commit network

想要修改管理ip地址和lan口配置,可以在该文件exit 0 上方适当的位置加上加上下列命令

uci set network.lan.ipaddr='192.168.0.8'    //改成你想要默认的管理ip
uci set network.lan.proto='static'          //lan口静态IP方式
uci set network.lan.type='bridge'           //设置桥接
uci set network.lan.ifname='eth0 eth1 eth2 eth4 eth5' //根据自己的路由器情况改Lan口 
uci commit network

八、v2ray及ssr-puls版本的处理

1、如果v2ray官方有最新版,我们可以在openwrt/package/lean/v2ray/makefile 里PKG_VERSION:=v4.18.0修改成最新版本号。(目前lean大已经改为预编译好的v2ray了,因此此处无需修改)
2、ssr-plus修改,在新luci下需要处理下,不然安装后不能科学上网,你增加服务器的时候会出现错误。 删除luci-app-ssr-plus/luasrc/model/cbi/shadowsocksr/server.lua和client-config.lua里的’local ipkg = require(“luci.model.ipkg”)’  ,新版下就可以输入你vps的服务器地址了。

九、以上处理根据习惯处理好了,就可以安装feeds包了,打开openwrt文件夹,右键“在终端打开”运行下列命令

./scripts/feeds update -a && ./scripts/feeds install -a

运行好了后我们可以可以对luci进行修改。要原汁原味可以不做修改。
1、openwrt默认是以kb显示内存可用数的,我们可以修改为MB显示,在openwrt /feeds/luci/modules/luci-mod-status/htdocs/luci-static/resources/view/status/index.js中找到下面的内存处,修改1024改为1048576 ,后面的kb改为MB
2、在/feeds/luci/modules/luci-mod-status/luasrc/view/admin_status/index /10-system.htm里面把第三个<div class=”tr”><div class=”td left” width=”33%”><%:Architecture%></div><div class=”td left”><%=pcdata(boardinfo.system or “?”)%></div></div>修改为下面的

<div class="tr">
	<div class="td left" width="33%"><%:Architecture%>
	</div>
	<div class="td left"><%=pcdata(boardinfo.system or "?")%>:<%=luci.sys.exec("cat /proc/cpuinfo | grep 'core id' | sort -u | wc -l ")%>Core<%=luci.sys.exec("cat /proc/cpuinfo | grep 'processor' | wc -l")%>Thread
	</div>
</div>

3、要显示目前cpu频率,可以在上面的代码回车后,加上一行

<div class="tr">
	<div class="td left" width="33%"><%:CPU Info%></div><div class="td left"><%=luci.sys.exec("grep 'MHz' /proc/cpuinfo | cut -c11- |sed -n '1p'")%> MHz <%=luci.sys.exec("sensors | grep 'Core 0' | cut -c10-24")%>
	</div>
</div>

十、进行编译,在openwrt文佳佳里面右键“在终端打开”输入make menuconfig 命令进行编译
1、target system 选择X86,subtarget选择x86_64,target images里关闭gzip images。修改固件大小可以在 Kernel partition size (in MB)     Root filesystem partition size (in MB)  进行修改。
2、luci-application里面选择你要安装的包,注意把ssr-plus下面的都选上,这样可以用v2ray,ss-libev进行科学上网,其他根据情况选择。
退出该界面即可进行编译了。
十一、进行编译,输入下列命令

make -j8 V=s

-j8还是j4根据你cpu内核定,我是9900k,直接8核编译,需时大概15-20min左右,即可编译好。生成的文件在openwet/bin/target/x86/64里面,openwrt-x86-64-combined-squashfs.img就是我们要的文件,以后升级我们可以在target images里打开gzip images,升级就用openwrt-x86-64-combined-squashfs.img.gz文件。

这样我们就获得了我们自定义的openwrt官方固件,可以科学上网了。
本地vmware下测试的
本地vmware下测试的
另外新版luci下lean的ssr-plus、flow-offload文件不能直接重启,需要到固件里“系统”-“启动项”里面选择相应模块重启,这样才能重启该模块。为防止ipv6干扰ssr-plus,可以在“网络”-“接口”-“lan”处“ipv6分配长度”设为“已禁用”。
最后推荐下搬瓦工的GIA-cn2服务器,我这边速度真的很快。
搬瓦工GIA-CN2 youtube速度

技术不断升级,请注意文章时效性。
本站文章,欢迎转发。转载请注明出处:https://www.bandwh.com/net/38.html

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

评论列表(24条)

  • 匿名
    匿名 2019年7月4日 23:45

    刚刚测试了,一样,还是有些条目显示没数据

  • kenzo
    kenzo 2019年7月4日 23:09

    up主,请问编译官方的openwrt,内核是4.19.56.成功编译了,没有勾选autocore,但是主页除了主机型号,架构,固件,内核版本信息有显示,下面的本地、运行时间、内存、网口信息都无,主页显示不完整,是什么错误(移植了lean的),但是我把feeds.conf.default的官方luci换成L大的luci后,固件一切正常

    • BandWh.com
      BandWh.com 2019年7月5日 08:32

      @kenzo近期我没编译新版,可能新版luci又做了变化。还有你主页不完整可能是有js缓存导致的。可打开chrome“无痕窗口”进入主页看看是否正常

  • 匿名
    匿名 2019年7月3日 18:06

    你好,我按照你的操作完成了编译,使用的是newifi d2路由器,ssr-plus总是显示ShadowsocksR Plus+ 未运行

  • zh32
    zh32 2019年6月24日 16:19

    你好,luci-app-zerotier移植到最新版的openwrt后无法在web上面控制服务的启动与停止,

    不知道有什么办法搞一下没?

    • BandWh.com
      BandWh.com 2019年6月25日 22:28

      @zh32git checkout后把他拷贝出来啊,在package文件夹下面建立一个openwrt-packages文件夹,再把ssr-plus放进去,就不受 git 的影响了。

    • BandWh.com
      BandWh.com 2019年6月26日 12:29

      @zh32大屌在issues里说过了是官方procd死锁的原因。可以设置好后重启路由或“系统”-“启动项”里启动一下

  • 红领巾
    红领巾 2019年6月24日 10:52

    你好,暂时还没学习git版本控制其他相关命令的使用方法,git checkout后确实恢复了plus,但是git pull再次更新源码会失败,要怎么处理?

  • 匿名
    匿名 2019年6月24日 09:39

    ssr-plus 如果在 make menuconfig里 选择了ss-server 那么编译的时候会出现openssl的错误.
    如果勾选了kcptun 在下载openwrt上的包的时候会找不到该文件.
    另外 编译很耗空间 ubuntu建议硬盘空间在35G以上.

  • 匿名
    匿名 2019年6月21日 09:31

    ssr-plus在编译时会出错,不知道如何解决

  • 匿名
    匿名 2019年6月9日 20:16

    ShadowsocksR Plus+ NOT RUNNING 请问要怎么解决?

    • BandWh.com
      BandWh.com 2019年6月12日 16:58

      @匿名需要到固件里“系统”-“启动项”里面选择相应模块重启,这样才能重启该模块。

  • 匿名
    匿名 2019年5月27日 22:28

    请问登陆路由器是出现这个怎么解决
    /usr/lib/lua/luci/controller/guest-wifi.lua:5: attempt to call field ‘loadc’ (a nil value)
    stack traceback:
    /usr/lib/lua/luci/controller/guest-wifi.lua:5: in function ‘v’
    /usr/lib/lua/luci/dispatcher.lua:627: in function ‘createtree’
    /usr/lib/lua/luci/dispatcher.lua:279: in function ‘dispatch’
    /usr/lib/lua/luci/dispatcher.lua:144: in function

  • Pandy003
    Pandy003 2019年4月5日 13:48

    謝謝,由這篇初歩學會了編譯Openwrt,真是一篇有用的內容。
    有一個問題?
    如何將 Network 下的 Turbo ACC Center 改放到 Services 下面
    不知道要如何修改?
    先謝謝您了