头图:https://cdn.naraku.cn/imgs/Aria2.jpg
摘要:Aria2 是一个多平台轻量级,支持 HTTP、FTP、BT 等多协议、多来源的下载工具。本文以Aria2搭配OneDrive,实现自动离线下载并上传到网盘。

一开始折腾了半天,总是无法自动上传,最终参考 @ZYong 的文章成功实现~

安装Aria2

  • 使用逗比的安装脚本,运行以下任一命令并选择1安装Aria2

    1. # Github
    2. wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubiBackup/doubi/master/aria2.sh && chmod +x aria2.sh && bash aria2.sh
    3. # Gitee
    4. wget -N --no-check-certificate https://gitee.com/fengsec/Aria-OneDrive/raw/master/aria2.sh && chmod +x aria2.sh && bash aria2.sh
    5. # 备用命令1
    6. wget -N --no-check-certificate https://pan.zybest.top/other/aria2.sh && chmod +x aria2.sh && bash aria2.sh
    7. # 备用命令2
    8. wget -N --no-check-certificate https://blog.zybest.top/share/aria2.sh && chmod +x aria2.sh && bash aria2.sh
  • 安装完成后,如果忘记配置信息或者想修改配置信息,可以运行脚本

    1. $ bash aria2.sh
  • 配置BT服务器。运行脚本,选择10自动更新BT-Tracker服务器,然后输入y

    1. $ bash aria2.sh

    获取授权

  • 根据OneDrive账号版本,选择以下URL点击登录并授权

  • 登录后会跳转到一个以localhost开头打不开的链接,复制整条链接,包括http://loaclhost,后面会用到。如:

    1. http://localhost/onedrive-login?code=OAQABAAIAAAAm-06blBE1TpVMil8KPQ41c8bkjrEMWeBECgahoaqGcj0fJocbWU4C7RNHI7D4yyQuFy1GSSPxtd7hXG-HmiJJ68KwgNoFmE6-5duZfnpT1L2Jge8NIu1Ul6dWP0TMcNQsC.......I89IlFR-hfQuYKjZIMxF5kpikIoeIAA&session_state=6dea7d52-c3a8-4add-a4a3-421254474f40
  • 安装OneDriveUploader。可以使用以下命令下载,也可以直接到Github/Gitee下载后上传到/usr/local/bin/目录

    1. # 64位系统下载
    2. $ wget https://gitee.com/fengsec/Aria-OneDrive/raw/master/OneDriveUploader/amd64/linux/OneDriveUploader -P /usr/local/bin/
    3. # 32位系统下载
    4. $ wget https://gitee.com/fengsec/Aria-OneDrive/raw/master/OneDriveUploader/i386/linux/OneDriveUploader -P /usr/local/bin/
    5. # arm架构下载
    6. $ wget https://gitee.com/fengsec/Aria-OneDrive/raw/master/OneDriveUploader/arm/linux/OneDriveUploader -P /usr/local/bin/
  • 下载完成后授权

    1. $ chmod +x /usr/local/bin/OneDriveUploader
  • 获取OneDrive授权,将url换成上面复制的授权地址,包括http://loaclhost

    1. # 国际版/教育版
    2. OneDriveUploader -a "url"
    3. # 个人版/家庭版
    4. OneDriveUploader -ms -a "url"
    5. # 中国版(世纪互联)
    6. OneDriveUploader -cn -a "url"
  • 如果提示Init config file: /path/to/file/auth.json类似信息,则初始化成功

  • 测试。在本地随便创建一个文件,然后上传。若能上传成功再继续进行

    1. $ touch 1.txt
    2. $ /usr/local/bin/OneDriveUploader -s "1.txt"

    自动上传

  • 在root目录下新建rcloneupload.sh, 填入以下代码

    • 如果使用aria2.sh脚本修改了下载目录,这里也需要修改
      1. #!/bin/bash
      2. GID="$1";
      3. FileNum="$2";
      4. File="$3";
      5. MaxSize="15728640";
      6. Thread="3"; # 默认3线程,自行修改,服务器配置不好的话,不建议太多
      7. Block="20"; # 默认分块20m,自行修改
      8. RemoteDIR=""; # 上传到Onedrive的路径,默认为根目录,如果要上传到File目录,""里面请填成File
      9. LocalDIR="/usr/local/caddy/www/Download/"; # Aria2下载目录,记得最后面加上/
      10. Uploader="/usr/local/bin/OneDriveUploader"; # 上传的程序完整路径,默认为本文安装的目录
      11. Config="/root/auth.json"; # 初始化生成的配置auth.json绝对路径,参考第3步骤生成的路径
      12. if [[ -z $(echo "$FileNum" |grep -o '[0-9]*' |head -n1) ]]; then FileNum='0'; fi
      13. if [[ "$FileNum" -le '0' ]]; then exit 0; fi
      14. if [[ "$#" != '3' ]]; then exit 0; fi
      15. function LoadFile(){
      16. if [[ ! -e "${Uploader}" ]]; then return; fi
      17. IFS_BAK=$IFS
      18. IFS=$'\n'
      19. tmpFile="$(echo "${File/#$LocalDIR}" |cut -f1 -d'/')"
      20. FileLoad="${LocalDIR}${tmpFile}"
      21. if [[ ! -e "${FileLoad}" ]]; then return; fi
      22. ItemSize=$(du -s "${FileLoad}" |cut -f1 |grep -o '[0-9]*' |head -n1)
      23. if [[ -z "$ItemSize" ]]; then return; fi
      24. if [[ "$ItemSize" -ge "$MaxSize" ]]; then
      25. echo -ne "\033[33m${FileLoad} \033[0mtoo large to spik.\n";
      26. return;
      27. fi
      28. ${Uploader} -c "${Config}" -t "${Thread}" -b "${Block}" -s "${FileLoad}" -r "${RemoteDIR}" -skip
      29. if [[ $? == '0' ]]; then
      30. rm -rf "${FileLoad}";
      31. fi
      32. IFS=$IFS_BAK
      33. }
      34. LoadFile;
  • 授权

    1. $ chmod +x rcloneupload.sh
  • 再修改Aria2配置文件

    1. $ vim /root/.aria2/aria2.conf
    2. # 最后一行加入以下代码
    3. on-download-complete=/root/rcloneupload.sh

    安装宝塔

  • 一键脚本

    1. # Centos
    2. $ yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
    3. # Ubuntu/Deepin
    4. $ wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh
  • 安装PHP7.2Nginx1.16

  • 安全组放行Aria端口,默认6800,否则AriaNg无法连接

    安装AriaNg

  • AriaNg

  • 下载AriaNg源码后,在BT面板创建一个站点, 将源码放在站点根目录上即可
  • 打开网页访问该站点,显示未连接。选择左侧AriaNg设置,右侧选择RPC,输入配置信息后刷新页面,左侧显示已连接即可
  • 再选择左侧Aria2设置>BitTorrent 设置,拉到最下面,最小做种时间输入0。

    安装OneIndex

    x> 已弃坑,现转用OLAINDEX
    [post cid=”58” cover=”https://cdn.naraku.cn/imgs/OLAINDEX.jpg“/]

  • OneIndex

  • 这个就不多说了,只需要添加一个站点然后放入OneIndex源码,然后访问站点安装即可,不懂的百度即可
  • 修改站点配置文件,把以下内容注释,避免出现404

    1. # location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    2. # {
    3. # expires 30d;
    4. # error_log off;
    5. # access_log /dev/null;
    6. # }
    7. #
    8. # location ~ .*\.(js|css)?$
    9. # {
    10. # expires 12h;
    11. # error_log off;
    12. # access_log /dev/null;
    13. # }
  • 配置站点伪静态。打开站点伪静态配置,输入以下代码,并在OneIndex后台-基本设置中勾选去掉地址栏中的/?/ (需配合伪静态使用!!)

    1. if (!-f $request_filename){
    2. set $rule_0 1$rule_0;
    3. }
    4. if (!-d $request_filename){
    5. set $rule_0 2$rule_0;
    6. }
    7. if ($rule_0 = "21"){
    8. rewrite ^/(.*)$ /index.php?/$1 last;
    9. }
  • 自动页面页面缓存

    1. $ crontab -e
    2. # 添加以下一行
    3. */10 * * * * php /www/wwwroot/one/one.php cache:refresh
  • 如果出现Permission denied错误,直接给OneIndex目录777权限即可

    网盘远程下载

    这里使用神器PanDownload,具体操作方法请查看文档:PanDownload - 远程下载

    总结

  • 遇到的问题

    • 上传时出现:unexpected end of JSON input
      • 这是因为授权文件auth.json被误操作覆盖了,重新授权即可
  • 授权文件:/root/auth.json
  • 自动上传脚本:/root/rcloneupload.sh
  • Aria一键管理脚本:/root/aria2.sh
  • Aria2目录:/root/.aria2/
  • OneDriveUploader命令请参考OneDriveUploader下的README.md
    1. $ OneDriveUploader -s "文件" # 上传文件
    2. $ OneDriveUploader -s "文件" & # 上传文件并后台运行