Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Darwin CalendarServer unter OpenIndiana

fraosug
March 17, 2013

Darwin CalendarServer unter OpenIndiana

fraosug

March 17, 2013
Tweet

More Decks by fraosug

Other Decks in Technology

Transcript

  1. Ausgangssituation • iCal, iPhone & iPad, Android Clients • Kalender

    via Webserver auf MacOS X Server 10.5 gehostet (nur Publish & Subscribe) – soll in Rente geschickt werden • war ein Update von MacOS X Server 10.4: Calendar Server war dort von “nicht Apple like” bis “funktionierte garnicht”
  2. Was ist CalDAV? • Termindaten im XML-Format • WebDAV als

    HTTP basiertes Client/Server Protokoll • beides offene Standards (in RFCs definiert)
  3. Synchronisation mit Standard Programm • wird (meistens) umsonst mitgeliefert •

    Benutzer “kennen das” • Integration in das OS - andere Programme können (evtl.) auf Termine zugreifen
  4. Outlook Thunderbird iCal iOS Android Windows Phone Exchange ✔ (✔)

    Plugin für Webservices ✔ ab OS X 10.6 ActiveSync ✔ ✔ ✔ CalDAV (✔) Connector ✔ ✔ ✔ ab v4.0 * (✔) Sync-App Wer spricht Was? Synchronisation mit Standard Programm * CalDAV/iOS: ab 3.0 nur Publish/Subscribe, ab 4.0 volle Unterstützung
  5. CalDAV ActiveSync Exchange WebDAV Server Publish & Subscribe CalDAV Server

    ✔ (✔) OpenSource Proxy Z-Push Groupware ✔ ✔ (✔) Kostenpflichtiger Connector Exchange Server (✔) OpenSource Gateway ✔ ✔ Wer spricht Was? Server-Kategorien und Protokolle
  6. Features keine Lizenz-Kosten Goldene Mitte CalDAV Server Groupware • Synchronisation

    • Delegation • Einladung zu Terminen bestätigen (Annehmen / Ablehnen / Vielleicht) via E-Mail versenden & empfangen • Freebusy • Datei-Anhänge hosten • Push-Notifications (XMPP aka “Jabber”)
  7. Installations & Testarie Clients: MacOS X 10.6 – iCal 4

    iOS 3.0 & iOS 4.1 – “Termine” OpenIndiana – Thunderbird 3.1 Protokolle: CalDAV & ActiveSync
  8. Installations & Testarie Teil 1 - Groupware • Sehr gut:

    DiskImages (Linux) in VirtualBox • Zarafa (C++, MySQL) - sollte gute ActiveSync Unterstützung dank Z-Push haben 㱺 Termine bestätigen funktioniert nicht immer • Sogo (GNUStep & WebObjects/EOF Clone) - wird einmal eine super Lösung dank Samba 4 㱺 Termine bestätigen funktioniert noch weniger
  9. Installations & Testarie Teil 2 - CalDAV Server • Weniger

    gut: keine fertigen IPS-Pakete • DAViCal (Perl, Postgres) – Anleitungen für Z-Push vorhanden 㱺 Termine bestätigen funktioniert nicht immer • Radicale (Python, Datei-basiert) – radikal einfache Installation 㱺 nur Synchronisation, Rest kommt irgendwann
  10. Warum funktioniert Termine einladen “nicht immer” ? • CalDAV sollte

    doch ein offener Standard sein? 㱺es gibt Erweiterungen von Apple (ebenfalls offen - müssen “nur” implementiert werden)
  11. Darwin Calendar Server • OpenSource, Apache 2 Lizenz • seit

    10.4 Bestandteil von MacOS X Server • aktuelle Version 3.2 in MacOS X Server 10.7 • Weiterentwicklung mind. 1 Person in Vollzeit (W. Sanchez) • Python Code, verwendet 3rd Party Module (u.a. Twisted wg. Python-GIL) • Datenbanken: Postgres, Oracle
  12. Darwin Calendar Server • Kontakte via CardDAV • Accounts /

    Resourcen / Kontakte via LDAP möglich • Kerberos Anbindung möglich • Gruppen in Gruppen • beste Unterstützung für iCal und iOS Geräte 㱺 Apple Push Notification Service für iOS • Skalierbar ( > 10.000 Accounts )
  13. Interner Aufbau Master Slave X XML Slave Gateway DB mem

    cache SQLite SQLite File system Config plist Accounts XML LDAP Termine XML Delegation Gruppen in Gruppen Anhänge XMPP SMTP Push Notifications POP3 IMAP e-Mail Versand e-Mail Empfang Apple Push Slave 1 XML Slave Gruppen Gateways
  14. • Minimum RAM pro Instance: 30 MB • Mindestens drei

    Instances • CalDAV und CardDAV jeweils separate Server • memcache: 4kb pro Termin, konservativ ca. 10 MB pro Account / Kalender / Jahr Interner Aufbau
  15. Installation • Source download svn co “http://svn.macosforge.org/repository/ calendarserver/CalendarServer/tags/release/ CalendarServer-3.2“ CalendarServer

    • build cd CalendarServer ./run -s • support/build.sh downloaded benötigte Sourcen (spezifische Versionen), patched wenn nötig
  16. Installation • installieren im Pfad $INSTALLPREFIX (Calendar Server Source, Python

    Module, Python 2.7.1, Postgres 9.1, memcachd 1.4.5 etc.): ./run -I $INSTALLPREFIX • funktioniert bestimmt unter MacOS X, evtl. unter Linux… …garantiert nicht unter OpenIndiana!
  17. Installation • Python ohne Patches unter OpenIndiana/Solaris = Test Failures!

    • Python 2.6.4 Paket vom OS? 㱺 build.sh anpassen, wenn man eh schon dabei ist dann: • Postgres und memcachd werden vom Calendar Server gestartet? Dafür gibts SMF… 㱺 build.sh anpassen und OS Pakete benutzen (Postgres 8.1) sowie eigenes Paket für memcached erstellen (aktuell 1.4.13, OI 1.4.1)
  18. Installation • Patches für Python Module erstellen: xattr/_xattr.c, twext/python/sendmsg.c, PyGreSQL-4.0/setup.py,

    pyOpenSSL/setup.py • tools/bootstrapdatabase.py anpassen wg. hardcoded Path zu Postgres Tools… • vor Aufruf von ./run sowie in SMF Script: export PYTHONPATH=$INSTALLPREFIX/lib/ python • Calendar Server startet…
  19. Installation • … aber Datenbank kann nicht angelegt werden: Python

    2.7 subprocess Module! 㱺 Python 2.7.2 Paket erstellen • vor ./run sowie in SMF Script: export PYTHON=/path/to/bin/python2.7 • … läuft ! • IPSit Build-Scripts und IPS-Pakete inkl. SMF Services: http://minesworld-technologies.com/ opensource/darwincalendarserver
  20. Configuration Server • Defauts für alle Einstellungen im Detail in

    $INSTALLPREFIX/lib/python/twistedcaldav/ stdconfig.py • caldav.plist anpassen, Pfad zu dieser wird beim Start übergeben • “Quick & Dirty”: accounts.xml für Logins / Resourcen verwenden, HTTPS deaktivieren
  21. Configuration Server accounts.xml • <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE accounts SYSTEM

    "accounts.dtd"> <accounts realm="ist-egal"> USERs RESOURCEs LOCATIONs GROUPs </accounts> • interne Verwaltung über (weltweit einmalige) UUIDs (z.B. d687db01-784d-5179-8dcd-da9be129424e ) … • ohne UUID ist der Calendar Server evtl. “zickig”
  22. Configuration Server accounts.xml • Benutzer <user> <uid>test</uid> <email-address>[email protected]</email-address> <guid>d687db01-784d-5179-8dcd-da9be129424e</guid> <password>1234</password>

    <name>Test User</name> <first-name>Test</first-name> <last-name>User</last-name> </user> • Resourcen mit <resource></resource> • Locations mit <location></location>
  23. Configuration Server accounts.xml • Gruppen <group> <uid>first-group</uid> <guid>382300bc-a461-5bf4-bb25-d7233720ad9f</guid> <member type=”user”>uid-of-user</member>

    <member type=”location”>uid-of-location</member> <member type=”resource”>uid-of-resource</member> </group> • fertig. Auf zu den Clients…
  24. Configuration Clients MacOS X “Addressbuch” •im Addressbuch wie bei iCal

    vorgehen •als “Accounttyp” CardDAV auswählen •Addressbuch wird melden das der Account nicht angelegt werden kann. Trotzdem “Erstellen” •Addressbuch beenden
  25. Configuration Clients MacOS X “Addressbuch” • ~/Library/Application Support/AddressBook/Sources/ irgendeine-UUID/Configuration.plist bearbeiten

    (wurde neu angelegt) • <key>servername</key> <string>protocol://fqdn:port/principals/__uids__/guid</string> <key>username</key> <string>uid</string> • Speichern und Adressbuch “funktioniert” dann • geht auch “einfacher” über Eintrag im DNS System
  26. Configuration Server SSL • <key>SSLPort</key><integer>8443</integer> <key>EnableSSL</key><true/> • <key>SSLCertificate</key> <string>/path/to/fqdn.cert</string> <key>SSLPrivateKey</key>

    <string>/path/to/fqdn.key</string> <key>SSLAuthorityChain</key> <string></string> <key>SSLCertAdmin</key><false/> <key>SSLPassPhraseDialog</key><false/>
  27. Configuration Server LDAP • ldap: TLS bzw. ldaps: Protokolle benötigen

    patch für twistedcaldav/directory/ldapdirectory.py • <key>DirectoryService</key><dict> <key>type</key> <string>twistedcaldav.directory.ldapdirectory.LdapDirectoryService </string> <key>params</key><dict> <key>uri</key> <string>protcol://fqdn:port/</string>
  28. Configuration Server LDAP • <key>tls</key><false/> <key>tlsCACertFile</key> <string>/path/to/combined-ldapserver-and-ca.cert</ string> <key>tlsCACertDir</key> <string></string>

    <key>tlsRequireCert</key> <string>never</string> • tls auf true setzen wenn ldap: als Protokoll angegeben wurde und trotzdem verschlüsselt werden soll
  29. Configuration Server LDAP •über mappings wird an das eigene LDAP

    Schema angepasst •am besten im eigenen LDAP Server apple- generateduid anlegen (analog zu guid in accounts.xml) •mappings doppelt checken!
  30. Configuration Server LDAP •Digest MD5 Authentifizierung ausschalten •Clear-Text “Basic” einschalten

    •sonst Probleme das falsch verschlüsseltes Password an den LDAP Server gesendet wird… •Für Clients https enablen, http disablen, Root- Zertifikat auf Clients installieren für sicheres Login via Clear-Text
  31. Configuration Server Push Notification XMPP • externe XMPP “Jabber” Server

    wird benutzt • Calendar Server verbindet sich als Client • mod_presence, mod_pubsub • Problem: Calendar Server hat eigene Vorstellungen davon welche “nodes” (Pfade) in mod_pubsub angelegt werden 㱺 ldavoll wurde in MacOS X Server 10.5 eingesetzt (verbindet sich ebenfalls als Client) . http://idavoll.ik.nu/
  32. Configuration Server Apple Push Notification Service •benötigt Zertifkat und Key

    von Apple •wird an Mobile-Me Account gebunden •“One Click” Erstellung in MacOS X Server Applikation. Überpfrüfung ob Server gekauft wurde? •Ausdrücklich keine Aufforderung die Files auf OI Server zu kopieren
  33. • Darwin Calendar Server Projekt: http://trac.calendarserver.org • Informationen, Präsentation, IPSit

    Build-Scripts und IPS-Pakete inkl. SMF Services: http://minesworld-technologies.com/ opensource/darwincalendarserver