背景

私は家のNASにReadyNAS 104を使ってます。3TBx4のRAID-5を組んでおおむね満足していたのですが、本機のみでのクラウド連携ができないといった問題があります。(ReadyNASのクラウドやDropboxはあるみたいですがバックアップ用途っぽい?)

MacでGoogle Driveアプリを使おうとしたもののSMBには対応しておらず使えず…
Insyncを使ってMacからNAS上のディレクトリを同期していました。つまりMacがサーバーになっていて常時起動状態で半年運用していました。
しかし最近たまたまネットを見ていると、Raspberry PiでNASを構築してしかもInsyncを使ってGoogle Driveを同期すると行った方法があるようです!
ReadyNASでもできないかさっそく試してみることにしました。

結論から言えば成功です。まだ細かい確認まではしていませんが、同期は行われています。

方法

前提条件として対象者はUNIX系のコマンドが少しわかる人としています。また、使うのはGoogle謹製のGoogle Driveではなく、Insyncを使います。
また、各ユーザーで扱えるようにもしてみます。以下を試してデータが消えた等の保証は一切無いのでそこは自己責任っていうアレで。

まずReadyNASの管理コンソールからSSHを有効にしておきましょう。SSHのユーザーはadminではなくrootです。パスワードはadminものです。ちなみにWebからadminのパスワードを変えたらrootのパスワードも変わるみたいです。

$ ssh root@xxx.xxx.xxx.xxx

ここから作業を行っていきます。

NASの環境を確認

ReadyNAS 104はDebian GNU/Linuxです。確認してみましょう。

# cat /etc/debian_version
7.8
# cat /etc/issue
ReadyNASOS 6.2.5 \n \l
# uname -a
Linux xxxxxx armv7l GNU/Linux

私の環境はDebian GNU/Linux 7.8(Wheezy)のファームウェア6.2.5でCPUはarmv7lであることがわかりました。ここからはこれを前提に進めていきます。Debianのためapt-getとか普通に使えてしまうので非常に楽です。

Insyncを入れる

https://www.insynchq.com/downloadsからRaspberry Pi/ARMのarmel build(現時点で1.2.18.35198)を落とす(armhfだと動かない)

# wget http://s.insynchq.com/test_builds/armel/insync-armel_1.2.18.35198_i386.tar.bz2

何も弄っていないReadyNASですとbzip2が入っていないため、tarコマンドが失敗します。また、sudoも入っていないので一緒に入れてしまいましょう。

# apt-get update
# apt-get install sudo bzip2

tar.bz2を展開します。

# tar xvf insync-armel_1.2.18.35198_i386.tar.bz2

好みの問題ですが、ここでは/optに配置します。

# mv insync-portable /opt/.
# cd /opt/insync-portable

ここからユーザーごとの設定に移っていきます。/etc/passwdを見ると、ReadyNASで作ったユーザーはログインシェルが/bin/falseになっているため、sudo -u ユーザー名でコマンドを実行していきます。
まず同期したいディレクトリを作成します。

# 例
# sudo -u ユーザー名 mkdir /home/ユーザー名/GoogleDrive

insync-portableスクリプトを実行していきます。ヘルプは以下です。

# sudo -u ユーザー名 ./insync-portable help

insync-portableを開始します。

# sudo -u ユーザー名 ./insync-portable start

http://goo.gl/kTvy0yへアクセスしてトークンを取得しろと言われるので取得します。次のコマンドで使用します。
また、作成した同期したいディレクトリも指定します。

# sudo -u ユーザー名 ./insync-portable add_account 取得したトークン 同期したいディレクトリ

これで同期が始まるはずです。
/home/ユーザー名/.configが作られますが、Insyncが使っているメタデータが入っているため、触らないようにしましょう。

# sudo -u ユーザー名 /opt/insync-portable/insync-portable get_status

で現在の動作のステータスがわかります。同期には超時間がかかるので気軽に待ってくだしあ。

ReadyNAS起動時にInsyncを自動起動させたい

はい。させたいですよね。とりあえず/etc/init.dにShellスクリプトを置きましょう。ユーザーごとにGoogle Driveを使うことを想定してユーザーごとに作りましょう。とりあえずは1ユーザ分作りましょう。

# vi /etc/init.d/insync-portable-ユーザー名

等で起動スクリプトを作成します。

insync-portable-ユーザー名の内容

ユーザー名となっているところは置き換えて下さい。

#! /bin/sh
# /etc/init.d/insync-portable-ユーザー名

### BEGIN INIT INFO
# Provides: insync-portable
# Required-Start: $remote_fs $syslog $all
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Simple script to start insync-portable
# Description: Will change directory, initialise insync-portable as your user, the change directory back for booting.
### END INIT INFO

USER=ユーザー名

case "$1" in
        start)
                echo "Starting Insync"
                cd /opt/insync-portable
                sudo -u ${USER} ./insync-portable start
                cd /
                ;;
        pause)
                echo "Pausing Insync"
                cd /opt/insync-portable
                sudo -u ${USER} ./insync-portable pause_syncing
                cd /
                ;;
        resume)
                echo "Resuming Insync"
                cd /opt/insync-portable
                sudo -u ${USER} ./insync-portable resume_syncing
                cd /
                ;;
        status)
                echo "Status Insync"
                cd /opt/insync-portable
                sudo -u ${USER} ./insync-portable get_status
                cd /
                ;;
        stop)
                echo "Stopping Insync"
                cd /opt/insync-portable
                sudo -u ${USER} ./insync-portable quit
                cd /
                ;;
        *)
                echo "Usage: start|pause|resume|status|stop"
                exit 1
                ;;
esac

exit 0

パーミッションを755にする。

# chmod 755 /etc/init.d/insync-portable-ユーザー名

自動起動に登録する。

# insserv insync-portable-ユーザー名

ここで

insserv: warning: script 'leafp2p' missing LSB tags and overrides

と出てきたら/etc/init.d/leafp2pのINIT INFOがぶっ壊れてるのでLSB issue on leafp2pの通りに追加して再実行。

# find /etc/ -name "*insync*"

でそれぞれのランレベルに登録されていればOK!

運用

たまに

# sudo -u ユーザー名 ./insync-portable get_status

を打ってあげて下さい。ERRORと出てる場合があります。

# sudo -u ユーザー名 ./insync-portable get_errors

で何のエラーが出てるかわかります。

# sudo -u ユーザー名 ./insync-portable retry_errors

で大体解決します。get_errorsの結果がNoneになったら多分OKです。これで解決しなかったらわかりません。
もそっとちゃんとやるなら監視して下さい。

終了

以上がReadyNAS単体でGoogle Driveを同期する方法となります。Debianなのでカスタマイズが容易で意外にサクッといけました。あとRaspberry Pi様々ですね。