2014年12月10日 星期三

在CentOS 6.5上安裝 Grive

Grive 是一套非官方、開放原始碼的 Linux client 端軟體 ,透過指令就可以把 Linux 機器上的檔案同步到 Google Drive上。
為何用非官方的軟體呢?因為 Google 一直不提供 Linux 上的同步軟體嗎!
我學校有 Synology nas ,所以學校 Server 的備份,除了異機備份之外,我還可以透過 Synology 的 Cloud Sync 套件,將檔案備份到 Google Drive 上,若是沒有 Synology nas 的網管,就可以試試使用 Grive 來備份。
在 Grive 官網是介紹在Ubuntu 下如何裝 Grive(這裡有篇中文的介紹 在 Linux 中使用 Grive 指令工具同步 Google 雲端硬碟(Drive)上的檔案
我的機器都是 CentOS,不太適用那些方法,所幸找到這篇文章(這幾天都連不上!)介紹如何在 CentOS 上安裝 Grive,依樣畫葫蘆總算成功。
其實是試了很多次,也遇到很多那網頁上沒提到的問題,不過總算克服諸多問題解決了,這篇文章算是我的安裝筆記,也給需要的網管人員參考。
一、準備工作
  • 我的環境是 CentOS 6.5,安裝時選擇 basic server,其他套件都沒安裝過。
  • 把 selinux 關掉
vim /etc/selinux/config
SELINUX=disabled
  • 校正時間,避免機器時間錯誤,檔案同步時會發生問題
/usr/sbin/ntpdate watch.stdtime.gov.tw
  • 當然最好把校時這工作寫進 crontab ,定時校時
* 5 * * * root /usr/sbin/ntpdate watch.stdtime.gov.tw > /dev/null 2>&1
  • 我用乾淨的 CentOS 6.5 來安裝,最後一直卡關,卡在錯誤訊息「

  • Could not find JSON-C
    」,查了資料說在 php 5.2 之後 json 是包含在 php-common 套件裡,但我的系統沒安裝php,安裝 php-common 還是一樣的錯誤訊息。後來是使用了 yum remi ,之後才能單獨安裝 json-c、json-c-devel ,所以等一下也必須安裝我這一篇文章「新安裝 CentOS 6.5 筆記」 裡面提到的「二、升級到 PHP 5.5.13」那部分設定。
二、開始安裝套件
1.一些基本套件
[root@test ~]# cd /tmp
[root@test tmp]# wget http://packages.atrpms.net/RPM-GPG-KEY.atrpms
[root@test tmp]# wget http://dl.atrpms.net/el6Server-i386/atrpms/stable/atrpms-repo-6-7.el6.i686.rpm
[root@test tmp]# rpm --import RPM-GPG-KEY.atrpms
[root@test tmp]# rpm -ihv atrpms-repo-6-7.el6.i686.rpm
[root@test tmp]# wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
[root@test tmp]# wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
[root@test tmp]# rpm -Uvh remi-release-6*.rpm epel-release-6*.rpm
[root@test tmp]# vim /etc/yum.repos.d/remi.repo
設定 [remi]及 [remi-php55] 裡面的 enabled=1
[root@test tmp]#yum update
[root@test tmp]# yum install automake autoconf openssl openssl-devel json-c json-c-devel curl curl-devel libcurl-devel libcurl libarchive libarchive-devel libidn ibidn-devel expat expat-devel binutils binutils-devel gcc-c++ yajl libgcrypt-devel

2.安裝  CMake
先檢查 CMake 版本
[root@test tmp]# rpm -qa | grep -i cmake
CMake 的版本必須 >2.8 , 若是版本太舊,請移除後重新安裝
[root@test tmp]# yum remove cmake
我的系統上沒安裝 CMake,所以直接yum 來安裝
[root@test tmp]# yum install cmake  --disablerepo=*  --enablerepo=atrpms-testing
順利安裝 cmake-2.8.8-4.el6.i686。

3.安裝  Boost
先檢查 Boost 版本
[root@test tmp]# rpm -qa | grep -i boost
boost 的版本必須 >1.46 , 若是版本太舊,請移除後重新安裝
[root@test tmp]# yum remove boost boost-devel
我的系統上沒安裝 boost ,所以要去抓boost 來安裝
[root@test tmp]# wget http://nchc.dl.sourceforge.net/project/boost/boost/1.49.0/boost_1_49_0.tar.gz [root@test tmp]# tar -xvf boost_1_49_0.tar.gz
[root@test tmp]# cd boost_1_49_0
[root@test boost_1_49_0]# ./bootstrap.sh --prefix=/usr[root@test boost_1_49_0]#  ./b2 install
這裡會安裝很久,大概15分鐘(我用6年前的Acer M6 2GB RAM 舊桌機來安裝測試)

三、安裝 Grive
Grive @GitHub (https://github.com/Grive/grive) 可以取得最新的 Grive 0.3.0 版程式,但我試過還有問題卡關。所以就到 Grive 官網去下載 Grive 0.2.0 版來安裝。
[root@test boost_1_49_0]# cd /tmp/
[root@test tmp]# wget http://www.lbreda.com/grive/_media/packages/0.2.0/grive-0.2.0.tar.gz [root@test tmp]# tar zxvf grive-0.2.0.tar.gz
[root@test tmp]# cd grive-0.2.0
[root@test grive-0.2.0]# cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr .
[root@test grive-0.2.0]# make all install
當你看到下圖時,表示 Grive 已安裝完成
image

四、設定、使用 Grive
1.新增一個資料夾
以後要備份的檔案都放進裡面。
至於這資料夾放在哪裡呢?網路上大都是放在 /root 下面,其實都可以的。
等一下我會在 /home 下面建立這 backup1 資料夾。
[root@test grive-0.2.0]# cd /home
[root@test home]# mkdir backup1
2.執行 grive
[root@test home]# cd backup1/
[root@test backup1]# /usr/bin/grive –a
3.驗證 Grive ,讓 Grive 可以存取 Google Drive
執行了 /usr/bin/grive –a 之後,你會看到如下畫面
image

複製上面的網址 → 打開瀏覽器→ 登入你要同步用的 Google 帳號 → 貼上網址→ 接受 Grive 使用 Google drive 的授權→ 複製授權碼→ 到 ssh 介面貼上授權碼→ 完工。

image
image
image

4.測試是否能同步
先在本機端新增兩個新資料夾
[root@test backup1]# mkdir test01
[root@test backup1]# mkdir test02
執行 grive ,注意,後面不需要再加上 -a 參數
[root@test backup1]# /usr/bin/grive
你會看到同步結果
image
看一下 Google drive 是否有這兩個資料夾,確認有同步成功
image

Grive 的同步方式,就是要在備份資料夾裡執行 /usr/bin/grive 之後才會進行同步,所以可以寫個 .sh 檔案,然後再放進 crontab 裡,定時做這工作就可以了!
cd /home/backup1
/usr/bin/grive

5.能否同步多個備份資料夾?
一 台Server 可能提供多種不同網路服務,若是把所有備份檔案都放在同一個備份資料夾、同一個 Google drive 裡面,可能不同服務的檔案會全部混在一起,而且一個 Google Apps drive 雖然有 30GB 可以使用,但可能很快空間就會爆掉了!
所以最好不同服務,備份到不同資料夾、備份到不同 Google drive ,這樣會比較順暢。
所以我可以在 /home 下面再新增個 backup2  的資料夾,再如上面的步驟,再開另一個 Google 帳號來備份,這樣就可以了!

6. Grive 同步的狀況是?
若我把 本機端 backup1 裡面檔案刪掉,再執行 /usr/bin/grive 之後, 遠端 Google drive 上的檔案也會被刪除(被刪除的檔案會被丟進 Google drive 的 垃圾桶 裡面)。
image
反之,我若在遠端 Google drive 介面刪除(test02)或新增檔案(test03),執行 /usr/bin/grive 之後,本機端 /backup1 也會同步刪除或新增檔案。
image

7.更多 grive 的說明
[root@test backup1]# /usr/bin/grive --help
Grive options:
  -h [ --help ]         Produce help message
  -v [ --version ]      Display Grive version
  -a [ --auth ]         Request authorization token
  -V [ --verbose ]      Verbose mode. Enable more messages than normal.
  -d [ --debug ]        Enable debug level messages. Implies -v.
  -l [ --log ] arg      Set log output filename.
  -f [ --force ]        Force grive to always download a file from Google Drive
                        instead of uploading it.
  --dry-run             Only detect which files need to be uploaded/downloaded, without actually performing them.

8. 本機端怎麼把要被備份的檔案放進 /home/backup1 裡面呢?
這裡我偷懶一下,直接拿以前在 Google+ 上寫的 po 文來貼上吧!
2.我的備份分成3種,資料庫的備份、目錄的rsync同步、整個目錄 tar 成一個檔案,寫成3個 shell ,然後在 crontab 裡面分不同時間、頻率來執行
資料庫的備份
# mysqldump 到本機端 /mybackup/sql/ 下面
mysqldump u root -p密碼 -h localhost moodle2 --opt > /mybackup/sql/`date "+moodle2%d"`.sql
# 把 sql 資料 tar 壓縮,減少檔案,再存到已掛載的遠端 nas 的 backup 目錄上
cd /mybackup/sql
tar cvfz /backup/`date "+moodle2-%d"`.tar.gz `date "+moodle2-%d"`.sql
目錄的同步rsync
# 把本機端 moodle2 目錄同步到遠端 /backup/web-rsync 下面
/usr/bin/rsync -avzh /var/www/moodle2 /backup/web-rsync
ps1:若是要讓讓本機端檔案刪除了,遠端 nas 的檔案也刪除,可以加上 --delete 的參數
/usr/bin/rsync -avzh --delete /var/www/moodle2 /backup/web-rsync
ps2:若是要讓特定目錄下的檔案不要同步(例如 lifetype 裡 /tmp 目錄下的檔案),可以加 --exclude=tmp/* 的語法
/usr/bin/rsync -avzh --delete --exclude=tmp/ /var/www/lifetype /backup/web-rsync
整個目錄 tar 成一個檔案
# 把 moodle 這目錄 tar 成(依日期) moodle2.tar.gz,然後直接存在遠端 /backup/tar 這目錄下
cd /var/www
tar cvfz /backup/tar/`date "+%d"`-moodle2.tar.gz moodle2
ps:因為有加上 `date "+%d"` ,所以備份檔案最多保留 31天
ps:存到 synology nas 上的檔案,我會再設定用 Synology 的 cloud sync 套件同步到  Google Drive, 要自己預估一下備份31天檔案是否會超過 30GB,以免 Google Drive 空間爆掉。
我大概是一個服務就開一個Google Apps 帳號,以免 Google Drive 空間不夠。

Done!昏昏欲睡

沒有留言:

張貼留言