2014年11月10日月曜日

MacでownCloud

結論:

  • MacでownCloudは動く。ただしファイル名の扱いに注意(特にフォルダ作成はトラブルが生じうる)
  • MacPortsかHomebrewで入れたPHPとそれをCGIとして呼び出すWebサーバ(SSL証明書が必要)があれば、Webサーバの文書ディレクトリにソースを展開するだけ
  • SQLite3とPHPのsqlite拡張を入れればDBサーバ不要でさらに簡単


Bitcasaの実質値上げで、自分用に置いていたいろいろ自炊データなど1.4TBを引き上げているところなのですが、結局なぜクラウドを借りるかというと、HDDを増設することなく全部のデータを一貫して取り扱いたいわけで、そこに「定額・目安は1TBだけれど超えてもOK」というBitcasaは最適だったわけです。

ところが噂によれば、ペタバイト置くごく少数の客が使うだけで、1TB年額$100という見積りに沿った客がほとんどつかなかったから、1TB制限で年額2万円、それ以上は要お問い合わせという形でバランスとることになったというんですが、例えていうならば、ドリンクバーのみで何日も泊まりこむ客しかいない飲食店のような殺伐とした状態という話で、それではテコ入れやむなしと思った次第です。

ちょうど年度更新の時期で請求に身構えていたところなので、東芝の3TB 3.5" HDDが特価1万円弱の表示品(あとで税込み請求されてがっかり)を購入、ガワも買ってなんだか結構な出費になったものの、引き上げ準備ができて、通信制限と11月15日という期限におびえながら、できるところまでやってみようとしているところです。1.4TBを1ヶ月でダウンロードするのは結構勇気が必要です。アップロードは「次やったら契約解除するかんな」とISPから警告文書を郵送で頂戴したので、まあそのときは秒速4MBぐらいで一日かけて90GBぐらいクラウドにscpしたのでしょうがないんですが。

クラウドドライブのサービスでなにがいいかというと、僕としては、モバイルアプリでファイルの一覧が簡単にみえるところです。あれはもうあったかな、というのがすぐ確認できるところ。WebDAVでもいいけれど、閲覧性は専用アプリが上。GoodReaderとか正論をいう人は置いていきます。

というわけで、ownCloudです。以前、VPS上のFreeBSDで動かそうとして断念した記憶があるのですが、モバイルアプリ含めてトータルに使うとなると、軽く調べた範囲ではこれしかないのかな、という印象でした。

Community Edition」が無償で使えるサーバ側のソースなんですが、ダウンロード時に要件をみると、「Mac OS XはUNICODEの扱いに問題があるのでサポートしない」とあって、困ったな、と検索すると、なんだかバイナリを配布しているところがあって、でもそれ入れてみると勝手にApacheとMySQLを起動しようとしてすでにこのMacではNginxとMySQLが動いているのでエラーになったりして悲しい思いをしたりします。ownCloudのバージョンで、過去にMac OS Xサポートがあった頃があるのかと調べても、以前からサポートされていないし、将来的にやる気もないようです。

で、そのバイナリ配布元の文書を読むと、「うちはソースコードに一切手を入れていないから問題があったら開発元に言え」というわけです。ということは、Community EditionのソースはMacで使える。UNICODEの問題はあるけれど。

UNICODE云々というのは、WindowsからMacの共有フォルダにある日本語ファイル名をみるとすぐわかるわけですが(最近は事情が違うかもしれない)、Mac OS Xでは日本語の濁点、半濁点つきのひらがな、カタカナなどは、親文字に対してそれらとの合字で表現していて(つまり、親文字、合字指定、濁点等の3つで1文字を表す)、濁点や半濁点つきのグリフのコード(ひとつの文字)を指さないという、合理的なんだか不合理なんだかわからない方針で実装されているわけですが、これ奇妙なことに、ターミナルで日本語変換してファイル名入れると、日本語IMから入力する文字コードは正規化されたほう(合字でない、独立したグリフに対するコード)になるので、存在するファイル名とは表現が一致しなくて「File not found」、つまりMac OSのなかでも不整合があったりします。純正IM使ってないのでそっちはファイルシステムとあってるのかもしれないですが。それで、かつてのMacとWindowsのファイル共有の場合のように、合字指定を表すコードを単純に読み飛ばしてしまうと、親文字と濁点がわかれてしまい、半角カナを全角に引き伸ばした感じの間抜けな表示になるわけです。

ownCloudのGitHubリポジトリのissue trackでは、ドイツ語のウムラウトの処理不整合で作成したフォルダが二重に見えたり、クライアントによってはそもそもフォルダ作成さえできないんだそうで、これは合字の扱いと正規化がもたらす不幸と直感するわけです。欧州のそうした文字でも、たしかにUNICODEでは合字でもよいものの、ウムラウトやアクサンなどがついたグリフとコードポイントもあるわけで、事情は日本語と同じだし、欧州全体では結構深刻だな、と思うところです。

当方の目的としては、既存ファイルの一覧がアプリからサクサクと見えればいいので、「データ」が「テ〝ータ」になろうが、別によくって、それならGo!というわけです。(結論を先にいうと、iOSアプリではこうならなかったので、Apple製品で閉じている限りはよさそう)

FreeBSDで苦労した頃はまだ出たてで、いまと構成が違うのかもしれないのと、こちらのスキルもいまと違うのでよくわからないのですが、ひとことでいうと、ownCloudはPHPアプリでしたと。つまり、特にコンパイル等の必要はなく、PHPに必要な拡張があって、SSL証明書つきのWebサーバがあればとても簡単だ、ということでした。

Mac OS X標準のPHPは長いこと使っていないので事情はわかりませんが、MacPortsやHomebrewで入れて運用しているPHPとそれをCGIとして使うWebサーバがあって、SQLite3とPHP-sqlite拡張が入っていれば(他にもgdとかいくつか拡張は必要ですが)、MySQLも使わないでさっくり動きます。

今回動かすまでに苦労したのは、すでに運用しているPHPアプリと証明書を共有するためサブディレクトリにaliasしようとしたら、よくある「FastCGIでPHPファイルのフルパスが間違って渡される(その結果、No input file specifiedの文字だけがブラウザに出る)」というところで、解決を諦めて、PHPアプリの本当のサブディレクトリに置いてしまったところ、ぐらい。正規表現が微妙に働いて、ownCloudから親のアプリに飛ばされることがあるけれど、iOSアプリでファイルを閲覧するには問題がないのでよしとしています。

結局、配布されているソースコードを所定のディレクトリに展開して、あとはWebブラウザから、そのディレクトリを指すURIを開いてやれば、管理者アカウントを作成する画面が開いて、それで設定完了、すぐ使えます。SQLiteのデータベースも小さくて、いい感じです。アップロードはPHPのファイルサイズ制限に引っかかるので(むやみにでかい値を設定すればいいというものでもないし)基本的にはしない前提で、Bitcasaから引き上げた外付けHDD内のデータがあるサブディレクトリをownCloudのアカウント用データフォルダ内にシンボリックリンクしてやると、ほどなくアプリから見えるようになって、目的は達成できました。

書き込みもするなら、シンボリックリンク先もユーザ「_www」で読み書きできないとまずいはずですが、とりあえずファイルの存在をみるだけならなにもしないでもOK(ユーザ「_www」から見えればよい)。

話を簡単にするポイントは、データベースはSQLiteを使うこと。MySQLやPostgresqlも使えるけれど、SQLite拡張をPHPに入れれば、ownCloud初期設定時に無条件でSQLiteを使うのでDBサーバに関する余計な作業がさっくり省略できます。

書くほうはどうするんだという話ですが、アプリで書き込みができるか試していないけれど、英数字のファイル名やフォルダ名なら大丈夫だろうということと、外部HDDへファイルを置くのはモバイルからは考えずに画面共有で普通にMac内の操作するか直接scpするので気にしない方針です。