树莓派安装Aria2实现远程离线下载,类似迅雷离线下载。
磁盘挂载
#查看U盘插入前后多出的 sd* 分区 cat /proc/partitions
#挂载 sudo mkdir /mnt/usbdisk sudo mount -o uid=pi,gid=pi /dev/sda1 /mnt/usbdisk #卸载 sudo umount /mnt/usbdisk
默认挂载NTFS格式的硬盘只有读权限,需要安装 ntfs-3g 以实现写操作。
sudo apt install ntfs-3g
设置开机自动挂载NTFS格式的硬盘
sudo nano /etc/fstab #添加如下内容,保存后重启生效。注意写错或移除磁盘会导使小Pi不开机! /dev/sda1 /mnt/usbdisk ntfs defaults 0 0
Aria2
Aria2 是一个自由、开源、轻量级多协议和多源的命令行下载工具。它支持 HTTP/HTTPS、FTP、SFTP、 BitTorrent 和 Metalink 协议。Aria2 可以通过内建的 JSON-RPC 和 XML-RPC 接口进行操作。
Index:https://aria2.github.io
Code:https://github.com/aria2/aria2
Manual:https://aria2.github.io/manual/en/html/index.html
安装Aria2
sudo apt update sudo apt install aria2 #创建配置文件 sudo mkdir /etc/aria2 sudo touch /etc/aria2/aria2.conf /etc/aria2/aria2.session sudo nano /etc/aria2/aria2.conf
配置Aria2
#文件的保存路径(可使用绝对路径或相对路径),默认:当前启动位置 dir=/mnt/usbdisk #启用磁盘缓存,0为禁用缓存,需1.16以上版本,默认:16M disk-cache=32M #文件预分配方式,能有效降低磁盘碎片,默认:prealloc,NTFS建议使用falloc,EXT3/4建议trunc,MAC下需要注释此项 #预分配所需时间:none < falloc ? trunc < prealloc,falloc和trunc则需要文件系统和内核支持 file-allocation=none #断点续传 continue=true #最大同时下载任务数,运行时可修改,默认:5 max-concurrent-downloads=4 #同一服务器连接数,添加时可指定,默认:1 max-connection-per-server=4 #最小文件分片大小,添加时可指定,取值范围1M -1024M,默认:20M min-split-size=10M #单个任务最大线程数,添加时可指定,默认:5 split=4 #整体下载速度限制,运行时可修改,默认:0 #max-overall-download-limit=0 #单个任务下载速度限制,默认:0 #max-download-limit=0 #整体上传速度限制,运行时可修改,默认:0 #max-overall-upload-limit=0 #单个任务上传速度限制,默认:0 #max-upload-limit=0 #禁用IPv6,默认:false disable-ipv6=true #从会话文件中读取下载任务 input-file=/etc/aria2/aria2.session #在Aria2退出时保存错误/未完成的下载任务到会话文件 save-session=/etc/aria2/aria2.session #定时保存会话,0为退出时才保存,需1.16.1以上版本, 默认:0 #save-session-interval=60 #启用RPC,默认:false enable-rpc=true #允许所有来源,默认:false rpc-allow-origin-all=true #允许非外部访问,默认:false rpc-listen-all=true #RPC监听端口,端口被占用时可以修改,默认:6800 rpc-listen-port=6800 #设置的RPC授权令牌,v1.18.4新增功能,取代 --rpc-user 和 --rpc-passwd 选项 rpc-secret=lanseyujietestkey01 #rpc-secret=<TOKEN># 设置的RPC访问用户名,此选项新版已废弃,建议改用 --rpc-secret 选项 #rpc-user=<USER># 设置的RPC访问密码,此选项新版已废弃,建议改用 --rpc-secret 选项 #rpc-passwd=<PASSWD> #事件轮询方式,取值:[epoll, kqueue, port, poll, select],不同系统默认值不同 #event-poll=select #当下载的是一个种子(以.torrent结尾)时,自动开始BT任务,默认:true #follow-torrent=true #BT监听端口,当端口被屏蔽时使用,默认:6881-6999 listen-port=51413 #单个种子最大连接数:默认:55 #bt-max-peers=55 #打开DHT功能,PT需要禁用,默认:true enable-dht=false #打开IPv6 DHT功能,PT需要禁用 enable-dht6=false #DHT网络监听端口,默认:6881-6999 #dht-listen-port=6881-6999 #本地节点查找,PT需要禁用,默认:false #bt-enable-lpd=false #种子交换,PT需要禁用,默认:true enable-peer-exchange=false #每个种子限速,对少种的PT很有用,默认:50K #bt-request-peer-speed-limit=50K #客户端伪装,PT需要 peer-id-prefix=-ND2017- user-agent=Transmission/4.1 #当种子的分享率达到这个数时,自动停止做种,0为一直做种, 默认:1.0 seed-ratio=0 #强制保存会话,即使任务已经完成,默认:false,较新的版本开启后会在任务完成后依然保留.aria2文件 force-save=true #BT校验相关,默认:true #bt-hash-check-seed=true #继续之前的BT任务时,无需再次校验,默认:false bt-seed-unverified=true #保存磁力链接元数据为种子文件(.torrent文件),默认:false bt-save-metadata=true
Tips:
DHT(Distributed Hash Table),是一种分布式存储方法。在不需要服务器的情况下,每个客户端负责一个小范围的路由,并负责存储一小部分数据,从而实现整个DHT网络的寻址和存储。
PT(Private Tracker),原理类似BT下载的一种,但有两个明显的改进:一是私密的小范围下载,二是进行流量统计,根据下载量决定你的权限。
测试与运行Aria2
#测试启动Aria2,如果没有提示任何错误信息可以Ctrl + C停止 sudo aria2c --conf-path=/etc/aria2/aria2.conf #以Daemon的形式后台运行Aria2 sudo aria2c --conf-path=/etc/aria2/aria2.conf -D
开机自启Aria2
sudo nano /etc/init.d/aria2c #!/bin/sh ### BEGIN INIT INFO # Provides: aria2 # Required-Start: $remote_fs $network # Required-Stop: $remote_fs $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Aria2 Downloader ### END INIT INFO case "$1" in start) echo "Starting aria2c..." sudo -u pi aria2c --conf-path=/etc/aria2/aria2.conf -D ;; stop) echo "Stopping aria2c..." killall aria2c ;; restart) $0 stop && sleep 3 && $0 start ;; esac exit sudo chmod +x /etc/init.d/aria2c #添加开机启动 sudo update-rc.d aria2c defaults
Nginx
安装Nginx
mkdir ~/Nginx && cd Nginx/ #Openssl补丁 git clone https://github.com/cloudflare/sslconfig.git wget -O openssl.tar.gz -c https://github.com/openssl/openssl/archive/OpenSSL_1_0_2k.tar.gz tar zxvf openssl.tar.gz mv openssl-OpenSSL_1_0_2k/ openssl/ cd openssl/ patch -p1 < ../sslconfig/patches/openssl__chacha20_poly1305_draft_and_rfc_ossl102j.patch cd ../ #下载最新Nginx wget -c http://nginx.org/download/nginx-1.12.0.tar.gz tar zxvf nginx-1.12.0.tar.gz cd nginx-1.12.0/ #安装 PCRE 正则依赖库 sudo apt install libpcre3 libpcre3-dev ./configure --with-openssl=../openssl --user=pi --group=pi --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-http_sub_module #configure无错误后进行编译 make #编译完成大概需要22分钟 sudo make install sudo ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
配置Nginx
sudo nano /usr/local/nginx/conf/nginx.conf #安装Aria2 WebUI sudo apt install git git clone https://github.com/ziahamza/webui-aria2.git /usr/local/nginx/html
测试与运行Nginx
#测试配置是否正确 sudo nginx -t #启动Nginx sudo nginx #重载Nginx sudo nginx -s reload #停止Nginx sudo nginx -s stop
开机自启Nginx
sudo nano /etc/init.d/nginx #!/bin/sh ### BEGIN INIT INFO # Provides: nginx # Required-Start: $remote_fs $network # Required-Stop: $remote_fs $network # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Nginx Server ### END INIT INFO case "$1" in start) echo "Starting Nginx..." sudo -u pi nginx ;; stop) echo "Stopping Nginx..." sudo nginx -s stop ;; restart) $0 stop && sleep 3 && $0 start ;; esac exit sudo chmod +x /etc/init.d/nginx #添加开机启动 sudo update-rc.d nginx defaults
Ngrok
安装Ngrok
参考 https://www.lanseyujie.com/post/ngrok-for-raspberry-pi.html 搭建的 Ngrok 服务,将树莓派 RPC 的 6800 端口和 HTTP 的 80 端口分别映射到公网上。
配置Ngrok
server_addr: "ngrok.syscmd.online:4443" trust_host_root_certs: false tunnels: ssh: remote_port: 2222 proto: tcp: 22 rpc: remote_port: 6868 proto: tcp: 6800 http: subdomain: "aria2" proto: http: 80
测试与运行Ngrok
./ngrok_arm -config=ngrok.cfg start ssh rpc http
开机自启Ngrok
参考 https://www.lanseyujie.com/post/ngrok-for-raspberry-pi.html ,修改 TUNNELS="ssh" 为 TUNNELS="ssh rpc http" 。
未完待续...
参考资料
[1] https://www.htpcguides.com/properly-mount-usb-storage-raspberry-pi/
[2] http://elinux.org/RPi_Adding_USB_Drives
[3] http://aria2c.com/usage.html