【Raspberry Pi】ownCloud × BitTorrent Sync で容量無制限×超高速なオンラインストレージを作る


## はじめに
以前，[Raspberry Pi 上に ownCloud を構築する記事](http://qiita.com/ukatawagatik/items/d087008a14beb509b846) を書いたのですが，
Raspberry Pi のスペック不足もあり，同期速度が遅くてちょっと不満でした．
そこで P2P 同期ソフトである [BitTorrent Sync](http://www.getsync.com/intl/ja/) （フリー）を使って，
同期速度が超高速な Dropbox ライクストレージを構築する方法を書きたいと思います．

ポイントはこんな感じだと思います．

* ownCloud (WebDav) と BitTorrent Sync で共有するファイル・フォルダの所有者（あるいはグループ）を同じにする．
* BitTorrent Sync の IgnoreList の基礎的な書き方を覚える．
* アーカイブ機能は BitTorrent Sync のものを使う．

## 0. 事前準備
apt のリポジトリリストとインストールプログラムのアップデート．

```bash
pi@raspberrypi ~ $ sudo apt-get update
pi@raspberrypi ~ $ sudo apt-get upgrade
```

その他やっておくべきこと．

* pi と root にパスワードを設定する
* システムを日本仕様に変更（言語／キーボード配列／ロケール／タイムゾーン等）
* IP アドレスの固定
* DDNS サービスの登録（参考：[無料 DDNS サービスへの登録](http://qiita.com/ukatawagatik/items/d087008a14beb509b846#3-%E7%84%A1%E6%96%99-ddns-%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%B8%E3%81%AE%E7%99%BB%E9%8C%B2)）
* 外付け HDD の自動マウント設定（参考：[外付け HDD の設定](http://qiita.com/ukatawagatik/items/d087008a14beb509b846#6-%E5%A4%96%E4%BB%98%E3%81%91-hdd-%E3%81%AE%E8%A8%AD%E5%AE%9A)）
    * マウント先は /mnt/hdd1 としました
* ルータ，ファイヤウォール（ufw）でポートの開放をする．
    * ownCloud 用に 80（HTTP）と 443（HTTPS）
    * BitTorrent Sync 用に 8888（Web UI）と通信用ポート番号（Web UI から確認可能）

## 1. **ownCloud** の導入
### 1.1 インストール
[前回の記事](http://qiita.com/ukatawagatik/items/d087008a14beb509b846) で紹介した方法を全て自動でやってくれるスクリプトがありました(^^;)
petrockblog という方の作られた [OwncloudPie](https://github.com/petrockblog/OwncloudPie) スクリプトです．
ありがたくこれを使わせていただきます．

```bash
pi@raspberrypi ~ $ ~ $ sudo apt-get install -y git dialog
pi@raspberrypi ~ $ cd
pi@raspberrypi ~ $ git clone git://github.com/petrockblog/OwncloudPie.git
pi@raspberrypi ~ $ cd OwncloudPie
pi@raspberrypi ~ $ sudo chmod +x owncloudpie_setup.sh
pi@raspberrypi ~ $ sudo ./owncloudpie_setup.sh
```
設定画面が開くので，各々設定していきます．
各項目にカーソルを合わせてエンターキーで設定できます．

（1）Set server URL / 前章で設定したサーバのドメインネーム（xxx.dip.jp）を入力します
（2）New installation, NGiNX based / 設定の途中で SSL 証明書を作りますが質問事項は全部エンターで OK です

タブキーを押して Cancel からターミナルに戻ってください．

### 1.2  設定
ownCloud のデータディレクトリを作成し，パーミッションを変更します．

```bash
pi@raspberrypi ~ $ sudo mkdir /mnt/hdd1/data
pi@raspberrypi ~ $ sudo chown -R www-data:www-data /mnt/hdd1/data
pi@raspberrypi ~ $ sudo chmod -R 770 /mnt/hdd1/data
```
あとは次の URL（xxx.dip.jp は自分のドメインネームに置き換える）にアクセスして，
アカウント，データフォルダ（/mnt/hdd1/data）を設定して終了です．
> [https://xxx.dip.jp/owncloud/](https://xxx.dip.jp/owncloud/)

最後に他のアプリとの共有のため ownCloud の umask を設定します．

```bash
pi@raspberrypi ~ $ sudo nano /var/www/owncloud/config/config.php
```

$CONFIG = array (,,,); の引数の最後に umask(007) を挿入してください．
こんな感じです．

```php
<?php
$CONFIG = array(
 ~~~~~ => ~~~~~,
 ~~~~~ => ~~~~~,
 ~~~~~ => ~~~~~,
 umask(007)
);
```

## 2. **BitTorrent Sync** の導入
BitTorrent Sync はピア間のローカルデータをリアルタイムで同期します．
それゆえに WebDAV を備えている ownCloud と組み合わせることで Dropbox と同等の機能を達成でき，
さらに P2P による高速通信，ファイルサイズの上限なしといった ownCloud にはない恩恵を受けることができます．
また，セキュリティ面に関しても第三者からの盗聴はできない仕組みとなっており安心です．

最近見つけたのですが，ホントに素敵なアプリですよね．

また，P2P ということでポート解放が必須だと思われがちですが，
少なくとも 1 つのピア（ここではサーバ）さえ解放されていればよいのでポート開放できないノードでも利用可です
ちなみにノードの全てがポート解放できない場合でもスーパーノードを介すことで同期自体はできますので心配いりません．
それでは早速導入していきましょう．

### 2.1 インストール
<font color="red">【！】この方法でインストールされる BitTorrent Sync は古いです．
【！】最新版を入れる場合は [こちら](http://qiita.com/ukatawagatik/items/379f526228b62fc82bde) を参考にしてください</font>

まずは apt-get するためにリポジトリを追加します．

```bash
pi@raspberrypi ~ $ sudo nano /etc/apt/sources.list.d/btsync.list
```

テキストエディタが立ち上がったら行末に次の 2 行を追加．

```bash
deb http://debian.yeasoft.net/btsync wheezy main contrib non-free
deb-src http://debian.yeasoft.net/btsync wheezy main contrib non-free
```

リポジトリの署名キーをインポートし，BitTorrent Sync をインストールする．

```bash
pi@raspberrypi ~ $ sudo gpg --keyserver pgp.mit.edu --recv-keys 6BF18B15
pi@raspberrypi ~ $ sudo gpg --armor --export 6BF18B15 | sudo apt-key add -
pi@raspberrypi ~ $ sudo apt-get update
pi@raspberrypi ~ $ sudo apt-get install btsync
```

### 2.2 設定
インストールが完了した段階で設定画面が開くので，設定していきます．
基本的にカーソルはデフォルト値に当てられているのでエンターしていくだけです．
ただし次の点には注意してください．再設定する場合は **$sudo dpkg-reconfigure btsync** します．

```
・ BitTorrent Sync Daemon Group: www-data
・ Should BitTorrent Sync allow only SSL connections to the Web UI?: はい
・ Do you want to configure advanced parameters?: はい
・ Umask value to set for the daemon: 007
```

### 2.2 共有フォルダの選択

リモート中なら Ubuntu サーバのローカル IP アドレス，
ホストの場合は localhost で設定画面にアクセスする（最初は管理アカウントの作成画面となる）．

> https://サーバアドレス:8888/gui

共有するフォルダとして /mnt/hdd1/data/[ownCloud のユーザ名]/files を選択します．
ここで容量が多くて同期したくないファイルやフォルダ（例えば Video フォルダ）がある場合は，

```bash
pi@raspberrypi ~ $ sudo nano /mnt/hdd1/data/[ownCloud のユーザ名]/files/.sync/IgnoreList
```

でIgnoreList を編集します．行末に例えば /Video （Windows クライアントの場合は \Video）と追記すれば Video フォルダは同期されません．
これは「共有フォルダ直下にある」Video という名のフォルダを同期から除外するという意味です．
IgnoreList リストの書き方は [ココ](http://sync-help.bittorrent.com/customer/portal/articles/1673122-ignoring-files-in-sync-ignorelist-) に詳しく書いてあります．
ポイントは **同期が始まる前に** IgnoreList を書いておくことです．
ある **フォルダやファイルの同期が始まってから** それを IgnoreList に加えても，
すでに始まってしまった **同期は最後まで完遂されてしまいます** ．

したがって，新しいピアに同期フォルダを登録する際には，

1. 同期キーを入力（すぐに同期が始まる）
2. BitTorrent Sync を終了
3. IgnoreList を編集
4. IgnoreList に加えたもので既に同期完了または同期途中のフォルダ・ファイルを削除
5. BitTorrent Sync を起動

とすれば，IgnoreList に書かれているコンテンツは同期されないはずです．
共有フォルダ直下に作られる隠しフォルダの .sync 自体は同期されないので，
ホスト毎に同期するコンテンツをそれぞれ決めることができます．
BitTorrent Sync の同期キーの共有にはせっかくなので ownCloud を使うのがいいかもしれません．

## 3. 使い方
同期を行いたい PC には BitTorrent Sync のクライアントを導入し，同期はしたくないがコンテンツにアクセスしたい携帯端末（例えばスマホやタブレット）には ownCloud のクライアントを導入します．

また，BitTorrent Sync にはアーカイブ機能が搭載されています．
この機能により間違えて消してしまったり，上書きしてしまったファイルを復元することが可能です．
通常はサーバ（Raspberry Pi）の BitTorrent Sync のみアーカイブ機能を有効にするのがベターかと思います．
こうすることでサーバのみにアーカイブファイルが残り，他のクライアントの容量を圧迫することはありません．
アーカイブファイルを取得するには Web ブラウザから owncloud にアクセスし，

> .sync/Archive

ディレクトリから目的のファイルをダウンロードしてください．

## References
[How I Created My Own Personal Cloud Using BitTorrent Sync, Owncloud, and Raspberry Pi](http://blog.bittorrent.com/2013/05/23/how-i-created-my-own-personal-cloud-using-bittorrent-sync-owncloud-and-raspberry-pi/)
[Raspberry Pi Home Server: Part 14, BitTorrent Sync](https://melgrubb.wordpress.com/2014/08/03/raspberry-pi-home-server-part-14-bittorrent-sync/)