标题应该能说明想干嘛了是吧?注意,这里的“OneDrive Free Client“是个特指,是一个开源的Linux下访问巨硬OneDrive的工具。
这玩意儿安装起来颇费周折,故此撰文记录一下。
首先,这个工具有两个开发者。原开发者skilion 2021年后放弃了维护,转而被 abraunegg 接手继续开发。但是A君的文档写得实在是乱七八糟,我到原库查看了S君的文档,才顺利地装了下来。
总之就是玩这个东东,开始的安装和授权相当麻烦,后面的配置和启动都不值一提。
安装
※可能是使用D语言开发的缘故,本工具需要编译安装,不同Linux发行版的编译环境的配置方法不同,这里只写CentOS7 的,其余版本的编译环境安装方法请自行在官网文档里查找,大同小异。
安装编译环境
sudo yum groupinstall 'Development Tools' sudo yum install libcurl-devel sqlite-devel curl -fsS https://dlang.org/install.sh | bash -s dmd-2.099.0
除libcurl-devel和sqlite-devel外,如果提示少啥库就装啥库,
下载代码、编译、安装
git clone https://github.com/abraunegg/onedrive.git cd onedrive #使用编译需要的环境变量 source ~/dlang/dmd-2.099.0/activate ./configure make clean; make; sudo make install #恢复原始环境变量 deactivate
这里的“2.099.0”,就是上一步安装的dmd的版本,不同的版本需要根据官网的说明进行替换。
因为这玩意儿卸载的时候也要make,所以建议代码留着别删。
在个人账户下给此APP授权访问
Linux控制台下,不带参数运行onedrive,窗口上会给出一个访问链接。把Authorize this app visiting:后面的内容复制粘贴到浏览器。
onedrive Configuring Global Azure AD Endpoints Authorize this app visiting: #复制控制台上的下面这个链接↓↓↓ https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&scope=Files.ReadWrite%20Files.ReadWrite.All%20Sites.ReadWrite.All%20offline_access&response_type=code&prompt=login&redirect_uri=https://login.microsoftonline.com/common/oauth2/nativeclient Enter the response uri:
访问后会要求输入你的onedrive账号和密码。之后弹出是否同意此APP访问账户的窗口,选同意。
同意后浏览器上一片空白,但是邮箱里会收到一封确认信。我安装时卡在这里好久,完全看不出已经可以继续了。此时把白屏的地址栏上的内容复制下来备用。
什么?你没有账号和密码?那把这篇博文叉了吧。
回到Linux控制台,在Enter the response url: 后面粘贴上刚才复制的内容,回车
Configuring Global Azure AD Endpoints Authorize this app visiting: https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&scope=Files.ReadWrite%20Files.ReadWrite.All%20Sites.ReadWrite.All%20offline_access&response_type=code&prompt=login&redirect_uri=https://login.microsoftonline.com/common/oauth2/nativeclient #把浏览器上的链接粘贴到冒号后面↓↓↓ Enter the response uri: https://xxxxxxxxxxxxxxxxxx Application has been successfully authorised, however no additional command switches were provided. Please use 'onedrive --help' for further assistance in regards to running this application.
OK,至此最离谱的部分都过去了。
此时其实已经可以用了,什么都不改,执行同步命令,你的OneDrive就会跟~/OneDrive血脉相连了。但这还不够,因为我只想上传网站备份,在linux上保留整个onedrive毫无必要。所以接下来要对默认配置进行修改。
配置
配置文件
使用默认配置是不需要配置文件的。但要修改配置的话,需要先下载配置文件。(呃,其实也可以完全手搓)
下载到下面两个位置都可以生效。
~/.config/onedrive/
/etc/onedrive/
默认这两个文件都是不存在的,想修改默认配置的时候再创建它们即可。
因为上传备份这件事只能以root身份运行,所以这里这两个位置也没差多少。如果多用户公用服务器的话,当然是各人配各人的。
下载配置文件
mkdir -p ~/.config/onedrive wget https://raw.githubusercontent.com/abraunegg/onedrive/master/config -O ~/.config/onedrive/config
编辑配置文件
vim ~/.config/onedrive/config
找到”sync_dir”字段,去掉前面的“#”号,并改成备份文件所在的上一级目录。对于bt面板来说,备份目录是”/www/backup”。为了数据安全,当然可以另存到其它位置。不过那样还需要另外启cron进行搬运,对我来说太麻烦了。
另外我还修改了监视时间。网站一天备份一次,默认的300秒对我来说太频繁了,根本用不上。
还有一个monitor_fullscan_frequency,是全盘同步频率,乘以monitor_interval得到的是扫整个folder的时间间隔。现在的使用场景根本不需要作全盘同期,所以随便改改就好,我这里给监视时间设成4小时,全盘同期设成了12小时。
另外还有很多项目可以设,对我来说没需要,看都没看。有需要的在这里自己查。
#sync_dir="~/OneDrive"
sync_dir = "/www"
#monitor_interval="300"
monitor_interval="14400"
# monitor_fullscan_frequency = "12"
monitor_fullscan_frequency = "3"
创建同步文件列表
此软件提供了单独的文件列表功能,如果创建了此列表,则【只】同步此列表中出现的内容。这正是我想要的。也正是因为有这个功能,上面才会把同步文件夹指定到备份目录的上一级目录。
vim ~/.config/onedrive/sync_list
配置文档上写得很清楚,就不解释了。这里只要同步database和site这两个目录就够了/backup/site/*.tar.gz
/backup/database/*.sql.gz
至此,配置完成。
测试及初次运行
先“空跑”一下,根据log判断是否是自己想要的配置。
onedrive --synchronize --verbose --dry-run --resync
注意,每次修改了configure中的sync_dir,skip_dir,skip_file,drive_id,或者sync_list的话,要加上”–resync”这个参数。
配置无误的话,去掉”–dry-run”进行首次同步
onedrive --synchronize --verbose --resync
查看一下个人目录,会发现备份文件已经咔咔上传了。
服务
注意:启动服务之前,一定要成功地先进行过至少一次手动执行命令;如果改动了上文提到的configure或者sync_list,一定要执行过resync,否则服务无法成功启动。
启动
systemctl start onedrive
开机自启动
systemctl enable onedrive
stop,restart,disable,status也一样,玩服务器的都懂,就不废话了。
命令
命令列表里啥都有。列几个用得到的。
查看配置
onedrive --display-config
执行同步
onedrive --synchronize
显示详细加 –verbose,空跑加–dry-run,重新全部同期加–resync
只同步某个目录
onedrive --synchronize --single-directory 'dir_name'
只下载
onedrive --synchronize --download-only
只上传
onedrive --synchronize --upload-only
反安装
这个必须要提一下,因为这货反安装也需要make。
记得安装时建议保留原代码不?这里用到。删了也行,重新下呗。
cd onedrive source ~/dlang/dmd-2.099.0/activate sudo make uninstall deactivate rm -f ~/.config/onedrive/refresh_token
以上。这下我再也不用担心服务器供应商跑路了。
比较复杂,不适合我这种小白哈,现在备份直接用的七牛和腾讯,随时备份,保存15个版本
我不信任任何国产服务。
`make clen; make;`
clean 少了个a
头一次见到用D语言开发的玩意,就感觉日本人喜欢D语言的多一些。
这种类oauth2认证点完确定然后页面一片空白(然后收到邮件)这种荒唐事,微软干,谷歌也干,非死不可也干,推特也干,基本上所有大厂对于第三方客户端的认证接口都特别做了劣化,多少人多少次在多少场景下都被这么坑过,相当烦躁。
用源码`make uninstall`那得是无参数`./configure`才能成功,像我这种喜欢`–prefix`的直接就去删prefix目录。然后不论是有源码make uninstall还是删prefix目录,最后都会在`~/`下面丢出一大堆垃圾出来,root安装的软件甚至还在/root下面有垃圾,搞不好/etc甚至/var底下都有垃圾,追上Windows了,烦死了,以至于我现在看到`sudo make install`就恶心,一个用户端软件要个屁屁的root权限。现在看到这种玩意我就直接套皮在Docker里面用,或者干脆直接找Docker版本。
谢抓虫。
后面接手的哥们之所以文档写的差,就是他支持了docker和普通用户。然后docker版的说明、不同用户的说明跟原版的说明混在一起乱七八糟。对于docker我在VPS上始终没敢迈出第一步,只能在公司服务器上瞎玩。
Docker这玩意的文档就在于,Docker一侧的用户文档会跟原版的文档差别大到离谱,以至于我对自己项目Docker化之后都是直接开一个新仓库单独搞(然后发现自己并没有同时存在标准编译和Docker的项目)。不过网上多数项目源文件和Dockerfile都是堆在一起的。正规点的项目会直接不写Docker传参的文档,要求用户直接mount配置文件目录。
另外写文档这事以前以为可能只有中国人有这类问题,我那些以前同时写文档都跟挤牙膏似的。然后小需求看多了就发觉全球人写文档都跟母语不及格似的。
如果你在主机上搞了特别多iptables或者Docker也用到的东西的话,那用起来是会比较坑。
这个真麻烦 我部署了rsync文件同步服务 也做了FTP备份 缺点也很明显需要两台机器😂
刚把工作电脑的ubuntu格了,装上debian
看到中间Microsoft那个截图,感慨难得遇到一个用日文作系统语言的伙伴啊!(其实日文IT看着很吃力)
在日文开发的很多吧。我们大连遍地都是,扫卫生阿姨都会整两句日语。
代码高亮,代码是黑的,背景也是黑的?😂
哦哦,原来不是,那个样式加载了半天。哈哈哈
https://image.h4ck.org.cn/wp-content/uploads/2023/11/Jietu20231110-141550.jpg
这个问题我是知道的,一直懒得改。既然你好心提醒了,那我就改了一下下。谢谢。
这个看着就很头疼,现在微软的win11和linux结合的那么好,在linux上装一个onedrive却要这么折腾,也是无语。我上回也想在自己常用的ubuntu上安装一个onedrive进行同步备份文件,折腾了许久没搞定,还apt install了一大堆有的没的依赖和软件,搞得我差点洁癖发作重装系统,后来删了几个文件夹了事。
ubuntu上好像有个带图形界面的。不过确实得一点一点试。这次我其实是被VPS供应商吓到了,因为后台没注册手机号,他们没通知就把我服务停了。我还以为删库跑路了。
这头像的什么字体还挺好看的,居然还支持中英文,不知道文件大不大。
中英文不是同一种字体。英文是Lavishly Yours,中文是Long Cang,都是谷歌字体随便找的。在线加载的,英文字体应该很小,中文这个全加载挺大的。
我使用的是备份Dropbox插件
Dropbox只用过一小段时间它就被墙了,后来微软账号免费送5G就换OneDrive了。我还是信任硬盘。没有在网盘上存重要东西的习惯。
用rclone不就好了,我现在用这个备份数据到onedrive,而且支持的网盘也更多。
就因为它支持的太多,所以我才不想用。
one drive感觉很鸡肋,手机系统本身就自带云空间,似乎没有必要单独为pc购买云空间,还不如各种云。
国产手机厂商们带的?根本不敢用。我连它们的账号都不敢注册,除非不注册不让继续用手机。
现在还在用CentOS7么?可以考虑换其它的了。
没必要。
我也不信任国产服务。目前我的博客在虚拟主机,但是有个vps做测试,留个后路。我在vps用了cyberpanel面板,面板里有个google drive备份。不过,我一直在想学这篇文章中提到的备份方法,于是我想知道在almalinux 8里能不能用。我想照着做一下,现在没有足够的时间,等我放假的时候试试。
almalinux跟CentOS一样,是红帽系的。但是almalinux 8应该对应去找CentOS 8的编译教程。前面编译不一样,后面配置的方法应该是一样的。
onedrive的体验一直挺好的,我两台电脑也通过这个同步数据。
不过同步网站的话,最简单的还是rsync,如果电脑是windows的话,装个cygwin环境即可,可以跑Linux脚本。
rclone更方便应该,可以映射为电脑磁盘。