今回は、Googleが手掛けるオンラインストレージサービス Googleドライブを使ってみたいと思います。
Googleドライブは、Windows用のソフトウェアは提供していますが、Linuxは、今後提供予定として、今のところ提供されていません。
そのため、手動でウェブブラウザを経由してアップロード、ダウンロードすることはできますが、同期をとることはできません。
そこで、今回は、オープンソースのGoogleドライブとの同期ソフト Grive を使って Googleドライブ とローカルディスクとの同期を行ってみたいと思います。
安定版のGriveについては、 安定版のGrive(0.2.0)を使ってGoogleドライブと同期してみる を参照してください。インストールは、安定版が楽です。
大手検索サイト Google が提供する無料のオンラインストレージサービスです。 つまり、無料で使えるネットワーク上のディスクというイメージです。 もちろん、どこからでも必要な情報(ファイル)をアップロード、ダウンロードできます。 ローカルディスクと同期をとること可能で、最近のストレージサービスの流れでもあります。 ストレージサービスで有名な DropboxやSugarSync、SkyDriveも同様に同期型のオンラインストレージサービスです。
5GBまでは、完全無料で利用することができます。それ以上利用したい方には、有料プランが用意されています。
Googleドライブサーバーと接続し、ロールディスクとの同期を行う Google ドライブ クライアント ソフトです。
以下は、プロジェクトの趣旨、概要になります。(http://www.lbreda.com/grive/start 英文を和訳したものです)
このプロジェクトの目的は、GNU/Linux用のGoogle ドライブ クライアントの独立したオープンソース実装を提供することです。 Googleドライブサーバーとの接続には、GoogleドキュメントリストAPIを使用しています。また、ソースコード標準C++で書かれています。
- 目次
- 履歴
2013年6月3日 初版
Griveをインストールする
まずは、Griveをインストールします。
Ubuntuではバイナリパッケージがあるみたいですが、
CentOS,Scientific Linuxでは、バイナリパッケージがありません。
そのため、Griveをmakeインストールする必要があります。これが、結構、面倒です。一つ一つ、順を追って簡単に解説してみます。
最低限必要なツール、ライブラリをインストールする
Griveをmakeインストールするのに必要なパッケージを、まずは、インストールします。
CentOS,Scientific Linux
- 必要なツールをインストールします。
# ruby : yajlインストール時に必要 # gcc gcc-c++ make : makeインストールする際に必要 # wget, git : 最新版の各ソースコードをダウンロード時に必要 $ yum install -y gcc gcc-c++ make git wget ruby ...
- 必要なライブラリをインストールします。
# boost系は、インストールせずに自前で最新版をインストールする # その他のライブラリは、cmake,griveで必要なパッケージ $ yum install -y libgcrypt-devel json-c-devel libcurl-devel expat-devel binutils-devel qt-devel bzip2-devel libarchive-devel ...
json-c-devel のバイナリパッケージは、EPELにあるので、EPELを有効にしてインストールする必要があります。
以下は、EPELのリポジトリをインストールする際のイメージです。
詳しくは、リポジトリの追加・削除、無効・有効の設定をしてみる を参照してください。$ rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm http://dl.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm を取得中 警告: /var/tmp/rpm-tmp.l5NhSw: ヘッダ V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY 準備中... ########################################### [100%] 1:epel-release ########################################### [100%]
qt-devel は、griveコマンドには必要ありませんが、GUI版 の bgrive をmakeする際に必要になります。
もし、GUI版が必要なければ、ここでのインストールは不要です。
- C++クラスライブラリ boost
CentOS 6,Scientific Linux では、 バージョン 1.41 が提供されています。
Griveが必要とするboostのバージョンは、1.46 以降なので、これも最新版をインストールする必要があります。
- もう一つのJSONライブラリ yajl
これは、CentOS 6,Scientific Linux では、バイナリパッケージが提供されていませんので、 これもmakeインストールする必要があります。
- ソフトウェアのビルドを自動化 cmake
CentOS 6,Scientific Linux では、 バージョン 2.6.4 が提供されています。
Griveが必要とするcmakeのバージョンは、2.8 以降なので、これも最新版をインストールする必要があります。
上記にパッケージについて、以降、順次インストールします。
Debian
- 必要なツールをインストールします。
# gcc g++ make : makeインストールする際に必要 # wget, git : 最新版の各ソースコードをダウンロード時に必要 $ aptitude install -y gcc g++ make git wget cmake ...
- 必要なライブラリをインストールします。
# cmake,griveで必要なパッケージ $ aptitude install -y libgcrypt11-dev libjson0-dev libcurl4-openssl-dev libexpat1-dev binutils-dev libboost-dev libboost-program-options-dev libboost-filesystem-dev libboost-system-dev libboost-test-dev libyajl-dev libqt4-dev ...
もし、GUI版が必要なければ、ここでのインストールは不要です。
- Debian 6
- cmake :2.8.2 (OK)
- boost(libboost) :1.42 (NG)
- json(libjson0) :0.9 (NG)
- Debian 7
- cmake :2.8.9 (OK)
- boost(libboost) :1.49 (OK)
- json(libjson0) :0.10 (OK)
- Ubuntu 10
- cmake :2.8.0 (OK)
- boost(libboost) :1.40 (NG)
- json(libjson0) :0.9 (NG)
- Ubuntu 12
- cmake :2.8.7 (OK)
- boost(libboost) :1.48 (OK)
- json(libjson0) :0.9 (NG)
Debian 7では、デフォルトのパッケージをインストールすれば、ほぼ griveのmakeインストール環境が整います。
そのため、以降の各ライブラリ、ツールのインストールは、不要です。
Debian 7 の方は、Griveインストールへお進みください。
また、Ubuntu 12では、有志者によるバイナリパッケージもありますので、そちらを使用されることをおすすめします。
以外のバージョンに関しては、
安定版のGrive 安定版のGrive(0.2.0)を使ってGoogleドライブと同期してみる をおすすめします。
以降の boostインストールは、CentOS 6,Scientific Linux 6 のみ必要です。
Debian 7 の方は、Griveインストールへお進みください。
boostをインストールする
C++クラスライブラリboostの最新版をインストールします。
|
- boost インクルードのディレクトリ先 : /usr/local/include/boost
- boost ライブラリのディレクトリ先 : /usr/local/lib
以降の yajlインストールは、CentOS 6,Scientific Linux 6 のみ必要です。
Debian 7 の方は、Griveインストールへお進みください。
yajlをインストールする
もう一つのJSONライブラリyajlの最新版をインストールします。
|
- yajl インクルードのディレクトリ先 : /usr/local/include/yajl
- yajl ライブラリのディレクトリ先 : /usr/local/lib
以降の cmakeインストールは、CentOS 6,Scientific Linux 6 のみ必要です。
Debian 7 の方は、Griveインストールへお進みください。
cmakeをインストールする
ソフトウェアのビルドを自動化 cmakeの最新版をインストールします。
32bit OSの場合は、バイナリをスクリプトを使ってインストールすることができます。
64bit OSの場合は、無さそう?なのでmakeインストールしてみます。
- 32bit OSの場合 :
# cmakeの最新版をインストールするためのスクリプトをダウンロードします。 # --- cmakeの最新版は、スクリプトでバイナリのみをインストールすることができます。 # --- cmakeの最新版をインストールしたところにダウンロードします。 $ cd /usr/local [local]$ wget -O cmake.sh http://www.cmake.org/files/v2.8/cmake-2.8.11-Linux-i386.sh ... # cmakeの最新版をインストールします。 [local]$ sh cmake.sh ... Do you accept the license? [yN]: y By default the CMake will be installed in: "/usr/local/cmake-2.8.11-Linux-i386" Do you want to include the subdirectory cmake-2.8.11-Linux-i386? Saying no will install in: "/usr/local" [Yn]: n Using target directory: /usr/local Extracting, please wait... Unpacking finished successfully
- 64bit OSの場合 :
# cmakeの最新版をダウンロードします。 # --- 現在の最新版は、2.8.11 のようなので、それをダウンロードします。 $ cd /usr/local/src [src]$ wget http://www.cmake.org/files/v2.8/cmake-2.8.11.tar.gz ... # cmakeの最新版を解凍します。 [src]$ tar xfz cmake-2.8.11.tar.gz [src]$ cd cmake-2.8.11 # cmakeの最新版をmake インストールします。 [cmake-2.8.11]$ ./bootstrap --prefix=/usr/local --system-libs ... [cmake-2.8.11]$ make ... [cmake-2.8.11]$ make install ... # cmakeのバイナリがインストールされたディレクトリおよびバージョンを確認しておきます。 [cmake-2.8.11]$ which cmake /usr/local/bin/cmake [cmake-2.8.11]$ cmake --version cmake version 2.8.11
Griveをインストールする
ここまでできたら、いよいよ Griveをインストールします。
- Griveの最新版をダウンロードします。
# Griveの最新版をダウンロードします。 # --- gitを使って、最新版をダウンロードします。 $ cd /usr/local/src [src]$ git clone git://github.com/Grive/grive.git ...
- boostのパスを変更します。
以降の boostパスの変更は、CentOS 6,Scientific Linux 6 のみ必要です。
Debian 7 の方は、32bit OSの場合の対応へお進みください。
先にboostの最新版を手動でインストールしましたので、 そのインクルードパス、ライブラリパスを Grive のcmakeに通知する必要があります。
ここでは、/usr/loca/src/grive/libgrive/CMakeLists.txt を編集します。
... find_package(LibGcrypt REQUIRED) find_package(JSONC REQUIRED) find_package(CURL REQUIRED) find_package(EXPAT REQUIRED) # ↓ ここから # Boost の検索前にパスを設定しておきます。 SET( BOOST_INCLUDEDIR "/usr/local/include/boost" ) SET( BOOST_LIBRARYDIR "/usr/local/lib" ) # ↑ ここまで find_package(Boost 1.40.0 COMPONENTS program_options filesystem unit_test_framework system REQUIRED) find_package(BFD) find_package(CppUnit) find_package(Iberty) find_package(ZLIB) ...
- 32bit OSの場合、一部でコンパイルエラーが出るのを対処します。
32bit OSの場合、一部で 64bitのみ対応したコードがあるので コンパイルエラーが出ます。 その対処をします。
ここでは、/usr/loca/src/grive/libgrive/src/drive/State.cc を編集します。
... void State::Write( const fs::path& filename ) const { Json last_sync ; // >>> 32bit OS対応 以下の1行をコメントアウトし、追加編集します。 //last_sync.Add( "sec", Json( m_last_sync.Sec() ) ); last_sync.Add( "sec", Json((boost::uint64_t) m_last_sync.Sec() ) ); // >>> 32bit OS対応 以下の1行をコメントアウトし、追加編集します。 //last_sync.Add( "nsec", Json( m_last_sync.NanoSec() ) ); last_sync.Add( "nsec", Json((boost::uint64_t) m_last_sync.NanoSec() ) ); Json result ; result.Add( "last_sync", last_sync ) ; // >>> 32bit OS対応 以下の1行をコメントアウトし、追加編集します。 //result.Add( "change_stamp", Json( m_cstamp) ) ; result.Add( "change_stamp", Json((boost::uint64_t) m_cstamp) ) ; std::ofstream fs( filename.string().c_str() ) ; fs << result ; } ...
- GUI版が不要な方は、bgrive をmakeしないように設定します。
CUI版の grive のみ良い方は、GUI版 の bgrive をmake対象から外します。
ここでは、/usr/loca/src/grive/CMakeLists.txt を編集します。
... add_subdirectory( libgrive ) add_subdirectory( grive ) # ↓ 以下をコメントアウトします。 # add_subdirectory( bgrive )
- makeインストールします。
ようやく、Griveをmakeインストールします。
$ cd /usr/local/src/grive/ # cmake でmakefileを作成します。 [grive]$ cmake . ... # make インストールします。 [grive]$ make ... [grive]$ make install ... # make インストールできたら、 # grive のインストール先、およびバージョン情報を出力してみます。 [grive]$ which grive /usr/local/bin/grive [grive]$ grive --version grive version 0.3.0-pre May 29 2013 05:45:53
makeインストールできても、以下のようにバージョン情報がうまく出力されない場合は、ライブラリパスが有効になっていないためです。
この場合、環境変数のLD_LIBRARY_PATHに先にboostのライブラリパスを設定すれば、正しく動作するようになります。[grive]$ grive --version grive: error while loading shared libraries: libboost_program_options.so.1.53.0: cannot open shared object file: No such file or directory
[grive]$ export LD_LIBRARY_PATH=/usr/local/lib [grive]$ grive --version grive version 0.3.0-pre May 29 2013 05:45:53
Griveの簡単な動作確認をする
Griveのmakeインストールができたら、最後に簡単な動作確認をしてみましょう。
- Googleドライブと同期をとりたいディレクトリに向けます。
$ mkdir /va/grive/ $ cd /va/grive/ # 同期を確認するために簡単なテキストファイルを作成します。 [grive]$ echo 'testだよん' > test.txt [grive]$ ls test.txt
- Googleドライブでの同期をとるための権限をGriveに与えます。
- Griveで権限取得のためのURLを出力します。
[grive]$ grive -a ----------------------- Please go to this URL and get an authentication code: https://accounts.google.com/o/oauth2/auth?scope=https%3A%2F%2Fwww%2Egoogleapis%2Ecom%2Fauth%2Fuserinfo%2Eemail+... ----------------------- Please input the authentication code here:
画面は、Please input the authentication code here: で停止しています。
この状態のままにしておきます。以降で取得した認証コードをここに入力して完了となります。
- ウェブブラウザから 先に出力されたURLへアクセスし、認証コードを取得します。
ログインしていないなら、以下のようにログイン画面が表示されます。
メールアドレス、パスワードでログインします。
権限を与えるか否かの確認画面が表示されます。
ここで、アクセスを許可をクリックします。
権限を与えるための認証コードが表示されます。
ここで、テキストボックスに表示されている認証コードをコピーします。
- 取得した認証コードをGriveに設定します。
先にコピーした認証コードを 先の Please input the authentication code here: で停止している画面へ入力します。
[grive]$ grive -a ----------------------- Please go to this URL and get an authentication code: https://accounts.google.com/o/oauth2/auth?scope=https%3A%2F%2Fwww%2Egoogleapis%2Ecom%2Fauth%2Fuserinfo%2Eemail+... ----------------------- Please input the authentication code here: SAag0vasv98aa34tbfasDE08fak;gh35hsdvlsdaerhwerhqweEAfa9vzsdvla Reading local directories Synchronizing folders Reading remote server file list Synchronizing files sync "./test.txt" doesn’t exist in server, uploading Finished!
この色の文字の部分が、先にコピーした認証コードです。Enterで同期を開始します。
ここまでできたら、同期はOKのはずです。
一応、Googleドライブにログインしてファイルを確認してみましょう。
ちゃんとファイルがありますね。
- Griveで権限取得のためのURLを出力します。
- ファイルを削除してみましょう。
今度は、Googleドライブにログインし、ファイルを削除してみましょう。
削除したいファイルを選択して、ゴミ箱のアイコンをクリックするだけで削除できます。
削除を終えたら、Griveで同期をとってみましょう。
[grive]$ grive Reading local directories Synchronizing folders Reading remote server file list Detecting changes from last sync Synchronizing files sync "./test.txt" deleted in remote. deleting local Finished!
このように同期でローカルディスク側が削除されればOKです。
同期が正しく動作しないことがあります。
例えば、ローカルディスクに新規ファイルを作成して同期をとっても、ローカルディスク側が削除されてしまいます。
と、このように削除されてしまうことがあります。# 新規のファイルを作成します。 [grive]$ echo 'testだよん2' > test2.txt # 続けて同期をとります。 [grive]$ grive Reading local directories Synchronizing folders Reading remote server file list Detecting changes from last sync Synchronizing files sync "./test2.txt" deleted in remote. deleting local Finished!
また、逆の場合もあります。Googleドライブ側がいつも削除されてしまうこともあります。
これは、日時がGoogleドライブサーバーとあっていないのが原因である可能性が大きいです。
手動でもOKなので、まずは、日時を合わせてやってみてください。 たぶん、うまく同期がとれないほとんどの場合は、これで解消できるのではないかと思います。たぶん。[grive]$ ntpdate ntp.nict.jp 3 Jun 13:59:39 ntpdate[12285]: step time server 133.243.238.244 offset 383389.930291 sec
これは、バックアップ用になかなか使えそうです。
とりあえず、別のサーバーへバックアップしたいことが良くあります。 その際に Google ドライブ を使えるのは、非常に有りがたいです。
ご興味のある方は、ちょっと手間がかかりますが、まずは、お試しあれ。
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない、検索ができないことがあります。
コメントを投稿 :