背景
有份图包在meganz的网盘上,大小36G,又不想用自己的电脑下载,想在群晖上下载。
虽然最后探索失败了,但是我觉得有必要记录一下
最后使用第三方工具成功
我的设备
黑群晖,主板J3160,架构i386(64位)。
cloudsync
群晖自带的cloudsync虽然有很多网盘,比如百度云盘、google drive、onedrive等,就是没有mega。
megacmd
查看meganz的官网,发现了个shell版本的客户端,megacmd。
编译好的有:
- openSUSE
- Elementary OS
- Ubuntu
- redhat
- Raspbian (连树莓派都有,贴心
- mint
- fedora
debian
CentOS
- arch linux
我凑合选了个debian8给群晖
1 | root@NAS> dpkg -i megacmd-Debian_8.0_i386.deb |
签名验证失败,应该可以关闭签名验证。
(ref:http://ubuntu-users.narkive.com/OxlNy1NC/debsig-origin-signature-check-failed)
1 | root@NAS> wget https://mega.nz/linux/MEGAsync/Debian_8.0/i386/megacmd-Deb |
诶,需要依赖一堆库,群晖这个系统又不是标准的Linux发行版。只能手动编译了。
在megacmd的github仓库下搜issue,看到了个pr
https://github.com/meganz/MEGAcmd/pull/24/files/de54ed19e276cb2148168ba4bdfe6319a0227a19
原来教程在这里,How to build MEGAcmd for Synology NAS drives.
里面提到的链接失效了,新的链接为
https://originhelp.synology.com/developer-guide/getting_started/index.html
以及开发者工具toolkits
https://sourceforge.net/projects/dsgpl/files/?source=navbar
尝试交叉编译
1 | [root@localhost ~]# mkdir /toolkit |
尝试直接执行EnvDeploy,看看help option
1 | [root@localhost toolkit]# ./pkgscripts-ng/EnvDeploy |
好吧,原来是python3写的
centos7安装python3
1 | yum install python34 |
装好后,再次执行./pkgscripts-ng/EnvDeploy
,直接报错了
1 | [root@localhost toolkit]# ./pkgscripts-ng/EnvDeploy |
emmm???
并没有help菜单
算了,按照教程走吧
我的主板是J3160,架构是i386,DSM版本5.2
1 | [root@localhost toolkit]# ./pkgscripts-ng/EnvDeploy -v 5.2 -p i386 |
既然没有help菜单,参考readme,查看可用的platform
1 | ./EnvDeploy -v 6.1 --list |
返回是空。
喵喵喵???
抬头一看,仓库的描述:
Synology DSM6.0 package toolkit framework
不支持DSM5.x啊。。
直接编译
尴尬,看来只能直接编译了。
developer_guide.pdf:https://global.download.synology.com/download/Document/DeveloperGuide/DSM_Developer_Guide.pdf
或者:https://originhelp.synology.com/developer-guide/getting_started/index.html
刚刚群晖的官网提到的工具包。
1 | root@NAS> uname -a |
内核版本 3.10.35,参考https://originhelp.synology.com/developer-guide/compile_applications/download_dsm_tool_chain.html找到对应的toolkit
下载这个
guide里面有提如何编译开源项目
编译三步走:configure,make,make install
tool chain提供了configure、make等指令,但是megacmd的项目没有configure文件,需要用autoreconf
生成对应的configure。
因为之前装aria2,安装了ipkg,安装的步骤见https://post.smzdm.com/p/49402/
ipkg的软件源只有autoconf,没有autoreconf。。
峰回路转
后来发现toolkit-env包中提供了autoreconf
可是解压出来的 /usr
都有1.9G了,我的系统盘才8G,除了loader和dsm只有3G,除了装的套件之类的,现在只有1.2G了。。
既然是提供了DSM5.2版本、架构为bromolow的toolit
再看https://github.com/meganz/MEGAcmd/tree/master/build/SynologyNAS 最后一行1
rm -rf /toolkit/build_env/ds.armada38x-6.1
所以,当执行1
./pkgscripts-ng/EnvDeploy -v 6.1 -p armada38x
其实是去匹配对应的toolkit,自动下载,配置好env。
文件源码也印证了我的想法
其他方案
- 凑合能用的 golang版 (no longer fully maintained
google搜到的
https://forum.synology.com/enu/viewtopic.php?t=63386
https://github.com/t3rm1n4l/megacmd
似乎有点问题
https://github.com/SynoCommunity/spksrc/issues/625
- docker版本
https://www.reddit.com/r/synology/comments/7ngdki/mega_on_synology/
https://github.com/john-shine/mega.syno
- 去其他服务器上用megacmd下载
比如,在centos7上安装megacmd
CentOS7,mega是提供了预编译的rpm包
https://mega.nz/linux/MEGAsync/CentOS_7/x86_64/megacmd-CentOS_7.x86_64.rpm
1 | rpm -i megacmd-CentOS_7.x86_64.rpm |
警告:megacmd-CentOS_7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID 7f068e5d: NOKEY
错误:依赖检测失败:
libcares.so.2()(64bit) 被 megacmd-0.9.9-8.1.x86_64 需要
所需的libcares.so
https://centos.pkgs.org/7/centos-x86_64/c-ares-1.10.0-3.el7.i686.rpm.html
1 | yum install c-ares |
再次
1 | rpm -i megacmd-CentOS_7.x86_64.rpm |
即可安装
megacmd使用手册见https://github.com/meganz/MEGAcmd/blob/master/UserGuide.md
update:
free account 的bandwith limit 是3G,每6小时刷新1
2[root@localhost mega]# du -s
3463020
约等于3G
- rclone
rclone是一个golang开发的同步软件,支持多种网盘同步和备份,其中就有mega。
这样我们在本机上交叉编译好适用于群晖架构的rclone,就可以同步mega了。
交叉编译可以参考:https://www.faun.me/2015/02/17/cross-compiling-golang-applications-for-synology-1513.html
如果是白裙,可以在 http://forum.synology.com/wiki/index.php/What_kind_of_CPU_does_my_NAS_have 查看处理器架构
黑裙的话,可以在intel官网查看类型
https://ark.intel.com/zh-cn/products/91533/Intel-Celeron-Processor-J3160-2M-Cache-up-to-2_24-GHz
或者uname
查看1
2root@NAS> uname -m
x86_64
获取源码1
go get github.com/ncw/rclone
开始交叉编译1
2cd go/src/github.com/ncw/rclone
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build
新生成的二进制可执行文件rclone
1
2> ls -lh rclone
-rwxr-xr-x 1 meoww staff 32M 10 6 21:08 rclone
scp传到群晖的任意目录即可,当然也可以传到系统的环境变量下。
rclone的使用可以参考:https://blog.liyuans.com/archives/rclone-config.html
使用前需要运行./rclone config
配置网盘的类型和账号,按照提示输入即可
从远程同步到本地
假设远程配置名字是remote
同步远程的目录youmu
到本地的/root/youmu/
命令如下1
rclone copy remote:youmu /root/youmu/
实际使用的时候,家里群晖登陆不上mega,因为mega在国内是被墙的状态。只需要找到登陆的api地址,在路由器上加上规则即可。
在国外的vps上登陆mega,并使用tcpdump
抓包:1
tcpdump -w rclone.cap
scp
拖回本地 wireshark打开分析
本来准备用过滤器(filter),过滤掉我的ip和无用icmp等协议,并且ip源是那台机器的,这样就能得到可能的mega 通信目的的ip地址1
ip.dst != 110.184.218.203 & ip.src == 185.230.162.187
得到疑似ip,31.216.147.136
,而且目的端口是443,也有服务器发往这个IP,协议为TLSv1.2的包
但是,我注意到,抓包记录内有目的ip是8.8.8.8的包,8.8.8.8是google的DNS服务器ip,mega的网盘登陆地址在rclone内应该不是hard code的,所以会做DNS query(其实也可以看rclone源码来确定
DNS主要在查询以下两个域名的ipv4和ipv6地址1
2w.api.mega.co.nz
g.api.mega.co.nz
dig查询一下1
2
3
4
5
6
7
8└─[$] <> dig {w,g}.api.mega.co.nz +short
31.216.147.156
31.216.147.161
lu.api.mega.co.nz.
31.216.147.133
31.216.147.135
31.216.147.134
31.216.147.136
如果不看short精简的结果,w开头的api地址是有两个不同ip的A记录,g开头的是一个到lu.api.mega.co.nz
的cname记录。
所以最好直接在路由器的代理名单中加上这两个域名。