移植lean的固件到openwrt的官方固件中编译

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

    要编译自己的固件,你是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

这样,我们本地即有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地址的网站时,可能不能访问;另外出国科学上网时也有干扰。

四、修改目标路由器固件的包,在/home/openwrt/openwrt/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/f iles/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分配长度”设为“已禁用”。
点赞

发表回复