[CentOS7] owncloud-client でファイルを同期する


owncloudを使っている人にファイルを受け渡しするのに、私がリアルタイムでWebブラウザに張り付く時間を減らしたかったので、あらかじめファイルを用意しておき、cron処理でディレクトリの同期をかけることにしました。ownCloud、CLIが用意されているのですね。じゃあ簡単にできる!というわけでやってみます。

■ owncloud-client をダウンロードする

owncloud-client は isv:ownCloud:desktop プロジェクト提供の owncloud-client からダウンロードできます。CentOSのアイコンをクリックしてから「手作業でリポジトリを追加してインストールする」をクリックし、ディストリビューションのバージョンに合わせて表示されるコマンドにしたがいインストールします。

■ 事前準備

owncloud-client の事前準備ですることは以下の2つです。

  1. sync-exclude.lst 作成
  2. ${HOME}/.netrc 作成

sync-exclude.lst は不要なファイルをうっかりアップロードしないようにするためのリストで、ownCloudのgithubリポジトリにあるものをそのまま使います。どこに保存してもよいのですが、ここではわかりやすく ${HOME}/OWNCLOUD/etc に置くことにしましょう。

mkdir -p ${HOME}/OWNCLOUD/etc
cd ${HOME}/OWNCLOUD/etc
wget https://github.com/owncloud/client/raw/master/sync-exclude.lst

${HOME}/.netrc は、ownCloudを運用している(アップロード先の)サーバーのアドレス、ownCloudのID、パスワードを記述します。ここではownCloudサーバーのアドレスを owncloud.example.com 、IDをnullpopopo、パスワードをp@SsW0rD_iS_h@Reとして例示しますと、こんな風にヒアドキュメントで一撃生成できますね。

cat << '_EOL_' | tee ${HOME}/.netrc
machine owncloud.example.com
login nullpopopo
password p@SsW0rD_iS_h@Re
_EOL_

${HOME}/OWNCLOUD/Documents/hogehoge というディレクトリを作成して、ownCloudの 🏠 > Documents > hogehoge にコンテンツが同期されるか試してみましょう。コマンドラインからリモートホストのownCloudへ接続するには owncloudcmd コマンドを使用します。

owncloudcmd --exclude ${HOME}/OWNCLOUD/etc/sync-exclude.lst -n ${HOME}/OWNCLOUD/Documents/hogehoge https://owncloud.example.com/remote.php/webdav/Documents/hogehoge

しばらくしてWebブラウザからownCloudにログインして 🏠 > Documents > hogehoge とディレクトリを辿っていくと、 ${HOME}/OWNCLOUD/Documents/hogehoge に置いてあったファイルが同期されていることが確認できるかと思います。

■ ハマりどころとまとめ

何度か実行してみてハマったところが若干ありまして。

  1. 大きめのファイルを同期している途中でも、ownCloudでファイルの存在が表示される
    • 仮に512Mbのファイルを同期したとして、タイミングによっては100Mbのファイルとして表示されてしまうことがある(容量はてきとうです)
      • しばらくしてブラウザをリロードすると正しいバイト数で表示される
  2. 同期途中のファイルをブラウザでクリックしたタイミングによっては、ownCloudがロック画面を出してきてしまう(再現性は未確認)
    • ブラウザのバックボタンで戻ってことなきを得ました
  3. 同期元ファイルがシンボリックリンクだと、きちんと同期されない(エラーとなる)
    • まあ、気持ちはわかる(わかる)

なので、なるべく他のプロセスが触ることのないタイミングで同期をかけるとよさそうですね。こちらは楽したい、相手は黒い画面を見たくない、といった相反するインターフェイスを取り持つのによさそうですね。