# Condividere dati con &kontact; usando IMAP

## Introduzione

Per il mio piccolo ufficio, ho cercato a lungo una soluzione PIM che mi permettesse di condividere i dati, in modo che la mia segretaria ed io potessimo condividere i contatti, gli appuntamenti eccetera. Come utente &kde;, avevo sentito parlare del progetto Kroupware, ed ne ho aspettato il completamento. Ma quando ho visto quanto fosse complicata l'architettura e la configurazione del server Kolab 1.0 (il lato server del progetto), ho rinunciato, in attesa di una versione di Kolab 2.0 più semplice da dispiegare. In ogni caso, Kolab era comunque sovradimensionato per le mie esigenze. Fortunatamente sul wiki di &kde; ho trovato dei frammenti di conversazione da IRC dove si parlava della condivisione di dati senza usare l'infrastruttura Kolab... Ah, interessante!

Per le necessità di piccoli uffici, si può fare in modo che &kontact; usi dati condivisi senza dover installare il server Kolab o altri backend per groupware. Si può far funzionare semplicemente con un server IMAP, che può essere configurato semplicemente.

Il mio scenario di utilizzo è un server con Debian unstable e &kde; 3.4. Accedo a &kontact; e agli altri ottimi applicativi GNU/Linux da Windows usando Cygwin/X, aspettando che il progetto Wine sia in grado di eseguire i programmi per Windows che mi servono (e che non sono disponibili in GNU/Linux). Voglio condividere i contatti, gli eventi, le cose da fare e le note con la mia segretaria.

## Che cos'è IMAP

La definizione è presa da ComputerUser.com High-Tech Dictionary:

> Internet Message Access Protocol. Un protocollo che permette ad un utente di effettuare certe funzioni di posta elettronica su un server remoto piuttosto che sulla macchina locale. Attraverso IMAP l'utente può creare, eliminare, o rinominare caselle di posta, ricevere nuovi messaggi, eliminare messaggi, ed eseguire ricerche sulla posta. Per la spedizione della posta è necessario un protocollo separato. Chiamato anche Internet Mail Access Protocol

Quindi può essere considerato un sistema di conservazione di dati. Per usarlo è necessario un server IMAP come Cyrus, Courier o UW.

## Kolab o IMAP?

Kolab ha l'abilità di condividere dati tra diversi client. Ad esempio, rende possibile che la tua segretaria usi Outlook e che tu usi &kontact;.

Ha un'interfaccia di configurazione che permette la gestione degli utenti, la configurazione dell'account di posta, un server centralizzato LDAP con i dati di configurazione e la rubrica degli indirizzi, filtraggio di spam e virus, script per le assenze, gestione della lista libero/occupato, gestione risorse (stanze, automobili), gruppi, liste di distribuzione, gestione automatica degli inviti &etc;

Ma tutto questo può causare problemi durante l'installazione iniziale. Per un principiante come me, questo significa: un lungo e frustrante incubo, e troppa complessità da gestire una volta che funziona. Per cui no, grazie, userò semplicemente IMAP.

## Come configurare il server IMAP Cyrus

La mia scelta è Cyrus, che fa parte della raccolta di programmi Kolab, così mi sarà più facile il passaggio se sceglierò di passare a Kolab in futuro.

Partiamo con l'installazione e la configurazione!

Diventa `root`.

    # apt-get install cyrus21-imapd cyrus21-common cyrus21-admin cyrus21-client sasl-bin sasl2-bin
    Installing cyrus21-imapd...L'installazione chiede qualcosa che non ho capito. Ho semplicemente premuto Enter.

L'installazione ha anche creato l'utente `cyrus` che è nel gruppo `sasl` che è il proprietario di tutti i file di cyrus. Alla fine, con il comando `ps `-A`` puoi trovare i nuovi processi: `cyrmaster` e `notifyd`.

Il vero problema nella configurazione di Cyrus è l'autenticazione, semplicemente perché non è banale e sono un principiante, con una conoscenza limitata su quello che faccio.

Cyrus può usare diversi meccanismi SASL (Simple Authentication and Security Layer, un semplice strato di autenticazione e sicurezza), quello predefinito è sasldb (conserva i nomi utente e le password nel file dei segreti di SASL `sasldb`), ma sono utilizzabili anche getpwent, kerberos4, kerberos5, PAM, rimap, shadow e LDAP.

Dato che non voglio definire e nomeutente/password diversi da quelli che uso normalmente per accedere alla macchina &Linux;, ho scelto il meccanismo shadow in modo che Cyrus usi le password di &Linux; per l'autenticazione.

Per fare questo bisogna dire a sasl di usare `saslauthd` come metodo di autenticazione delle password, e poi configurare `saslauthd` perché usi shadow (o getpwent) come meccanismo di autenticazione.

Va bene, partiamo!

Come `root`, cambia la password Linux dell'utente `cyrus`:

    # passwd cyrus

Inserisci la password che preferisci (e che ricorderai). Per questo esempio useremo pippo come password di amministrazione di cyrus.

    # vi /etc/imapd.conf

    sasl_pwcheck_method: saslauthd invece del valore predefinito auxprop

elimina il commento `#` dalla riga:

    #admins: cyrus

in questo modo puoi amministrare cyrus usando l'utente `cyrus` (che fantasia, eh!)

    # vi /etc/default/saslauthd

Scommenta la riga:

    # START=yes

(altrimenti il demone saslauthd non partirà a tempo di boot, anche se è referenziato in qualche file `/etc/rcx.d`!)

ed invece di `MECHANISM="pam"` inserisci `MECHANISM="shadow"`. In questo modo alla partenza verrà eseguito il comando `sslauthd` `-a `shadow``.

Una volta uscito dall'editor, riavvia sasl e cyrus.

Per verificare il funzionamento di IMAP:

    su cyrus
    $ imtest -m login -p imap localhost

Ti verrà richiesta la password dell'utente `cyrus`, quindi inseriscila.

Se l'utente `cyrus` è autenticato correttamente, appariranno le seguenti righe:

    S: L01 OK User logged in
    Authenticated.

Per uscire scrivi `. logout` (&ie; punto spazio logout)

Ora aggiungi un utente chiamato `groupware` ed impostagli una password usando i soliti strumenti del sistema. Dovrebbe essere messo in un gruppo senza privilegi come `nobody`, e non ha bisogno di una shell di login o di una directory home.

Ora devo creare anche l'utente IMAP anche in cyrus:

    # cyradm --user cyrus localhost
    dopo aver inserito la password per l'utente di amministrazione cyrus, vedrai localhost>
    localhost> cm user.groupware
    localhost> lm elenca la casella postale appena creata
    user.groupware (\HasNoChildren))
    localhost> quit

Puoi scrivere ``help`` per ottenere un elenco dei comandi disponibili.

Puoi controllare che cosa è successo con:

    # ls -l /var/spool/cyrus/mail/g/user/groupware
    total 12
    -rw------- 1 cyrus mail          4 Oct 29 20:55 cyrus.cache
    -rw------- 1 cyrus mail 155 Oct 29 20:55 cyrus.header
    -rw------- 1 cyrus mail 76 Oct 29 20:55 cyrus.index

Ora dovresti poterti connettere con un client IMAP come utente `groupware` e vedere l'`INBOX`.

Nel protocollo IMAP, selezionare la casella di posta `INBOX` è una specie di parola magica, una specie di alias per la struttura di directory descritta sopra. Il client vede `INBOX`, ed il server IMAP la mappa sulla cartella e struttura di file `/var/spool/cyrus/mail/...`.

## Come configurare i client &kontact;

Mi connetto al PC server GNU/Linux (una specie di "scatola nera" senza monitor né tastiera) da due PC &Windows; 2000 con Cygwin/X, usandoli come server X-Window (nel prossimo futuro spero di sostituirli con due thin-client mini-itx con LTSP). Con questa configurazione, tutti gli utenti fanno girare &kontact; sulla stessa macchina dove risiede e viene eseguito anche Cyrus (host locale).

Per fare in modo che &kontact; usi un account IMAP, bisogna completare i seguenti passi:

1. Crea un account IMAP su Cyrus per il finto utente `groupware` (già fatto precedentemente!)

2. Crea/configura un account IMAP in &kmail; per l'accesso come tale utente

3. Usa kresources per far funzionare i componenti di &kontact; con i dati presi da una fonte IMAP

4. Abilita la funzionalità di groupware e rendi `INBOX` le sottocartelle correlate di questo IMAP (se non lo sono già)

5. Divertiti con &kontact; ed i dati condivisi usando Cyrus IMAP

Ora accedi a &kde; con il primo account da vero utente a cui vuoi fornire la funzionalità di groupware.

Creiamo l'account IMAP in &kmail;.

Esegui &kontact; e seleziona Posta (il componente &kmail;). Dal menu scegli la scheda Impostazioni Configura KMail Account Ricezione, premi il pulsante Aggiungi.... A questo punto ti verrà chiesto di inserire il tipo di account di posta elettronica che possiedi e scegli IMAP disconnesso (non solo IMAP). Nella scheda Generale inserisci:

Nome account: `office_gwdata`

- Il nome che verrà usato per la cartella locale che punta a questo account IMAP.

Login: `groupware`

- L'utente di Cyrus che abbiamo scelto come il proprietario di tutti i dati dell'ufficio

Password:

- La password dell'utente `groupware`.

Host: `localhost`

- Ricorda che per il nostro esempio, il client &kontact; è eseguito sullo stesso computer del server IMAP

Porta: `143`

- La porta predefinita

Marca la casella Memorizza password IMAP in modo che non ti venga chiesta la password ogni volta che esegui &kontact;. Marca anche Abilita il controllo periodico della posta ed inserisci un valore in minuti.

Nota che abbiamo selezionato il tipo di account IMAP disconnesso. Questo ha come effetto che una copia dei dati groupware sono salvati localmente nel client (nella cartella home), e viene sincronizzato ogni volta che il client si connette. Questo sembrerebbe essere molto inefficiente, dato che i tuoi dati sono duplicati più volte (&ie; se hai 10 utenti che usano &kontact; tu hai 10+1 volte i dati), ma questo è l'unico modo per far funzionare velocemente le cose perché altrimenti ad ogni connessione &kontact; dovrebbe scaricare tutti i dati e &korganizer; e &kaddressbook; li interpretano. Se usi IMAP disconnesso i dati sono memorizzati localmente e solo il delta (&ie; i dati che sono cambiati) vengono inviati.

D'altro canto, se gli utenti avviano &korganizer; nello stesso PC che esegue il server IMAP, è ragionevole usare IMAP (che è chiamato IMAP in linea) per risparmiare spazio dato che la velocità di trasferimento non dovrebbe essere un ostacolo. Sfortunatamente questo non funziona perché &kontact; non aggiorna automaticamente la cartella Calendario in IMAP in linea e quindi non vieni aggiornato quando qualcuno aggiunge eventi (devi passare manualmente a &kmail; e fare clic sulla cartella Calendario). Oltre a questo, all'avvio non legge le cartelle Calendario, potresti vedere un lampeggiamento tremendo e un aggiornamento lento dei dati.

Ora dobbiamo dire a &kontact; di usare IMAP come fonte dei dati per i suoi vari componenti. Da &kmenu;, scegli Esegui comando, e avvia ``kcmshell kresources``. Dalla casella combinata seleziona Contatti, poi premi Aggiungi... e scegli Rubrica su server IMAP via KMail. Poi seleziona la nuova riga e premi il pulsante Usa come standard. Fai lo stesso per Calendario e Note.

Ora dobbiamo attivare la funzionalità di groupware di &kmail; (e di conseguenza, di tutto &kontact;):

1. Scegli dal menu Impostazioni Configura KMail Varie Groupware

2. Marca la casella Abilita funzionalità risorsa IMAP

3. Scegli Inglese come Lingua per le cartelle groupware (questo in caso che abbia già le cartelle del server IMAP create da un programma diverso in una lingua diversa).

4. Ora spostati su Le cartelle delle risorse sono sottocartelle di e seleziona la cartella Posta in arrivo della cartella office_gwdata.

   Per ora, non marcare Nascondi cartelle di groupware, in modo da vedere che cosa succede. Puoi tornare qui e marcare la casella una volta che tutto è chiaro.

5. Dopo aver premuto OK ti verrà notificato: `&kmail; adesso creerà le cartelle richieste per le risorse IMAP come sotto-cartelle della posta in arrivo`

   Se non vuoi fare questo, premi No e la risorsa IMAP sarà disabilitata. Premi Sì (questo capita solo la prima volta con il primo utente reale). Vedrai immediatamente che nell'albero delle cartelle di &kmail;, sotto office_gwdata Posta in arrivo sono state create queste cartelle:

   - Calendario
   - Contatti
   - Note
   - Incarichi
   - Diario

   se ora esegui il comando:

       # ls -l /var/spool/cyrus/mail/g/user/groupware/
       drwx------ 2 cyrus mail 144 Oct 31 16:36 Calendar
       drwx------ 2 cyrus mail 144 Oct 31 16:36 Contacts
       drwx------ 2 cyrus mail 144 Oct 31 16:36 Journal
       drwx------ 2 cyrus mail 144 Oct 31 16:36 Notes
       drwx------ 2 cyrus mail 144 Oct 31 16:36 Tasks
       -rw------- 1 cyrus mail      4 Oct 31 15:28 cyrus.cache
       -rw------- 1 cyrus mail 155 Oct 29 20:55 cyrus.header
       -rw------- 1 cyrus mail 76 Oct 31 15:28 cyrus.index

   Come vedi, office_gwdata inbox non è conservata nella cartella home dell'utente attuale di &kontact;, ma nelle cartelle dell'utente `groupware` di IMAP.

Ora &kontact; è pronto per funzionare e memorizzare i dati dove hai indicato. Nell'applicazione calendario, se l'account IMAP di &kmail; era di tipo disconnesso, la finestra delle risorse dovrebbe mostrare la voce Risorsa IMAP con tre sotto-voci che sono percorsi per file home locali. Invece l'applicazione dei Contatti non mostra sotto-voci al di sotto di Risorsa IMAP.

Puoi ora accedere a &kde; con un nome utente diverso e configurare il suo client &kontact; in modo simile:

1. Apri &kontact; e nel componente della Posta aggiungi un account IMAP che specifichi come host il computer in cui è in esecuzione il server Cyrus (nel mio caso: `192.168.1.3`).

   Ricorda di marcare la casella Abilita controllo periodico della posta e di configurare l'intervallo in minuti. Quando confermi, ti verrà chiesto se creare le sottocartelle (visto che sono sul server IMAP), e compariranno nell'albero delle cartelle.

2. Attiva la funzionalità di groupware per poter memorizzare i dati sul server IMAP.

Attenzione, con IMAP disconnesso, i dati sono trasmessi da un client ad un server IMAP solo quando il client si connette per controllare la nuova posta. Quindi, se hai i client di &kontact; con un intervallo di controllo della posta di, ad esempio, 5 minuti, nel caso peggiore ci saranno 10 minuti di ritardo tra la scrittura dell'evento e la sua apparizione agli altri utenti.

## Come avere l'accesso in sola lettura

Attenzione! Mi è stato confermato che l'implementazione delle note di IMAP delle versioni precedenti alla 1.01 di &kontact; non funziona, quindi questa configurazione non è valida in questo caso, e se vuoi usarle, devi usare la configurazione precedente.

Nell'impostazione precedente, avevamo lo stesso untente finto, chiamato `groupware`, che è usato da tutti gli utenti veri di &kontact; (&ie;`tonio`, `ronaldo`, `amanda`, &etc;) attraverso l'account IMAP con la sua login e password. Ma in questo modo ogni utente ha gli stessi permessi di scrittura e lettura di tutti gli altri, perché tutti si connettono come `groupware` al server IMAP.

Per limitare le possibilità di accesso ad alcuni utenti (tipicamente, fornendo accesso in sola lettura), possiamo usare le liste di controllo sull'accesso (ACL).

Seleziona in &kmail; una sottocartella di office_gwdata, per esempio Calendario a fai clic con il pulsante destro del mouse. Seleziona la scheda Proprietà Controllo accesso. Qui puoi inserire gli utenti che vuoi abbiano accesso a questa cartella e puoi decidere cosa possono fare.Seleziona in &kmail; una sottocartella di office_gwdata, ad esempio Calendario, e fai un clic con il tasto destro del mouse. Seleziona Proprietà e poi la scheda Controllo di accesso. Da qui puoi inserire gli utenti a cui dare accesso a questa cartella e che cosa possono fare.

Tanto per provare a scambiare degli eventi, daremo Tutti i permessi all'utente `mary`

A livello di cyrus (nel PC che esegue il server IMAP con l'applicazione cyrus), dobbiamo aggiungere, prima di tutto, l'utente `mary` in modo che sia un utente IMAP riconosciuto e creare una cartella IMAP per lei.

A questo punto accediamo al sistema GNU/Linux come `mary` ed entriamo in &kontact;. Come mostrato prima, impostiamo un account IMAP in &kmail; con gli stessi dati ma con il nome utente giusto (invece dell'utente fittizio `groupware` e la sua password, useremo l'utente `mary` con la sua password).

Nell'albero delle cartelle di &kmail; questa volta vedrai questa struttura: office_gwdata utente groupware Calendar and Tasks. Controlla la posta (File Controlla la posta) e troverai anche una cartella Posta in arrivo sotto office_gwdata.

Ora attiva la funzionalità di groupware di &kmail; ed inserisci l'inbox che è una sotto-cartella di office_gwdata in Le cartelle risorse sono sotto-cartelle di.

Ora attiva la funzionalità di groupware di &kmail; ed inserisci l'inbox che è una sotto-cartella di office_gwdata in Le cartelle risorse sono sotto-cartelle di.

Ora avrai due rami di cartelle sotto office_gwdata:

1. inbox con il Calendario, i Contatti, le Note, gli Incarichi ed il Diario, che sono conservati in nella cartella IMAP `mary` sul server IMAP

2. user, con sottocartella groupware e le sottocartelle a cui `mary` ha accesso (in questo esempio, Calendario e Incarichi)

Fai clic con il &RMB; sul Calendario dell'utente e controlla se è di tipo Calendario (se non è così, modificala in modo che lo sia), ed anche se i Compiti xxx impegni? come è nell'interfaccia? sono di tipo Compito.

Ora nel calendario hai due risorse IMAP disponibili su cui scrivere, quindi, quando creerai un nuovo evento, ti verrà chiesto quale risorsa usare (se hai lasciato disponibile anche le risorse locali, ne avrai tre!).

Devi andare nell'area in basso a sinistra della finestra del calendario, quella che mostra le risorse disponibili, e disattivare le risorse che non puntano al percorso .groupware.directory (guarda la parte finale del percorso di ciascuna risorsa).

## Riconoscimenti

Sono un principiante, e per questa guida ho solo fornito il mio tempo e la mia volontà. Per la conoscenza devo veramente ringraziare varie persone sui canali di freenode per la loro competenza, la pazienza e gentilezza.

## Ringraziamenti particolari per:

- Per la parte su Cyrus IMAP sul canale #cyrus:

  - [protagonist] Andy Morgan morgan@orst.edu

  - [plixed] Okke Timm okke.timm@web.de

- Per la componente &kontact; sul canale #kontact:

  - [till] Till Adam adam@kde.org

  - [dfaure] David Faure faure@kde.org

  - [mdouhan] Matt Douhan matt@fruitsalad.org

Grazie mille, ragazzi!

Ah, e ci sono anche io, [markit] Marco Menardi mmenaz@mail.com

## Approfondimenti

## Riferimenti

- KDE: http://www.kde.org

- Sito web di &kontact;: http://www.kontact.org

- Il progetto Kroupware: http://www.kroupware.org

- Il wiki della comunità di &kde;: http://wiki.kde.org

- Progetto Wine: http://www.winehq.org

- Progetto Cygwin/X http://x.cygwin.com

- Progetto LTSP: http://www.ltsp.org