KDAV bei Kopano auf UCS

Hallo,

hat jemand von euch schon kdav in Verbindung mit Kopano und UCS zum Laufen gebracht und kann mir Tipps geben?

LG

René

Läuft bei mir “out of the box”, es müssen einfach nur die Anweisungen in der Readme befolgt werden.

Hallo,

so wie es aussieht, arbeitet Rainlendar (Dektop Kalender) und Edomi (Smart Home Steuerung) nicht mit der direkten caldav-Schnittstelle von Kopano zusammen.
Mein Versuch, dafür KDAV i.V.m. UCS/Kopano “out of the box” aufzusetzen, scheitert leider:

Was muss bei MAPI_SERVER in der config.php eingesetzt werden? Die reine Serveradresse https://mail.xxx.de (interne Subdomain) führt ja direkt zum UCS-Portal. Wie lautet die “Kopano instance” unter UCS?

Die vorgeschlagene Apache-Konfiguration auf der Website weicht von der config im git-Repo ab, insb. der Pfad “DocumentRoot /usr/share/kdav” verwirrt mich. Auf einer frischen Debian9-Installation mit Apache- und Composer-Paket habe ich:

cd /usr/share
git clone https://github.com/Kopano-dev/kdav.git
cd /usr/share/kdav
composer install

durchgeführt, die Apache config in /etc/sites-available gelegt und ein Symlink in /etc/site-enabled erstellt. Logdir angelegt und schreibbar gemacht. Apache restart.
Ergebnis: Die Website kann nicht geladen werden.

Bzgl. Sync-States: Muss hier vorher noch das sqlite-Paket installiert werden?

Vielen Dank für Deine Tips im voraus!
Frank

Habe jetzt alles noch einmal von vorn begonnen und genau nach Readme installiert.
Beim Aufruf über den Browser bekomme ich jetzt in der apache2/error.log folgenden Fehler:

[Tue Mar 05 21:34:49.065771 2019] [:error] [pid 4056] [client 192.168.178.20:51047] PHP Fatal error:  Uncaught Error: Call to undefined function mapi_make_scode() in /usr/share/kdav/mapi/mapicode.php:28\nStack trace:\n#0 /usr/share/kdav/mapi/mapicode.php(96): make_mapi_e(258)\n#1 /usr/share/kdav/vendor/composer/autoload_real.php(66): require('/usr/share/kdav...')\n#2 /usr/share/kdav/vendor/composer/autoload_real.php(56): composerRequire9210e8d752c175176fe4a03053357b39('df4666c38194aee...', '/usr/share/kdav...')\n#3 /usr/share/kdav/vendor/autoload.php(7): ComposerAutoloaderInit9210e8d752c175176fe4a03053357b39::getLoader()\n#4 /usr/share/kdav/server.php(36): require('/usr/share/kdav...')\n#5 {main}\n  thrown in /usr/share/kdav/mapi/mapicode.php on line 28

./phpunit tests formatiert es etwas schöner, scheint aber dergleiche Fehler zu sein:

frank@vm178-ucs-kdav:/usr/share/kdav$ ./phpunit tests
PHP Fatal error:  Uncaught Error: Call to undefined function mapi_make_scode() in /usr/share/kdav/mapi/mapicode.php:28
Stack trace:
#0 /usr/share/kdav/mapi/mapicode.php(96): make_mapi_e(258)
#1 /usr/share/kdav/vendor/composer/autoload_real.php(66): require('/usr/share/kdav...')
#2 /usr/share/kdav/vendor/composer/autoload_real.php(56): composerRequire9210e8d752c175176fe4a03053357b39('df4666c38194aee...', '/usr/share/kdav...')
#3 /usr/share/kdav/vendor/autoload.php(7): ComposerAutoloaderInit9210e8d752c175176fe4a03053357b39::getLoader()
#4 /usr/share/kdav/vendor/phpunit/phpunit/phpunit(50): require('/usr/share/kdav...')
#5 {main}
  thrown in /usr/share/kdav/mapi/mapicode.php on line 28

Wo könnte das Problem liegen?

BG
Frank

kein php-mapi vorhanden?

root@vm178-ucs-kdav:/home/frank# apt install php-mapi
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.
Statusinformationen werden eingelesen.... Fertig
E: Paket php-mapi kann nicht gefunden werden.

Ist das letzte Debian iso - debian-9.8.0-amd64-netinst.iso

Sehe gerade in sid ist es da. Dann morgen ein neuer Versuch…

Php-mapi ist ein Paket welches zu unseren Downloads gehört.

Warum installierst du kdav nicht einfach auf dem Univention System?

Stand ja nirgends :slight_smile: und ich wollte bei UCS nichts durcheinanderbringen.

Mich hat zudem die vhost-config irritiert - auf Port 443 läuft doch das Univention Portal. Das gibt doch Probleme, oder?

Nein, gibt es nicht. Webserver unterstützen seid Jahren eine Technik mit Namen SNI die eben dieses möglich macht.

in welchem der vielen Apache conf verzeichnissen muss ich den die KDAV.conf anlegen damit es
Out of the Box läuft.

UCS ist Version 4.4

Innerhalb von Debian Systemen wird hierfür üblicherweise /etc/apache2/sites-available verwendet. Nachdem die Datei dort erstellt wurde muss diese dann noch mit dem mittels a2ensite aktiviert werden.

Unter https://github.com/zokradonh/kopano-docker baue ich für kdav bereits einen Docker container, vielleicht sollte ich auf dieser Basis mal eine app für ucs zusammenstellen.

Die Docker Container Nummer finde ich sehr interessant.

Leider bekomme ich es auf dem normalen weg nicht an den Start.

Bin halt noch neu in der Linux Welt.

Wie bekomme ich den das Docker Image richtig in UCS an den Start hier verhält sich vieles ja auch nochmal anders.

@fmontebaur If I reply now, will it again be weeks before I hear from you again?

I discarded the idea of an official app at this point in time, but could create a small script similar to https://github.com/fbartels/univention-bitwarden.

The question is: what would you be willing to invest to jumpstart such a script?

sorry mein Problem ist da ich die ganze sache noch Teste. Ich möchte nicht vor solchen
Problemen stehen wenn das System schon laufen soll.
Das geht aber immer nur neben der normalen Arbeit und die geht vor, aber das kennen Sie sicher.

Mein Problem erstes problem konnte ich lösen. sqlite war nicht installiert.

Nun habe ich leider ein neus Problem.

ich kann mich in der Weboberfläche von sabredav über Https anmelden.
hier sehe ich alle in meinem testkonto vorhandenen Adressbücher.

mit den in der Anleitung angegebenen Daten kann ich das Mac OS Adressbuch aber nicht zum arbeiten bewegen.

MAC OS ist 10.14.4

Es wird mir immer angezeigt das der User sich nicht anmelden kann.

das Logfile sagt aber das er angemeldet ist:

08.05.2019 22:40:19 [21437] [DEBUG] main ------------------ Start
08.05.2019 22:40:19 [21437] [DEBUG] main PROPFIND /
08.05.2019 22:40:19 [21437] [DEBUG] main KDAV version master-ad05c96
08.05.2019 22:40:19 [21437] [DEBUG] main SabreDAV version 3.2.2
08.05.2019 22:40:19 [21437] [TRACE]  dav KopanoSyncState->__construct(): Using db sqlite:/var/lib/kopano/kdav/syncstate.db
08.05.2019 22:40:19 [21437] [DEBUG] main KLogger->LogIncoming(): INPUT
PROPFIND / HTTP/1.1
Host: kdav.starlineshow.de
Content-Type: text/xml
Depth: 0
Brief: t
Accept: */*
Connection: keep-alive
Prefer: return=minimal
User-Agent: Mac OS X/10.14.4 (18E226) AddressBookCore/1
Content-Length: 181
Accept-Language: de-de
Accept-Encoding: br, gzip, deflate

<?xml version="1.0" encoding="UTF-8"?>
<A:propfind xmlns:A="DAV:">
  <A:prop>
    <A:current-user-principal/>
    <A:principal-URL/>
    <A:resourcetype/>
  </A:prop>
</A:propfind>

08.05.2019 22:40:19 [21437] [DEBUG] main KLogger->LogOutgoing(): OUTPUT:
HTTP/1.1 401 Unauthorized
X-KDAV-Version: master-ad05c96
WWW-Authenticate: Basic realm="Kopano DAV", charset="UTF-8"
Content-Type: application/xml; charset=utf-8

<?xml version="1.0" encoding="utf-8"?>
<d:error xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns">
  <s:sabredav-version>3.2.2</s:sabredav-version>
  <s:exception>Sabre\DAV\Exception\NotAuthenticated</s:exception>
  <s:message>No 'Authorization: Basic' header found. Either the client didn't send one, or the server is misconfigured</s:message>
</d:error>

08.05.2019 22:40:19 [21437] [DEBUG] main httpcode='401' memory='969.56 KiB/2.00 MiB' time='0.06s'
08.05.2019 22:40:19 [21437] [DEBUG] main ------------------ End
08.05.2019 22:40:19 [23413] [DEBUG] main ------------------ Start
08.05.2019 22:40:19 [23413] [DEBUG] main PROPFIND /
08.05.2019 22:40:19 [23413] [DEBUG] main KDAV version master-ad05c96
08.05.2019 22:40:19 [23413] [DEBUG] main SabreDAV version 3.2.2
08.05.2019 22:40:19 [23413] [TRACE]  dav KopanoSyncState->__construct(): Using db sqlite:/var/lib/kopano/kdav/syncstate.db
08.05.2019 22:40:19 [23413] [DEBUG] main KLogger->LogIncoming(): INPUT
PROPFIND / HTTP/1.1
Host: kdav.starlineshow.de
Accept: */*
Brief: t
Accept-Language: de-de
Accept-Encoding: br, gzip, deflate
Content-Type: text/xml
Content-Length: 181
Depth: 0
Connection: keep-alive
User-Agent: Mac OS X/10.14.4 (18E226) AddressBookCore/1
Prefer: return=minimal
Authorization: Basic REDACTED

<?xml version="1.0" encoding="UTF-8"?>
<A:propfind xmlns:A="DAV:">
  <A:prop>
    <A:current-user-principal/>
    <A:principal-URL/>
    <A:resourcetype/>
  </A:prop>
</A:propfind>

08.05.2019 22:40:19 [23413] [TRACE]  dav KopanoDavBackend->Logon(): fmontebaur / password
08.05.2019 22:40:19 [23413] [DEBUG]  dav KopanoDavBackend->Logon(): Auth: OK - user fmontebaur - session Resource id #10
08.05.2019 22:40:19 [23413] [DEBUG] main KLogger->LogOutgoing(): OUTPUT:
HTTP/1.1 207 Multi-Status
X-KDAV-Version: master-ad05c96
X-Sabre-Version: 3.2.2
Content-Type: application/xml; charset=utf-8
Vary: Brief,Prefer
DAV: 1, 3, extended-mkcol, access-control, calendarserver-principal-property-search, calendar-auto-schedule, calendar-availability, addressbook, calendar-access, calendar-proxy

<?xml version="1.0"?>
<d:multistatus xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns" xmlns:card="urn:ietf:params:xml:ns:carddav" xmlns:cal="urn:ietf:params:xml:ns:caldav" xmlns:cs="http://calendarserver.org/ns/">
  <d:response>
    <d:href>/</d:href>
    <d:propstat>
      <d:prop>
        <d:current-user-principal>
          <d:href>/principals/fmontebaur/</d:href>
        </d:current-user-principal>
        <d:resourcetype>
          <d:collection/>
        </d:resourcetype>
      </d:prop>
      <d:status>HTTP/1.1 200 OK</d:status>
    </d:propstat>
  </d:response>
</d:multistatus>

08.05.2019 22:40:19 [23413] [DEBUG] main httpcode='207' memory='1.04 MiB/2.00 MiB' time='0.10s'
08.05.2019 22:40:19 [23413] [DEBUG] main ------------------ End
08.05.2019 22:40:19 [23413] [DEBUG] main ------------------ Start
08.05.2019 22:40:19 [23413] [DEBUG] main OPTIONS /principals/fmontebaur/
08.05.2019 22:40:19 [23413] [DEBUG] main KDAV version master-ad05c96
08.05.2019 22:40:19 [23413] [DEBUG] main SabreDAV version 3.2.2
08.05.2019 22:40:19 [23413] [TRACE]  dav KopanoSyncState->__construct(): Using db sqlite:/var/lib/kopano/kdav/syncstate.db
08.05.2019 22:40:19 [23413] [DEBUG] main KLogger->LogIncoming(): INPUT
OPTIONS /principals/fmontebaur/ HTTP/1.1
Host: 
Content-Length: 0
Connection: keep-alive
Accept: */*
User-Agent: Mac OS X/10.14.4 (18E226) AddressBookCore/1
Accept-Language: de-de
Accept-Encoding: br, gzip, deflate
Authorization: Basic REDACTED


08.05.2019 22:40:19 [23413] [TRACE]  dav KopanoDavBackend->Logon(): fmontebaur / password
08.05.2019 22:40:19 [23413] [DEBUG]  dav KopanoDavBackend->Logon(): Auth: OK - user fmontebaur - session Resource id #10
08.05.2019 22:40:19 [23413] [TRACE]  dav KopanoDavBackend->GetStore(): storename fmontebaur
08.05.2019 22:40:19 [23413] [TRACE]  dav KopanoDavBackend->GetUser(): fmontebaur
08.05.2019 22:40:19 [23413] [TRACE]  dav KopanoDavBackend->GetStore(): storename fmontebaur
08.05.2019 22:40:19 [23413] [TRACE]  dav KopanoDavBackend->GetStore(): storename fmontebaur
08.05.2019 22:40:19 [23413] [DEBUG] main KLogger->LogOutgoing(): OUTPUT:
HTTP/1.1 200 OK
X-KDAV-Version: master-ad05c96
X-Sabre-Version: 3.2.2
Allow: OPTIONS, GET, HEAD, DELETE, PROPFIND, PUT, PROPPATCH, COPY, MOVE, REPORT
DAV: 1, 3, extended-mkcol, access-control, calendarserver-principal-property-search, calendar-auto-schedule, calendar-availability, addressbook, calendar-access, calendar-proxy
MS-Author-Via: DAV
Accept-Ranges: bytes
Content-Length: 0


08.05.2019 22:40:19 [23413] [DEBUG] main httpcode='200' memory='961.73 KiB/2.00 MiB' time='0.27s'
08.05.2019 22:40:19 [23413] [DEBUG] main ------------------ End

Der Kalender Sync mit OS X spielt ohne Problem

Hallo zusammen,

dieser Thread liegt zwar schon eine Weile zurück da ich jedoch nun kürzlich selbst KDAV zusammen mit Kopano auf einem UCS System aufgesetzt habe wollte ich meine Erfahrungen teilen und ein kleines HowTo hinterlassen.

Ausgangskonfiguration:

Zielkonfiguration:

Vorgehen:

1. Verzeichnis für kdav anlegen und Daten aus dem Repository laden:

mkdir /opt/kopano-dav
cd /opt/kopano-dav
git clone https://github.com/Kopano-dev/kdav.git
cd kdav

2. Composer lokal installieren:

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

3. Installation ausführen:

./composer.phar install

4. Verzeichnisberechtigung anpassen und php modul für sqlite Zugriff nachinstallieren

chown -R www-data:www-data /opt/kopano-dav
apt-get install php7.0-sqlite3
systemctl restart apache2

5. Verzeichnis für die sqlite Datenbank anlegen sowie für die Log files:

mkdir /var/lib/kopano/kdav
mkdir /var/log/kdav
chown -R www-data:www-data /var/lib/kopano/kdav
chown -R www-data:www-data /var/log/kdav

6. Apache Config für kdav anlegen unter "/etc/apache2/sites-available/kopano-dav.conf"
Der kdav host wird ausschließlich über den Reverse Proxy angesprochen, daher binden wir ihn lokal an 127.0.0.1 und verzichten auf TLS.

Listen 8082
<VirtualHost 127.0.0.1:8082>

        DocumentRoot /opt/kopano-dav/kdav

        <Directory /opt/kopano-dav/kdav>
                Require all granted
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/kdav-error.log
        CustomLog ${APACHE_LOG_DIR}/kdav-access.log combined

        RewriteEngine On
        # redirect well-known url http://sabre.io/dav/service-discovery/
        # (redirect may need to be done to the absolute external url)
        RewriteRule ^/.well-known/carddav$ / [R]
        RewriteRule ^/.well-known/caldav$ / [R]
        # This makes every request go to server.php
        RewriteRule ^/(.*)$ /server.php [L]

        # Output buffering needs to be off, to prevent high memory usage
        php_flag output_buffering off

        # This is also to prevent high memory usage
        php_flag always_populate_raw_post_data off

        # SabreDAV is not compatible with mbstring function overloading
        php_flag mbstring.func_overload off

        # set higher limits by default
        php_value memory_limit 256M
        php_value max_execution_time 259200

</VirtualHost>

7. Erweitern der Config für den Reverse Proxy:

        <Location /kdav>
                ProxyPass "http://127.0.0.1:8082/kdav"
                ProxyPassReverse "http://127.0.0.1:8082/kdav"
                Options Indexes FollowSymLinks MultiViews
                Require all granted
        </Location>

8. Aktivieren des kdav hosts und Neuladen der Apache configs:

a2ensite kopano-dav
systemctl reload apache2

9. Developer Mode einschalten.
Eigentlich wären wir jetzt fertig aber irgendwie funktionert es nicht. Nach 2h Zweifel an meinen Apache Fähigkeiten fand ich folgendes offene Issue: SabreDav doesn’t work when developer mode is disabled

Und siehe da, unter “/opt/kopano-dav/kdav/config.php”

define('DEVELOPER_MODE', true);

gesetzt und schon läuft es.

Abschließend noch eine Frage:

Wie steht es denn um die Weiterentwicklung von Kdav ? Das Issue bezüglich des Developermodes ist seit Mai '19 unbearbeitet und die Auswirkungen der Aktivierung sind mir ehrlich gesagt nicht klar. Auch frage ich mich wieso kdav nicht mittlerweile im Standardumfang von Kopano enthalten ist ?

In diesem Sinne…

1 Like

Danke für Deine knappe aber präzise Anleitung.

Fragen in diesem Zusammenhang:

  • Funktioniert erstellen/ändern/löschen von Kontakten/Kalendereinträgen vom Client aus?
  • Welche(n) Client(s) nutzt Du?
  • Gibt es Probleme mit Umlauten?

Welche(n) Client(s) nutzt Du?

Ich habe Thunderbird am Linux Rechner und DAVx5 auf dem Android Telefon eingerichtet aber noch nicht im Detail getestet.

Gibt es Probleme mit Umlauten?

Ja, alles was in Thunderbird angelegt wird zerschießt die Umlaute. Anders herum Webapp -> Thunderbird ist einwandfrei.

Funktioniert erstellen/ändern/löschen von Kontakten/Kalendereinträgen vom Client aus?

Habe nur Kontakte getestet da ich für den Kalender die native Umsetzung von Kopano verwende.
Das Issue gibts auch bereits :slight_smile: Encoding Error in CardDav

Erstellen funktioniert.
Löschen funktioniert.
Änderung funktioniert im Prinzip:

  • Wenn man den Namen im Client anpasst wird das war korrekt geändert, es wird jedoch ein weiterer Name angelegt unter “Ablegen als” statt den alten zu ersetzen so dass in der Webapp der alte Name unter “Ablegen als” angezeigt wird. Bug oder Feature ?!
  • Ändern des Kontaktbildes funktioniert nicht.

Vielleicht hilft das umstellen auf den richtigen Zeichensatz in /etc/kopano/ical.cfg das Umlauteproblem zu lösen.
Dort ist kein Zeichensatz als Voreinstellung aktiviert.

Das Problem mit dem ändern von Einträgen (Verdopplung des Datensatzes statt ändern) habe ich auch bei meinem emClient. - Darum ist Kopano für mich seit bald 2 Jahren unbrauchbar und ich nutze statt dessen CalDAV/CardDAV in Nexcloud, um Kontakte und Termine zwischen meinen Notebooks und Smartphone zu synchronisieren.

Vielleicht hilft das umstellen auf den richtigen Zeichensatz in /etc/kopano/ical.cfg das Umlauteproblem zu lösen.
Dort ist kein Zeichensatz als Voreinstellung aktiviert.

Danke für den Tipp mit der ical.cfg. Schaue ich mir mal an.

Das Problem mit dem ändern von Einträgen (Verdopplung des Datensatzes statt ändern) habe ich auch bei meinem emClient. - Darum ist Kopano für mich seit bald 2 Jahren unbrauchbar und ich nutze statt dessen CalDAV/CardDAV in Nexcloud, um Kontakte und Termine zwischen meinen Notebooks und Smartphone zu synchronisieren.

Hatte Kopano vor 2 Jahren eine Carddav Unterstützung ? CalDav gibt es aktuell nativ und das funktioniert auch soweit ich das beurteilen kann.

Ich bin grundsätzlich kein Fan von IMAP+Caldav+Cardav wenn ich das Gleiche nur besser mit Push statt Pull in einem sauber implementierten Protokoll haben kann via ActiveSync.
Das ist de facto der Grund wieso ich Kopano sehr schätze da mir das über Z-Push ermöglicht wird.

CalDav+CardDav ist bei mir was für Rand-Use-Cases.
CalDav: Z-Push ermöglicht leider keine Synchronsation von Aufgaben. Das übernimmt CalDav so wie es auch ohne kdav verfügbar ist.
CardDav: Seit kurzem besteht die Möglichkeit das FritzFon DECT Telefonbuch via CardDav zu synchronisieren. Naja und dafür brauche ich jetzt CardDav :wink: Oder ich schmeiße die DECT Telefone raus…

Ich verstehe aber den Unmut. Kdav scheint angefangen und leider nicht fertig gemacht worden zu sein. Vermutlich weil der Fritbox Use Case nicht der Zentrale bei den zahlenden Kopano Kunden ist, was auch nachvollziehbar ist.

Ich meine in der Tat Kdav und z-Push.