{"id":454,"date":"2012-11-29T15:40:12","date_gmt":"2012-11-29T14:40:12","guid":{"rendered":"http:\/\/www.leinders.de\/harald\/?p=454"},"modified":"2012-11-30T10:42:29","modified_gmt":"2012-11-30T09:42:29","slug":"migration-von-mac-os-x-server-mit-ichat-zu-openfire","status":"publish","type":"post","link":"https:\/\/www.leinders.de\/harald\/2012\/11\/29\/migration-von-mac-os-x-server-mit-ichat-zu-openfire\/","title":{"rendered":"Migration von Mac OS X Server mit iChat zu Openfire"},"content":{"rendered":"<p><em>Wer die Kontaktlisten (Roster) der Nutzer von Apples iChat-Server nach Openfire \u00fcbertragen m\u00f6chte, findet hier ein m\u00f6glicherweise n\u00fctzliches <a href=\"https:\/\/www.leinders.de\/harald\/wp-content\/uploads\/2012\/11\/export_ichat_user.tar.gz\">Programm<\/a>. <strong>Achtung: Dieses Programm bitte nur dann benutzen, wenn eine externe Datenquelle f\u00fcr das Usermanagement genutzt wird (z.B. ein Active Directory) und User- und Group-Settings daher auf &#8222;read-only&#8220; gesetzt sind! Ansonsten werden unter Umst\u00e4nden andere Userdaten wie z.B. das Passwort \u00fcberschrieben.<\/strong><br \/>\n<\/em><\/p>\n<p>Mac OS X Server bringt von Haus aus einen internen Chat-Dienst mit, der auf dem bekannten &#8222;<a href=\"http:\/\/de.wikipedia.org\/wiki\/Jabber\" target=\"_blank\">jabberd<\/a>&#8220; beruht und das <a href=\"http:\/\/de.wikipedia.org\/wiki\/Extensible_Messaging_and_Presence_Protocol\" target=\"_blank\">XMPP-Protokoll<\/a> benutzt. Damit bietet er die M\u00f6glichkeit, mit einer relativ breiten Palette von Clients auf allen Betriebssystemen an diesem Chat teilzunehmen, nicht nur mit dem iChat-Client, bzw. in der neuesten Version dem Programm &#8222;Nachrichten&#8220;. Leider ist die Administration des Dienstes mit dem Server-Admin-Tool ziemlich rudiment\u00e4r. Obwohl er sehr gut in die OpenDirectory-Umgebung eingebunden ist, so dass keine wirkliche Userverwaltung anf\u00e4llt, gibt es nur wenig M\u00f6glichkeiten, das Chat-System selbst zu administrieren (Konferenzr\u00e4ume, Policies u.\u00e4.).<\/p>\n<p><!--more-->Da wir sowieso das OpenDirectory aus diversen Gr\u00fcnden gerade gegen einen echten AD austauschen, waren wir auch auf der Suche nach einem unabh\u00e4ngigen XMPP-Server und sind dabei auf <a href=\"http:\/\/www.igniterealtime.org\/projects\/openfire\/index.jsp\" target=\"_blank\">Openfire<\/a> gesto\u00dfen.<\/p>\n<p>Openfire l\u00e4sst sich auf einem passenden Linux-System in wenigen Minuten sehr einfach aufsetzen. Eine JRE bringt er mit, als weitere Voraussetzung ist eigentlich nur eine Datenbank sinnvoll (aber nicht zwingend notwendig). Unterst\u00fctzt werden z.B. MySQL und PostgreSQL. Auf die Installation m\u00f6chte ich an dieser Stelle auch nicht im Detail eingehen, genauere Informationen findet man auf der Webseite von &#8222;<a href=\"http:\/\/www.igniterealtime.org\/\" target=\"_blank\">ignite realtime<\/a>&#8222;.<\/p>\n<p>Wir betreiben Openfire mit einer Anbindung an ein Active Directory. Damit sind sofort alle User in Openfire verf\u00fcgbar, allerdings fehlen noch alle Informationen, die ein User zu den Kontakten gespeichert hatte (z.B. die Kontaktliste, Aliasnamen, Gruppen usw.). Da ich nichts gefunden habe, wie man diese Informationen aus iChat nach Openfire \u00fcbertr\u00e4gt, habe ich selber was geschrieben. \ud83d\ude42<\/p>\n<p>Der iChat-Server von Mac OS X Server beruht auf dem jabberd. Zur Speicherung der Nutzerdaten benutzt er eine Dateibasierte SQLite3-Datenbank (\/private\/var\/jabberd\/sqlite\/jabberd2.db), die man mit Python und dem sqlite3-Modul bequem \u00f6ffnen und \u00fcber den DBAPI-Treiber befragen kann. Das Programm &#8222;export_ichat_user.py&#8220; macht genau dieses und erzeugt daraus eine XML-Datei, die sich mit dem &#8222;User Import Export&#8220;-Plugin verarbeiten l\u00e4sst. Beim Betrieb an einem AD werden nur die Daten der Kontaktliste (Roster) verarbeitet, so dass alle anderen Tags zwar vorhanden aber leer sind (beim Fehlen der Tags weigert sich das Plugin, die Datei zu verarbeiten). Zus\u00e4tzlich kann man dem Programm noch eine Liste von aktiven Usern mitgeben (in der Datenbank von iChat sind auch alle User enthalten, die schon l\u00e4ngst nicht mehr existieren). Diese Liste besteht aus den Loginnamen (wie sie in &lt;loginname&gt;@&lt;jabber-server&gt; vorkommen und sind flach in einer Datei zu speichern (ein Name pro Zeile). Man kann auch einen einzelnen User angeben, f\u00fcr den man eine Import-XML erzeugen m\u00f6chte.<\/p>\n<p>Der ebenfalls genutzte XML-Parser wurde mit &#8222;generateDS&#8220; erzeugt.<\/p>\n<p>Das Programm befindet sich aktuell im Status &#8222;works for me&#8220;. \ud83d\ude42 Ich gebe es also gerne weiter, kann aber nicht garantieren, dass es bei jedem l\u00e4uft. Die benutzte Python-Version ist 2.7 (MacPorts).<\/p>\n<p>Der Aufruf ist wie folgt (-h f\u00fcr Hilfe):<\/p>\n<p>export_ichat_user.py [-dhnv] [-a active_users.lst] [-u user] [-r service] [-o file] sqlite-db<\/p>\n<p>Die Datei &#8222;active_users.lst&#8220; enth\u00e4lt eine Liste von Usern, die \u00fcbertragen werden sollen (optional). Der Schalter &#8222;-u user&#8220; f\u00fchrt den Export nur f\u00fcr den User &#8222;user&#8220; aus. Wenn man den Servicenamen (z.B. example.com in user@example.com) \u00e4ndern m\u00f6chte, so kann man mit &#8222;-r john.doe&#8220; die JID&#8217;s in der Kontaktliste nach &#8222;user@john.doe&#8220; konvertieren. Die erzeugte XML-Datei wird mit dem Schalter &#8222;-o filename&#8220; nach &#8222;filename&#8220; geschrieben, sonst nach StdOut. &#8222;sqlite-sb&#8220; ist die von iChat verwendete Datenbank (immer auf Kopien arbeiten!!).<\/p>\n<p>Eine Liste aktiver User aus dem OpenDirectory kann man sich auf der Kommandozeile des Mac OS X Server mit folgendem kleinen Script holen:<\/p>\n<blockquote><p>#!\/bin\/bash<\/p>\n<p>for i in `dscl \/LDAPv3\/127.0.0.1 -list \/Users`<br \/>\ndo<br \/>\n&nbsp; &nbsp; &nbsp; pol=`pwpolicy -u $i -getpolicy 2&gt;\/dev\/null`<br \/>\n&nbsp; &nbsp; &nbsp; echo &#8222;$pol&#8220; | grep -q &#8222;isDisabled=1&#8220;<br \/>\n&nbsp; &nbsp; &nbsp; if [ $? -ne 0 ]<br \/>\n&nbsp; &nbsp; &nbsp; then<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; echo &#8222;$i&#8220;<br \/>\n&nbsp; &nbsp; &nbsp; fi<br \/>\ndone<\/p><\/blockquote>\n<p>Download: <a href=\"https:\/\/www.leinders.de\/harald\/wp-content\/uploads\/2012\/11\/export_ichat_user.tar.gz\">export_ichat_user.tar.gz<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wer die Kontaktlisten (Roster) der Nutzer von Apples iChat-Server nach Openfire \u00fcbertragen m\u00f6chte, findet hier ein m\u00f6glicherweise n\u00fctzliches Programm. Achtung: Dieses Programm bitte nur dann benutzen, wenn eine externe Datenquelle f\u00fcr das Usermanagement genutzt wird (z.B. ein Active Directory) und User- und Group-Settings daher auf &#8222;read-only&#8220; gesetzt sind! Ansonsten werden unter Umst\u00e4nden andere Userdaten wie &hellip; <a href=\"https:\/\/www.leinders.de\/harald\/2012\/11\/29\/migration-von-mac-os-x-server-mit-ichat-zu-openfire\/\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eMigration von Mac OS X Server mit iChat zu Openfire\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[5],"tags":[],"class_list":["post-454","post","type-post","status-publish","format-standard","hentry","category-systeme"],"_links":{"self":[{"href":"https:\/\/www.leinders.de\/harald\/wp-json\/wp\/v2\/posts\/454","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.leinders.de\/harald\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.leinders.de\/harald\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.leinders.de\/harald\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.leinders.de\/harald\/wp-json\/wp\/v2\/comments?post=454"}],"version-history":[{"count":12,"href":"https:\/\/www.leinders.de\/harald\/wp-json\/wp\/v2\/posts\/454\/revisions"}],"predecessor-version":[{"id":456,"href":"https:\/\/www.leinders.de\/harald\/wp-json\/wp\/v2\/posts\/454\/revisions\/456"}],"wp:attachment":[{"href":"https:\/\/www.leinders.de\/harald\/wp-json\/wp\/v2\/media?parent=454"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.leinders.de\/harald\/wp-json\/wp\/v2\/categories?post=454"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.leinders.de\/harald\/wp-json\/wp\/v2\/tags?post=454"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}