找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 14534|回复: 18

为大内存路由器优化的v2瑞pro脚本(谁说K2P没必要改512?)

[复制链接]
发表于 2018-10-13 00:15 | 显示全部楼层 |阅读模式
本帖最后由 flippy 于 2018-10-17 23:57 编辑

从Lean的源码改进的脚本,保持原有的所有特性,但专门为内存大于128M的做了优化。

做这个脚本的起因是这样:
v2瑞体积很大,v2瑞+v2ctl,mipsle版的两个文件加起来有25MB多,平时以压缩格式存放在闪存文件系统里,但初次运行时经常失败,也就是说,路由器上电以后第一次启动的v2瑞一般是失败的,反复重启几次服务以后才能正常运行。原因可能是go语言编译的程序对低速硬盘设备(包括闪存文件系统)的兼容性不好。
经常出现的错误如下:

第一类错误:

root@K2P:/usr/bin/v2瑞# ./v2瑞 -v
Segmentation fault


第二类错误:
root@K2P:/usr/bin/v2瑞# ./v2瑞 -v
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x5 pc=0xfad88]

goroutine 1 [running]:
fmt.(*fmt).fmt_integer(0x90cc1a0, 0xff, 0x0, 0xa, 0x1d101, 0x742f49, 0x11)
        /usr/local/go/src/fmt/format.go:216 +0xb0
fmt.(*pp).fmtInteger(0x90cc180, 0xff, 0x0, 0x5261ea01, 0x64)
        /usr/local/go/src/fmt/print.go:369 +0x274
fmt.(*pp).printArg(0x90cc180, 0x6836c0, 0x7b4c54, 0x64)
        /usr/local/go/src/fmt/print.go:649 +0xb18
fmt.(*pp).doPrintf(0x90cc180, 0x753cf5, 0x2a, 0x900c720, 0x1, 0x1)
        /usr/local/go/src/fmt/print.go:1003 +0x1c0
fmt.Sprintf(0x753cf5, 0x2a, 0x900c720, 0x1, 0x1, 0x913e200, 0x10)
        /usr/local/go/src/fmt/print.go:203 +0x6c


第三类错误:

root@K2P:/usr/bin/v2瑞# ./v2瑞 -v
SIGILL: illegal instruction
PC=0x56a7c8 m=0 sigcode=128

goroutine 1 [running, locked to thread]:
v2瑞.com/core/proxy/mtproto.init.0()
        /v2瑞/src/v2瑞.com/core/proxy/mtproto/client.go:71 fp=0x9445f8c sp=0x9445f8c pc=0x56a7c8
v2瑞.com/core/proxy/mtproto.init()
        <autogenerated>:1 +0x284 fp=0x9445fa0 sp=0x9445f8c pc=0x56dec8
v2瑞.com/core/main/distro/all.init()
        <autogenerated>:1 +0x100 fp=0x9445fa4 sp=0x9445fa0 pc=0x5e34e0
main.init()
        <autogenerated>:1 +0xd8 fp=0x9445fc4 sp=0x9445fa4 pc=0x5e44a4
runtime.main()
        /usr/local/go/src/runtime/proc.go:186 +0x1f8 fp=0x9445fec sp=0x9445fc4 pc=0x44b34
runtime.goexit()
        /usr/local/go/src/runtime/asm_mipsx.s:850 +0x4 fp=0x9445fec sp=0x9445fec pc=0x7942c

goroutine 18 [syscall]:
os/signal.signal_recv(0x0)
        /usr/local/go/src/runtime/sigqueue.go:139 +0x118
os/signal.loop()
        /usr/local/go/src/os/signal/signal_unix.go:22 +0x34
created by os/signal.init.0
        /usr/local/go/src/os/signal/signal_unix.go:28 +0x50

r0   0x0        r1   0x0
r2   0x948a930  r3   0x4
r4   0x56de98   r5   0x948a930
r6   0x948a930  r7   0x948a934
r8   0x5ab9a95  r9   0x10
r10  0x4        r11  0x10
r12  0x93       r13  0x1
r14  0x80000000 r15  0x94
r16  0x0        r17  0x80000000
r18  0x7fffffff r19  0x0
r20  0x0        r21  0x45bcfc
r22  0x763e24   r23  0xa90000
r24  0x0        r25  0x0
r26  0x0        r27  0x0
r28  0x0        r29  0x9445f8c
r30  0x94000e0  r31  0x56dec8
pc   0x56a7c8   link 0x56dec8
lo   0x0        hi   0x0


错误可能不只上述3类,反复运行多次以后,终于出现正常的提示:

root@K2P:/usr/bin/v2瑞# ./v2瑞 -v
flag provided but not defined: -v
Usage of ./v2瑞:
  -config string
        Config file for V2Ray.
  -format string
        Format of input file. (default "json")
  -plugin
        True to load plugins.
  -test
        Test config file only, without launching V2Ray server.
  -version
        Show current version of V2Ray.



这个问题不只v2瑞存在,只要是用go编译的程序好象都会出现,比如kcptun
但如果是在/tmp下(RAMDISK)运行则很稳定,所以,当路由器的内存足够时,完全可以把程序拷到内存里运行啊,这样改过512M内存的K2P就有用武之地了,如果是未改过的128M内存, 则不建议用这种方法,比128M更小的就不用说了。

脚本的算法是:计算/var的总空间和可用空间,以及当前剩余的内存,当总空间>=70M,且可用空间>=35M,且剩余内存>=32M时,把闪存里的v2瑞、v2ctl两个程序拷贝到/var下再启动服务,如果条件不满足则不作变更,这样就兼容了小内存的路由器。上面3个判断条件可以自行更改(我的初始设定就是排除了128M以下内存(含128M)的路由,毕竟这两个文件占用20多M内存,对于小内存的路由器而言显得太多了)。
注:在openwrt里,/var等同于/tmp,都是用内存虚拟出来的磁盘,默认空间是总内存的一半,但对/var的占用情况不一定会反应到剩余内存里,所以要做多重判断

脚本已在512M的k2p上测试通过(刷的是mleaf的openwrt cc 1.7.0),另外,自己用最新lean R8.1.7代码编译的newifi3也可以使用,替换原/etc/init.d/v2瑞pro即可(注意备份原文件)。改用新脚本后,v2瑞基本是秒开,非常稳定。第一次开机时间稍长十来秒不是大问题。

这个是基于lean的源码: luci-app-v2瑞-pro,如果你的路由器装过这个包,那么用winscp等工具把文件拷到/etc/init.d/下面,替换同名文件就可以了。如果你要自己编译固件的话,把这个文件替换 package/lean/luci-app-v2瑞-pro/root/etc/init.d 下面的同名文件
拷入后注意在shell下执行命令(用ssh工具连入路由器): chmod 755 /etc/init.d/v2瑞pro

自编译固件的朋友应该知道这个,就不多说了


附件:   2018-10-17第五次更新

【2018-10-17】第4次优化的版本已经不止是对大内存路由器的优化了,小内存的也做了一定优化(仍然在闪存里执行,但执行前先重复尝试运行命令,直到不出错为止,最多尝试5次);另外参考S-S R-plus的源码,修改了pdnsd域名解析的部分代码;解决了脚本在开机启动时会执行两次的bug(linux系统自己执行一次,由luci调用又执行一次),等等。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

评分

参与人数 2恩山币 +4 收起 理由
梦里逐浪 + 2 率全体恩山路由党以及党魁向你学习!
hcyme + 2 面对这种帖子,我内心复杂,真不知道说什么好……

查看全部评分

我的恩山、我的无线 The best wifi forum is right here.
发表于 2018-10-13 01:23 | 显示全部楼层
我的K2p已经改了,32+512+2u
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2018-10-13 03:55 | 显示全部楼层
本帖最后由 qgtxqj 于 2018-10-14 05:14 编辑

k2p硬改刷padavan,重启路由器也遇到首次启动失败的问题,好像只有重新上传一遍才能运行,不知道为什么?
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2018-10-13 06:01 来自手机 | 显示全部楼层
收藏,谢谢啦
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2018-10-13 07:03 | 显示全部楼层
硬改了可以刷的固件多吗?那种可以持续更新的,支持多拨且可以过滤广告的固件,可以发下链接吗?
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2018-10-15 10:24 | 显示全部楼层
感谢,下班回家试试,最近升级过固件,发现v2速度变慢了不少
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2018-10-15 20:27 来自手机 | 显示全部楼层
怎么用啊老铁

点评

这个是基于lean的源码: luci-app-v2ray-pro,如果你的路由器装过这个包,那么用winscp等工具把文件拷到/etc/init.d/下面,替换同名文件就可以了。如果你要自己编译固件的话,把这个文件替换 package/lean/luci-app-  详情 回复 发表于 2018-10-15 20:41
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2018-10-15 20:41 | 显示全部楼层
本帖最后由 flippy 于 2018-10-15 20:49 编辑

这个是基于lean的源码: luci-app-v2瑞-pro,如果你的路由器装过这个包,那么用winscp等工具把文件拷到/etc/init.d/下面,替换同名文件就可以了。如果你要自己编译固件的话,把这个文件替换 package/lean/luci-app-v2瑞-pro/root/etc/init.d 下面的同名文件
拷入后注意加一行命令: chmod 755 /etc/init.d/v2瑞pro

点评

请教: 这一行chmod 755 /etc/init.d/v2raypro 加在 v2raypro文件的后面吗?  详情 回复 发表于 2018-10-17 08:49
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2018-10-15 20:46 | 显示全部楼层
感谢,感谢,同名文件

我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2018-10-16 08:41 | 显示全部楼层
没有硬改的友华,有效
感觉和ac58u速度相当
感谢
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2018-10-16 11:39 | 显示全部楼层
感谢楼主分享。目前启动没有问题,倒是代理模式中,基于GFW-list的自动代理经常翻不了,IP模式倒是没问题。请问如何解决?
固件用的是18.06.1官方的源,编译v2瑞的时候选了点选v2瑞包里的后面两个选项。

点评

这个可能是gfwlist dns解析的问题,判断方法是用ssh连进去,运行 nslookup 国外域名 如果能解析就能翻,解析不了就不能翻 dns解析确实有不稳定的现象,这个我也没办法  详情 回复 发表于 2018-10-16 12:00
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2018-10-16 12:00 | 显示全部楼层
edmondgavin 发表于 2018-10-16 11:39
感谢楼主分享。目前启动没有问题,倒是代理模式中,基于GFW-list的自动代理经常翻不了,IP模式倒是没问题。 ...

这个可能是gfwlist dns解析的问题,判断方法是用ssh连进去,运行
nslookup 国外域名
如果能解析就能翻,解析不了就不能翻
dns解析确实有不稳定的现象,这个我也没办法
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2018-10-17 08:49 | 显示全部楼层
flippy 发表于 2018-10-15 20:41
这个是基于lean的源码: luci-app-v2瑞-pro,如果你的路由器装过这个包,那么用winscp等工具把文件拷到/ ...

请教: 这一行chmod 755 /etc/init.d/v2瑞pro 加在 v2瑞pro文件的后面吗?

点评

不是的,是在覆盖文件完成后在路由器的 shell 环境下运行这行命令,以确保该脚本具有可执行权限  详情 回复 发表于 2018-10-17 09:47
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| 发表于 2018-10-17 09:47 | 显示全部楼层
dongfangy2011 发表于 2018-10-17 08:49
请教: 这一行chmod 755 /etc/init.d/v2瑞pro 加在 v2瑞pro文件的后面吗?

不是的,是在覆盖文件完成后在路由器的 shell 环境下运行这行命令,以确保该脚本具有可执行权限
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2018-10-17 09:49 | 显示全部楼层
再次请教:如果你要自己编译固件的话,把这个文件替换 package/lean/luci-app-v2瑞-pro/root/etc/init.d 下面的同名文件

是不是直接覆盖就可以了

点评

是的,覆盖后同样注意执行一下chmod 755 覆盖以前最好备份原版文件,如果觉得我改的不好,可以随时换回来。 另外刚刚又更新了脚本,请重新下载  详情 回复 发表于 2018-10-17 10:03
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-4-23 15:17

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

快速回复 返回顶部 返回列表