最近百度网盘要实名制了。家里路由器空闲,挂载着一个 2T 硬盘,想着做个同步什么的挺方便,一直没弄。
之前偶尔用一下 btsync,现在改名叫 rslsync 了。
去官网查看,发现支持 arm 处理器。
但是上传到了路由器运行,发现不可以执行,提示
-sh: ./rslsync: not found
我耍了 kongac 的 dd-wrt,一直稳定运行,很舒服。华硕固件会发生偶尔导致 cpu 飙升掉线的情况,故舍弃。
又下载 x64 尝试提示没权限,那应该是某些依赖有问题了。
根据提示看了下 /lib 下的依赖。
发现 /lib/ld-musl-arm.so.1
存在。
于是关键字查找 dd-wrt rslsync,发现这篇文章。
直接在路由器执行:
file rslsync
返回
rslsync: ELF 32-bit LSB executable, ARM, EABI5 version 1 (GNU/Linux), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 3.2.0, BuildID[sha1]=aed6ecdcc75f6878bc63d37f153a34f25a9041e2, stripped
可以看到果然如博主所说,依赖 /lib/ld-linux.so.3
,而 dd-wrt 默认 /lib 下没有此依赖,且为只读,不可写。
kongac 的固件内置了 entware,所以 /opt/lib
中是有这个依赖的。那就改二进制就好了(当我看到此处感觉好牛逼啊,这个硬件工程师!)。
找一台 linux,登录, 下载,编译安装
./configure && make && sudo make install
然后直接执行以下命令即可:
patchelf --set-interpreter /opt/lib/ld-linux.so.3 ./rslsync
可以看到,链接库信息已经变更。
file rslsync
rslsync: ELF 32-bit LSB executable, ARM, EABI5 version 1 (GNU/Linux), dynamically linked (uses shared libs), for GNU/Linux 3.2.0, BuildID[sha1]=aed6ecdcc75f6878bc63d37f153a34f25a9041e2, stripped
重新传到路由器上运行,没有错误提示,直接压到后台了。
最后附上已经修改好的 rslsync 点击下载