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 warnLogLevel 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.confDavLockDB /var/tmp/DavLockAlias /secretplace /Users/ctrld/Sync<Directory /Users/ctrld/Sync>DAV OnAuthType DigestAuthName "UserWebDAV Gateway"Require valid-user</Directory>
Здесь тоже было сказано много лестных слов об 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?
-->-->