Aria2 是老毛子主导开发并开源的,基于 C 语言的轻量高性能跨平台多线程下载软件,支持 HTTP
和 磁力链接
下载。Rclone 同样是一款高性能跨平台开源程序,它基于 Go 语言开发,支持对接和操作几十种主流网盘和对象存储产品,包括 Aliyun OSS
、OneDrive
、Google Drive
等。
本文主要介绍如何在 Debian 9+/Ubuntu 18+
和 CentOS 7+
上安装 Rclone
,对接 OneDrive
,以及利用 Aria2
的 Event Hook 实现文件下载后自动上传到 OneDrive
网盘。不难看出,使用这种方式,上传和下载都要经 VPS,不仅速度慢,还将产生可观的流量,并非传统意义上的 离线下载
。
获取 OneDrive Token
下文你将看到,因为 VPS 不方便使用图形界面浏览器,所以这一步我们选择在本地 Windows 下完成。
下载并解压 rclone-current-windows-amd64.zip,随后进入解压后的最内层文件夹(包含 rclone.exe)。此时,按住键盘 Shift
键的同时,右键文件夹空白处,选择 在此处打开 Powershell 窗口(S)
(CMD 也可以),随后复制粘贴以下命令并回车,打开 Rclone 配置菜单
。
- .\rclone.exe config
接着按照下面的示例和中文注释选择菜单的每一项,生成 OneDrive Token。
Config Menu
- No remotes found - make a new one
- n) New remote
- s) Set configuration password
- q) Quit config
- n/s/q> n # 输入 n 回车,新建远端配置
- name> od # 输入 od 回车,为远端配置命名(为保持下文一致性,不要使用其他名称)
- Type of storage to configure.
- Enter a string value. Press Enter for the default ("").
- Choose a number from below, or type in your own value
- 1 / 1Fichier
- \ "fichier"
- 2 / Alias for an existing remote
- \ "alias"
- 3 / Amazon Drive
- \ "amazon cloud drive"
- 4 / Amazon S3 Compliant Storage Provider (AWS, Alibaba, Ceph, Digital Ocean, Dreamhost, IBM COS, Minio, etc)
- \ "s3"
- 5 / Backblaze B2
- \ "b2"
- 6 / Box
- \ "box"
- 7 / Cache a remote
- \ "cache"
- 8 / Dropbox
- \ "dropbox"
- 9 / Encrypt/Decrypt a remote
- \ "crypt"
- 10 / FTP Connection
- \ "ftp"
- 11 / Google Cloud Storage (this is not Google Drive)
- \ "google cloud storage"
- 12 / Google Drive
- \ "drive"
- 13 / Google Photos
- \ "google photos"
- 14 / Hubic
- \ "hubic"
- 15 / JottaCloud
- \ "jottacloud"
- 16 / Koofr
- \ "koofr"
- 17 / Local Disk
- \ "local"
- 18 / Mega
- \ "mega"
- 19 / Microsoft Azure Blob Storage
- \ "azureblob"
- 20 / Microsoft OneDrive
- \ "onedrive"
- 21 / OpenDrive
- \ "opendrive"
- 22 / Openstack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
- \ "swift"
- 23 / Pcloud
- \ "pcloud"
- 24 / Put.io
- \ "putio"
- 25 / QingCloud Object Storage
- \ "qingstor"
- 26 / SSH/SFTP Connection
- \ "sftp"
- 27 / Union merges the contents of several remotes
- \ "union"
- 28 / Webdav
- \ "webdav"
- 29 / Yandex Disk
- \ "yandex"
- 30 / http Connection
- \ "http"
- 31 / premiumize.me
- \ "premiumizeme"
- Storage> 20 # 输入 20 回车,选择 Microsoft OneDrive,如果该项不是 20,则根据实际数字选择
- ** See help for onedrive backend at: https://rclone.org/onedrive/ **
-
- Microsoft App Client Id
- Leave blank normally.
- Enter a string value. Press Enter for the default ("").
- client_id> # 直接回车
- Microsoft App Client Secret
- Leave blank normally.
- Enter a string value. Press Enter for the default ("").
- client_secret> # 直接回车
- Edit advanced config? (y/n)
- y) Yes
- n) No
- y/n> n # 输入 n 回车,不使用高级配置
- Remote config
- Use auto config?
- * Say Y if not sure
- * Say N if you are working on a remote or headless machine
- y) Yes
- n) No
- y/n> y # 输入 y 回车,使用自动配置。此时浏览器会自动打开,请在打开的页面中登录 OneDrive 以获取 Token
- If your browser doesnt open automatically go to the following link: http://127.0.0.1:53682/auth?state=e075eabcf52d5094a837f1b3e12977de
- Log in and authorize rclone for access
- Waiting for code...
- Got code
- Choose a number from below, or type in an existing value
- 1 / OneDrive Personal or Business
- \ "onedrive"
- 2 / Root Sharepoint site
- \ "sharepoint"
- 3 / Type in driveID
- \ "driveid"
- 4 / Type in SiteID
- \ "siteid"
- 5 / Search a Sharepoint site
- \ "search"
- Your choice> 1 # 输入 1 回车
- Found 1 drives, please select the one you want to use:
- 0: OneDrive (business) id=b!ZyWPB3G6-EetswlYu40wymfxwt_DMENCvHVsnO89SKEvQjaMk22FTYhImrbqkbkN
- Chose drive to use:> 0 # 输入 0 回车
- Found drive 'root' of type 'business', URL: https://onedroptbsteduau-my.sharepoint.com/personal/102419_onmicrosoft_net/Documents
- Is that okay?
- y) Yes
- n) No
- y/n> y # 输入 y 回车
- 2019/10/11 17:44:44 ERROR : Failed saving config "drive_id" = "b!ZyWPB3G6-EetswlYu40wymfxwt_DMENCvHVsnO89SKEvQjaMk22FTYhImrbqkbkN" in section "od" of the config file: section 'od' not found
- 2019/10/11 17:44:44 ERROR : Failed saving config "drive_type" = "business" in section "od" of the config file: section 'od' not found
- --------------------
- [od]
- type = onedrive
- token = {"access_token":"xxx","token_type":"Bearer","refresh_token":"xxx","expiry":"2019-10-11T18:44:28.775745+08:00"}
- drive_id = b!ZyWPB3G6-EetswlYu40wymfxwt_DMENCvHVsnO89SKEvQjaMk22FTYhImrbqkbkN
- drive_type = business
- --------------------
- y) Yes this is OK
- e) Edit this remote
- d) Delete this remote
- y/e/d> y # 输入 y 回车
- Current remotes:
-
- Name Type
- ==== ====
- od onedrive
-
- e) Edit existing remote
- n) New remote
- d) Delete remote
- r) Rename remote
- c) Copy remote
- s) Set configuration password
- q) Quit config
- e/n/d/r/c/s/q> q # 输入 q 回车,退出配置
完成上述步骤后,你将看到 Powershell 窗口出现类似下面的代码片段,其中 xxx
很长,已被删去。不要关闭窗口,待会要将它复制到 VPS 中(上下的分割线不复制)。
- --------------------
- [od]
- type = onedrive
- token = {"access_token":"xxx","token_type":"Bearer","refresh_token":"xxx","expiry":"2019-10-11T18:44:28.775745+08:00"}
- drive_id = b!ZyWPB3G6-EetswlYu40wymfxwt_DMENCvHVsnO89SKEvQjaMk22FTYhImrbqkbkN
- drive_type = business
- --------------------
安装 Rclone
x86
架构可直接 复制
下面的安装命令 粘贴
到 SSH 窗口中 回车
,ARM
等其他架构的安装包不妨到 官网 下载。
Debian 9+/Ubuntu 18+ x64
- curl -O https://downloads.rclone.org/rclone-current-linux-amd64.deb && \
- dpkg -i rclone-current-linux-amd64.deb
CentOS 7+ x64
- curl -O https://downloads.rclone.org/rclone-current-linux-amd64.rpm && \
- rpm -i rclone-current-linux-amd64.rpm
导入 OneDrive 配置
复制以下命令粘贴到 SSH 窗口中回车。
- CONF_DIR=/root/.config/rclone
- [[ ! -d "${CONF_DIR}" ]] && mkdir -p "${CONF_DIR}"
- cat > "${CONF_DIR}/rclone.conf"
随后 复制
第一步得到的包含 OneDrive Token 的 配置内容
(Powershell 复制方式为:选中内容后回车。上下分割线不要复制),粘贴
到 SSH 窗口中 回车
,随后按 Ctrl + D
保存。
测试 OneDrive 是否对接成功
复制粘贴以下命令回车,观察能否获取 OneDrive 文件列表。
- rclone ls od:/
复制粘贴以下命令回车,观察能否上传 testfile
文件到网盘根目录。
- touch testfile
- rclone copy testfile od:/
为 Aria2 添加自动上传脚本
使用 Visual Studio Code 等高级文本编辑器,修改下面脚本中的 LOCAL_DIR
,即 Aria2 下载路径;REMOTE_DIR
,即 OneDrive 上传路径后,复制粘贴到 SSH 窗口中回车。
Shell Code
- SAVE_DIR=/usr/local/etc/aria2-rclone
- [[ ! -d "${SAVE_DIR}" ]] && mkdir -p "${SAVE_DIR}"
- touch "${SAVE_DIR}/upload.sh"
- chmod +x "${SAVE_DIR}/upload.sh"
- cat > "${SAVE_DIR}/upload.sh" <<\EOF
- #!/usr/bin/env bash
-
- GID="$1"
- FILE_NUM="$2"
- FILE="$3"
-
- ##############################
- LOCAL_DIR=/mnt/aria2/downloads
- REMOTE_DIR=od:/Movies
- ##############################
-
- LOG_FILE=/usr/local/etc/aria2-rclone/upload.log
-
- function analyse_directory() {
- directory="${FILE}"
- parent_directory="$(dirname "${directory}")"
- while [[ "${parent_directory}" != "${LOCAL_DIR}" ]]; do
- has_sub_directory=1
- directory="${parent_directory}"
- parent_directory="$(dirname "${parent_directory}")"
- done
- if [[ "${has_sub_directory}" ]]; then
- FILE="${directory}"
- REMOTE_DIR="${REMOTE_DIR}${directory#$parent_directory}"
- fi
- }
-
- [[ ! "${FILE_NUM}" ]] && exit
- [[ "${FILE_NUM}" -eq 0 ]] && exit
- analyse_directory
- cat >> "${LOG_FILE}" <<ENDOFFILE
- =========================================================================
- Local: $FILE
- Remote: ${REMOTE_DIR}
- ENDOFFILE
- rclone copy "${FILE}" "${REMOTE_DIR}" --log-file "${LOG_FILE}" --stats=5m --stats-one-line --log-level INFO
- # 如需上传后删除文件,请删掉下一行开头的 '#'
- # rm -rf "${FILE}"
- EOF
随后,修改 Aria2 配置文件 aria2.conf
,在其中添加下面这行即可。
- on-download-complete=/usr/local/etc/aria2-rclone/upload.sh
最后,重启 Aria2,添加任务,观察下载完毕后能否上传到 OneDrive,上传日志可通过以下命令查看。
- cat /usr/local/etc/aria2-rclone/upload.log
如有问题请在下方留言,文章转载请注明出处,详细交流请加下方群组!请大佬不要屏蔽文中广告,因为它将帮我分担服务器开支,如果能帮忙点击我将万分感谢。
强调几点:(该留言由系统自动生成!)
1. 请不要刷广告,本站没有流量!
2. 我不回复虚假邮箱,因为回复了你也看不到!
3. 存在必须回复的隐藏内容时,可以直接使用表情框里的阿鲁表情!