背景
私は家の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様々ですね。