zw963 / asuswrt-merlin-transparent-proxy

transparent proxy base on ss, v2ray, xray, ipset, iptables, chinadns on asuswrt merlin or side router.
MIT License
380 stars 80 forks source link

执行脚本卡死 #65

Closed godevpy closed 5 years ago

godevpy commented 5 years ago

添加 shadowsocks.json 和 dnscrypt-proxy.sh 后 执行 ./ss+dnsmasq+dnscrypt admin@192.168.50.1

复制完文件后就卡死,一直等到第二天 ctrl + c 取消后 显示 Remote deploy scripts is started !!

输出如下:

➜ asuswrt-merlin-transparent-proxy git:(master) ./ss+dnsmasq+dnscrypt admin@192.168.50.1 dnscrypt-proxy.sh 100% 264 215.4KB/s 00:00
foreign_domains.conf 100% 34 29.3KB/s 00:00
iptables.sh 100% 5920 2.8MB/s 00:00
toggle_proxy.sh 100% 1645 2.0MB/s 00:00
switch_proxy.sh 100% 513 339.2KB/s 00:00
patch_router 100% 3642 2.3MB/s 00:00
restart_dnsmasq 100% 84 68.3KB/s 00:00
localips 100% 265 210.9KB/s 00:00
update_ip_whitelist 100% 623 413.6KB/s 00:00
update_dns_whitelist 100% 538 440.2KB/s 00:00
shadowsocks.json 100% 199 167.5KB/s 00:00

^C*** Remote deploy scripts is started !!


zw963 commented 5 years ago

要完成会非常快的完成的, Remote deploy scripts is started !! 之后, 立即会有其他信息出来, 这个可能是程序的 bug, 如果部署前, 你连接不上 Github, 也可能有类似问题, 需要更多的调试信息.

$ sh -x ./ss+dnsmasq+dnscrypt admin@192.168.50.1

请将调试信息贴上来.

FrankZhang2017 commented 5 years ago

我也碰到了同样的问题。使用的是UDPRelay的方式。 路由器型号:AC-86U,电脑系统是Ubuntu16.04 LTS 64bits。entware_setup.sh的时候,选择32位和64位,都会停下 udprelay.log

命令行: sh -x ./ss+dnsmasq+udprelay brotherpeng@192.168.50.1 2>&1 |tee udprelay.log 结果:

zw963 commented 5 years ago

如果猜的没错, @itacajsj 用的也是 Ubuntu.

请执行下面的命令检测 /bin/sh 符号连接指向了什么.

$: ls -l $(which sh)
lrwxrwxrwx 1 root root 4 2018-06-04 16:54 /usr/sbin/sh -> bash*

期望的输出是 bash, 但是你们用的有可能是 dash, 怀疑当前 shell 内置的 eval 是 dash 版本的 eval, 不支持某些写法.

这个问题应该可以改善, 但是目前没有时间.

FrankZhang2017 commented 5 years ago

之前确实是bash,使用sudo dpkg-reconfigure dash,选择No,然后改成了bash: lrwxrwxrwx 1 root root 4 12月 4 06:06 /bin/sh -> bash 然后执行的时候到了这个地方不动了: ++ cat ss+dnsmasq+udprelay ++ extract_remote_script deploy_start ++ awk '/^[[:space:]]*deploy_start/,EOF' ++ tail -n +2

在路由器上,安装包的情况如下:

opkg install bash perl

Package bash (4.4.18-2) installed in root is up to date. Package perl (5.28.0-1) installed in root is up to date.

zw963 commented 5 years ago

下面的命令工作吗? 如果不工作, 换不是 5g 的连接试试.

$: ssh brotherpeng@192.168.50.1
FrankZhang2017 commented 5 years ago

这个命令工作。如果后面跟得是这种东西 ssh brotherpeng@192.168.50.1 'cat /proc/cpuinfo' 那么会直接在terminal里面显示出cpu信息。 先登陆到路由器后台,再运行bash --version,也没问题,返回的版本是4.4.2 只是连着走的时候不往下走了。 有没有什么可以绕开这个的方法?比如说我把需要在路由器上安装的包都预先安装上(应该从deploy_start.sh和外层脚本上能看到全部的依赖包吧?),然后本地修改脚本,去掉ssh $target_device "..."这部分,并且在外层脚本的第二行改为self=source local_deploy_start.sh && eval "$self",是不是也可以尝试?

zw963 commented 5 years ago
  1. 确保部署时, 连接网线或使用不是 5G 的 WiFi 节点
  2. 直接在宿主机执行: ssh admin@192.168.50.1 'bash --version' 试试看.

还不行的话, 下载下来下面的文件, 移除指定行最后的 &>/dev/null https://github.com/zw963/deployment_bash/blob/master/deploy_start.sh#L42

然后修改 ss+dnsmasq+udprelay, 使用本地的 deploy_start.sh, 看看什么错误, 参考 ss+dnsmasq+dnscrypt.

FrankZhang2017 commented 5 years ago

查看了一下路由器上的bash信息: 默认的是这个:/bin/bash ---->busybox,不支持--version这种参数,所以会不返回任何东西 如果显式指定为/opt/bin/bash,则支持--version这个参数,返回值是255。 你的路由器上也是这样的bash配置么?还是通过更改PATH中的路径顺序将entware下面的改为默认值呢?

zw963 commented 5 years ago

请将下面的代码中的 0.4.6 改为 0.4.7 再试一下.

self="$(curl -sS https://raw.githubusercontent.com/zw963/deployment_bash/v0.4.6/deploy_start.sh)" && eval "$self"