2018年04月14日

DAVdroid と Radicale でまたハマる

 だいぶ前に「DAVDroid と Radicale でハマる」というのを書いた。しばらく問題なく動いていたのだが、最近また同期がうまくいかなくなった。気がついてみると、Radicale のバージョンがずいぶん古い (0.8)。なるべく新しいバージョンにしておかないと、いろいろとまずいかもしれないな、と思って、バージョン 2 まで一気に上げてみた。

 インストールには Python3 が必要。Mac 用の Python3.6 をインストールする(3.5 だと、PyPI へのアクセスがうまくいかない)。その後、radicale, passlib, bcrypt をインストールする。

$ python3 -m pip install --upgrade radicale  #  Radicale 本体
$ python3 -m pip install --upgrade passlib bcrypt  #  ユーザー認証用の bcrypt

 適当な場所 (/path/to/radicale とする) に Radicale 用のディレクトリを作る。設定ファイル config を下の内容で作成。

[auth]
type = htpasswd
htpasswd_filename = /path/to/radicale/users
htpasswd_encryption = bcrypt

[server]
hosts = 0.0.0.0:5232

[storage]
filesystem_folder = /path/to/radicale/collections

[logging]
config = /path/to/radicale/log_config

 パスワード認証用のファイルは以下のように作成。

$ htpasswd -B -c /path/to/radicale/users nagata
New password: 
Re-type new password: 
Adding password for user nagata

 ログ用の設定ファイル log_config は次の通り。

[loggers]
keys = root

[handlers]
keys = file

[formatters]
keys = full

[logger_root]
# Change this to DEBUG or INFO for higher verbosity.
level = INFO
handlers = file

[handler_file]
class = FileHandler
# Specify the output file here.
args = ('/path/to/radicale/log',)
formatter = full

[formatter_full]
format = %(asctime)s - [%(thread)x] %(levelname)s: %(message)s

 これで、下のように実行する。

$ python3 -m radicale --config=/path/to/radicale/config

 ここからがちょっとハマったところ。ブラウザで http://localhost:5232 にアクセスすると、Web ベースでカレンダーなどを作成できるのだが、これだと http://localhost:5232/nagata/8fc95c36-808b-d5ec-3b1f-13137ba93dc9/ みたいなランダムな文字列になってしまって、取り扱いが非常に面倒臭い。「RadicaleでCalDAV/CardDAVサーバーを構築する」という記事を参考にして、次のように設定。(あとで、公式ドキュメントにも書かれているのを発見した。)


$ cd /path/to/collections/collection-root
$ mkdir -p nagata/calendar
$ nano nagata/calendar/.Radicale.props
{"tag": "VCALENDAR"}
$ mkdir -p nagata/address
$ nano nagata/address/.Radicale.props
{"tag": "VADDRESSBOOK"}

 ブラウザで http://localhost:5232 にアクセスすると、こんな風になる。コレクション名が /nagata/address なのは不便なので、"Edit" で編集する。

20180414-1.png

 これが編集画面。「連絡先」と名付けた。

20180414-2.png

 こんな風になる。/nagata/calendar の方も同様に名前をつければよい。

20180414-3.png

 DAVdroid で同期するには、まずアカウントを作成する。DAVdroid のアカウント一覧画面で「+」を押すと、下の画面になるので、URL, ユーザー名、パスワードを入力。URL は ...:5232/まででよく、nagata/calendar などの部分は自動的に認識される。

20180414-4.png

 うまくいくと、この画面になる。実はここでハマった。別の URL で同じユーザー名があると、エラーになる。エラーメッセージがわかりにくいので注意。

20180414-5.png

 こんな風に、新しく作ったアカウント(一番下)が表示される。

20180414-6.png

 アカウントをタップすると、この画面になる。左のチェックボックスをオンにして、右上の同期アイコンをタップすると、Radicale と同期してくれる。

20180414-7.png

 これで、「カレンダー」「連絡先」とも、Radicale のコレクションを認識してくれる。一応これで、Radicale 2 系列も使える目処が立った。

Posted at 2018年04月14日 01:10:46
email.png