2015年8月1日土曜日

さくらVPS CentOS 6 x86_64に入れたBitTorrent Sync 2.1.1をAPIで操るまでの手順

実際にやったことを記しておきます。

インストール完了までの手順については前回記事参照。



まずは
https://www.getsync.com/intl/ja/api/request-form
からSync APIのEvaluation Keyを申し込み。
自分の氏名・電子メールアドレス・電話番号・社名・肩書・利用目的を記入して申し込みます。
私の場合、名前はHIROTA Kenichiro、電子メールアドレスは私のgmailアドレス、電話番号は+85512~で記入し、社名はもちろん「Nano Rico」、肩書は必須項目でないので空欄、利用目的はとりあえず「For evaluating purpose」(それは皆さんそうでしょうよ!)としました。

そんなあいまいな利用目的で通るのかちょっと心配でしたが、小一時間で、サンフランシスコのThe Sync Teamさんから、長ぁ~いSync API Keyが含まれた電子メールが届きました。有効期限12ヶ月のEvaluation Keyです。

https://www.getsync.com/intl/ja/api/getting-started
に従って、btsync.confを変更していきます。

BitTorrent SyncのAPIは、v2で大きく拡充および変更が施され、RESTでアクセスとなりました。(当然というか、JSONのやりとりも可能になっています。ロングポールですがイベントも実装されました!)
RESTでのアクセス先URLなどを、btsync.confの中のwebuiパートに記入していきます。
shared_foldersパートが有効化されていると、webuiパートは無効になることに留意してください。
私の場合、shared_foldersパートを有効化していました(前回記事参照)。
ですので、まずは、shared_foldersパートをコメントアウトして無効化。
,
   "shared_folders" :
   [
↓変更
/*,
   "shared_folders" :
   [

対応する]の行の下にコメント閉じを追加:
]

↓変更
]
*/

webuiパートの上に追加:
// run Sync in GUIless mode
  "use_gui" : false,
コメントに書いてあるとおり、これを追加することによって、ウェブブラウザからこのマシン(デバイス)上のBitTorrent Syncにアクセスすることはできなくなると思われます。これを追加しない場合、APIアクセスもブラウザアクセスも両方できるようになるのかもしれませんが、試していません。私はブラウザアクセスは別にできなくていいので。

webuiパートの中を書き換えます:
    "listen" : "0.0.0.0:8888" // remove field to disable WebUI
↓変更
    // IP address and port to access HTTP API
    "listen" : "127.0.0.1:8888"

loginとpassword(またはpassword_hash)も設定しておくほうがもちろんセキュリティの層が1つ増えるので望ましいでしょう。login・password・password_hashはデフォルトではコメントアウトされています。私はとりあえず設定せず。

webuiパート内末尾に追加:
    // API key received from BitTorrent
    ,"api_key" : "XXX"
実際はもちろんXXXでなく、メールで来た長ぁ~いSync API Keyをコピペします。

設定ファイルの変更が終わったので、保存してエディタを閉じます。

BitTorrent Syncを起動します:
$ ./btsync --config btsync.conf
[04:10:09.916] API: loaded v2 key - id: XXXXXXXXXX, expiration_date: 08/31/16 16:00:00, features: a1 

なお、BitTorrent Syncがすでに起動していた場合には、再起動します:
http://www.ruchirablog.com/install-configure-bittorrent-sync-server/
または
http://forum.bittorrent.com/topic/24917-how-do-i-stop-btsync-in-linux/

さて、
https://github.com/bittorrent/sync_api_sample
にBitTorrent Sync API v2のチュートリアルがあります。

APIのドキュメンテーションは
https://www.getsync.com/intl/ja/api/docs
にあります。

これらを参考に、まずは
$ curl -X GET http://localhost:8888/api/v2/owner
としてAPIへのアクセスを試みました。

ところが、
curl: (7) couldn't connect to host
と言われてしまいました。

おかしいなぁー。

$ top
としてプロセス一覧を見ますと、どうもbtsyncさんがいません。起動できてないっぽいです。

$ ./btsync
としますと、もう起動してますよと怒られることもなく、起動手続きできてしまいます。やっぱり起動できてなかったっぽいです。

もう一度
$ ./btsync
とすると、今度は、もう起動してますよと怒られた。てことは設定ファイルを読み込ませると起動が失敗するのだ。

ハマりの予感!!!!!

ここからあれこれ試行錯誤すること1時間。すべての試みは失敗し…。もう寝ちまおうかと思ったのでしたが、何とか頑張って…。



ふと、ログを見てみようと思い、
$ cd .sync
$ cat sync.log
としますと、
[20150801 05:14:56.029] In order to proceed, you must agree to the terms of the Sync EULA; see https://www.getsync.com/legal/eula. By setting the parameter "agree_to_EULA" to "yes", you are agreeing to the EULA.
という行がありました。

そこで、btsync.confのwebuiパートの直後(すなわちファイルの末尾のコメント行の直前行)に
  ,"agree_to_EULA" : "yes"
を追加して、BitTorrent Syncを(再)起動したところ、

$ curl -X GET http://localhost:8888/api/v2/owner

↓レスポンス

{ "data": {  }, "error": 9, "message": "Owner not associated with this installation", "method": "GET", "path": "/api/v2/owner", "status": 2 }

成功しました!

こういう大事なことはREADMEかGetting StartedかチュートリアルかAPIドキュメンテーションに書いておいてほしい…。
せめてその旨エラーメッセージを返してほしかった…。

さて、APIドキュメンテーションの冒頭に、まずはオーナーを作らなければ始まらないと書いてあるので、かつ、さっきのcurlで実際まだオーナーいないことが確認できたので、オーナーを作成するよー!

$ curl -X POST -H "Content-Type: application/json" -d '{"username": "oreore"}' http://localhost:8888/api/v2/owner

↓レスポンス

{ "data": { "id": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "username": "oreore" }, "method": "POST", "path": "/api/v2/owner", "status": 0 }

次に、共有フォルダを設定。
別のデバイス上に作成した共有フォルダのキーをsecretの値にしてPOSTします。
$ curl -X POST -H "Content-Type: application/json" -d '{"path": "/home/oreore/btsync/sync", "secret": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"}' http://localhost:8888/api/v2/folders

↓レスポンス

{ "data": { "canencrypt": false, "date_added": 1438381237, "deletetotrash": true, "id": "XXXXXXXXXXXXXXXXXXXX", "ismanaged": false, "iswritable": true, "name": "sync", "path": "/home/oreore/btsync/sync", "paused": false, "readonlysecret": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "relay": true, "searchdht": false, "searchlan": true, "secrettype": 1, "shareid": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "stopped": false, "synclevel": 2, "synclevelname": "full sync", "usehosts": false, "usetracker": true }, "method": "POST", "path": "/api/v2/folders", "status": 0 }

実際に共有フォルダが設定できているのを確認。

$ curl -X GET http://localhost:8888/api/v2/folders

↓レスポンス

{ "data": { "disconnectedfolders": [  ], "folders": [ { "canencrypt": false, "date_added": 1438381237, "deletetotrash": true, "id": "XXXXXXXXXXXXXXXXXXXX", "ismanaged": false, "iswritable": true, "name": "sync", "path": "/home/hirota/btsync/sync", "paused": false, "readonlysecret": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "relay": true, "searchdht": false, "searchlan": true, "secrettype": 1, "shareid": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "stopped": false, "synclevel": 2, "synclevelname": "full sync", "usehosts": false, "usetracker": true } ] }, "method": "GET", "path": "/api/v2/folders", "status": 0 }

この共有フォルダなどに対して、さらにAPIでいろいろなことを行うことができるはずです!
詳しくはAPIドキュメンテーションをごらんくださいませ。



0 件のコメント:

コメントを投稿