2015年12月17日木曜日

ownCloud 8で外部HDDをマウントして見せる別の方法

Another Solution for the Last Entry: Using Official Setting

There is another solution for mounting any folders out of data directory of ownCloud 8.

Please read carefully the document: Configuring External Storage (doc.owncloud.org)

Disclaimer:  The developer insists this "external storage support" is only for "Enterprise Edition".  This is only a report of my trial on open source edition of ownCloud 8.2.1.  I don't assure any occasions on you by following this procedure.

I tried by starting from writing configuration file because screen shots on the document looks not only for "Enterprise Edition".  But another document regarding to the GUI settings includes a "Enterprise Edition" logo in a screenshot.

After several trials, I could operate GUI screen even on the open source edition, but I don't describe the way for it.  One reason is a due diligence, but anyway I could not have yet making it clear how I reached at that point. 

Procedure with writing configuration file is following.  This is only a shortcut of the original document.
  1. Enable "External storage support" app.  One way is using Web GUI, another way is using ${owncloud}/occ command as described in the document.  Both works fine.  But before doing it, you might be better checking if your system already have "smbclient" command (from Samba3 package, etc) and PHP-FTP extension.  Either of these are missing, ownCloud shows warning messages on the admin screen.
  2. Compose "data/mount.json" file with a text editor.  My setting was like following:
{
  "user": {
    "tkamada": {
      "\/$user\/files\/Musics": {
        "class": "\\OC\\Files\\Storage\\Local",
        "options":  { "datadir": "\/Volumes\/HDD\/Musics" },
        "priority": 150
      }
    }
  }
}
The property "\/$user\/files\/foo" is a mount point of user's (in this case, "tkamada") ownCloud data folder, and the value of the other property "datadir" in "options" property is a real local directory path that you want to show.  In this case, it is an external drive mounted on the Mac as "/Volumes/HDD", which have a subfolder "Musics".

After saving your configuration file,  Reload the screen of ownCloud's Web app (or mobile app), Then you will see the "Musics" folder aligned with original "Documents" and "Photos" folders.

The GUI might be available right after procedure 1: activating external storage app,  Go "admin" screen, and try put "/" letter at the setting placeholder of external storage.  If you are lucky, you could choose one of supported external storages with selection menu.


前のエントリで書いたシンボリックリンクの方法以外に、外部フォルダその他各種ファイル共有をマウントする方法について書かれたドキュメントを発見しました。

「外部ストレージ」サポートはエンタープライズ版のみ、という目次になっていますが、読んでみるとGUI設定に関する説明のみであって(画面がオープンソース版と異なる)、手で設定ファイルを書く場合の文書は別のところにありました。試してみると、オープンソース版でもこの機能は動くようです。

また、運が良ければGUIからの設定も可能なようですが、どちらの場合も、管理画面(個人設定画面ではない)で作業をした場合のようです。不用意に個人設定をいじると設定が消滅し、最初からやりなおしになることがあるようです。

先に、設定ファイルを手書きする場合を述べますが、「外部ストレージ」サポートで、依存するものが足りずに管理画面に警告が出る状態の場合は、のちの設定で、この機能が停止に陥る場合があるようなので、smbclientコマンド(Samba3パッケージなど)とPHPのFTP拡張が入っていることを確認しておいたほうが無難かと思います。

設定ファイルを書くまでの手順はドキュメント「Configuring external storage (Configuration File)」にありますが、今回はローカルにあるディレクトリをマウントする場合に限って書いておきます。SMBやGoogle Drive, Dropbox等の設定は、ドキュメントに沿ってください。

以下、やってみた手順です。
  1. Web画面左上のアプリ追加「+」ボタンから、「無効なアプリ」にある、「External storage support」を「有効にする」ボタンを押します。このあとWebのホーム画面に戻ると、「ファイル」画面の左下に「外部ストレージ」が追加されます。これをクリックすると、「個人設定で追加できます」と言われますが、画面右上の自分のユーザ名メニューから「個人」を選んでいき、設定画面に追加された「外部ストレージ」GUIは、どこをクリックしても何も操作できませんでした。何度か試してみて、個人設定にいきなり入るのは避けたほうがよいようなので、ひとまず「クリックしない」方向で作業を進めるのがよいと思います。
  2. 次に、データ置き場である「data」フォルダの直下に、「mount.json」設定ファイルを作ります。名前の通り、JSON形式で記述します。例えば、/Volumes/HDD/Musics という外部HDD以下の音楽ライブラリを、"Musics"という名前で並べたければ、data/mount.jsonファイルの内容として、以下のように書くことになります。
{
  "user": {
    "tkamada": {
      "\/$user\/files\/Musics": {
        "class": "\\OC\\Files\\Storage\\Local",
        "options":  { "datadir": "\/Volumes\/HDD\/Musics" },
        "priority": 150
      }
    }
  }
}
トップレベルには、「group」「user」「特定ユーザ名(登録した人)」を書くことができるようです。それぞれ、登録したグループ、ユーザ、個別ユーザ、という意味に対応します。

今回は、「user」の下に自分のユーザ名を置くことにしました。

「user」セカンドレベルには、「all」あるいは特定ユーザ名を置くことができるようです。そこで、自分のユーザ名である"tkamada"を置きました。

その下は、外部ストレージの種類によって書き方がそれぞれあるようです。ローカルの場合は、まず、ownCloud側で見せたい場所をプロパティにして、その値として、マウント元の設定を書いていくようです。

"\/$user\/files"は、ownCloudの自分のホームディレクトリです。よって、"\/$user\/files\/Musics"と書けば、ホームディレクトリ直下のMusicsフォルダとして見せる、ということになります。

以下、値として3つのプロパティを持つオブジェクトを書くことになります。

"class": "\\OC\\Files\\Storage\\Local",

は、ローカルの場合の決め打ちです。PHPのクラス階層に相当するようです。

"options": { "datadir": "マウント元のフルパス" },

ですが、ローカルの場合、オプションは"datadir"のみということです。ここに、PHPのフルパスでマウント元を書きます。Windowsの場合、ドライブ名がどうなるか知らないので、PHPの仕様にしたがって書いてみてください。

"priority": 150

は、マウントの優先度を決める値とのことで、デフォルトは100で、大きいほど優先度が高くなるそうです。今回はよくわからないので、ドキュメントのサンプル値のままにしておきました。

以上で、Web画面を再読み込みすれば、設定が反映されてホーム画面に外部ストレージがマウントされている様子がわかると思います。ただし、内容が反映されるのは、データベースにすべてのファイルが登録されてからになるので、マウント元のライブラリが大きい(ファイルがたくさんある)場合は、しばらくかかります。

この先については条件を追い込んでいないのですが、管理画面に入ると、「外部ストレージ」という項目が追加されていて、GUI操作ができるようです。ひとまず、そのすぐ下にある「ユーザの外部ストレージを有効にする」のチェックを入れておくとよさそうです。この状態でGUIに設定を入力すれば、「mount.json」にも新しい設定内容が反映されるようです。

ひとまず以上ですが、これはただ、「やってみたらできた」というだけでして、無保証です。開発側の主張は「外部ストレージサポートはエンタープライズ版のみ」ということなので、読まれて試されるとしても、営業妨害にならないよう穏便に進められるのがよいと思います。