Introduction
SyncEvolution makes it easy to keep two instances of Evolution in sync, or to keep a phone in sync with Evolution. This lets you share the data between a desktop and a laptop or phone without requiring any internet intermediary.
Requirements
Two instances of Evolution (or one instance and a phone with a SyncML client installed) on machines which can reach one another over the network. One host will act as the server (call this box "jupiter") and the other will be the client (call this box "ganymede"). The names, of course, do not matter.
syncevo-http-server >= 1.32 installed on the server, with the Evolution Data Server backends (libebook, libecal) enabled
- A new local calender in evolution; i.e Work
avahi-daemon should be installed in all machines (server & clients)
Here the goal is to use computer's HOSTNAME, so the machine can easily be reached in local-lan using $HOSTNAME.local instead of ip-address (Requires avahi-daemon to be installed on each machine.) Here synchronization between work calendars of these two machines are shown.
Sync Scenario (General)
Table |
Hostanme |
IP-Address |
Peer |
Server |
jupiter |
jupiter.local |
jupiter |
Client |
ganymede |
ganymede.local |
ganymede |
Client2 |
callisto |
callisto.local |
callisto |
For sake of simplicity Hostname names & peer names are similar.
Setup (Calendar-Sync)
Sync Scenario
Table |
Hostanme |
IP-Address |
Source |
Database |
Peer |
Server |
jupiter |
jupiter.local |
workcal |
Work |
jupiter |
Client |
ganymede |
ganymede.local |
workcal |
Work |
ganymede |
Client2 |
callisto |
callisto.local |
workcal |
Work |
callisto |
Only synchronization between jupiter & ganymede is shown here.
1. First start syncevo-http-server on the server(Jupiter):
syncevo-http-server http://localhost:9000/syncevolution
Note: This listens on all interfaces, NOT localhost as it appears. It will keep running in the background.Do NOT close the terminal. It will show client's device-id after executing step 3.Open another terminal-prompt or tab for executing following commands.
2. Configure a peer on the client(Ganymede) to point to the server
syncevolution --configure --template SyncEvolution syncURL=http://jupiter.local:9000/syncevolution jupiter
You'll need to fill in the right IP or hostname.
3. Run the sync on the client to determine client device id:
syncevolution jupiter
This will fail, but will output the client device ID, which we need. On the server side(on Jupiter), you should see something like:
[ERROR] sync: no configuration found for deviceID (some long string of chars)
Copy & Save that string, you need it for the next step.
4. On the server, configure a peer for the client:
syncevolution --configure --template SyncEvolution_Client \ --sync-property remoteDeviceId=<paste in the string> \ --sync-property username= \ --sync-property password= \ --source-property uri= \ ganymede
Replace remoteDeviceID with the string copied in previous step.
5. On the server,create a new source for work calendar:
syncevolution --configure backend=evolution-calendar database=Work @default workcal
If it is alreday created during other sync processes(i.e google-caledar), then this step is NOT required. To list all local databases run following command at terminal-prompt:
syncevolution --print-databases
6. On the server, enable access to the work-calendar for the client (repeat for each client):
syncevolution --configure sync=two-way ganymede workcal
7. On the client, configure and enable work-calendar:
syncevolution --configure backend=evolution-calendar database=Work sync=two-way jupiter workcal
On the client, list databases on client using the same commands as on the server.
8. Finally start the sync-process on the client(first-time)
syncevolution --sync=slow jupiter workcal
For the first-time sync it is strongly recommended to use -- sync refresh-from-remote or --sync slow option during the sync to avoid duplicity.
Caution: "refresh-from-client" option WILL DELETE EVERYTHING IN EVOLUTION CALENDAR (for caldav/carddav client is remote server & server is local client i.e. syncevolution) AND REPLACE WITH GOOGLE-CALENDAR.
To find all possible sync-option run following command at terminal-prompt:
syncevolution --sync ?
General sync-options are explained below:
Sync Option |
Meaning |
two-way |
Normal two-way sync |
slow |
Exchange all data. Recommended for first time sync to avoid duplicity |
refresh-from-remote |
Deletes everything on client & replaces with server |
refresh-from-local |
Deletes everything on server & replaces with client |
refresh-from-client |
Deletes everything on server & replaces with client (opposite for caldav/carddav) |
refresh-from-server |
Deletes everything on client & replaces with server (opposite for caldav/carddav) |
9. Start Normal Sync (After first sync)
syncevolution jupiter workcal
This will start two-way sync which is the default sync-option defined in step 6 & 7.
For other calendars repeat steps 2,3,4,6 & 7 with separate client-id, peer-name,ip-address & calendar-id for each calendar.Multiple data-sources can be synced at the same time:
syncevolution jupiter workcal personalcal
To sync all sources under a peer run:
syncevolution jupiter
10. Auto-run syncevolution server at boot:
Now one can close previously open terminal-prompt on server. It will terminate the server. To keep it running in the background run following command at terminal-prompt:
nohup syncevo-http-server http://localhost:9000/syncevolution &
One can also add this command to start-up programs to start it automatically at system boot.
Setup(Contacts-Sync)
Contacts can be synced same way as explained above. However for contacts sync evolution-contacts backend(i.e. backend=evolution-contacts) is used.
Sync Scenario
Table |
Hostanme |
IP-Address |
Source |
Database |
Peer |
Server |
jupiter |
jupiter.local |
personaladb |
Personal |
jupiter |
Client |
ganymede |
ganymede.local |
personaladb |
Personal |
ganymede |
Client2 |
callisto |
callisto.local |
personaladb |
Personal |
callisto |
The default source contacts is connected to evolution's default database .i.e.Personal. But a new source (personaladb) for the same databse is created to show how multiple contact list in evolution can be synced without affecting other peers(Memotoo, Google_Contacts) which uses default contact source.
Step5, Step6 & Step7 from above can be re-written for contacts sync as:
On the server,create a new source for Pesonal Contacts list:
syncevolution --configure backend=evolution-contacts database=Personal @default personaladb
If this source has already been created before for other sync process(i.e fruux, google-contacts, memotoo etc), then this step is NOT required.
On the server, enable access to the personal-addressbook for the client (repeat for each client):
syncevolution --configure sync=two-way ganymede personaladb
On the client, configure and enable personal-addressbook:
syncevolution --configure backend=evolution-contacts database=Personal sync=two-way jupiter personaladb
The rest of the steps can be modified accordingly.
Setup(Tasks-Sync)
Tasks can be synced same way as explained above. But for tasks sync evolution-tasks backend(i.e. backend=evolution-tasks) is used.
Sync Scenario
Table |
Hostanme |
IP-Address |
Source |
Database |
Peer |
Server |
jupiter |
jupiter.local |
worktask |
Work |
jupiter |
Client |
ganymede |
ganymede.local |
worktask |
Work |
ganymede |
Client2 |
callisto |
callisto.local |
worktask |
Work |
callisto |
Here, we are assuming that a new task-list (Work) in evolution has already been created on server & clients. Synchronization occurs among that particular task-list.
Step5, Step6 & Step7 from above can be re-written for tasks sync as:
On the server,create a new source for work-task list:
syncevolution --configure backend=evolution-tasks database=Work @default worktask
If this source has already been created before for other sync process(i.e fruux, radical, memotoo etc), then this step is NOT required.
On the server, enable access to the work-task list for the client (repeat for each client):
syncevolution --configure sync=two-way ganymede worktask
On the client, configure and enable work-task:
syncevolution --configure backend=evolution-tasks database=Work sync=two-way jupiter worktask
The rest of the steps can be modified accordingly.
Setup(Memos-Sync)
Tasks can be synced same way as explained above. But for Memo sync evolution-memos backend(i.e. backend=evolution-memos) is used.
Sync Scenario
Table |
Hostanme |
IP-Address |
Source |
Database |
Peer |
Server |
jupiter |
jupiter.local |
worktmemo |
Work |
jupiter |
Client |
ganymede |
ganymede.local |
workmemo |
Work |
ganymede |
Client2 |
callisto |
callisto.local |
workmemo |
Work |
callisto |
Here, we are assuming that a new memo-list (Work) in evolution has already been created on server & clients. Synchronization occurs among that particular memo-list.
Step5, Step6 & Step7 from above can be re-written for memos sync as:
On the server,create a new source for work-memo list:
syncevolution --configure backend=evolution-memos database=Work @default workmemo
If this source has already been created before for other sync process(i.e radical, memotoo etc), then this step is NOT required.
On the server, enable access to the work-memo list for the client (repeat for each client):
syncevolution --configure sync=two-way ganymede workmemo
On the client, configure and enable work-memo:
syncevolution --configure backend=evolution-memos database=Work sync=two-way jupiter workmemo
The rest of the steps can be modified accordingly.