WebDAV и syncevolution

Понадобилось тут помочь с настройкой синхронизации контактов в телефоне, где нет поддержки webdav'а и его вариаций.

Ниже вы можете наблюдать развесистое дерево конфигов, необходимое для простой двухсторонней синхронизации типа "точка-точка". Всё это счастье располагается в ~/.config/syncevolution/

`syncevolution
 ├── owncloud
 │   ├── peers
 │   │   └── owncloud
 │   │       ├── config.ini
 │   │       └── sources
 │   │           ├── addressbook
 │   │           │   └── config.ini
 │   │           ├── calendar
 │   │           │   └── config.ini
 │   │           ├── memo
 │   │           │   └── config.ini
 │   │           └── todo
 │   │               └── config.ini
 │   └── sources
 │       ├── addressbook
 │       │   └── config.ini
 │       ├── calendar
 │       │   └── config.ini
 │       ├── memo
 │       │   └── config.ini
 │       └── todo
 │           └── config.ini
 └── owncloud-target
     ├── config.ini
     ├── peers
     │   └── target-config
     │       ├── config.ini
     │       └── sources
     │           ├── addressbook
     │           │   └── config.ini
     │           ├── calendar
     │           │   └── config.ini
     │           ├── memo
     │           │   └── config.ini
     │           └── todo
     │               └── config.ini
     └── sources
         ├── addressbook
         │   └── config.ini
         ├── calendar
         │   └── config.ini
         ├── memo
         │   └── config.ini
         └── todo
             └── config.ini

27 directories, 19 files

Вводные:

  • owncloud, это, внезапно, наш локальный источник данных
  • owncloud-target - это удалённый источник
  • memo и todo - не используется, поскольку локальный источник не может их выгружать, оставлены в листинге для примера.
  • как я понял, конфиг не особо рассчитан на правку руками, и может быть переписан программой в любой момент
  • предполагается, что под owncloud выделен отдельный hostname и включен https

Содержимое файлов, с комментариями. Все пути указываются относительно ~/.config/. Во все места, где используются переменные, должны быть вписаны нужные значения, сам syncevolution переменные не понимает!

######## Локальный источник

# ./syncevolution/owncloud/sources/addressbook/config.ini
#   смотрите внимательно комментарии в конфиге выше этой директивы,
#   при неверном выборе выдаётся крайне невразумительная диагностика
backend = addressbook
#   смотреть через `syncevolution --print-databases`
database = qtcontacts:org.nemomobile.contacts.sqlite:

# ./syncevolution/owncloud/sources/calendar/config.ini
#   аналогично пункту выше
backend = calendar
#   смотреть через `syncevolution --print-databases`
database = uid:70f9eee1-866e-4606-912c-2b1c94c084d1

# ./syncevolution/owncloud/peers/owncloud/sources/addressbook/config.ini
#   в первый раз - ставится merge, потом переключается на two-way
#   merge никогда ничего не удаляет!
sync = two-way

# ./syncevolution/owncloud/peers/owncloud/sources/calendar/config.ini
#   аналогично пункту выше
sync = two-way

# ./syncevolution/owncloud/peers/owncloud/sources/memo/config.ini
#   важно - отключить, иначе выдаст ошибку синхронизации
#   и засоряет лог
sync = disabled

# ./syncevolution/owncloud/peers/owncloud/sources/todo/config.ini
#   аналогично пункту выше
sync = disabled

# ./syncevolution/owncloud/peers/owncloud/config.ini
#   самый главный конфиг
syncURL = local://@owncloud-target
printChanges = 0
PeerIsClient = 1
#   чисто косметическая настройка - название пира
PeerName = owncloud
#   показывать ли этот источник в gui
ConsumerReady = 1

######## Удалённый источник

# ./syncevolution/owncloud-target/sources/addressbook/config.ini
#   ВАЖНО! если указан просто addreddbook или что-то подобное
#   оно таки пытается использовать сеть, из-за того, что указано http://*
#   но ломится при этом на localhost!
#   также, "ADDR" - название адресной книги owncloud'а, см вебинтерфейс
backend = CardDAV
database = https://$HOSTNAME/remote.php/carddav/addressbooks/$USER/$ADDR

# ./syncevolution/owncloud-target/sources/calendar/config.ini
#   $CAL - то же самое, что и выше, см вебинтерфейс
backend = CalDAV
database = https://$HOSTNAME/remote.php/caldav/calendars/$USER/$CAL

# ./syncevolution/owncloud-target/peers/target-config/sources/addressbook/config.ini
#   merge - в первый раз, two-way - второй и последующие
sync = two-way

# ./syncevolution/owncloud-target/peers/target-config/sources/calendar/config.ini
#   аналогично
sync = two-way

# ./syncevolution/owncloud-target/peers/target-config/config.ini
syncURL = https://$HOSTNAME/remote.php/
username = $USER
password = $PASS # пароль от owncloud'а
printChanges = 0
dumpData = 0
useProxy = 0
PeerName = owncloud
SSLVerifyServer = 0 # выставить в случае самоподписного сертификата
SSLVerifyHost = 0
ConsumerReady = 0
peerType = WebDAV

# ./syncevolution/owncloud-target/config.ini
#   должен выставится сам при первом запуске, не трогать
deviceId = syncevolution-6ed8351d-76bb-4ee9-9c25-063849780848