# Dela data med &kontact; via IMAP

## Inledning

Jag letade under lång tid efter en lösning på problemen med hantering av personlig information för mitt lilla kontor, som skulle låta mig dela data, så att min sekreterare och jag skulle kunna dela kontakter, möten och så vidare. Eftersom jag är en &kde;-användare, hade jag hört talas om Kroupware-projektet, och väntade på att det skulle bli klart. Men när jag såg hur komplicerad arkitekturen och inställningen av Kolab servern 1.0 (projektets serversida) var, gav jag upp att vänta på den enklare Kolab 2.0. Hur som helst var Kolab klart för mycket för mina behov. Som tur var hittade jag en kort IRC-konversation på &kde;:s webbjournal som handlade om att dela data utan infrastrukturen i Kolab... Minsann, intressant!

För små kontor och behov, kan du låta &kontact; använda delad data utan att behöva installera Kolab-servern eller en annan grupprogramserver. Det kan fungera med bara en IMAP-server, som enkelt kan ställas in.

Mitt scenario är en server med Debians instabila version och &kde; 3.3.1. Jag kommer åt &kontact; och andra suveräna GNU/Linux-program från Windows med Cygwin/X, medan jag väntar på Wine-projektet för att kunna köra de sista Windows-program jag behöver (som inte är tillgängliga under GNU/Linux). Jag vill dela kontakter, händelser, aktiviteter och anteckningar med min sekreterare.

## Vad är IMAP

Den här definitionen kommer från ComputerUser.com High-Tech Dictionary:

> Internet Message Access Protocol. Ett protokoll som gör det möjligt för en användare att utföra vissa funktioner för elektronisk post på en fjärrserver istället för på en lokal dator. Via IMAP kan användaren skapa, ta bort eller byta namn på brevkorgar, hämta nya brev, ta bort brev och utföra sökfunktioner för brev. Ett separat protokoll krävs för att skicka brev. Kallas också för Internet Mail Access Protocol.

Det kan alltså anses vara en form av datalagring. För att använda det behöver du en IMAP-server, som Cyrus, Courier eller UW.

## Kolab eller IMAP?

Kolab ger möjlighet att dela data mellan olika klienter. Det gör det till exempel möjligt för din sekreterare att använda Outlook medan du använder &kontact;.

Du får ett inställningsgränssnitt som hanterar användare, inställning av e-postkonto, en central LDAP-server för inställningsdata och adressbok, filtrering av skräppost och virus, semesterskript, hantering av listor med ledig-upptagen, resurshantering (rum, bilar), grupper, distributionslistor, automatisk inbjudningshantering, etc.

Men det kan orsaka inledande inställningsproblem. För en nybörjare som jag, betyder det en lång frustrerande mardröm, och för mycket komplexitet att hantera när det väl fungerar. Så, nej tack, jag går till det enkla IMAP.

## Hur man ställer in IMAP-servern Cyrus

Mitt val är Cyrus, som är en del av uppsättningen programvara i Kolab, så om jag går vidare till Kolab i framtiden, så är jag åtminstone bekant med det.

Låt oss börja installationen och inställningen!

Logga in som `root`.

    # apt-get install cyrus21-imapd cyrus21-common cyrus21-admin cyrus21-client sasl-bin sasl2-bin
    Installing cyrus21-imapd... Installationen frågar något jag inte förstår om en sökadress...
    Jag tryckte bara på retur..

Installationen skapar också användaren `cyrus` som finns i gruppen `sasl` (som skapas automatiskt), som är ägaren av alla Cyrus filer. Till sist kan du hitta de nya processerna `cyrmaster` och `notifyd` med `ps `-A``.

Det riktiga problemet för att ställa in Cyrus är behörighetskontrollen, bara på grund av att det inte är trivialt och att jag är en nybörjare, med begränsad kunskap om vad jag gör.

Cyrus kan använda olika SASL-mekanismer (Simple Authentication and Security Layer), där den förvalda är sasldb (den lagrar användarnamn och lösenord i den hemliga SASL-filen `sasldb`), men också getpwent, kerberos4, kerberos5, PAM, rimap, shadow och LDAP stöds.

Eftersom jag inte vill definiera användare och lösenord som skiljer sig från de som jag använder för att komma åt min &Linux;-dator, väljer jag mekanismen shadow, så att Cyrus använder &Linux; lösenord för behörighetskontroll.

För att göra det måste man tala om för SASL att använda `saslauthd` som metod för behörighetskontroll av lösenord, och därefter ställa in `saslauthd` att använda shadow (eller getpwent) som behörighetskontrollmekanism.

Ok, låt oss börja!

Som `root`, ändra Linux lösenord för användaren `cyrus`:

    # passwd cyrus

Skriv in lösenordet du vill ha (och kan komma ihåg). I det här exemplet använder vi cyrus som administratörslösenord för cyrus.

    # vi /etc/imapd.conf

    sasl_pwcheck_method: saslauthd instället för det förvalda auxprop

ta bort tecknet `#` från raden:

    #admins: cyrus

på detta sätt kan du administrera cyrus, genom att logga in som användaren `cyrus`. (Vilken fantasi jag har!)

    # vi /etc/default/saslauthd

Ta bort kommentaren från raden:

    # START=yes

(annars startar inte saslauthd när datorn startas, även om den refereras till i någon `/etc/rcx.d`!)

och skriv istället för `MECHANISMS="pam"` in `MECHANISMS="shadow"`. På så sätt körs kommandot `saslauthd` `-a `shadow`` när datorn startas.

När du väl har avslutat editorn, starta om sasl och cyrus.

För att testa IMAP:

    su cyrus
    $ imtest -m login -p imap localhost

Du blir tillfrågad om (användarens) lösenord för `cyrus`, så skriv in det.

Om behörighetskontrollen för användaren `cyrus` lyckas, visas följande rader:

    S: L01 OK User logged in
    Authenticated.

För att avsluta, skriv `. logout` (dvs. punkt mellanslag logout)

Lägg nu till en användare som heter `groupware` och ange ett lösenord för den, med de vanliga systemverktygen. Den ska vara i en grupp utan privilegier, såsom `nobody` och kräver inte ett inloggningsskal eller en hemkatalog.

Nu måste man också skapa användaren och IMAP i cyrus:

    # cyradm --user cyrus localhost
    efter att ha skrivit in lösenord för administratörsanvändaren cyrus, får du promptern localhost>
    localhost> cm user.groupware
    localhost> lm  listar brevkorgarna du just skapat
    user.groupware(\HasNoChildren))
    localhost> quit

Du kan skriva ``help`` för att se en lista med tillgängliga kommandon.

Du kan kontrollera vad som har hänt med:

    # 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

Nu ska du kunna ansluta med en IMAP-klient som användaren `groupware` och se `INBOX`.

Att välja brevkorgen `INBOX` är ett magiskt ord i IMAP-protokollet, ett sorts alias för katalogstrukturen ovan. Klienten ser `INBOX`, och IMAP-servern avbildar den på katalog- och filstrukturen i `/var/spool/cyrus/mail/...`.

## Hur man ställer in &kontact;-klienter

Jag ansluter till min GNU/Linux kontorsserver (en sorts "svart låda" utan bildskärm och tangentbord) från två &Windows; 2000 datorer med Cygwin/X, och använder dem som X-Window servrar (i en nära framtid hoppas jag kunna ersätta båda med två Mini-itx tunna klienter som använder LTSP). Med den här inställningen, kör alla användare &kontact; på samma dator som Cyrus är installerad och kör (localhost).

För att få &kontact; att fungera med IMAP, måste följande steg genomföras:

1. Skapa ett IMAP-konto på Cyrus för pseudoanvändaren `groupware` (redan tidigare gjort)

2. Skapa och ställ in ett IMAP-konto i &kmail; för att logga in som användaren

3. Använd kresources för att får &kontact;-komponenter att fungera med data som tas från en IMAP-källa

4. Aktivera grupprogramfunktioner och skapa motsvarande underkorgar för denna IMAP `INBOX` (om det inte redan är gjort)

5. Njut av &kontact; och dela data via Cyrus IMAP

Logga alltså in på &kde; med det första riktiga användarkonto som du vill ge grupprogramfunktioner.

Låt oss skapa IMAP-kontot i &kmail;.

Kör &kontact; och välj Brev (&kmail;-komponenten). Välj Inställningar Anpassa Kmail Konton Ta emot i menyn. Klicka på knappen Lägg till.... Du blir tillfrågad om typ av e-postkonto, välj Nerkopplad IMAP (inte bara IMAP). Skriv därefter in följande data under fliken Allmänt:

Kontonamn: `kontor`

- Ett namn som används för den lokala korg som pekar på IMAP-kontot.

Användarnamn: `groupware`

- Användaren i Cyrus som vi har valt som ägare av all kontorsdata

Lösenord:

- Lösenordet för användaren `groupware`.

Värddator: `localhost`

- Kom ihåg att i vårt exempel kör &kontact;-klienten på samma dator som IMAP-servern

Port: `143`

- Förvald

Markera Lagra IMAP-lösenord så att du inte blir tillfrågad om det nästa gång du kör &kontact;. Markera Aktivera kontroll av nya brev med jämna mellanrum och ställ in ett värde i minuter.

Observera att vi har markerat kontotypen nerkopplad IMAP. Det får effekten att en kopia av grupprogramdata lagras lokalt på klienten (under hemkatalogen), och att det synkroniseras varje gång klienten ansluter. De verkar mycket ineffektivt, eftersom data dupliceras många gånger (dvs. om du har 10 användare som utnyttjar &kontact;, har du 10+1 mängden data), men det är det enda sättet att få allt att gå snabbt, eftersom vid varje anslutning måste &kontact; hämta all data och låta &korganizer; och &kaddressbook; tolka den. Om du använder nerkopplad IMAP lagras data lokalt, och bara delta (dvs data som har ändrats) skickas.

Å andra sidan, om användarna kör &korganizer; på samma dator som kör IMAP-servern, verkar det rimligt att använda IMAP (som kallas uppkopplad IMAP) för att spara utrymme, eftersom överföringshastighet inte bör vara ett problem. Men tyvärr fungerar inte det, eftersom &kontact; inte automatiskt uppdaterar korgen Kalender med uppkopplad IMAP, så du ser inga uppdateringar när någon lägger till händelser (du måste manuellt byta till programmet &kmail; och klicka på katalogen Kalender). Dessutom, när korgen Kalender läses vid start, kan du se ett enormt flimmer och långsam uppdatering av data.

Nu måste vi tala om för &kontact; att använda IMAP som datakälla för de olika komponenterna. Välj Kör kommando i K-menyn, och kör ``kcmshell kresources``. Välj contact i kombinationsrutan, klicka därefter på knappen Lägg till... och välj Adressbok på IMAP-server via Kmail. Markera därefter den nya raden och klicka på knappen Använd som standard. Gör samma sak för calendar och notes.

Nu måste vi aktivera &kmail;s grupprogramfunktion (och som en konsekvens hela &kontact;):

1. Välj Inställningar Anpassa Kmail Diverse Grupprogram i menyn

2. Markera Aktivera IMAP-resursfunktion

3. Välj Engelska som Språk för grupprogramkorgar (det görs ifall du redan har korgar på IMAP-servern som är skapade av ett annat program med ett annat språk).

4. Gå nu till Resurskorgar är underkorgar till och välj underkorgen Inkorg i korgen kontor.

   Lämna Dölj grupprogramkorgar omarkerat för tillfället, så att vi kan se vad som händer. Du kan komma tillbaka hit och markera det så fort allt är klart.

5. När du klickar på Ok visas: `&kmail; skapar nu nödvändiga korgar för IMAP-resursen som underkorgar till Inkorg`

   Om du inte vill göra det, klicka på Nej, så inaktiveras IMAP-resursen. Klicka på Ja (det här händer bara första gången med den första riktiga användaren). Du ser omedelbart att i &kmail;s korgträd, under kontor Inkorg har följande underkorgar skapats:

   - Kalender
   - Kontakter
   - Anteckningar
   - Aktiviteter
   - Journal

   om du nu skriver:

       # 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

   Som du ser är inte kontor/Inkorg lagrad lokalt i &kontact;s nuvarande användares hemkatalog, utan i korgarna hos IMAP användaren `groupware`.

Nu är &kontact; klart att arbeta och lagra data där. I kalenderprogrammet, när &kmail; IMAP-kontot har typen nerkopplat, ska fönstret Kalender visa objektet IMAP-resurs med tre underobjekt, som är sökvägar till filer i den lokala hemkatalogen. Istället visar inte programmet Kontakter underobjekt nedanför IMAP-resurs.

Du kan nu logga in på &kde; med ett annat användarnamn och ställa in hans eller hennes &kontact;-klient på ett liknande sätt:

1. Öppna &kontact; och lägg till ett IMAP-konto i komponenten Brev, som anger datorn där Cyrus-servern kör som värddator (i mitt fall: `192.168.1.3`).

   Kom ihåg att markera Aktivera kontroll av nya brev med jämna mellanrum och ställa in ett värde i minuter. När du bekräftar, blir du inte tillfrågad om att skapa underkorgar (eftersom de finns på IMAP-servern), och du ser dem i korgträdet.

2. Aktivera grupprogramfunktioner för att kunna spara data på IMAP-servern.

Se upp med att i nerkopplad IMAP överförs data från en klient till IMAP-servern bara när klienterna ansluter för att kontrollera post. Så om du har &kontact;-klienter med kontroll av nya brev med jämna mellanrum på till exempel 5 minuter, har du i värsta fall en 10 minuters fördröjning mellan tiden då händelsen skapas och när den visas för andra användare.

## Hur man ställer in läsåtkomst

Se upp med att det är bekräftat att IMAP-implementeringen av Anteckningar i &kontact; tidigare än version 1.01 är felaktig, så att inställningen fungerar inte för dem. Om du vill utnyttja dem, måste du använda den föregående inställningen.

I föregående inställning har vi samma pseudoanvändare som heter `groupware`, som används av alla riktiga &kontact;-användare (dvs. `tony`, `rohn`, `amanda`, etc.) via IMAP-kontot med dess inloggning och lösenord. Men på detta sätt har alla riktiga användare samma läs- och skrivrättigheter som andra, eftersom alla ansluter som användaren `groupware` till IMAP-servern.

För att begränsa åtkomst för vissa användare (typiskt för att bara ge läsåtkomst), kan vi använda ACL (Access Control Lists).

Välj en underkorg till kontor i &kmail;, till exempel Kalender, och högerklicka med musen. Välj fliken Egenskaper Åtkomstkontroll. Här kan du skriva in användare som du vill ge tillgång till katalogen och vad de kan göra.

Bara för att göra ett experiment med att utbyta händelser, ger vi Alla rättigheter till användaren `anna`.

På nivån cyrus (på datorn som kör IMAP-servern cyrus, med verktyget Cyrus), måste vi först lägga till användaren `anna`, så att det blir en användare som känns igen av IMAP, och skapa en IMAP-korg åt henne.

Därefter loggar vi in på GNU/Linux som `anna` och startar &kontact;. Som tidigare visats, ställer vi in ett IMAP-konto i &kmail; med samma data men för användaren (istället för pseudoanvändaren `groupware` och dess lösenord, använder vi `anna` och hennes lösenord).

I &kmail;s korgträd ser du följande struktur den här gången: kontor användare groupware Kalender och Aktiviteter. Kontrollera posten (Arkiv Kontrollera post) så har du också en Inkorg under kontor.

Aktivera nu &kmail;s grupprogramfunktion, och skriv in Inkorg som är underkorg till kontor för Resurskorgar är underkorgar till.

Aktivera nu &kmail;s grupprogramfunktion, och skriv in Inkorg som är underkorg till kontor för Resurskorgar är underkorgar till.

Nu har du två korggrenar under kontor:

1. Inkorg med Kalender, Kontakter, Anteckningar, Aktiviteter och Journal, som sparas under `anna` i IMAP-korgen på IMAP-servern.

2. användare med underkorgen groupware och underkorgarna som `anna` har tillgång till (i detta exempel, Kalender och Aktiviteter)

Högerklicka på användare Kalender och kontrollera om den har typen Kalender (om inte, ändra den till det), och dessutom om användare Aktiviteter har typen Aktiviteter.

I Kalender har du nu två tillgängliga IMAP-resurser att skriva till, så om du skapar en ny händelse, blir du tillfrågad om vilken som ska användas (och om du lämnade den lokala resursen tillgänglig, har du tre).

Du måste gå till det lilla fönstret nere till vänster i Kalendern, det som visar tillgängliga resurser, och avmarkera de som inte pekar på sökvägen .groupware.directory (titta på slutet av varje resurssökväg).

## Tack till

Jag är en nybörjare, och har bara bidragit till denna guide med min tid och kraft. För kunskapen måste jag tacka några personer i Freenode-kanaler för deras kompetens, tålamot och hjälpsamhet.

## Särskilt tack till:

- För Cyrus IMAP delen i kanalen #cyrus:

  - [protagonist] Andy Morgan morgan@orst.edu

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

- För &kontact; delen i kanalen #kontact:

  - [till] Till Adam adam@kde.org

  - [dfaure] David Faure faure@kde.org

  - [mdouhan] Matt Douhan matt@fruitsalad.org

Tack så mycket, allihop!

Ja, och så jag själv: [markit] Marco Menardi mmenaz@mail.com

## Ytterligare litteratur

## Referens

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

- &kontact;s webbplats: http://www.kontact.org

- Kroupware-projektet http://www.kroupware.org

- &kde;:s gemenskaps webbjournal: http://wiki.kde.org

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

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

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