起因

今天用服务器下片,发现服务器硬盘不够用,然后我就想:我还有台手机闲着不用,128G的空间,为啥不用手机下呢?🤔

当然,直接在手机上弄个下载器显然不太好,我在服务器上一般都是用 Cloudreve 下然后传回 OneDrive 里,那能不能在手机上装个 Cloudreve 和 Aria2?

整!

开始折腾!打开菜市场安装Termux换源一气呵成,然后把Cloudreve的二进制文件传到手机上,执行:

bash: ./cloudreve: No such file or directory

又看了一下下载的文件,是 arm64 架构的没下错啊?于是用 file 命令看了一下:

dynamically linked, interpreter /lib/ld-linux-aarch64.so.1

得,动态编译出来的,看来手机上没有GLIBC的链接库了。。

那怎么办?给手机改装一个GLIBC?显然不行。。自己重新编译一个静态链接文件?太麻烦了不想弄。。

既然不能动原有的东西,那干脆搞个容器吧。一说到容器,首先想到了 Docker,印象里好像确实有在 Termux 里装 Docker 的轮子。于是去搜教程:上来就让我先装个 qemu-x86,然后再用 qemu 环境弄个 CentOS,再往 CentOS 里装 Docker。这不脱裤子放屁吗???

而且我一个 arm 架构的手机,装个 x86 架构的 qemu,性能肯定不会好到哪里去嘛… 果不其然,翻了翻那个教程的评论,有人说启动就要十几秒的,于是果断放弃了这个方案。

不能用 Docker ,那用啥容器呢?话说之前高中倒腾 Termux 的时候好像有种啥 distro 的容器来着,嘛,去搜一下好了。

对了!是 proot-distro ! 而且还有人为 Termux 写了现成的 proot 脚本,那就用这个了!

为了让运行环境尽可能的轻量,得选这个轻量的 distro ,那毫无疑问就是 Alpine Linux 了嘛,执行proot-distro install alpine,不到一分钟就装好了!

PS: 由于手机上没开代理,所以文件我都是用电脑下好然后再用 lrzsz 传到手机上。另外手机也开了 sshd,所有操作都是在电脑上远程连接手机完成的。至于 Termux 怎么开 sshd 这里就不提了,反正网上一大堆~

进入 alpine 环境,把 cloudreve 的二进制文件传过来,执行!

bash: ./cloudreve: No such file or directory

又来?哦不对,Alpine Linux 好像用的是 musl-libc?去 /lib 目录看一眼,发现有个 libc.musl-aarch64.so.1的文件,看来就是 musl 了。

嘛,没关系,反正容器里面随便造,给他装个 glibc !

经过一番摸索,我首先是找到了这个:https://github.com/sgerrand/alpine-pkg-glibc

根据指引,成功的下好了包,也成功装上了,然后却发现还是执行不了。奇了怪了。去 /lib 目录一看:ld-linux-x86-64.so.1 。得,我装的是个 x86 的 glibc,能运行就怪了。

那去找找 aarch64 的吧。搜啊搜,找到了这个:https://github.com//athalonis/docker-alpine-rpi-glibc-builder

这是个给树莓派用的 alpine glibc,树莓派那肯定是 arm64 了,不过这个东西是五年前的了,不管了,先装上试试~

另外这个包没有签名,装的时候要用 apk add --allow-untrusted glibc-2.26-r1.apk 才能装上。装完了去 /lib 看一眼:终于有 ld-linux-aarch64.so.1 这个东西了!

回来继续尝试运行 cloudreve,成功!

Cloudreve 的离线下载是依赖 aria2 的,这个倒是好装,直接 apk add aria2 就行了~ 不过在配置的时候要注意一下,因为手机闪存的读写性能远不如电脑的固态硬盘,所以 aria2 的空间预分配功能要关掉,否则下大文件的时候分配空间会非常慢。关掉的方法是在配置文件里加上 file-allocation=none

都配置好了后就可以在 Cloudreve 中添加下载节点了~

还有,本来是想给 cloudreve 和 aria2 都做成守护进程的,奈何 proot 容器里不支持 systemd 也不支持 init.d ,所以只能弄个脚本手动执行了。在手机上执行时记得要给 Termux 开 Awake Lock,否则 Termux 可能会被系统杀掉。

另外还有一个地方有个坑,就是在配置 Cloudreve 的存储策略的时候,因为 Azure Portal 的应用回调地址只能 HTTPS,而局域网ip一般都是http直接访问了,没办法,只能弄个自签证书强行开HTTPS了。怎么弄自签证书的教程网上也有很多,这里也不写了。

强行总结

因为受限于手机性能原因,这个方法搞出来的 Cloudreve 只能说是勉强能用吧~ 如果想远程访问的话还可以在搞一个内网穿透,不过对我来说没必要所以就没搞。至于耗电量倒是还可以,就是下载的时候手机会轻微发热。偶尔下下大片啥的用一次还是完全能应付的~ 不过大部分时间的话都不用应该也就没有天天把 Termux 挂后台的必要。用的时候进 Termux ,执行脚本就启动了,启动过程大概两三秒,性能还是可以的~