Migration von Google zu KolabNow

Ausgangslage

Agencies shall, to the extent consistent with applicable law, ensure that their privacy policies exclude persons who are not United States citizens or lawful permanent residents from the protections of the Privacy Act regarding personally identifiable information.

(Ziffer 14 einer Executive Order, welche Donald Trump am 25. January 2017 unterzeichnete)

Kaum hatte der EDÖB das Zustandekommen des Swiss-US Privacy Shields begrüsst, haben US-Präsident Trump und seine Verwaltung klar gemacht, dass nicht-US Personen und Institutionen soweit möglich vom Datenschutz ausgenommen werden sollen. c’t hat im Artikel «Sichere Häfen» zwar einige deutsche und europäische Alternativen zu amerikanischen Groupware- und Filehosting-Diensten aufgeführt. Für Kunden aus der Schweiz sind diese aber nicht attraktiv, da auch der deutsche Bundesnachrichtendienst BND die Daten von Nicht-Deutschen abgreift, wo er kann.

Das schien mir ein guter Anlass zu sein, meine bisher in einem G Suite-Konto von Google gehosteten Kalender- und Adressbuchdaten wieder in der Schweiz zu speichern.

Ich wollte mein Glück nochmals mit der Open Source-Groupware Kolab probieren, genauer mit dem Angebot KolabNow (ehemals MyKolab). Die Betreiberin Kolab Systems AG hat den Firmensitz in Küsnacht ZH und verarbeitet alle Daten gemäss eigener Aussage exklusiv in der Schweiz. Bezüglich Sicherheit ist SSL auf den Servern gut konfiguriert und sind Perfect Forwarding Secrecy (PFS) sowie DANE (DNSSEC) implementiert.

Wechsel

Google macht es einem vorbildlich einfach, die Daten eines G Suite-Kontos herunterzuladen. Und KolabNow unterstützt für Emails, Kontakte und Kalender Importe direkt aus über die Weboberfläche hochgeladenen Dateien. Wie ich bereits beim letzten Versuch merken musste, ist Kolab bezüglich Importen allerdings strikter als Google und Owncloud. Ausserdem setzen Google und Kolab Gruppen für Kontakte anders um, so dass die Gruppen der Kontakte im Moment nicht ohne weiteres übertragen werden können. Grundsätzlich würde ich aber allen empfehlen, den Import über die Weboberfläche von Kolab einfach mal auszuprobieren.

Vermutlich werden auf absehbare Zeit aber nicht alle mit dem erzielten Resultat zufrieden sein. Deshalb beschreibe ich unten, was ich vor dem Import mit den Daten gemacht habe.

Für den Import habe ich das E-Mail-Programm Thunderbird mit dem Lightning Add-On gemäss der Anleitung für KolabNow eingerichtet.

Foto einer Rohrleitung, die ein Tal überbrückt
Fotografiert von Fred Viljoen, gemeinfreies Werk (CC0)

Kalender

Ich habe vor dem Import in der heruntergeladenen .ics-Datei meines Kalenders mit Notepad++ die folgenden Ersetzungen (reguläre Ausdrücke) vorgenommen:

1️⃣ Teilnehmerinfos auf jeweils eine Zeile bringen für die folgenden Ersetzungen :

^ATTENDEE;(.*)\r\n (.*)$

durch

ATTENDEE;\1\2

2️⃣ In den Teilnehmerinformationen meine bisherigen E-Mail-Adressen durch die KolabNow-Adresse ersetzen, damit Kolab erkennt, dass ich von den Terminen betroffen bin bzw. war:

;CN=(Oliver Waddell|email1@waddell.ch|email2@gmail.com|email3@domain.ch);X-NUM-GUESTS=0:mailto:(email1@waddell.ch|email2@gmail.com|email3@domain.ch)$

durch

;CN=Oliver Waddell;X-NUM-GUESTS=0:mailto:email4@kolabnow.com

3️⃣ In der Organizer-Info meine KolabNow-Adresse hinterlegen, damit der Termin von Kolab als eigener betrachtet wird und geändert werden kann:

^ORGANIZER;CN=(Oliver Waddell|email1@waddell.ch|email2@gmail.com|email3@domain.ch):mailto:(email1@waddell.ch|email2@gmail.com|email3@domain.ch)$

durch

ORGANIZER;CN=Oliver Waddell:mailto:email4@kolabnow.com

Anschliessend habe ich die Datei mit Thunderbird/Lightning auf den KolabNow-Server geladen. Ein kleiner Teil der Termine wurde nicht importiert, davon einer in der Zukunft. Welche genau nicht importiert werden konnten, liess sich in der Error Console überprüfen. Den nicht importierten zukünftigen Termin konnte ich per Copy & Paste im Thunderbird-Kalender übernehmen. Die anderen habe ich ignoriert.

E-Mail

Um mich nicht wieder mit Fehlern in den Headern meiner alten E-Mails beschäftigen zu müssen, habe ich sie jetzt aufgeteilt: Die vom aktuellen Jahr habe ich mit Thunderbird auf den KolabNow-Server verschoben, alle älteren habe ich mit Thunderbird in den E-Mail-Server auf meinem NAS verschoben. Emails fast aller meiner bisherigen E-Mail-Adressen lasse ich auf meine neue Adresse forwarden. Beim Antworten über die Weboberfläche steht als Absender meine KolabNow-Adresse.

Kontakte

Ich habe relativ viele Kontakte, die ich in Gruppen organisiert habe. Einige davon haben ein Foto. Einige haben mehr als drei hinterlegte E-Mailadressen. Um alle diese Infos behalten zu können, bin ich wie folgt vorgegangen:

1️⃣ Übernahme der Kontakte in das Adressbuch von macOS mit Synctastic bzw. Contacts Sync for Google Gmail (die Apps sind funktional identisch)

2️⃣ Export der Kontakte im VCard-Format (.vcf)

3️⃣ Bereinigen der E-Mail-Adressen und URLs meiner Kontakte in Notepad++, wobei dessen Funktion «Find All in Current Document» (nach dem regulären Ausdruck ^EMAIL;) eine grosse Hilfe war. Kolab importiert nur Kontakte, bei denen alle E-Mail-Adressen und URLs valide sind, in einem Fall wurde sogar ein Kontakt mit einer funktionierenden URL der Form domain.ch/#/#seite nicht importiert. In meinen Kontakten hatte ich einige Lotus Notes-Adressen gespeichert, anderswo waren Leerzeichen, ein Komma oder der E-Mail-Adresse vorangestellte Namen (Form \"Name\" <name@domain.ch>) das Problem.

4️⃣ Import über den Webclient von KolabNow

5️⃣ Vergleich der Anzahl Kontakte in den Gruppen, um zu überprüfen, ob tatsächlich alle importiert wurden

Erfahrungen

😀

  • Alles kann (mit etwas Vor- und Nacharbeit) ohne Verluste übertragen werden.
  • Die Synchronisation zwischen iPhone und dem KolabNow-Server klappt mit den Einstellungen in der guten Anleitung von KolabNow problemlos über CalDAV und CardDAV. Als Kalender-App verwende ich Timepage und bin sehr zufrieden damit (die vorinstallierte Kalender-App von Apple funktioniert auch).
  • Die Weboberfläche (die auf Roundcube basiert) ist sehr gut bedienbar.

😐

  • Im Moment unterstützt KolabNow keine Zwei-Faktor-Authentifizierung (2FA), in der FAQ steht dazu «We currently do not have 2FA (Two Factor Authentication) as we are yet to find a suitably secure solution to offer our customers, however it is on our roadmap.»
  • Die Suche nach Kontakten im Webclient ist mit teilweise mehr als fünf Sekunden Reaktionszeit langsam. Die Suche in meinen (wenigen) Emails ist viel schneller.
  • Mit Thunderbird und dem SOGo Connector funktioniert das Aktualisieren von Kontakten nicht immer, selten erhalte ich sogar einen Serverfehler 500.
  • Mit Gnome (Fedora Workstation 25) lässt sich das E-Mail-Konto nicht unter den GNOME Onlinekonten einrichten, die Einrichtung funktioniert aber direkt in Evolution.
  • In den Clients erscheinen aktuell auch die IMAP-Ordner mit den Kalender- und Kontaktdaten, obwohl die darin enthaltenen Daten in der Form nicht richtig nützlich sind. Das wird sich aber mit dem Rollout von guam, einem IMAP Proxy, der aktuell in einer öffentlichen Beta-Phase getestet wird und diese Ordner herausfiltern kann, hoffentlich bald ändern.

Meine (vorläufig) gescheiterte Migration zu mykolab.com

Update vom 26.03.2014:

MyKolab hat sich bereits gestern Abend und nochmals heute Morgen mit einer Reihe von Vorschlägen bei mir gemeldet, wie die beschriebenen Probleme behoben werden bzw. behoben werden können. Auch Rick Sanders hat gleich zurückgeschrieben, dass er in seinen IMAP tools die bereits bestehende Korrektur nicht Standard-konformer Datumsformate noch weiter verbessern wird. Schön!

Die Gründe

Ich habe versucht, mit meinen Emails und Kontakten und Kalendern, von Cyon zu MyKolab zu zügeln. Die Gründe dafür in Kürze:

  • Schon seit einiger Zeit hat die Computerzeitschrift c’t immer wieder darauf hingewiesen, wie vorbildlich das Groupware-Angebot von MyKolab betrieben wird[1]. Im neuesten c’t Wissen zum Thema «Sichere Email» haben die Heise-Redakteure dann auch noch eine Aktion mit mykolab.com arrangiert, dank der Leser im ersten Jahr 30% der Kosten für das Angebot sparen.
  • Ende Januar 2014 habe ich bei meinem Host cyon.ch Daten verloren, weil ich beim Update meiner ownCloud-Installation (die Cyon ohnehin nicht gerne auf ihren Double-Hostings hat) der Dokumentation gefolgt bin, ohne das Resultat der einzelnen Befehle vorher zu überprüfen[2]. Den angekündigten Restore konnte das Unternehmen dann leider nicht vornehmen, weil es gerade ein Problem mit dem Storage gab[3].
  • Der Betrieb von ownCloud ist auf meinem Hosting nicht so pflegeleicht, wie ich ihn mir wünsche, weil die mit ownCloud 6 eingeführte Updatefunktion direkt per Browser bei mir nicht funktioniert.
  • Die Usability des ownCloud 6-Webclients überzeugt mich nicht ganz und die Synchronisation meiner Kontakte zwischen ownCloud und meinem OS X-Adressbuch hat leider nie ganz zufriedenstellend funktioniert, vor allem weil meine Gruppen von ownCloud weder beim direkten Import noch bei beim Kopieren via CardDAV übernommen wurden.
  • Naoki Hiroshima empfiehlt in seinem lesenswerten Artikel «How I Lost My $50,000 Twitter Username», für wichtige Logins und Kontaktadressen von wichtigen Internetdiensten keine Emailadressen unter einer persönlichen Domain zu verwenden, weil es schnell passieren kann, dass man die Kontrolle über seine eigenen Domains verliert.

Kurz: Ich hoste meine Kontakte und Kalender auf einer ownCloud-Installation, die mein Hosting-Provider nur auf Zusehen hin duldet, habe nicht mehr ganz so viel Vertrauen in die Backup-Strategie meines Hosts, bin nicht ganz zufrieden mit dem Webclient von ownCloud, auch weil ich die Updates selber via SSH einspielen muss und konnte relativ günstig ein Angebot testen[4], das mit den besten Empfehlungen kommt.

Die Schritte

  1. Ein Konto anlegen, entweder via das Angebot von c’t Wissen oder regulär unter https://cockpit.mykolab.com/signup/.
  2. Kontakte: OS X-Adressbuch im vCard-Format exportieren und in der MyKolab-Weboberfläche für die Kontaktverwaltung importieren. Das funktionierte fast einwandfrei, alle Gruppen wurden erstellt. Eine kleine Anzahl von Kontakten wurden ohne Fehlermeldung oder Angabe von Gründen nicht importiert. Diese habe ich von Hand direkt via CardDAV aus Address Book auf den MyKolab-Server kopiert und manuell den jeweiligen Gruppen hinzugefügt.
  3. Kalender in der ownCloud-Weboberfläche exportieren und in der MyKolab-Weboberfläche importieren. Hier muss man aufpassen, den gewünschten Zeitraum für den Export auszuwählen.
  4. Emails: Entweder eine professionelle Dienstleisterin beauftragen, vgl. https://mykolab.com/de/moving oder die beiden Konten in einem Email-Client einrichten und die Nachrichten kopieren (Erfolg nicht ganz einfach nachvollziehbar) oder (interessanter): Um meine knapp 45000 Emails vom Cyon- auf den MyKolab-IMAP-Server zu übertragen, habe ich die IMAP Tools von Rick Sanders verwendet[5], die mir auch schon in der Vergangenheit bei Umzügen gute Dienste geleistet haben. Die Tools kosten inzwischen knapp USD 50 mit lebenslangen Updates. Für die Migration zwischen zwei IMAP-Servern bieten sich eigentlich die Scripts imapcopy.pl (für einzelne Konten) und migrateIMAP.pl (für mehrere Konten) an. Diese unterstützen auch SSL (ohne verschlüsselte Verbindung erreicht man die MyKolab-Server nicht). Dieser Kopiervorgang brach bei mir aber ab. Grund: Kolab verwendet für IMAP den Cyrus IMAP-Server[6]. Dieser Server ist bezüglich den Email-Headern, die er akzeptiert sehr strikt/RFC-konform[7]. Hier mein Workaround:
    • Mit dem Script imap_to_maildir.pl habe ich meine Cyon-Mails in eine Maildir-Struktur heruntergeladen (und gleich noch ein Backup davon angefertigt).
    • Auf dieses Verzeichnis habe ich das Script von Rene Mayrhofer angewendet, das er unter https://www.mayrhofer.eu.org/importing-into-cyrus-spool veröffentlicht hat. Achtung: Damit dieses Script funktioniert, muss der Pfad des Maildir-Ordners für den ausführenden User ~/Maildir sein. Ausserdem muss das unter OS X standardmässig nicht installierte Tool md5sum installiert sein, verschiedene Möglichkeiten dafür finden sich unter http://raamdev.com/2008/howto-install-md5sum-sha1sum-on-mac-os-x/, ich habe das Paket coreutils mit Homebrew installiert (nicht vergessen, die PATH-Variable oder das Script anzupassen).
    • An dieser Stelle scheitert maildir_to_imap.pl nach längerer Zeit mit dem folgenden Fehler[8]:
      >> 1 APPEND "Archive" (\Seen) "15-Jan-2002 13:49:13 GMT" {42319}
      << 1 BAD Invalid date-time in Append command
      unexpected APPEND response: >1 BAD Invalid date-time in Append command<
      >> 1 APPEND "Archive" (\Seen) "15-Jan-2002 08:07:36 +0100" {1419}

      Der Versuch des Scripts, weitere Mails zu kopieren, scheiterte nach einer halben Stunde mit einem Timeout der IMAP-Verbindung zum Server.

Warum es beim Versuch blieb

  • Ich konnte die Mailmigration nicht erfolgreich abschliessen und die Mails, die kopiert wurden, waren beschädigt, d.h. der MyKolab-Webmailer Roundcube zählte den Mail-Body zu den Header-Daten.
  • Per ActiveSync wurden meine Kontakte-Gruppen nicht auf mein Nexus 7 (2013) synchronisiert. Per CardDAV mit CardDAV-Sync (Version 0.4.5) auch nicht.[9]
  • Die Geburtstage meiner Kontakte wurden in der Weboberfläche von MyKolab richtig angezeigt, aber mit CardDAV-Sync nicht richtig synchronisiert, die Kontakte-App von Android und mein iCal-Geburtstagskalender zeigten mir jeweils den Tag vor dem eigentlichen Geburtsdatum als Geburtsdatum an.
  • Termine aus ownCloud, zu denen ich andere eingeladen habe, wurden von MyKolab als Termine einer Drittperson interpretiert, die ich nicht ohne weiteres ändern konnte.
  • Ich will meine Daten selber zügeln können und misstraue Diensten wie Audriga grundsätzlich, weil ich nicht überprüfen kann, was genau mit meinen Daten passiert.

  1. Vgl. z. B. http://heise.de/-2098281.
  2. Das Problem war ein Alias, mit dem Cyon das Standardverhalten von ls verändert, vgl. https://github.com/owncloud/documentation/pull/251.
  3. Cyon erstellt zwar grundsätzlich Backups, macht aber in den AGB klar, dass «[d]er Kunde ist für die Sicherung seiner Daten selbst verantwortlich» ist.
  4. Ich glaube in den ersten zwei Wochen bekäme man ausserdem sein Geld zurück, wenn einem das Angebot nicht überzeugt.
  5. Vgl. für eine detaillierte Beschreibung die Dokumentation der Tools unter http://www.athensfbc.com/imap-tools/IMAP_Tools_User_Guide.pdf.
  6. Vgl. http://wiki.kolab.org/Server_component_Cyrus-Imapd.
  7. Vgl. http://cyrusimap.web.cmu.edu/mediawiki/index.php/Cyrus_Interoperability.
  8. Dieses Problem hatten andere schon 2008, vgl. http://lists.andrew.cmu.edu/pipermail/info-cyrus/2008-September/029805.html. Ich bin deshalb zuversichtlich, dass es eine Lösung dafür gibt. Ich habe sie aber noch nicht gefunden.
  9. Aus Neugier habe ich die Kontakte von MyKolab exportiert und unter ownCloud importiert, da funktionierte der Import der Gruppen. Diese wurden mit CardDAV-Sync dann auch korrekt auf mein Nexus 7 übertragen.

Mein Schreib-Workflow (Software)

Ich schreibe meine Lizentiatsarbeit in der hervorragenden Schreibumgebung Scrivener unter OS X.

Um die Arbeit zu setzen, etwa um sie jemandem als PDF zu schicken, bietet Scrivener die Möglichkeit, das Geschriebene im MultiMarkdownFormat zu exportieren, bzw. aus diesem gleich Code für das Satzsystem LaTeX zu generieren.

Genauer exportiere ich aus Scrivener nur den Text mit Markup, den ich in ein XeLaTeX-Rahmendokument einbinde, das die Gestaltung, den Zitierstil und einiges mehr regelt.

Aus der Literaturverwaltung Zotero exportiere ich die bibliografischen Daten für die Arbeit im BibTeX-Format. Auf diese Datei greift wiederum XeLaTeX über das biblatex-Paket zu (als Zitierstil verwende ich authortitle-dw aus dem Paket biblatex-dw).

Zum Entfernen von Ligaturen über Morphemgrenzen hinweg (siehe dazu den Artikel von Wikipedia zu Ligaturen) verwende ich das Perl-Programm rmligs. Alternativ ginge dies auch mit der Java-Anwendung DeLig (die teilweise auf rmligs basiert). Die Software Excalibur, die das eigentlich auch könnte, kann in der aktuellen Version 4.0.7 nicht mit UTF-8 umgehen.

Um die Gross- und Kleinschreibung der Abkürzungen «ebd.» und «ders.» richtig hinzukriegen (siehe den Thread zu diesem Problem, insbesondere die Antwort von Philipp Lehman) lasse ich noch einige reguläre Ausdrücke mit Perl über das von MultiMarkdown generierte Dokument laufen.

So sieht das Shell-Script am Ende aus:

#! /bin/sh
# usage: pimptex [Document.tex]

# Reine Zitat-Fussnoten in Footcite-Kommandos umwandeln
perl -p -i -e 's/\\footnote\{\\cite(\[[\S]*\]){0,1}(\{\S+\}){1}[\.]{0,1}\}/\\footcite$1$2/g' "$1"

# Zitate am Anfang von Fussnoten mit zusätzlichem Text grossschreiben
perl -p -i -e 's/(?<=\\footnote\{)\s*\\cite(\{|\[)/\\Cite$1/g' "$1"

# Zitate nach den Interpunktionszeichen «.;:!?» grossschreiben
perl -p -i -e 's/(?

# Anführungs- und Schlusszeichen
perl -p -i -e 's/«/\\enquote\{/g' "$1"
perl -p -i -e 's/»/\}/g' "$1"

# Halbgeviert- statt Geviert-Strich
perl -p -i -e 's/[-]{3}/\-\-/g' "$1"

# Bis-Strich
perl -p -i -e 's/([\d]+)\-([\d]+)/$1\-\-$2/g' "$1"

# Seitenverweise korrigieren
perl -p -i -e 's/(Seite|S\.)[\s]+\$\\backslash\$pageref\\\{([\S]+)\\\}/$1\ \\pageref\{$2\}/g' "$1"

# Ligaturen
rmligs "$1"

# Zeilen mit doppelten Wörtern anzeigen
egrep -i '\<([a-z]+) +\1\>' "$1"

Was fehlt noch?
Optimierung der regulären Ausdrücke, z. B. «Footciting» und Bis-Strich von römischen Seitenzahlen und Seitenbereichen, Gross- und Kleinschreibung von «Ebd.» und «Ders.» nach vollständigen Sätzen innerhalb von Anführungs- und Schlusszeichen, bessere Erkennung von Wortwiederholungen und verbesserte Performance.

Was bisher geschah…

Auf die Frage, was ich an der Uni gerade mache, antworte ich schon länger, dass ich an der Lizentiatsarbeit sei. Das stimmt auch. Die ersten Besprechungen fanden schon letztes Jahr statt. Es wird eine Unternehmensgeschichte werden. Der erste Kontakt mit dem Unternehmen und seinen Akten fand Anfang März statt.
Seit bald drei Wochen bin ich nun exklusiv an meiner Liz-Arbeit. Das heisst, dass ich nichts mehr anderes für die Uni mache.
Was habe ich in dieser Zeit für mein Liz getan?:

  • Gelesen, etwa
    • Berghoff, H.: Moderne Unternehmensgeschichte. Eine themen- und theorieorientierte Einführung. Paderborn: UTB, 2004. (ISBN 382522483X)
    • Pierenkemper, T.: Unternehmensgeschichte. Eine Einführung in ihre Methoden und Ergebnisse, Grundzüge der modernen Wirtschaftsgeschichte. Stuttgart : Franz Steiner, 2000. (ISBN 9783515076746)
  • über eine systematische Ordnung der Akten nachgedacht
  • die Themensuche im Rahmen einer Besprechung mit meiner betreuenden Professorin eingegrenzt
  • diesen Blog als Arbietsjournal eingerichtet

und sonst?:

  • Die Browser-Erweiterung libX für die Literatursuche in swissbib.ch angepasst (→mehr…)
  • eine Wohnung gefunden. Meine Freundin und ich ziehen zusammen. Mitte August ist Umzugstermin. (Konto eröffnet, angefangen den Umzug vorzubereiten, ungezählte Formulare unterschrieben, …)

Was steht an? Umberto Eco unterscheidet in seinem Leitfaden Wie man eine wissenschaftliche Abschlussarbeit schreibt. Doktor-, Diplom- und Magisterarbeit in den Geistes- und Sozialwissenschaften, grob die folgenden Phasen von Abschlussarbeiten:

  • Wahl des Themas
  • Materialsuche
  • Lektüre
  • Schreiben
  • Schlussredaktion

Ich befinde mich einerseits noch in der Phase der stärkeren Eingrenzung des Themas und Isolierung der Fragestellung und andererseits noch bei der Materialsuche für die Grundlagen einer Unternehmensgeschichte. Während mein Quellenkorpus mit Firmenmaterial bereits weitgehend zusammengetragen ist (allerdings sind Interviews geplant, die ich noch nicht vorbereitet habe), habe ich noch wenig Literatur zusammen, mit welcher sich das Material erschliessen lässt.