前言
上周罗马尼亚商家hostsolution的1T大硬盘服务器又开售了,遂入手一台拿来做离线下载服务器和刷pt,3年50欧元,价格还可以,重点是这家抗DMCA,据说是连迪士尼也都不鸟的,bt下载很合适。而6月份的时候买了这家的另一款大硬盘服务器做离线下载,但是价格很高,于是想把已有的这台租出去回点血。但是这台服务器上已经下载了一些东西,大概有200多G,存到本地是不可能的,太占硬盘,只能存到云上,云存储方案有Google Driver和Onedrive,Onedrive只有5T,而且账号不稳定,还是选择Google Drive吧。
过程
方案定好以后,就是找工具了,毕竟Google Driver官方没有服务器版客户端,不像在Windows上那么方便,好在还真有这样的工具。一开始找到了这篇帖子,但是在获取verification code的时候提示Sign in with Google temporarily disabled for this app.This app has not been verified yet by Google in order to use Google Sign In.而并不是文章中说的会返回一串地址,在萌鼠博客下看到据他推测是API过期了,一看文章的日期是2017年,看来很可能是这个原因。
不过GitHub有人解决了这个问题,工具的仓库在下面
相应的提问和解决在issues 546和issues 533,这里梳理一下过程。
1.安装Go环境
因为工具是用Go语言编写的,解决前述问题需要自己编译,所以要先安装Go环境。
1. 下载Go的二进制安装包
wget https://dl.google.com/go/go1.13.5.linux-amd64.tar.gz
2. 检查下载文件是否正确
sha256sum go1.13.5.linux-amd64.tar.gz
正确的输出应该如下
cde4af177ef9f218f51f5e12041f43004f9fa1b0e45d3b647c252aba04901035 go1.13.5.linux-amd64.tar.gz
3. 解压安装包到/usr/local
tar -C /usr/local -xf go1.13.5.linux-amd64.tar.gz
4. 设置环境变量
打开/.bash_profile文件
vi ~/.bashrc
在文件最后面加入下列内容:
export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin
保存文件,然后使环境变量生效
source ~/.bashrc
5. 验证Go是否成功安装:
go version
正常情况下应该输出如下内容:
go version go1.13.5 linux/amd64
2.创建自己的谷歌凭据
这篇文章有详细的设置步骤说明,大体流程如下:
- 前往谷歌API控制台(Google API Console)
- 创建一个新的项目(Create a new project)
- 给项目添加Google Drive API(Enable Google Drive API)
- 配置许可(Configure Consent Screen)
- 创建桌面应用的OAuth client ID凭据(Create credentials by choosing OAuth client ID about desktop app)
3.下载gdrive并设置凭据
1. 下载gdrive包并进入目录
git clone https://github.com/gdrive-org/gdrive.git
cd gdrive/
2. 填入自己的凭据
vi handlers_drive.go
修改17、18行为在2.5中获得的自己的凭据
const ClientId = "367116221053-7n0v**.apps.googleusercontent.com"
const ClientSecret = "1qsNodXN*****jUjmvhoO"
修改完后保存并退出
4.编译创建自己的gdrive
1. 获取依赖
go get github.com/prasmussen/gdrive
2. build该项目
go build
chmod +x gdrive
mv gdrive /usr/local/bin/
5.激活authentication
gdrive about
输入上述命令后会得到一个如下的链接:
https://accounts.google.com/o/oauth2/auth?client_id=123456789123-7n0vf**
在浏览器中打开上述链接,并允许应用获取相关权限,然后你会得到一个如下的verification code:
4/9gKYAFAJ326XIP6J42t35**
将上述verification code复制并粘贴到终端,整个过程就结束了。接下来就可以尽情使用gdrive了,具体的使用命令参考文章开头GitHub仓库的readme。
Example
1.上传本地文件到Googledrive
nohup gdrive upload --parent $directoryID(gd的文件夹ID。eg:0B3X9GlR6EmbnY1RLVTk5VUtOVkk) $PATH(本地文件的文件名。eg:readme.md) >log.out &
- 本地文件readme.md将被上传至0B3X9GlR6EmbnY1RLVTk5VUtOVkk下
2.上传本地文件夹到Googledrive
nohup gdrive upload -r --parent $directoryID(gd的文件夹ID。eg:0B3X9GlR6EmbnY1RLVTk5VUtOVkk) '$PATH'(本地文件夹的名称。eg:'docs') >log.out &
- 本地文件夹(doc它自己)将被上传至0B3X9GlR6EmbnY1RLVTk5VUtOVkk下
3.同步本地文件夹到Googledrive
nohup gdrive sync upload $PATH(本地文件夹的名称。eg:Docs) $directoryID(gd的文件夹ID。eg:0B3X9GlR6EmbnY1RLVTk5VUtOVkk) >log.out &
几点说明:
- 注意这里同步的是
$PATH
和$directoryID
下的所有文件,也就是将上传同步$PATH
下的所有文件到$directoryID
下,但$PATH
自己并不会上传上去,注意和上面第二条的区别 - 貌似只要使用过一次同步命令,gdrive就会认定$directoryID为同步目录,以后就不能使用
upload了
,而必须使用sync upload
,但sync upload
会比较本地和gd的文件异同,速度很慢。因此一般情况下不要使用snyc upload
参考文章
- https://github.com/prasmussen/gdrive/issues/546
- https://www.mynotepaper.com/mount-google-drive-using-gdrive-on-linux-server-with-own-oauth-credentials
本站未做转载声明的文章均为原创,版权归https://blog.3014159.xyz所有, 转载文章均会在文内声明转载信息并标明来源。 本文作者为圆周驴,原文链接为https://blog.3014159.xyz/server/2020/10/23/28.html,转载需注明原文链接。谢谢!