Skip to content

Kopano-Mailmigration

Die nachfolgenden Schritte beschreiben, wie Daten aus Kopano exportiert und in die IServ Schulplattform importiert werden können. Dies betrifft konkret:

  • E-Mail
  • Kalender

Voraussetzungen

  • Dieses Migrationsskript funktioniert aktuell ausschließlich für die LogoDIDACT 4.0 Instanzen, eine Dokumentation für die Umstellung von LogoDIDACT 2.0 Instanzen, wird folgen.
  • Zur Migrationsdurchführung müssen zusätzliche Tools auf dem LogoDIDACT installiert werden, sollte sich eine LD-Instanz im End of Life befinden und somit keine Installationen zulassen, melden Sie sich bei info@sbe.de

  • Vor dem Export muss eine externe Festplatte oder ein sonstiger Speicherort am ldhost angeschlossen und eingehängt werden. Aufgrund der einfachen Handhabung geht die Dokumentation im Folgenden davon aus, dass eine externe USB-Festplatte mit einem ext4 Linux-Dateisystem und dem Label "USB-Backup" verwendet wird. Eine Sicherung auf ein anderes Medium ist ebenfalls möglich.

  • Die Mailmigration wird in zwei Teilen gemacht: 2-3 Tage vor dem Umstellungstermin wird der erstmalige Export angestoßen. Am Tag der Umstellung wird der selbe Export erneut gestartet, hier erfolgt ein finaler Abgleich.

LogoDIDACT Postfach-Export vorbereiten

Zur Durchführung des Postfach-Datenexports werden verschiedene Tools und ergänzende Ubuntu-Pakete im LXC-Container kopano-g2 installiert. Auch im Konfigurationssystem puppeteer-g3 sind Einstellungen per YAML-Konfigurationsdatei festzulegen. Damit wird einleitend begonnen, eine SSH-Verbindung zum LogoDIDACT Server herzustellen und die nachfolgenden Konfigurationsabschnitte im Puppeteer hinzugefügt.

ldhost
ssh puppeteer-g3
  1. Vorhandene Datei /etc/logodidact/hiera/custom.d/kopano-g2.yaml mit einem Texteditor bearbeiten
  2. Zusätzliche Einstellungen zur YAML-Datei hinzufügen und die sonstigen, bereits vorhandenen Einstellungen unberührt lassen.
/etc/logodidact/hiera/custom.d/kopano-g2.yaml
# Restrict access to additional IMAP service to 'local' firewall zone
profile::network:
  interface:
    servernet:
      firewall:
        rules:
          01_IMAP-BYPASSAUTH: {source: loc, proto: tcp, dport: 8143}
          02_IMAP-BYPASSAUTH: {source: srv, proto: tcp, dport: 8143, action: DROP}
          03_IMAPS-BYPASSAUTH: {source: loc, proto: tcp, dport: 8993}
          04_IMAPS-BYPASSAUTH: {source: srv, proto: tcp, dport: 8993, action: DROP}
          05_POP3-BYPASSAUTH: {source: loc, proto: tcp, dport: 8110}
          06_POP3-BYPASSAUTH: {source: srv, proto: tcp, dport: 8110, action: DROP}
          07_POP3S-BYPASSAUTH: {source: loc, proto: tcp, dport: 8995}
          08_POP3S-BYPASSAUTH: {source: srv, proto: tcp, dport: 8995, action: DROP}

ld_kopano::openldap:
   headers:
      # Map extra user properties from the propmap file (LDAP employeeNumber -> Kopano "department" field)
      - '!propmap /etc/kopano/openldap.propmap.cfg'
   settings:
      ldap_fullname_attribute: uid

Hier wird eine Anpassung der OpenLDAP Attributsfelder vorgenommen, damit in den Kopano-Konten neben der Mailadresse auch der normale Linux-Accountname sowie die Unique-ID als Benutzereigenschaften zur Verfügung stehen. Außerdem wird ein zusätzlicher IMAP-Dienst am Server eingerichtet, der User-Postfächer an der Shell (ohne Angabe der einzelnen Benutzer-Kennwörter) exportierbar macht. Die obigen Firewall-Einstellungen begrenzen die Erreichbarkeit auf die lokale Zone (loopback Device).

Die Änderungen wie üblich unterhalb des Verzeichnis /etc/logodidact/ ins GIT speichern.

puppeteer-g3
1
2
3
cd /etc/logodidact/
git commit -a -m "kopano-g2: Firewall-Einstellungen und Kopano UserAttribut-Mapping für Postfach-Export hinzugefügt"
logout

Zurück im ldhost muss der LXC-Container kopano-g2 kurzzeitig angehalten werden. Dies dient dem Zweck, die Backup-Festplatte einzuhängen und im Namespace des LXCs verfügbar zu machen.

ldhost
systemctl stop lxc@kopano-g2; lxc-stop -n kopano-g2

ACHTUNG

Das Label oder der Pfad zur Backup-Partition muss auf Ihre Gegebenheiten angepasst werden.

ldhost
1
2
3
mount LABEL=USB-BACKUP /var/backups/lxc/kopano-g2
touch /var/backups/lxc/kopano-g2/.bind-mount
systemctl start lxc@kopano-g2

Anschließend in den LXC-Container kopano-g2 wechseln und die Änderungen per prun anwenden.

ldhost
ssh kopano-g2
kopano-g2
touch /etc/kopano/openldap.propmap.cfg
prun

Nun erfolgt die Installation der zusätzlich benötigten Tools, die für den Export verwendet werden:

Info

Um den manuellen Aufwand zu reduzieren, steht hierzu ein Shell-Skript zur Verfügung, welches im Container heruntergeladen werden kann.

kopano-g2
1
2
3
mkdir -p /backup/ld-kopano-stores /root/migration
wget https://files.sbe.de/kopano/migration/latest/task1_setup-tools.sh -O /root/migration/task1_setup-tools.sh
chmod +x /root/migration/task1_setup-tools.sh

Innerhalb des Skriptes sind nun verschiedene Optionen wählbar. Diese können entweder einzeln oder gesammelt mit dem Parameter --all aufgerufen werden. Das Skript läuft diese Schritte automatisch ab, einzelne Schritte können jedoch über den genannten Weg wiederholt werden.

alt text


Nun wird die Installation angestoßen, bitte die Konsolenausgabe beachten.

kopano-g2
/root/migration/task1_setup-tools.sh --all

Neben der Installation von Paketen finden durch das Setup-Skript einige weitere Schritte automatisch statt. Es werden auch zusätzliche Migrationsskripte ins Verzeichnis /opt/export-tools/ entpackt, um den Vorgang zu vereinfachen. Ein gewisser Komplexitätsgrad bleibt beim Übertragen von E-Mail-Postfächern dennoch übrig, es muss in jedem Fall sehr sorgfältig gearbeitet werden. Durch das Entpacken weiterer Tools nach /opt/export-tools/ ist es möglich, Aktionen darin durch Feedback zu verbessern.

Der letzte Schritt 6 weist nach der Ausführung darauf hin, dass YAML-Einstellungen im puppeteer-g3 festgelegt werden müssen. Dies ist bereits geschehen, wenn man dieser Anleitung gefolgt ist. Daher muss lediglich noch der hinzugefügte systemd-Service kopano-gateway-bypassauth.service gestartet werden, um die Ergänzungen im Mail-Container abzuschließen.

kopano-g2
systemctl start kopano-gateway-bypassauth.service
systemctl status kopano-gateway-bypassauth.service

Sofern der Dienst nun als aktiv gekennzeichnet wird, sind die Vorbereitungen abgeschlossen und der eigentliche Export kann gestartet werden.


1. Ausführen des ersten Exportes

Info

Zur Durchführung des IMAP-Exportes wird ein weiteres, eigenständiges Shell-Skript task2_export-kopano-stores.sh zur Verfügung gestellt, um einen Teil der Aufgaben zu automatisieren. Es empfiehlt sich, diese in einer Screen-Sitzung auszuführen, um ungewollte Abbrüche zu verhindern.

Dies soll den Export vereinfachen, es ist davon auszugehen, dass der Postfach-Export viele Stunden zur Abarbeitung benötigt und das Shell-Skript soll hierbei unterstützen, damit diese Aktionen im Hintergrund, ohne weitere manuelle Eingriffe, stattfinden können.

ldhost
screen -S mbox_export
ssh kopano-g2
kopano-g2
1
2
3
4
[ -d ~/migration ] || mkdir ~/migration
cd ~/migration
wget https://files.sbe.de/kopano/migration/latest/task2_export-kopano-stores.sh -O /root/migration/task2_export-kopano-stores.sh
chmod +x /root/migration/task2_export-kopano-stores.sh

Analog zum Setup Skript aus dem vorherigen Schritt, liefert auch das Export-Skript verschiedene Parameter mit, um einzelne Schritt gezielt auszuführen:

alt text


1.1 Übersicht der einzelnen Schalter

--step1

Erstellt bzw. erneuert ein Komplettbackup der gesamten Kopano-Installation in einem proprietären Kopano-Datenbankformat (MAPI-Objekte im Binärformat). Diese Daten sind ausschließlich als Fallback gedacht und werden nicht für die Migration nach IServ verwendet. Das Backup wird in einem Berkeley-DB-Format gespeichert und benötigt entsprechenden Speicherplatz.


--step2

Erstellt eine Kopano-Benutzerliste als kopano.userlist.csv (mit Kopano-Name, Linux-Account, IServ-Account). Grundlage für alle weiteren Exporte und das spätere Mapping nach IServ.


--step3

Erzeugt auf Basis der kopano.userlist.csv Konfigurationsdateien für die Export-Tools (z. B. offlineimap/vdirsyncer). Muss erneut ausgeführt werden, wenn sich die kopano.userlist.csv geändert hat.


--step4 (Kalender)

Exportiert bzw. aktualisiert die Kalenderdaten (ICS-Dateien) der Benutzer auf der Backup-Festplatte.


--step5 (Kontakte)

Exportiert bzw. aktualisiert die Kontaktdaten (VCF-Dateien) der Benutzer auf der Backup-Festplatte.


--step6

Erzeugt oder aktualisiert weitere Konfigurationsdateien für die verwendeten Tools (Import/Export), ebenfalls auf Basis der aktuellen kopano.userlist.csv. Nach Änderungen an der CSV erneut ausführen.


--step7

Exportiert bzw. aktualisiert die E-Mail-Nachrichten (Maildir-Struktur) der Benutzer auf der Backup-Festplatte.


Besonderer Hinweis!

In Kombination mit --use-imapsync können Mails direkt von Kopano zu IServ synchronisiert werden (Echtzeit, ohne Zwischenspeicher). Beide Systeme müssen parallel laufen und sich per Netzwerk erreichen!

--step8

Erstellt zusätzliche Metadaten, z. B. die Datei kopano.userlist-extra.yaml mit Alias-Adressen und Verteilerlisten („Distribution Lists“). Hilfreich, um Aliasse und Verteiler später in IServ manuell nachzubilden.


1.2 Funktionsweise von task2_export-kopano-stores.sh

Das Shell-Skript verwendet für den E-Mail-Nachrichtenexport das IMAP-Tool offlineimap3. Es ist so aufgebaut, dass es mehrfach aufgerufen werden kann, um nachträglich neue Nachrichten (differenziell) zu synchronisieren.

Bei sehr großen E-Mail-Postfächern kann der Export entsprechende Zeit in Anspruch nehmen. offlineimap3 ermöglicht zwar das parallele Exportieren mehrerer Postfächer (Threads), das Exportieren eines einzelnen großen Postfachs kann trotzdem mehrere Stunden in Anspruch nehmen.

Daher ist es empfehlenswert, den Export der IMAP-Postfächer bereits einige Tage vor dem vereinbarten Migrationstermin zu starten und zum eigentlichen Migrationstermin nur noch die zwischenzeitlich neu eingegangenen Nachrichten nachzusynchronisieren.


Dem Hilfetext des Skripts ist außerdem zu entnehmen, dass vor dem Nachrichtenexport weitere Schritte ausgeführt werden, z. B.:

  • Export von Kalenderobjekten
  • Export von Kontaktobjekten

Diese Exporte erfolgen über das Tool kopano-rfcdump.py in den Schritten 4 und 5. Sie sind bewusst vorgezogen, da sie im Vergleich zum Nachrichtenexport deutlich schneller ablaufen.

1.3 Konfigurationsdatei für task_export-kopano-stores.sh

Das Skript task2_export-kopano-stores.sh benötigt zwingend eine individuelle Konfigurationsdatei. Darin werden unter anderem folgende Angaben hinterlegt:

  • Pfade für den Datenexport auf die bereits eingehängte Backup-Festplatte.
  • ein LogoDIDACT-Admin (für den Export),
  • ein IServ-Admin (für den späteren Import).

Wichtig

Diese Admin-Konten sind keine generischen Accounts; sie müssen über die nötigen Rechte verfügen, um auf alle Postfächer zugreifen zu können.

Die Konfigurationsdatei sollte im gleichen Verzeichnis liegen wie das Skript, also im Ordner /root/migration/ im LXC-Container kopano-g2. Der Dateiname sollte kopano_backup.config lauten, wie in der dazugehörigen Abbildung gezeigt.

Solange diese Konfigurationsdatei nicht existiert, bricht das Skript beim Start mit einem Fehler ab und gibt Beispielzeilen für eine Konfiguration auf der Konsole aus. Diese Beispielzeilen können kopiert, mit sinnvollen Werten ergänzt und dann als kopano_backup.config gespeichert werden.

Im unteren Bereich der Konfigurationsdatei werden die Zugangsdaten für den LogoDIDACT-Admin und den IServ-Admin eingetragen.

Die konkrete Vergabe der notwendigen Rechte für den IServ-Admin wird später in der Anleitung beschrieben. Für den Export der Postfachdaten unter LogoDIDACT sind jedoch bereits jetzt die korrekten Rechte des LogoDIDACT-Admins entscheidend.

alt text


1.4 Kopano-Adminrechte des LogoDIDACT-Admins prüfen und setzen

Ob der LogoDIDACT-Admin die benötigten Kopano-Adminrechte besitzt, kann im LXC-Container mit dem Kommandozeilen-Tool kopano-admin geprüft werden.

kopano-g2
1
2
3
kopano-admin --sync

kopano-admin --details [mailadresse-des-admin]

(häufig admin@schule.local oder admin@maildomain-der-schule.de)


In der Ausgabe muss ersichtlich sein, dass der betreffende Benutzer Kopano-Administrator ist:

alt text

1.5 Nachträglichen Kopano-Admin einrichten

Wichtig

Dieser Schritt muss lediglich dann erfolgen, wenn keine Administratorberechtigungen gelistet sind.

  • Im Browser am LD Control Center als admin anmelden.
  • Bereich „Benutzerverwaltung“ öffnen.
  • Im linken Menü „Verwaltung → Benutzer“ wählen.
  • In der Tabelle das admin-Konto suchen, markieren und per Doppelklick bearbeiten.
  • Das Konto als „Kopano-Administrator“ festlegen und speichern.

Diese Rolle ist Voraussetzung, bevor das Skript task2_export-kopano-stores.sh für Exportvorgänge verwendet werden kann.

alt text


1.6 Erster vollständiger Export aller Kopano-Postfächer

Sind Konfigurationsdatei und Rechte korrekt eingerichtet, kann der erste vollständige Export gestartet werden. Um alle Kopano-Benutzer zu exportieren, wird das Skript mit dem Schalter --all aufgerufen.

Gefährlich

Um ungewollte Abbrüche zu verhindern, sollte das Skript in einer Screen-Sitzung gestartet werden!

1.7 Skript ausführen

kopano-g2
./task2_export-kopano-stores.sh -c /root/migration/kopano_backup.config --all

Nach erfolgreichem Durchlauf befinden sich die exportierten Daten im Verzeichnis /backup/ld-kopano-stores/ (wie in der Konfiguration angegeben).

Die Exportstruktur ist typischerweise:

  • mailboxes/ – E-Mail-Nachrichten im Maildir-Format
  • calendars/ – Kalenderdaten im ICS-Format (*.ics)
  • contacts/ – Kontakte im vCard-Format (*.vcf)

Zur Zuordnung der Inhalte sind jeweils Unterordner pro Kopano-Benutzer vorhanden, und zwar sowohl unter mailboxes/ als auch unter calendars/ und contacts/

alt text

Im Rahmen von Schritt --step8 legt das Skript zusätzlich die Datei kopano.userlist-extra.yaml auf der Backup-Festplatte ab.

Diese Datei enthält:

  • Informationen zu E-Mail-Aliasadressen,

  • Informationen zu Kopano-Verteilergruppen (Distribution Lists).

Diese Informationen sind hilfreich, zum Beispiel wenn:

  • Benutzer in IServ wieder mit Mail-Aliasadressen ausgestattet werden sollen,

  • Verteilerlisten in IServ manuell neu angelegt werden müssen.

Ein Automatismus für die Rekonstruktion von Verteilern in IServ existiert nicht, die Neuanlage kann aber über den entsprechenden Menüpunkt erfolgen (sofern das Modul "Verteilerlisten" installiert ist).

2. Weitere Exportdurchläufe (differentielle Nachsynchronisierung)

Wenn zwischen dem ersten Export und dem finalen Migrationstermin noch Zeit liegt, kann das Skript später erneut ausgeführt werden, um geänderte Daten nachzuziehen. Dabei können einzelne Schritte ausgelassen werden, die bereits erledigt wurden.

Typischer Ablauf für einen zweiten oder weiteren Export:

ldhost
1
2
3
4
5
screen -S mbox_export
ssh kopano-g2
cd ~/migration
# Hier ist nun das Export-Skript sowie die zugehörige Config bereits ableget.
# Eine kopano.userlist.csv Datei sollte ebenfalls aus dem ersten Durchlauf bereits existieren.

Hinweise

Statt einen Komplettablauf mit --all zu wiederholen, können nun gezielt einzelne Schritte des Skripts genutzt werden (z. B. --step4 für Kalender, --step5 für Kontakte, --step7 für E-Mails).

Die Neuerstellung der Kopano-Benutzerliste (Schritt --step2) ist nur notwendig, wenn seit dem ersten Export neue Benutzer auf dem LD-Server angelegt wurden. Andernfalls kann auf die bestehende kopano.userlist.csv zurückgegriffen werden.

Diese CSV-Datei kann auch im Texteditor bearbeitet werden, um Konten zu entfernen, deren Daten nicht nach IServ migriert werden sollen.

alt text


3. Abschließende Arbeiten unter LogoDIDACT zum Migrationszeitpunkt

Sobald alle Kopano-Exportdaten auf dem gewünschten Stand sind und die Umschaltung des Mailsystems bevorsteht, werden folgende Schritte durchgeführt.

Achtung

Ab diesem Zeitpunkt dürfen die Export-Tools nicht mehr verwendet werden!

3.1 SMTP-Empfang auf LogoDIDACT blockieren

In /etc/shorewall/ die Datei rules am Anfang der Regeln um eine Zeile erweitern, die externe SMTP-Verbindungen blockiert (keine neue Einlieferung von E-Mails).

ldhost
nano /etc/shorewall/rules
/etc/shorewall/rules
SMTP(DROP)       ext        $FW
ldhost
shorewall restart

3.2 Exportierte Daten an IServ anpassen

ldhost
ssh kopano-g2
kopano-g2
/opt/export-tools/kopano-folders
./migrate_mailboxes.py

Das Skript übernimmt unter anderem:

  • Umwandlung von IMAP-UTF7-Ordnernamen nach UTF-8 (wichtig für Umlaute und Sonderzeichen),
  • Umbenennung deutscher Standardordner in englische Standardordner (passend zu IServ),
  • weitere Umbenennungen, z. B. Benutzername/calendar in Benutzername/home.

Vor jeder Umbenennung werden die geplanten Aktionen angezeigt und müssen bestätigt werden. Die Änderungen werden in Logdateien unterhalb von /backup/ld-kopano-stores/logs/ protokolliert.

Nach Abschluss werden zusätzlich vorgeschlagene Kontakte mit einem weiteren Aufruf von migrate_mailboxes.py bei Bedarf gelöscht (--delete-suggested-contacts).

3.2 Ausführung

ldhost
ssh kopano-g2
kopano-g2
1
2
3
4
5
6
7
8
9
cd /opt/export-tools/kopano-folders
pipx install uv --force
alias uv='~/.local/bin/uv'
uv sync
for folder in /backup/ld-kopano-stores/mailboxes/ /backup/ld-kopano-stores/calendars/ /backup/ld-kopano-stores/contacts/; do \
  uv run migrate_mailboxes.py --dir $folder --step normalize --log-path /backup/ld-kopano-stores/logs/ ; \
  uv run migrate_mailboxes.py --dir $folder --step translate --log-path /backup/ld-kopano-stores/logs/ ; \
done
uv run migrate_mailboxes.py --dir /backup/ld-kopano-stores/contacts/ --delete-suggested-contacts --log-path /backup/ld-kopano-stores/logs/

3.3 Backup-Festplatte trennen

ldhost
systemctl stop lxc@kopano-g2; lxc-stop -n kopano-g2

Die Backup-Festplatte vom Mountpunkt /var/backups/lxc/kopano-g2 aushängen.

ldhost
umount /var/backups/lxc/kopano-g2

Danach den Kopano-LXC wieder starten oder den LD-Server herunterfahren – abhängig vom geplanten Migrationsszenario.

4. DNS-Anpassungen für den Umstieg auf IServ

Für einen reibungslosen Umstieg müssen:

  • alle bisherigen Mailadressen in IServ wieder so angelegt werden, wie sie zuvor existiert haben
  • passende Zielpostfächer für den Import der Kopano-Daten bereitstehen.

Im DNS der verwendeten Maildomäne müssen insbesondere folgende Einträge angepasst werden:

  • MX-Record (Zustellung eingehender E-Mails),
  • TXT-SPF-Record (Autorisierung der IServ-Mailrelay-Server).

4.1 Beispiel MX-Anpassung

Vorher:

meine-schul-maildomain.de MX 10 pmg.schulkennung.logoip.de

Nachher:

meine-schul-maildomain.de MX 10 iserv-hostname.xyz

meine-schul-maildomain.de MX 50 offline.iserv.eu

Wichtig

iserv-hostname.xyz muss durch den tatsächlichen IServ-Hostname der Schule ersetzt werden.

Eventuell vorhandene zusätzliche MX-Records sollten entfernt werden, sofern sie nicht mehr benötigt werden.

4.2 Beispiel SPF-Anpassung

Vorher:

meine-schul-maildomain.de TXT "v=spf1 a mx -all"

Nachher:

meine-schul-maildomain.de TXT v=spf1 a mx a:relay1.iserv.eu a:relay2.iserv.eu a:relay3.iserv.eu a:relaybs.iserv.eu ?all"

Info

Je nach TTL und DNS-Infrastruktur können die Änderungen typischerweise zwischen einer Stunde und einem Tag benötigen, bis sie weltweit wirksam sind. Die Einlieferung neuer E-Mails in die Domain ist unabhängig von den bereits migrierten Postfachdaten. Bereits importierte Nachrichten bleiben erhalten.

Weiterführende Informationen zur DNS-Konfiguration können Sie hier finden: IServ DNS Doku

5. IMAP-Import in IServ

Hinweis

Vor dem Import müssen in der IServ-Verwaltung alle Benutzerkonten angelegt sein, für die Kopano-E-Maildaten wiederhergestellt werden sollen. Ohne diese Benutzer existieren keine Zielpostfächer.

In der IServ-Dokumentation finden Sie alle Hinweise zum Importieren von Benutzern: IServ Benutzer Import

Alternativ finden Sie unter LD-User-Export (Nutzerübernahme) eine Anleitung zur Übernahme der Konten direkt aus LogoDIDACT.

5.1 IServ vorbreiten

Nun wird die Festplatte an den Server angeschlossen und im IServ gemountet - anschließend der Arbeitsordner erstellt und das offlineIMAP3-Repository geklont.

IServ
1
2
3
4
5
6
mount LABEL=USB-BACKUP -o noatime /mnt
#   Benötigte Tools installieren
apt install offlineimap python3-rfc6555 vdirsyncer git
[ -d ~/ld-kopano-mailimport/ ] || mkdir -p ~/ld-kopano-mailimport/
cd ~/ld-kopano-mailimport/
git clone https://github.com/OfflineIMAP/offlineimap3/commit/bcf2238db5ae6bbd241b05b2fb8efc1072b07193

Hinweis

Der Pfad zur Partition muss ggf. angepasst werden.

5.2 Zugriff auf IServ-Postfächer einrichten

An dieser Stelle wird ein definierter Admin-Nutzer als technisches Konto für den IMAP-Import eingerichtet.

Hinweis

ISERVADMINUSER durch den enstsprechenden Benutzer ersetzen.

IServ
1
2
3
4
5
6
sed -i -E 's/^(admins:) cyrus root/\1 ISERVADMINUSER cyrus root\ndisable_user_namespace: 1\ndisable_shared_namespace: 1/' /etc/imapd-common.conf
iconf save /etc/imapd-common.conf
systemctl restart cyrus-imapd.service
cyradm -u ISERVADMINUSER $(hostname) # Kennwort zur Anmeldung eintippen
setacl user/* ISERVADMINUSER lrswipkxtecdan
exit

5.3 Identitätsabgleich

Im eingehängten Pfad /mnt/ld-kopano-stores/ befindet sich die Datei kopano.userlist.csv mit drei Spalten:

  • Kopano-Benutzername (LogoDIDACT),
  • Linux-Accountname (LogoDIDACT),
  • IServ-Benutzername (Zielkonto).

Wir gehen im Weiteren davon aus das die IServ-Benutzernamen dem Schema vorname.nachname entsprechen. Bei Abweichungen (Lehrerkürzel, sehr lange Namen etc.) muss die Datei angepasst werden.

Alt Text


Mittels des Skriptes ld-iserv-usermapping.sh kann nun die Mapping-Datei kopano.userlist.csv verarbeitet/angepasst werden.

Wichtig

Es empfiehlt sich den Modus --check unter Angabe der CSV-Mappingdatei /mnt/ld-kopano-stores/kopano.userlist.csv. einmal auszuführen, dabei prüft das Skript ob alle IServ-Benutzernamen (aus Spalte 3) bereits angelegt sind. Sollten Benutzer fehlen, gibt das Skript einen Fehler aus und listet die Zeile des fehlenden Benutzers auf.

alt text


5.4 Beispielausgabe nach Fehlermeldung

Das nachfolgende Bild zeigt, dass der Nutzer "tte" nicht gefunden werden konnte. Es handelt sich möglicherweise um ein Lehrerkonto, welches in LogoDIDACT mittels Lehrerkürzel als Accountnamen importiert wurde und innerhalb der IServ Schulplattform unter dem Schema Vorname.Nachname angelegt wurde:

alt text

Um nun die Datenmigration zu ermöglichen, muss die Mapping-Datei bearbeitet werden um darin in der Zeile des betroffenen Benutzers (line 6) einen gültigen IServ Account in der Spalte 3 (Zielkonto) zu hinterlegen.

Dieser Vorgang wird nun wiederholt, bis --check keine Fehlermeldung mehr anzeigt, anschließend kann mittels des Parameters --patch die Korrektur überführt werden.

Hinweis

Bei Unklarheiten existiert im Backup-Pfad (/mnt/ld-kopano-stores/) eine zusätzliche YAML-Datei kopano.userlist.yaml, welche ausführliche Informationen zu den LogoDIDACT Benutzerkonten beinhaltet. Diese Datei muss nicht bearbeitet werden, sie dient ausschließlich dem Heranziehen zusätzlicher Informationen.

Sind alle Namen korrekt, wird der Modus --patch verwendet, um die Importkonfigurationen anzupassen:

Betroffene Dateien im Backupverzeichnis /mnt/ld-kopano-stores/:

  • offlineimap.iserv.mailboxes.importlist.config – wird für den IMAP-Mailimport verwendet.
  • vdirsyncer.iserv.calendars.importlist.config – wird für den Kalenderimport per CalDAV verwendet.

6. Import der Postfächer mittels offlineimap

Hinweis

Vor diesem Schritt muss das Mapping ohne Fehler durchgelaufen sein, damit alle Postfächer den ursprünglichen Nutzern zurückgespielt werden können!

Der Import benötigt (abhängig von der Postfachgröße) wieder einiges an Zeit, deswegen empfiehlt sich auch hier der Einsatz einer Screen-Session.

IServ
screen -S mbox_import
cd /mnt/ld-kopano-stores/
  • Datei offlineimap.iserv.importlist.config im Texteditor bearbeiten
  • Im oberen Abschnitt [DEFAULT] die beiden Platzhalter mit den Zugangsdaten des ISERVADMINUSER austauschen (Benutzername + Kennwort).
  • In diesem Abschnitt [DEFAULT] ebenso den dritten Platzhalter ISERVHOSTNAME durch den tatsächlichen Wert ersetzen.
IServ
offlineimap -c offlineimap.iserv.importlist.config -o -l ~/ld-kopano-mailimport/offlineimap.iserv.mailboxes.import.log
  • Mailbox-Import startet, parallel für die Anzahl an Postfächern wie im Parameter maxsyncaccounts des ConfigFile angegeben

Der Vorgang kann beliebig oft wiederholt werden, sollten beim Import vereinzelte Fehler auftreten. Mittels des Parameters -a unter Angabe eines Accountnamens, wird nur das genannte Postfach synchronisiert.

7. Abschlussarbeiten nach dem Import

Nach dem Durchlaufen des Importskriptes, ist der Import abgeschlossen - zur Kontrolle kann man die Logdatei /~/ld-kopano-mailimport/offlineimap.iserv.mailboxes.import.log sichten. Hier findet man folgende Information:

  • Finished Account (username) in xx:xx (Zeitangabe in Min)

7.1 Zurücksetzen (ACL-Reset) nach dem Import

Hinweis

Nach Abschluss der Arbeiten sind die Berechtigungen wieder auf die IMAP-Ordner der Benutzer zurückzusetzen, also den Zugriff des Administrators entfernen.

IServ
/usr/sbin/chkmbox_cyrus -r

Abschließend noch die Cyrus Konfigurationsdatei zurücksetzen:

IServ
1
2
3
iconf -o repair /etc/imapd-common.conf
iconf save /etc/imapd-common.conf
systemctl restart cyrus-imapd.service

8. Importieren der Kalenderdaten

Die nachfolgenden Schritte beschreiben den Import der Kalenderdaten in die IServ Schulplattform.

8.1 Einbinden der Backup-Festplatte und Erstellen des Arbeitsordners

Hinweis

Dieser Schritt kann übersprungen werden, wenn dieser Dokumentation chronolisch gefolgt wurde.

(Label/Pfad zur Backup-Partition ggf. anpassen)

IServ
1
2
3
mount LABEL=USB-BACKUP -o noatime /mnt
apt install vdirsyncer
[ -d ~/ld-kopano-mailimport/ ] || mkdir -p ~/ld-kopano-mailimport/

8.2 Temporären DAViCal-Admin festlegen

Um den Zugriff auf die Kalenderdaten der Benutzer zu erhalten, müssen einem definierten Administrator temporär die Berechtigungen zugewiesen werden. Durch die nachfolgenden Befehle werden zwei Datensätze in der DAViCal Datenbank hinzugefügt, wodurch der enstprechende Nutzer die Admin-Berechtigungen und somit Zugriff auf die übrigen User-Kalender erhält.

Hinweis

Den Platzhalter ISERVADMINUSER durch den vorgesehenen Benutzernamen im zweiten Kommando ersetzen.**

IServ
psql -d davical -c "INSERT INTO roles ( role_no, role_name ) VALUES( 1, 'Admin');"
psql -d davical -c "INSERT INTO role_member (user_no, role_no) VALUES ((SELECT user_no FROM usr WHERE username='ISERVADMINUSER'), 1);"

8.3 Identitätsabgleich

Hinweis

Dieser Abschnitt entspricht ebenfalls dem unter 5.3 beschriebenen Identitätsabgleich, mit dem Unterschied, dass hier --patch=calendars ausgeführt werden muss.

Im eingehängten Pfad /mnt/ld-kopano-stores/ befindet sich die Datei kopano.userlist.csv mit drei Spalten:

  • Kopano-Benutzername (LogoDIDACT),
  • Linux-Accountname (LogoDIDACT),
  • IServ-Benutzername (Zielkonto).

Wir gehen im Weiteren davon aus das die IServ-Benutzernamen dem Schema vorname.nachname entsprechen. Bei Abweichungen (Lehrerkürzel, sehr lange Namen etc.) muss die Datei angepasst werden.

alt text

Mittels des Skriptes ld-iserv-usermapping.sh kann nun die Mapping-Datei kopano.userlist.csv verarbeitet/angepasst werden.

Wichtig

Es empfiehlt sich den Modus --check unter Angabe der CSV-Mappingdatei /mnt/ld-kopano-stores/kopano.userlist.csv. einmal auszuführen, dabei prüft das Skript ob alle IServ-Benutzernamen (aus Spalte 3) bereits angelegt sind. Sollten Benutzer fehlen, gibt das Skript einen Fehler aus und listet die Zeile des fehlenden Benutzers auf.

alt text

8.4 Beispielausgabe nach Fehlermeldung

Das nachfolgende Bild zeigt, dass der Nutzer "tte" nicht gefunden werden konnte. Es handelt sich möglicherweise um ein Lehrerkonto, welches in LogoDIDACT mittels Lehrerkürzel als Accountnamen importiert wurde und innerhalb der IServ Schulplattform unter dem Schema Vorname.Nachname angelegt wurde:

alt text

Um nun die Datenmigration zu ermöglichen, muss die Mapping-Datei bearbeitet werden um darin in der Zeile des betroffenen Benutzers (line 6) einen gültigen IServ Account in der Spalte 3 (Zielkonto) zu hinterlegen.

Dieser Vorgang wird nun wiederholt, bis --check keine Fehlermeldung mehr anzeigt, anschließend kann mittels des Parameters --patch=calendars die Korrektur überführt werden.

Hinweis

Bei Unklarheiten existiert im Backup-Pfad (/mnt/ld-kopano-stores/) eine zusätzliche YAML-Datei kopano.userlist.yaml, welche ausführliche Informationen zu den LogoDIDACT Benutzerkonten beinhaltet. Diese Datei muss nicht bearbeitet werden, sie dient ausschließlich dem Heranziehen zusätzlicher Informationen.

Sind alle Namen korrekt, wird der Modus --patch verwendet, um die Importkonfigurationen anzupassen:**

Betroffene Dateien im Backupverzeichnis /mnt/ld-kopano-stores/:

  • offlineimap.iserv.mailboxes.importlist.config – wird für den IMAP-Mailimport verwendet.
  • vdirsyncer.iserv.calendars.importlist.config – wird für den Kalenderimport per CalDAV verwendet.

8.5 Kalenderimport mit vdirsyncer starten

Nun kann der finale Export der Kalenderdaten mittels des Tools vdirsyncer erfolgen:

IServ
1
2
3
4
5
6
7
8
9
screen -S calendar_import
````

Angabe der Konfigurationsdatei, die für den Import verwendet werden soll:

```bash title="IServ"
export VDIRSYNCER_CONFIG=/mnt/ld-kopano-stores/vdirsyncer.iserv.calendars.importlist.config
vdirsyncer discover 2>&1 | tee -a ~/ld-kopano-mailimport/vdirsyncer.iserv.calendars.import.log
vdirsyncer sync 2>&1 | tee -a ~/ld-kopano-mailimport/vdirsyncer.iserv.calendars.import.log

Hinweis

Auch dieses Tool kann mehrfach ausgeführt werden, um Kalenderinhalte für IServ-Konten zu importieren. Mit dem optionalen Parameter -vdebug können im Bedarfsfall Informationen zu den CalDAV Request eingesehen werden.

In der Logdatei ~/ld-kopano-mailimport/vdirsyncer.iserv.calendars.import.log können die Kalenderimport-Aktionen auch nachträglich noch eingesehen und ausgewertet werden.

8.6 Zurücksetzen der Berechtigungen

Nun ist der Import abgeschlossen und die DAViCal-Berechtigungen müssen dem jeweiligen Nutzer wieder entzogen werden. Hierzu müssen die in 1.2 hinzugefügten Privilegien in umgekehrter Reihenfolge wieder aus der Datenbank entzogen werden.

Hinweis

Den Platzhalter ISERVADMINUSER durch den vorgesehenen Benutzernamen im zweiten Kommando ersetzen.

IServ
psql -d davical -c "DELETE FROM role_member WHERE user_no=(SELECT user_no FROM usr WHERE username='ISERVADMINUSER') AND role_no=1;"
psql -d davical -c "DELETE FROM roles WHERE role_no=1 AND role_name='Admin';"