Mac - замечательная вещь. Отличное железо, отличная операционная система. Просто работаешь, не задумываясь ни о чём. Но как только нужно сделать шаг в сторону или копнуть на хоть на пару сантиметров вглубь, как начинается такие сложности, что уже и не рад красотам и тоскливо вспоминаешь о Linux.
Итак, дана простейшая задача - нужно синхронизировать базу OmniFocus по WebDAV с OS X Lion Server, установленным на Mac mini Server.
С первого взгляда ничего особенного. В сервере заявлена поддержка WebDAV, копаясь в настройках общего доступа к каталогам я видел галочку включения WebDAV. Что ещё нужно? Ткнул в пару кнопок, всё заработало, ты счастлив и имеешь ещё один повод посмотреть свысока на бедных пользователей Unix - им-то приходится повозиться.
Но нет. Тыканья-тыканьями, а вот какой URL вводить в Omnifocus для доступа к WebDAV? Пока не зашёл в консоль и не заглянул в файл /etc/apache2/httpd_webdavsharing.conf, я не мог догадаться до “очевиднейшего” URL https://server.domain.com/webdav/.
Следующий этап заключался в поисках полного URL к нужной мне папке. Тоже не составило особого труда - Finder/Go/Connect to Server, ввод URL, взгляд на расшаренные папки.
Создание отдельного каталога для синхронизации, ввод URL в настройках OmniFocus - всё очевидно:
Нажатие кнопки Sync провозглашает начало тёмных веков: “Unable to synchronize database with server”…
Попытка переименования каталога приводит к ошибке:
Не думайте, я не первый год за консолью. chmod 777 на родительский каталог был выставлен после первой неудачной попытки, но ничего не изменилось.
Чтение логов Apache (tail -f /var/log/apache2/*log) показало любопытные строки (а именно код 502 Bad gateway):
"MOVE /webdav/ctrld/Sync/untitled%20folder/ HTTP/1.1" 502 256 "-" "WebDAVFS/1.9.0 (01908000) Darwin/11.2.0 (x86_64)" "PROPFIND /webdav/ctrld/Sync/._untitled%20folder HTTP/1.1" 404 233 "-" "WebDAVFS/1.9.0 (01908000) Darwin/11.2.0 (x86_64)"
Увеличение LogLevel до debug:
$ sudo vim /etc/apache2/httpd.conf #LogLevel warn LogLevel debug $ sudo apachectl restart
Повтор попытки - логи не говорят ни о чём.
Задумчивость, попытки найти варианты решения в Google. Сообщение в форуме Omnigroup ”Lion Server for WebDav” порадовало: “Its a no go for now. It looks like some sort of permissions issue but they are aware of it and are working on it.”
Приступ ностальгии по Linux. Достал рабочую конфигурацию WebDAV со своего Ubuntu Server. Модифицировал и вставил её в конец httpd_webdavsharing.conf (да, именно этот файл включается в sites/0000_any_443_.conf, что даёт шансы на доступ к WebDAV по https). Само собой, вы должны использовать свои данные, а не копировать мои:
$ sudo vim /etc/apache2/httpd_webdavsharing.conf DavLockDB /var/tmp/DavLock Alias /secretplace /Users/ctrld/SyncDAV On AuthType Digest AuthName "UserWebDAV Gateway" Require valid-user
Здесь тоже было сказано много лестных слов об Apache для Mac (было убито минут 15 на попытки понять, почему сервер не стартует), но эту часть я опущу.
Не забыл поставить разрешение, дающее право записи для Apache (правильные права несколько другие, но ради простоты я сделал именно так):
$ chmod 777 ~/Sync
Рестарт Apache
$ sudo apachectl restart
Настройка нового URL в OmniFocus:
Нажатие на Sync, и всё заработало (конечно же, производится аутентификация пользователя, это само собой разумеется):
"PUT /secretplace/OmniFocus.ofocus/...client-write-in-progress-... HTTP/1.1" 201 311 "-" "OmniFocus/77.75.9 Darwin/10.7.2" "MOVE /secretplace/OmniFocus.ofocus/...client-write-in-progress-... HTTP/1.1" 201 289 "-" "OmniFocus/77.75.9 Darwin/10.7.2"
OmniFocus на Mac работает, настроил iPhone - и здесь всё в порядке.
Задача решена. Но помните - ручные правки конфигов не приветствуются в OS X Server. Любое обновление Server.app может привести к потере ручных изменений. Поэтому сохраняйте копию конфига и будьте готовы восстановить его, если синхронизация перестанет работать.
Как временное решение данный рецепт вполне подходит. Посмотрим, будет ли исправлена ошибка в очередном обновлении Server.app. Кстати, подскажите, как открыть Bug Report в Apple?