Unterschiede zwischen den Revisionen 5 und 6
Revision 5 vom 2015-04-19 18:43:33
Größe: 18369
Autor: anonym
Kommentar: kronolith Kalender-Problem-Fix
Revision 6 vom 2015-04-19 18:44:00
Größe: 18368
Autor: anonym
Kommentar:
Gelöschter Text ist auf diese Art markiert. Hinzugefügter Text ist auf diese Art markiert.
Zeile 249: Zeile 249:
 * Erst durch [[https://github.com/horde/horde/blob/bf2a8aa9b3d2e44bfcd65b64700c334aae7d902e/framework/Crypt/lib/Horde/Crypt/Pgp.php|diesen]] commit zeigt Horde GPG-Fingerprints an. Nach einem Debian-Update von [[https://packages.debian.org/jessie/php-horde-crypt|php-horde-crypt]] sollte die aktualisierte Datei<<FootNote(/usr/share/php/Horde/Crypt/Pgp.php)}}} durch die Git-Version ersetzt werden  * Erst durch [[https://github.com/horde/horde/blob/bf2a8aa9b3d2e44bfcd65b64700c334aae7d902e/framework/Crypt/lib/Horde/Crypt/Pgp.php|diesen]] commit zeigt Horde GPG-Fingerprints an. Nach einem Debian-Update von [[https://packages.debian.org/jessie/php-horde-crypt|php-horde-crypt]] sollte die aktualisierte Datei<<FootNote(/usr/share/php/Horde/Crypt/Pgp.php)>> durch die Git-Version ersetzt werden

Diese Seite beschreibt die Installation und Einrichtung der Horde Groupware unter Debian wheezy.

Installation

Datenbank einrichten

Zuerst muss eine Datenbank angelegt werden - in diesem Beispiel ist es eine Postgres-Datenbank:

  • zum Postgres-Nuzter wechseln und Postgres-Client aufrufen:

    su postgres
    
    psql
  • Nutzer für Horde-Datenbank anlegen

    create user horde with password '$PASSWORD';
  • Datenbank für Horde anlegen

    create database horde with owner horde encoding 'utf8';
  • Datenbank-Client beenden

Minimal-Installation

Horde ist erst ab in Debian jessie verfügbar. Insofern müssen in einem wheezy-System testing-Pakete installiert werden. Das geht am Besten mit apt-pinning. Die Anleitung dazu befindet sich im Debian-Wiki.

Da unsere ersten Erfahrungen mit Horde nicht so positiv waren (kaputte Installation nach ersten Minor-Update), sollen erstmal so wenig Horde-Pakete wie möglich installiert werden. Ausgangsbasis für die Installation ist horde-webmail. Das bringt ein paar Pakete mit, die wir nicht benötigen - die werden später einfach deinstalliert.

apt-get install php-horde-webmail --no-install-recommends

Anschließend das Skript webmail-install im Terminal aurufen und alle Schritte durchgehen. Damit es beim Anlegen der Datenbank keine Fehlermeldung gibt1, muss das Paket php5-pgsql vorher installiert werden. Soll eine lokale postgres-Datenbank benutzt werden, muss als Verbindungsart 2 tcp mit 127.0.0.1 ausgewählt werden, da andernfalls ein lokal existierender Nutzer erwartet wird.

Installation bereinigen

Soll Horde nur als Webmailer eingesetzt werden, reicht es imp und turba zu behalten. Alle weiteren Applikationen können entfernt werden - zumindest aber diese:

apt-get remove --purge php-horde-kronolith php-horde-mnemo php-horde-nag php-horde-trean php-horde-gollem

Damit das Portal nur Blöcke von installierten Apllikationen anzeigt, muss es noch entsprechend angepasst werden. Dazu in der Weboberfläche Administration --> Konfiguration --> Portal Blocks und dort die Blöcke unter  $conf[portal][fixed_blocks] festlegen.

Installation erweitern

Sofern Horde-Webmail den möglichst vollen Funktionsumfang erhalten soll, sind noch folgende Pakete zu installieren:

apt-get install php-horde-lz4 php5-ssh2 libjs-excanvas libimage-exiftool-perl

Horde-Pakete, die nicht in Debian enthalten sind, können über den entsprechenden Pear-Channel bezogen werden. Da eine Vermischung von Debian- mit Pear-Paketen nicht ratsam ist, kann debpear installiert werden. Dadurch erhalten wir die Möglichkeit, Pear-Pakete herunter zu laden und aus ihnen automatisch ein Debian-Paket erstellen zu lassen.

Rechte festlegen

Die Konfigurationsdateien liegen unter etc/horde. Die Rechte für dieses Verzeichnis und für die Konfigurationsdateien der einzelnen Anwendungen sollten noch angepasst werden:

chmod -R o-rwx /etc/horde

chown -R :www-data /etc/horde/

chown www-data:www-data /etc/horde/$APP/conf.php

Installation testen

Horde bringt ein Testscript mit, das zahlreiche Informationen über die Installation liefert. Dazu in /etc/horde/horde/conf.php bearbeiten und $conf[testdisable] auf false setzen3. Nun sind die Informationen unter http://$DOMAIN/horde/test.php erreichbar.

Einrichtung

Damit die Ersteinrichtung über das Webinterface funktioniert, muss ein Admin-Nutzer festgelegt werden. Dazu die folgenden Einträge zu /etc/horde/horde/conf.php4 hinzufügen:

$conf['auth']['admins'] = array('your_admin_user');
$conf['auth']['driver'] = 'auto';
$conf['auth']['params']['username'] = 'your_admin_user';
$conf['auth']['params']['password'] = 'your_password';

Allgemeines

Als Admins berechtigte User können umfangreiche Einstellungen direkt nach Anmeldung in Horde vornehmen. Horde schreibt die Änderungen in die entsprechende Konfigdateien. Diese sollten dann aber nicht im Terminal bearbeitet werden, da durch Änderungen im Webinterface die Dateien überschrieben werden.

Um dennoch Änderungen direkt in den Konfigdateien zu ermöglichen, müssen diese als $Dateiname.local.php gespeichert werden. Die .local.php-Dateien sollten nur die geänderten strings enthalten, mehr nicht.

In den entsprechenden Dateien kann festgelegt werden, dass die entsprechende Option in der Weboberfläche nicht änderbar ist. Bsp: $_prefs['from_addr']['locked'] = true;.

Individuelle Nutzereinstellungen speichert Horde im Backend. Werden neue globale Einstellungen eingeführt, müssen die alten Nutzereinstellungen gelöscht werden. Dies geht mit dem entsprechenden sql-Befehl:

DELETE FROM horde_prefs WHERE pref_scope = '<application_name>' AND pref_name = '<preference_name>'

Webserver

Die Apache-Konfigurationsdatei für Horde kann in der default-Version erstmal genutzt werden. Wenn allerdings einige Horde-Links 404-Fehler erzeugen, bspw. beim Speichern von Tasks The requested URL /horde5/nag/t/save was not found on this server muss "mod rewrite" aktiviert werden:

a2enmod rewrite

Mobile-Modus

Horde bietet einen eigenen Modus für Smartphones und Tablets. Dieser funktioniert aufgrund einer veralteten libjs-jquery-mobile nicht korrekt - das Layout scheint völlig css-los. Eine Aktualisierung der Bibliothek durch die Upstream-Version hilft hier weiter. Dazu einfach die aktuelle Version herunter laden und nach /data/jquery-mobile entpacken. Die Dateien tragen üblicherweise ihre Versionsnummer im Namen, bspw. jquery.mobile-1.4.5.css, diese muss bei jeder Datei aus dem Dateinamen entfernt werden.

Nun noch einen Symlink setzen:

mv /usr/share/javascript/jquery-mobile /usr/share/javascript/jquery-mobile.orig

ln -s /data/jquery-mobile .

Das die Dateien von Speicherort des Debianpaketes aus verlinkt sind (/usr/share/javascript, ist wichtig, damit das Horde-interne Caching von .css- und .js-Dateien korrekt funktioniert.

Wird Caching nicht benutzt, kann die Umleitung auf die neuen Dateien auf per Apache erfolgen5. Dazu müssen folgende Zeilen am Anfang von /etc/apache/conf.d/php-horde.conf eingefügt werden:

# Anfragen an veraltete jquery-mobile-Version umleiten
Alias /horde/js/jquery.mobile/jquery.mobile.js /data/jquery-mobile/jquery.mobile.js
Alias /horde/js/jquery.mobile/jquery.mobile.min.css /data/jquery-mobile/jquery.mobile.min.css
Alias /horde/js/jquery.mobile/jquery.mobile.min.js /data/jquery-mobile/jquery.mobile.min.js
Alias /horde/js/jquery.mobile/images/ /data/jquery-mobile/images/

PHP-Einstellungen

Eine weitere Einstellung, damit es beim Upload von großen Mailattachments nicht zu einem session-timeout kommt: Anpassen von /etc/php5/conf.d/php.ini:

upload_max_filesize = 30M
post_max_size = 30M
memory_limit = 192M

Außerdem sollte die Standard-Zeitzone für php festgelegt werden, da Horde sich den Wert holt. Ansonsten kann es bspw. zu unterschiedlichen Darstellungen der Zeit im Kalender kommen, wenn Events mit einem externen Programm angelegt werden. Dazu wieder /etc/php5/conf.d/php.ini bearbeiten und folgende Zeile hinzufügen:

date.timezone = Europe/Berlin

Die Installationshinweise beschreiben die Konfiguration der php Garbage Collection. Bei Debian läuft das anders - kann also ignoriert werden.

Standard-Identität mit ldap-Mailkonto verknüpfen

Wir wollen, dass die mit den jeweiligen Anmeldedaten verbundene Mailadresse automatisch zur Standardidentität hinzugefügt wird 6. Dazu müssen wir Horde mitteilen, dass es aus der ldap-Datenbank die entsprechende Mailadresse heraus suchen soll.

Dazu /etc/horde/horde/prefs.local.php bearbeiten:

$_prefs['from_addr']['locked'] = false;
$_prefs['from_addr']['hook'] = true;

Insbesondere für User mit anderen mehreren Maildomains ist es wichtig, dass $_prefs['from_addr']['locked'] = false; gesetzt ist, andernfalls können sie keine weiteren Mail-Adressen in Horde konfigurieren. $conf['user']['verify_from_addr'] = true; sollte in /etc/horde/horde/conf.local.php oder über das Webinterface aktiviert sein.

Anschließend kommt in /etc/horde/horde/hooks.php der eigentliche Code - die $searchBase ist hier nur beispielhaft aufgeführt und muss entsprechend angepasst werden:

//    // PREFERENCES INIT: See above for documentation.
    public function prefs_init($pref, $value, $username, $scope_ob)
    {
        switch ($pref) {
        case 'from_addr':

            if (is_null($username)) {
                return $value;
            }

            $ldapServer = 'ldap.sao';
            $searchBase = 'sc=mailAccount,ou=People,o=server,dc=example,dc=org';

            $ds = @ldap_connect($ldapServer, $ldapPort);

//            // You will probably need to replace cn= with uid=; this syntax
//            // is for Netware 5.1 nldap.
            $searchResult = @ldap_search($ds, $searchBase, 'cn=' . $username);
            $information = @ldap_get_entries($ds, $searchResult);
            if (($information === false) || ($information['count'] == 0)) {
               $user = '';
            } else {
                $user = ($information[0]['mail'][0] != '')
                    ? $information[0]['mail'][0]
                    : $information[0]['cn'][0];
            }

            ldap_close($ds);

            return empty($user)
                ? $username
                : $user;

Adressbuch erstellen

In der Grundkonfiguration gibt es kein persönliches Adressbuch. Ohne Adressbuch lassen sich keine öffentlichen GPG-Schlüssel importieren. Um hier eine Fehlerquelle auszuschließen, legen wir fest, dass ein Standardadressbuch beim ersten Login erstellt wird.

Dazu in der Admin-Weboberfläche unter Administration --> Horde --> Shares die Option $conf[share][auto_create] aktivieren. Um gleichzeitig die Benutzung einzuschränken an selber Stelle $conf[share][no_sharing] aktivieren.

Bei der ersten Einrichtung von Horde kam es vor, dass die GPG-Schlüsselverwaltung nicht verfügbar war, weil in IMP kein Adressbuch als Standard ausgewählt wurde. Um dies automatisch nachzuholen, /etc/horde/imp/prefs.local.php bearbeiten:

$_prefs['add_source']['value'] = 'localsql';

Webmail als Start-Applikation

Normalerweise landet man nach dem Login im Portal. Da wir Horde als reinen Webmailer einsetzen wollen, ist es sinnvoll, direkt in der Mailapplikation zu landen. Einrichtung in /etc/horde/horde/prefs.local.php, den entsprechenden Eintrag suchen und von horde in imp ändern:

$_prefs['initial_application']['value'] = 'imp';

Verschlüsselungsfunktionen einrichten

Die GPG-Schlüssel speichert Horde leider nicht auf Dateiebene, sondern verküpft mit den Adresse in turba in der Datenbank.

Im Webinterface sollte die Schlüssellänge auf 4096 geändert werden. Damit die Schlüsselerstellung nicht ewig dauert, weil auf dem Server nicht genug Zufallsdaten erzeugt werden:

apt-get install haveged

In der Grundkonfiguration erkennt Horde/IMP keine inline-verschlüsselten Mails. Folglich ist auch kein Entschlüsseln möglich. Die früher nutzerbasierte Einstellung kann mittlerweile nur noch zentral vorgenommen werden. Dazu muss /etc/horde/imp/mime_drivers.local.php erstellt und bearbeitet werden:

<?php
$mime_drivers['plain']['pgp_inline'] = true;

Eigene Menüeinträge

Man kann das Applikationsmenü um eigene Einträge ergänzen. Dazu am besten eine php-Datei in /etc/horde/horde/registry.d anlegen:

<?php
header('Content-Type: text/html; charset=UTF-8');

$this->applications['sao-password'] =
array('name' => 'Mein Link', 'status' => 'link', 'url' =>
'https://example.com/mein_link', 'menu_parent' => 'others', 'target' => '_new');

Login-Namen konvertieren

Hordes backend ist unterscheidet Loginnamen nach Groß- und Kleinschreibung. Meldet sich jemand mit seinem sao-Account an und schreibt dabei den ersten Buchstaben groß, werden andere Adressbücher, Notizen und Aufgaben angezeigt, als bei einem komplett klein geschriebenen Loginnamen. Das Backend geht in diesem Fall von unterschiedlichen Accounts aus. Um hier keine Verwirrung zu stiften, weisen wir Horde an, die Loginnamen in Kleinbuchstaben zu konvertieren. Dazu muss /etc/horde/horde/hooks.php bearbeitet werden - der entsprechende hooks ist bereits vorhanden. Es müssen nur die Kommentarzeichen entfernt werden:

public function authusername($userId, $toHorde)
    {
       return $toHorde
            ? Horde_String::lower($userId)
            : $userId;
    }

Anmeldeaufgaben automatisch ausführen lassen

Es gibt keine zentrale Einstellung für die Anmeldeaufgaben. Damit die Hinweismeldungen nach dem Einloggen nicht mehr erscheinen, muss die jeweilige Aufgabe in der entsprechenden Konfigurationsdatei den Status "locked" erhalten.

Weitere Einstellungen im Überblick

Einstellung

Datei

Code

Einstellungen zu vergessenen Passworten ausblenden

/etc/horde/horde/prefs.local.php

$prefGroups['forgotpass']['suppress'] = true;

Papierkorb aktivieren und regelmäßig leeren

/etc/horde/imp/prefs.local.php

$_prefs['use_trash']['value'] = '1';
$_prefs['empty_trash_menu']['value'] = '1';
$_prefs['purge_trash_interval']['value'] = '3';
$_prefs['purge_trash_keep']['value'] = '7';

Geschwindigkeit optimieren

In der Horde-Konfiguration sollten die empfohlenen Caching-Einstellungen aktiviert werden. Wenn javascript- und css-Caching aktiviert wird, muss jquery-mobile in einer aktualisierten Version vorliegen.

Privatspähre erhöhen

Jeder ausgehenden Mail fügt Horde einen Header-Eintrag mit der aktuellen IP-Adresse hinzu, die die Horde-Session gestartet hat. Diese unnötige Funktion lässt sich einfach entfernen. Dazu muss die Datei /usr/share/php/Horde/Mime/Headers.php bearbeitet werden. Dort gibt es eine Funtkion names public function addReceivedHeader(array $opts = array()) - diese wird so geändert, dass sie immer die localhost-Adresse einfügt - am Ende sieht sie dann so aus:

public function addReceivedHeader(array $opts = array())
    {
        $received = 'from 127.0.0.1 ' .
                    '(localhost [127.0.0.1]); ' .
                     date('r');
        $this->addHeader('Received', $received);
    }


<<anchor(fehler)>>

Fehler

  • {X} Horde kommt nicht mit Schlüsseldateien klar, die keine Trenner zwischen den einzelnen keys enthalten

    • workaround: alle Kontakte aus dem Adressbuch löschen und Schlüssel mit einer grafischen Oberfläche exportieren (bspw. seahorse)
  • Erst durch diesen commit zeigt Horde GPG-Fingerprints an. Nach einem Debian-Update von php-horde-crypt sollte die aktualisierte Datei7 durch die Git-Version ersetzt werden

  • Gelegentlich können Kalender aufgund eines sql-Fehlers nicht benuzt werden. Näheres zur Fehlermeldung findet sich im Bugreport. Der Fix ist recht trivial und muss auf die Datei /usr/share/php/Horde/Prefs/Storage/Base.php angewandt werden.


Fussnoten, Hinweise und Links

  1. Fehlermeldung: Could not instantiate PDO. PDOException: could not find driver (1)

  2. How should we connect to the database? (2)

  3. Nach dem Testen unbedingt wieder deaktivieren (3)

  4. Normalerweise werden Änderungen in $DATEI.local.php geschrieben - für diese einmalige Änderung ist das direkte Bearbeiten in Ordnung (4)

  5. Horde holt sich bei aktiviertem Caching die Daten über das Dateisystem und beachtet den Alias dabei nicht (5)

  6. andernfalls können die Nutzer*innen in der Grundkonfiguration keine Mails versenden (6)

  7. /usr/share/php/Horde/Crypt/Pgp.php (7)

Horde unter Debian installieren (zuletzt geändert am 2022-01-23 11:54:04 durch anonym)


Creative Commons Lizenzvertrag
This page is licensed under a Creative Commons Attribution-ShareAlike 2.5 License.