Progetto

Generale

Profilo

Installare e configurare Round Cube

Roundcube è una delle piattaforme di posta web più interessanti fra quelle disponibili, supportando molte funzionalità avanzate ed una interfaccia utente molto gradevole. Non essendo disponibile come pacchetto Debian su Squeeze, ed in una versione piuttosto vecchia su Wheezy, descriveremo qui la procedura utilizzata per installarla su una Debian Squeeze (e successive).

Il primo passo è scaricare l'ultima versione disponibile dal sito del progetto. Al momento della stesura di queste note l'ultima versione disponibile è la 1.0.1. Nella sezione download del sito sono presentate due alternative, la distribuzione completa che non richiede dipendenze e la dependent che non contiene alcune parti che nel caso di Debian possono essere installate direttamente dai pacchetti, si è pertanto scaricata una versione e la si è poi installata in /var/www con i seguenti passi:

tar -xvzf roundcubemail-*-dep.tar.gz
mv roundcubemail-*-dep /var/www/roundcube

occorre poi aggiustare i permessi rispetto a quelli presenti nell'archivio e che le due directory temp e logs siano scrivibili dal server web, pertanto ci si sposti nella directory di installazione e si cambino i proprietari dei file con:

cd /var/www/roundcube
chown -R root.root .
chown -R www-data.www-data temp logs

Si dovrà poi prevedere di configurare Apache per fornire accesso all'installazione ed eseguire il codice di ausilio per il controllo e la creazione automatica dei file di configurazione. Nel caso specifico si potrà definire un opportuno virtual host oppure aggiungere le seguenti righe a quello di default:

<Directory /var/www/roundcube>
        AllowOverride All
</Directory>
Alias /roundcube /var/www/roundcube

(la sezione container serve per consentire l'uso del file .htaccess fornito dal programma, alternativamente si può inserire il contenuto dello stesso al posto della direttiva AllowOverride All). Inoltre per ottimizzare le prestazioni conviene attivare i seguenti moduli di Apache:

a2enmod expires
a2enmod headers
a2enmod deflate

e modificare la configurazione di .htaccess (o della parte eventualmente inclusa nel virtual host) per l'uso di mod_headers come indicato nel file stesso a seconda della versione di Apache. Inoltre dato che il programma è scritto in PHP ovviamente sarà necessario disporre del relativo supporto per Apache, che qualora non presente dovrà essere installato con il pacchetto libapache2-mod-php5.

Si abbia cura di utilizzare la versione completa e non la dependent in quanto almeno fino a Squeeze il programma si lamenta di non avere la libreria Net_IDNA2 e non consente l'installazione. A partire dalla 0.9 è possibile utilizzare senza controindicazioni sia MySQL che _sqlite (con il passaggio a sqlite3) come database di supporto. S

Una volta riavviato Apache si potrà contattare la pagina di installazione all'indirizzo:

http://mio.server.address/roundcube/installer

e seguire la procedura di installazione per passi ivi descritta.

Il primo passo controlla la presenza delle dipendenze necessarie ed opzionali, segnalando cosa manca, nel nostro caso si sono installati i seguenti pacchetti ausiliari:

apt-get install php5-mcrypt php-pear php5-gd php5-intl php5-ldap\
                php-net-smtp php-mail-mime

ulteriori pacchetti sono necessari a seconda del database di supporto che si sceglie, se si intende usare sqlite si installi:

apt-get install php5-sqlite sqlite3

se si intende usare MySQL si installi:

apt-get install php5-mysql mysql-client

Una volta completata l'installazione delle dipendenze, si può passare al passo successivo che richiede l'immissione di una lunga serie di parametri di configurazione. La maggior parte di questi possono essere lasciati al loro valore di default, in sostanza ci sarà da cambiare soltanto quelli relativi alla connessione al database (mettendovi username, password e nome del database) e impostare quelli relativi all'indirizzo del server IMAP e SMTP che si vuole usare (usualmente localhost, supponendo che la webmail giri sul server di posta elettronica).

Si tenga presente che il programma necessita di un database (con MySQL, PostgresSQL o SQLite). Nel caso si intenda utilizzare MySQL andrà creato un database dedicato all'applicazione che deve essere opportunamente inizializzato. Per la creazione iniziale si può fare riferimento alle istruzioni generali riportate in MySQLInitConf, nel nostro caso si sono utilizzati i seguenti comandi (collegandosi da root):

CREATE DATABASE roundcubemail /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
GRANT ALL PRIVILEGES ON roundcubemail.* TO 'roundcube'@'localhost' IDENTIFIED BY 'pwdsegreta'; 

Una volta creato il database lo si dovrà inizializzare con lo schema fornito nei sorgenti del programma, nel nostro caso questo è stato fatto con il comando:

mysql -u roundcube -p roundcubemail < SQL/mysql.initial.sql

(questo passaggio pare non essere necessario nelle versioni più recenti del software che una volta generati ed installati i due file di configurazione come nel paragrafo precedente offre un pulsante di creazione dello schema direttamente dall'interfaccia web).

Qualora invece si intenda utilizzare sqlite si dovrà creare il database localmente nella directory di installazione con il comando:

sqlite3 -init SQL/sqlite.initial.sql sqlite.db

il comando rimane nella shell di sqlite per cui occorrerà uscire con .exit, una volta fatto questo si abbia cura di modificare proprietario e permessi del file con:

chmod 640 sqlite.db
chown www-data.www-data sqlite.db

ATTENZIONE: la parte su sqlite non è stata verificata, paiono esserci problemi con il supporto per sqlite3.

Infine il programma richiede che si imposti correttamente il parametro date.timezone di PHP, si modifichi pertanto in /etc/php5/apache2/php.ini la riga e si riavvii apache:

date.timezone = Europe/Rome

Una volta fatto questo la schermata di installazione dovrebbe riportare OK su tutti i campi necessari e consentire di proseguire nella configurazione presentando un pulsante NEXT, cliccato il quale verranno richiesti una serie di parametri di configurazione. Si abbia cura di indicare il database in uso, con i parametri di connessione standard per MySQL ed il pathname assoluto del file (nel caso precedente /var/www/roundcube/sqlite.db) per sqlite.

Si dovranno inoltre specificare gli indirizzi IP del server SMTP ed IMAP (in genere localhost) a cui si appoggia il programma. Si tenga presente che qualora dovecot sia stato configurato per utilizzare come auth_mechanism anche cram-md5 il programma fallisce l'autenticazione. La soluzione più immediata è disabilitare cram-md5 in dovecot.

Infine è necessario indicare la localizzazione da usare (it_IT). Fatto questo si potrà cliccare sul pulsante CREATE CONFIG.

Se si sono inseriti correttamente i parametri di configurazione a questo punto verrà generata una configurazione, ed illustrati passi da fare. In genere questo comporta prendere il testo generato e inserirlo negli opportuni file nella directory config (si può anche fare un taglia ed incolla del testo presentato direttamente in un editor). Detti file variano a seconda della versione, con la 1.0.1 si tratta soltanto di config.inc.php, in precedenza erano main.inc.php e db.inc.php.

Una volta inserita la configurazione sotto config si potrà passare al terzo passo che verificherà il funzionamento del tutto compresa la spedizione di una email ed il login al server IMAP, se non si ricevono errori si potrà disabilitare l'accesso alla directory di configurazione (come consigliato dall'interfaccia stessa) con il comando:

chmod 700 installer

(oppure spostandola in altra posizione rispetto all'installazione), anche se non essendo in grado di scrivere da nessuna parte non ha effetti significativi.

Configurazione Plugin

Il programma consente l'uso di numerosi plugin che ne estendono le funzionalità, da installare in altrettante sottodirectory nella directory plugins/, il loro uso però deve essere esplicitamente attivato con definendo la chiave di configurazione plugins, il cui default è essere una lista vuota. La variabile di configurazione deve essere definita alla lista dei nomi (corrispondente alla sottodirectory in cui li si sono installati) dei plugin, pertanto se si vogliono attivare i plugin managesieve e calendar, si dovrà definire:

$config['plugins'] = array('managesieve', 'jqueryui', 'calendar');

Di particolare interesse è il plugin password che consente di far effettuare il cambio password agli utenti con una pluralità di metodi, fra cui il più utile è quello via query SQL che consente una integrazione con Postfixadmin. In tal caso si dovrà configurare il plugin per poter scrivere sulla tabella di Postfixadmin su cui sono gestiti gli utenti. La cosa si può fare partendo dal file di configurazione plugins/password/config.inc.php.dist, da copiare come plugins/password/config.inc.php e modificare indicando le due configurazioni:

$config['password_db_dsn'] = 'mysql://postfixadmin:passwordlungaedifficile@localhost/postfixadmin';
$config['password_query'] = 'UPDATE mailbox SET password=%c WHERE username=%u LIMIT 1';

dove si è usata la query che è valida quando si è configurato Postfixadmin per salvare le password in formato md5crypt, vale a dire se in /etc/postfixadmin/config.inc.php si è usato $CONF['encrypt'] = 'md5crypt';

Un secondo plugin interessante per l'integrazione con Postfixadmin è rc-vacation, un plugin generico che consente di impostare i dati per un risponditore automatico, che di nuovo può essere fatto interagire con il DB di Postfixadmin. La configurazione seguente fa riferimento al pacchetto di Postfixadmin di Wheezy, configurato come nel truelite-mailhub. Occorre scaricare il plugin da gitub (si è usato il ramo master), e spostarlo in plugins/vacation, inserendolo con tale nome nella lista dei plugin di Roundcube, occorrerà poi copiare il file plugins/vacation/config.inc.php.dist, da copiare come plugins/vacation/config.inc.php e modificare le seguenti configurazioni:

$rcmail_config['vacation_sql_dsn'] =
        'mysql://postfixadmin:passwordlungaedifficile@localhost/postfixadmin';
$rcmail_config['vacation_sql_read'] =
        array(
                "SELECT
                        subject AS vacation_subject,
                        body AS vacation_message,
                        active AS vacation_enable
                FROM vacation
                WHERE email=%username AND domain=%email_domain;" 
                );
$rcmail_config['vacation_sql_write'] =
                array(
                        "DELETE FROM vacation WHERE email=%email AND domain=%email_domain;",
                        "INSERT INTO vacation (email,domain,subject,body,created,active)
                                VALUES (%email,%email_domain,%vacation_subject,%vacation_message,NOW(),%vacation_enable);",
                        "DELETE from vacation_notification WHERE on_vacation=%email;",
                        //remove auto, but keep custom aliases
                        "UPDATE alias SET goto = replace(goto, CONCAT(',',%email_local,'#',%email_domain,'@','autoreply.pharmades.it'),''), modified = NOW() 
                                WHERE address=%email AND domain=%email_domain;",
                        //add auto
                        "UPDATE alias SET goto = CONCAT(goto,',',%email_local,'#',%email_domain,'@','autoreply.pharmades.it'), modified = NOW() 
                                WHERE address=%email AND domain=%email_domain AND %vacation_enable=1;",
                );