双方向同期をしてくれる grive2 とファイルの状態を監視してくれるincronでgoogle driveを同期することに成功したようなので、そのメモ。
grive2はgriveのフォークされたものらしい(詳しくはここを参照)。
grive2はdebianのパッケージにはないので自分でコンパイルが必要。おそらく書いてあるとおりにやればOK。
まずは必要なパッケージをインストール。
apt-get install git cmake build-essential libgcrypt11-dev libyajl-dev \
libboost-all-dev libcurl4-openssl-dev libexpat1-dev libcppunit-dev binutils-dev \
debhelper zlib1g-dev dpkg-dev pkg-config
mkdir GRIVE2
cd GRIVE2
git clone https://github.com/vitalif/grive2
cd grive2
dpkg-buildpackage -j4
あとはgdebi等でインストールする。 うまくできていればGRIVE2以下は不要なのでGRIVE2は削除してもOK。
さて、google driveと同期したいディレクトリを ~/GOOGLEDRIVEとする。 まずは以下を実行。
grive -a -p ~/GOOGLEDRIVE
うまく行けばgoogleに認証してもらうためのリンクが表示されるので言われたとおりに認証し、コードを取得する。 後はgriveに取得したコードを入力する。
うまく行けば同期が始まるので同期が終わるまでのんびり待つ。
今回の最大目的は同期の自動化なので、~/GOOGLEDRIVEを監視して、変更があればgriveを動かすようにしたい。 そこでincron(inotify clon)を利用する。
まずは必要なものをインストール。
apt-get install incron
incronはそのままだと通常ユーザーは使えないそうなので、/etc/incron.allow に自分のユーザー名を追加しておく。 (ファイル自体を削除するという記事も見かけたけど、一応許可するユーザを追加することにした)
その後はincrontab -e で以下を追記。
/home/ユーザー名/GOOGLEDRIVE IN_MODIFY,IN_ATTRIB,IN_CREATE,IN_DELETE,IN_DELETE_SELF,IN_CLOSE,IN_MOVE_SELF,IN_MOVE,IN_NO_LOOP /bin/sleep 4 &&/usr/bin/grive -p $@
書式は 「監視する対象(ディレクトリ可)」 「監視イベント」 「イベントが起きたときの実行するコマンド」 となっているので適宜入力。
監視イベントはいまいち良く分からないので、このあたりを参照。inotifyとよく似ているが、最後のIN_NO_LOOPは「実行するコマンドが完了するまで、イベント監視を無効にする」らしい($@は監視する対象を表す変数)。
ちなみに、なぜか$PATHは反映されていないらしいのでコマンドは絶対パスで書く。
(未確認)
うまく実行されているかどうか適当にテストしてみてうまく同期されているかどうか確認する。 一応/var/log/syslogも確認しておくと安全かも。
さて、このままだとgoogle driveで変更があった場合に同期されないので、通常のcronで適当な感覚で同期してもらうことにする。
crontab -e で以下を追加。
*/15 * * * * grive -p ~/GOOGLEDRIVE
これで15分毎にgriveが実行されるはず。
さて、これでgriveが定期的にかつローカルのファイルが変更されれば自動実行されるようになった。うれしい。