前一阵子看到Pockies大佬在折腾家庭影音NAS方案,就心里痒痒,打算利用手头有限的设备也整出一个穷人级的NAS方案。超低功耗,超低成本。最后虽然是弄成功了我真是闲得蛋疼……
其实NAS方案也有很多,除了HTPC小主机,群晖这种正统,就是我这种路由器插盘的邪道。最近还有在RK3355上跑buildroot,装NVMe SSD的“随身网盘”。倒也不是经济限制,主要是出于折腾乐趣和叛逆心理。因为我很讨厌广告满天飞、受限制无法运行第三方应用的电视盒子内置安卓系统。
所需设备:Phicomm N1 (90元)、newifi mini (128元)、Sandisk 旧U盘 32GB(价值忽略不计)。
思路是在Phicomm N1路由器上跑aria2服务,通过手机管理种子、下载内容,然后通过路由器的DLNA或者SMB服务,让Phicomm N1(当电视盒子用)上的Kodi客户端读取并播放。很简单。
路由器作为全天候开机的低功率电器,拿来做下载机是极好的。Phicomm N1是斐讯搞P2P搞到翻车的库存尾货,图形性能劲爆,之前文章里吹过了,但是现在放家里天天吃饭时候拿来看低清CCTV晚间新闻,感觉性能压榨得不尽兴。这些性价比硬件爱好者比谁都精,我跟着学买的。
关于aria2
路由器的Padavan固件本来内置了一个transmission,早期还有远程迅雷、快鸟什么的,但商业软件很容易失去支持,这些服务都用不了了。我刷的Padavan固件有带aria2(没有的话也可以通过optware或者entware来装。optware和entware按我粗浅理解是嵌入式硬件上的一个软件包管理器。)aria2我之前没碰过,只知道它是一个开源的、能跑在各种平台上的下载程序,默认没有命令行界面对新手极不友好。它有很多第三方封装版本,能跑的操作系统和硬件平台五花八门。
首先把U盘格式化成FAT32,NTFS或ext3/4都行,按要求新建“aria”文件夹,插入路由器屁股里,在Padavan的管理界面中启用aria2,并且修改aria2.conf文件,主要是配置这几个地方:
enable-rpc=true #启用RPC连接
rpc-listen-all=true #允许非外部访问。这个根据自己的安全需要设置。
rpc-secret=xxxxx #RPC授权令牌
其他设置,比如断点续传,缓存大小,是否允许覆盖,超时时间,线程数,速度限制,监听设置,分享率之类的按自己要求设定。甚至可以配SSL证书来开启https,网络上的教程很多,就不展开讲了。
对了,还有一个地方,就是要把bt-tracker加上。运转良好的灯塔可以明显提高aria2干活的速度。现在tracker服务器也有udp协议和websocket协议的,我不是很懂其中的区别,反正从网络上抄一份列表下来:
bt-tracker=http://…….,http://….,udp://……,ws://……
然后还有一个坑是文件预分配方式,有falloc,trunc,prealloc几种,似乎和aria2运行的操作系统支持有关。当然你可以选择none,但这样会增加磁盘碎片,让文件分散。我发现falloc好像不支持NTFS的U盘,会报错 I/O error。可以改用prealloc(速度较慢,但兼容性高)。官方说明如下:
‘none’ doesn’t pre-allocate file space. ‘prealloc’ pre-allocates file space before download begins. This may take some time depending on the size of the file. If you are using newer file systems such as ext4 (with extents support), btrfs, xfs or NTFS (MinGW build only), ‘falloc’ is your best choice. It allocates large(few GiB) files almost instantly. Don’t use ‘falloc’ with legacy file systems such as ext3 and FAT32 because it takes almost same time as ‘prealloc’ and it blocks aria2 entirely until allocation finishes. ‘falloc’ may not be available if your system doesn’t have posix_fallocate() function. ‘trunc’ uses ftruncate() system call or platform-specific counterpart to truncate a file to a specified length.
没问题之后,就可以在Padavan固件自带的aria2 WebUI里看到运行情况了;在没有装客户端工具时,这个界面也能拿来管理下载。但只是堪堪可用,有一些别的更好的下载软件工具。
修改好配置后保存,路由器会重新启动aria2以应用更改。
远程下载管理工具
为了在其他设备上管理路由器的下载,得使用远程管理工具。我试了几种,最后感觉transdroid/transdrone,aria2app还有aria-ng比较好用。
transdroid/transdrond主要优点是它支持的协议贼多:bitcomet,bittorrent,deluge,Ktorrent,rTorrent,Transmission,μtorrent,Vuze,Synology(群晖)……等。
aria2app也是开源软件(Google Play上有,或者Github 拖下来自己编译),不仅内置一个aria2服务器,还提供了aria2客户端功能,完美的前后端分离哲学。还有ariaandroid也差不多。这些软件的使用方式都大同小异;把路由器IP填进去,aria2端口一般是6800,RPC地址就形如这样:
http://192.168.1.1:6800/jsonrpc
新版本的aria2使用rpc secret token鉴权,旧版本的好像是用username和password。采用哪种身份认证机制,可以在aria2.conf里自己设置。
aria2app这个软件,我本来是利用它的下载服务器功能,把它装在安卓电视盒子里的;但安卓这玩意儿杀进程,你不能保证在看电视的时候后台的下载应用不会闷不做声地被做掉。不然的话别的下载工具的安卓版如Flud,Transmission,μtorrent也行——假如你的Android设备(例如旧手机)不干其他的事情,大可以熄屏长期挂前台跑下载。
此外,还有一个开源项目aria-ng(或者其分支aria-ng-gui),把客户端功能编译成一个html文件,所以也算是一个彻底的跨平台客户端。这些客户端基本都支持对aria2服务器的配置更改。
顺便一提,Padavan有一个国内爱好者自己开发的管理app叫做“啪嗒路由器”,里面也有远程下载管理功能。
电视盒子的配置
电视盒子——也就是这台Phicomm N1,我刷了机之后装上Kodi。Kodi通过SMB,DLNA等协议连接路由器上挂载的U盘,并载入可播放的文件列表。用遥控器就可以放了。这里就不废话配置过程了,只要路由器上的流媒体/文件服务有开成功,九成连得上。
Kodi就是以前的XBMC。需要注意的是,Kodi有好多种版本,要注意自己的图形芯片和操作系统,选择下载。
其实,Phicomm N1也有时间没地方花的开源家居设备爱好者折腾出来的纯下载机固件,但可惜了那颗能硬解4K的图形芯片,我就没刷哪个固件。愿意折腾的话也可以刷armbian,也就是arm版的Debian。Debian is a perfect linux distribution for lesbian (喂
其他
路由器的USB 接口是2.0的,实测传输速度最多5MB/s,但这够用了。需要注意的是它的USB口供电很弱,不建议插没有独立供电模块的移动硬盘。
另外,路由器IO缓存不能设置太高,否则内存占用率会飙升。根据经验,128MB RAM的路由器,其系统本身会占约50~70MB的RAM,IO缓存建议设置20MB以下。否则会把RAM吃光。另外不建议同时进行太多任务,毕竟路由器的IO吞吐量有限。我测试的时候经常遇到connection无响应的问题(但后台实际上在下载)
在测试tracker的时候,我发现家里没有一个tracker连得上。这个可能得靠人品,或者把DHT网络之类开起来。可以参考网络上的一些随时更新的tracker列表,但具体连通性看各人网络情况,tracker 服务器应该也是版权商重点打击对象。
其他可以折腾的地方还很多,比如用frp、ngrok等做内网穿透,通过订阅来自动添加种子,使用Kodi插件来整理、排序、分类片库(对于有囤积症的人)。 但我觉得越想把它搞得便捷,花在折腾上的时间就越多,反而是把自己弄得筋疲力尽。 那就到此为止吧。