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

Darwin CalendarServer unter OpenIndiana

Avatar for fraosug fraosug
March 17, 2013

Darwin CalendarServer unter OpenIndiana

Avatar for fraosug

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