Marco
Menardi
gnu@kde.org

&Rinse.Devries;

# Gegevens delen met &kontact; via IMAP

## Inleiding

Voor mijn klein kantoor was ik lange tijd op zoek naar een PIM-oplossing waarmee ik gegevens kon delen, zodat mijn secretaressen en ik contactpersonen, afspraken etc met elkaar. als &kde;-gebruiker had ik gehoord van het Kroupware-project en wachtte ik op de voltooiing ervan. Maar toen ik zag hoe complex de architectuur en opzet van Kolab-server 1.0 was (de serverzijde van het project), gaf ik het op en wachtte ik op een eenvoudigere manier om Kolab 2.0. In elk geval was Kolab duidelijk teveel voor wat ik nodig had. Gelukkig vond ik in de &kde;-wiki een gedeelte van een IRC-conversatie waarin werd gesproken over het delen van gegevens zonder de Kolab-infrastructuur... mmm erg interessant!

Voor het midden en kleinbedrijf kunt u met &kontact; gegevens delen zonder dat u de Kolab-server of een andere groupware-backend hoeft te installeren. Het kan door middel van een IMAP-server, welke vrij eenvoudig op te zetten is.

Mijn scenario is een server met als besturingssysteem 'Debian unstable' en &kde; 3.4.1. Ik kreeg vanuit Windows toegang tot &kontact; en andere GNU/Linux-toepassingen door middel van Cygwin/X, terwijl ik wachtte totdat het Wine-project in staat zou zijn om de laatste Windows-programma's die ik nodig heb (en die niet beschikbaar zijn voor GNU/Linux) kon draaien. I wilde mijn contactpersonen, evenementen, taken en notities delen met mijn secretaresse.

## Wat is IMAP

Dit is een vertaling de definitie uit de ComputerUser.com High-Tech Dictionary:

> Internet Messages Acces Protocol: een protocol dat het een gebruiker toestaat om bepaalde functies inzake elektronische post uit te voeren op een server op afstand in plaats van op een lokale computer. Door middel van IMAP kan de gebruiker postbussen aanmaken, verwijderen of hernoemen; nieuwe berichten ophalen, berichten verwijderen en zoekfuncties uitvoeren op berichten. Er is een separaat protocol nodig voor het verzenden van berichten. Ook wel Internet Mail Acces Protocol genoemd.

Het kan dus worden gezien als een manier om gegevens op te slaan. Om het te kunnen gebruiken hebt u een IMAP-server nodig, zoals Cyrus, Courier of UW.

## Kolab of IMAP?

Kolab brengt de mogelijkheid om gegevens tussen clients te delen. Het maakt het bijvoorbeeld voor uw secretaresse mogelijk om Outlook te gebruiken terwijl u &kontact; gebruikt.

U zult dezelfde configuratie-interface hebben dat zorgt voor gebruikersbeheer, e-mailinstellingen, een centrale LDAP-configuratie, -gegevens en -adresboekserver, spam- en virusfiltering, vakantiescripts, afhandelen van vrij/bezet-scripts, groepen, distributielijsten, automatisch afhandelen van uitnodigingen, &etc;.

Maar kan de nodige problemen opleveren bij de eerste opzet ervan. Voor een nieuweling als ik betekent dit een lange, lange, frustrerende nachtmerrie, en zoveel complexiteit om het te beheersen zodra het draait. Dus nee dank u, ik ga voor het eenvoudige IMAP.

## Het opzetten van de IMAP-server Cyrus

Mijn keuze viel op Cyrus, welke onderdeel is van de Kolab-softwareset. Dus als ik in de toekomst overstap op Kolab, dan ben ik er tenminste mee bekend.

Laten we beginnen met de installatie en de configuratie!

Word root

    # apt-get install cyrus21-imapd cyrus21-common cyrus21-admin cyrus21-client sasl-bin sasl2-bin
    Installing cyrus21-imapd...De Installer vraagt om iets over een search address dat ik niet begreep ... Ik heb toen gewoon op Enter gedrukt.

De Installer maakt ook de gebruiker cyrus aan. Deze gebruiker is lid van de (automatisch aangemaakte) groep sasl, die de eigenaar is van alle cyrus-bestanden. Aan het einde kunt u met het commando `ps `-A`` de nieuwe processen `cyrmaster` en `notifyd` ontdekken.

Het moeilijke aan het opzetten van Cyrus is de authenticatie, puur omdat het niet triviaal is en ik een nieuweling ben met weinig kennis van zaken.

Cyrus kan verschillende SASL (Simple Authentication and Security Layer) mechanismen gebruiken. Standaard gebruikt het programma sasldb (het slaat gebruikersnamen en wachtwoorden op in het SASL secrets-bestand `sasldb`), maar ook getpwent, Kerberos4, Kerberos5, PAM, rimap, shadow en LDAP worden ondersteund.

Omdat ik alleen de gebruikersnamen/wachtwoorden die ook toegang hebben tot mijn &Linux;-computer wil gebruiken heb ik gekozen voor shadow. Cyrus gebruikt dan de &Linux;-wachtwoorden voor authenticatie.

Om dit mogelijk te maken moeten we sasl vertellen om `saslauthd` als wachtwoord-authenticatiemethode te gebruikenk, en daarna `saslauthd` in te stellen om shadow (of getpwent) als authenticatie-mechanisme te gebruiken.

Ok, laten we beginnen!

Als root wijzig het Linux-wachtwoord van de gebruiker cyrus:

    # passwd cyrus

Voer het wachtwoord in dat u wilt gebruiken (en kunt onthouden). We gebruiken in dit voorbeeld cyrus als cyrus-wachtwoord.

    # vi /etc/imapd.conf

    sasl_pwcheck_method: saslauthd in plaats van de standaard auxprop

Verwijder de `#`-markering voor de regel:

    #admins: cyrus

op deze manier kunt u cyrus beheren door u aan te melden als cyrus-gebruiker (wat heb ik toch een fantasie!)

    # vi /etc/default/saslauthd

Verwijder het hekje voor de regel:

    # START=yes

(anders zal saslauthd niet op starten tijdens het booten, zelfs niet als het voorkomt in een `/etc/rcx.d`!)

vervang `MECHANISMS="pam"` door `MECHANISMS="shadow"`. Op die manier wordt het commando `saslauthd` `-a `shadow`` tijdens de boot uitgevoerd.

Sluit vervolgens uw editor af en herstart sasl en cyrus.

om IMAP te testen:

    su cyrus
    $ imtest -m login -p imap localhost

U wordt nu gevraagd om het wachtwoord van de cyrus-gebruiker. Vul deze dus in.

Als het wachtwoord van de gebruiker cyrus is geaccepteerd, dan verschijnen de volgende tekstregels:

    S: L01 OK User logged in
    Authenticated.

Om af te sluiten typt u `. logout` (dus punt spatie logout).

Voeg nu een nieuwe gebruiker toe met de naam groupware en geef deze een wachtwoord. Dit kunt u doen op de gebruikelijke manier waarop u gebruikers op uw computer aanmaakt. De nieuwe gebruiker moet lid zijn van een groep zonder privileges, zoals nobody en heeft geen loginshell of persoonlijke map (home directory) nodig.

Nu moet ik ook de gebruiker en een IMAP in cyrus aanmaken:

    # cyradm --user cyrus localhost
    na het invoeren van het wachtwoord van de systeembeheerder cyrus, krijgt u de prompt localhost>
    localhost> cm user.groupware
    localhost> lm geeft alleen de zojuist aangemaakte postbus weer
    user.groupware (\HasNoChildren))
    localhost> quit

U kunt ``help`` intypen om een lijst met beschikbare commando's te openen.

U kunt nagaan wat er is gebeurd met:

    # 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 bent u in staat om met een IMAP-client verbinding te maken als gebruiker groupware en kunt u de `INBOX` zien.

In het protocol van IMAP is het selecteren van de postbus `INBOX` een magisch woord, een soort van alias voor de mappenstructuur hierboven. De client ziet `INBOX`, en de IMAP-server plaatst die in de mappen- en bestandenstructuur `/var/spool/cyrus/mail/...`

## Het instellen van &kontact;

Ik maak vanaf 2 &Windows; 2000 pc's door middel van Cygwin/X verbinding met de GNU/Linux kantoorserver (een soort van "zwarte doos" zonder monitor en toetsenbord). De &Windows;-pc's worden dus gebruikt als X-Window server (in de nabije toekomst hoop ik beide te kunnen vervangen door 2 mini-itx thin clients, gebruik makend van LTSP). Met deze opzet draait elke gebruiker &kontact; op dezelfde pc als waar Cyrus op draait (localhost).

Voor het gebruiken van &kontact; in combinatie met IMAP zijn deze stappen nodig:

1. Maak een IMAP-account aan op Cyrus voor de fictieve gebruiker groupware (dit hebben we al gedaan!).

2. Maak een IMAP-account aan in &kmail; om als die gebruiker te kunnen inloggen.

3. Gebruik kresources om er voor te zorgen dat &kontact;-componenten werken met de gegevens afkomstig uit de IMAP-bron.

4. Activeer groupwarefunctionaliteit en maak gerelateerde submappen aan voor IMAP `INBOX` (als dat nog niet gedaan is)

5. Beleef plezier aan &kontact; en gedeelde gegevens door Cyrus IMAP.

Log nu in bij &kde; met het account van de eerste echte gebruiker waaraan u groupwarefunctionaliteit wilt leveren.

Laten we een IMAP-account aanmaken in &kmail;:

Start &kontact; op en selecteer E-mail (het &kmail;-component). Kies nu menuoptie Instellingen KMail instellen..., en in het volgende dialoog de sectie Accounts, tabblad Ontvangen. Klik op de knop Toevoegen.... Kies als type account voor IMAP zonder verbinding (dus niet gewoon IMAP). Voer daarna in de volgende dialoog deze gegevens in:

Accountnaam: `office_gwdata`

  Een naam die zal worden gebruikt voor de lokale map die verwijst naar dit IMAP-account.

Gebruikersnaam: `groupware`

  De Cyrus-gebruiker die we hebben gekozen als eigenaar van alle kantoorgegevens

Wachtwoord:

  Het wachtwoord voor de gebruiker groupware.

Host `localhost`

  Onthoud dat in ons voorbeeld de &kontact;-client op dezelfde pc draait als de IMAP-server

Poort: `143`

  De standaardpoort

Selecteer IMAP-wachtwoord opslaan zodat u de volgende keer dat u &kontact; niet opnieuw het wachtwoord hoeft in te voeren. Selecteer het keuzevakje Berichtencontrole met interval inschakelen en geef een waarde op in minuten.

Merk op dat we gekozen hebben voor het accounttype IMAP zonder verbinding. Dit betekent dat er een kopie van de groupwaregegevens lokaal wordt opgeslagen in de client (in de persoonlijke map), en dat deze gegevens telkens als de client verbinding maakt worden gesynchroniseerd. Dit lijkt erg inefficiënt, omdat uw gegevens meerdere malen wordt gedupliceerd (&ie; als u 10 gebruikers hebt die &kontact; gebruiken, dan hebt u de gegevens 10 + 1 keer op uw computer staan). Echter, dit is de enige manier om er voor te zorgen dat het snel werkt, omdat &kontact; anders bij elke verbinding alle gegevens moet ophalen en door &korganizer; en &kaddressbook; moet laten interpreteren. Als u gebruik maakt van IMAP zonder verbinding, dan worden de gegevens lokaal opgeslagen, en alleen de delta (&ie; de gewijzigde gegevens) worden verstuurd.

Maar aan de andere kant, als uw gebruikers &korganizer; op dezelfde PC draaien als waar de IMAP-server op draait, dan is het zinvoller om IMAP (ook wel online IMAP genoemd) te gebruiken om ruimte te besparen, aangezien overdrachtsnelheid dan niet van belang is. Helaas werkt dit niet omdat &kontact; niet automatisch de Agenda-map bijwerkt in online IMAP. Dus als iemand evenementen toevoegt wordt dat niet bijgewerkt in uw agenda. (U moet handmatig overschakelen naar &kmail; en dan op de Agenda-map klikken. Daarbij kunt u tijdens het opstarten, als het programma de Agenda-mappen leest, te maken krijgen een hoop geflikker en trage gegevensbijwerking.

Nu moeten we &kontact; vertellen dat IMAP gebruikt moet worden als gegevensbron voor zijn verschillende componenten. In het &kmenu;, kies Commando uitvoeren en typ ``kcmshell kresources`` in. Bij het combinatieveld, selecteer Contactpersonen, klik vervolgens op Toevoegen... en kies Adresboek op IMAP-server via KMail. Bevestig je keuze, selecteer daarna de nieuw-aangemaakte regel in de dialoog en klik op de knop Als standaard gebruiken. Doe hetzelfde met Agenda en Notities.

Nu moeten we de groupwarefunctionaliteit van &kmail; (en dientengevolge heel &kontact;) activeren.

1. Kies menuoptie Instellingen KMail instellen..., en dan sectie Diversen, tabblad Groupware.

2. Selecteer het keuzevakje Functionaliteit voor IMAP-gegevensbronnen activeren

3. Kies voor Engels als Taal van Groupware-mappen (dit is in het geval dat u de mappen op de IMAP-server al hebt aangemaakt met een ander programma in een andere taal).

4. Ga nu naar De gegevensbronmappen zijn submappen van: en selecteer de submap Inbox van de map office_gwdata.

   Schakel het keuzevakje Groupware-mappen verbergen voor nu even uit, zodat we kunnen zien wat er gebeurd. Zodra alles helder is kunt u terugkomen en het keuzevakje weer inschakelen.

5. Als u op OK klikt wordt de dialoog `&kmail; nu de vereiste mappen voor de IMAP-gegevensbron aanmaken als submappen van Inbox`

   Als u dat niet wilt, klik dan op de knop Nee, en de IMAP-gegevensbron zal worden uitgeschakeld. Klik op Ja (dit gebeurt alleen de eerste keer met de eerste echte gebruiker). U zult onmiddellijk zien dat in de mappenboom van &kmail;, onder office_gwdataInbox deze submappen worden aangemaakt:

   - Calendar
   - Contacts
   - Notes
   - Tasks
   - Journal

   als u nu dit commando uitvoert:

       # 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

   Zoals u ziet is office_gwdata Inbox niet lokaal opgeslagen in de persoonlijke map van de huidige &kontact;-gebruiker, maar in de IMAP-mappen van de gebruiker groupware.

Nu is &kontact; klaar om de gegevens aldaar uit te lezen en op te slaan. In de a

U kunt nu inloggen bij &kde; onder een andere gebruikersnaam en zijn/haar &kontact;-programma op dezelfde manier instellen:

1. Open &kontact; en voeg in de module E-mail een IMAP-account aan, waarbij u als host de computer opgeeft waarop de Cyrus-server draait (in mijn geval is dat `192.168.1.3`).

   Vergeet niet om de optie Berichtencontrole met interval te selecteren en stel een waarde in minuten in. Als u uw wijzigingen bevestigd, danzal er geen dialoog voor het aanmaken van de submappen worden geopend (deze worden immers gevonden op de IMAP-server. U vindt de submappen terug in de mappenboom.

2. Activeer de Groupware-functionaliteit om gegevens te kunnen opslaan op de IMAP-server.

Onthoud dat bij IMAP zonder verbinding de gegevens van de client alleen naar de IMAP-server stuurt op het moment dat de client verbinding maken om op nieuwe e-mailberichten te controleren. Dus als uw &kontact;-clients een berichtencontrole met interval hebben van bijv. 5 minuten, dan hebt u in het slechtste geval een vertraging van 10 minuten tussen het schrijven van een evenement en het verschijnen ervan bij de andere gebruikers.

## Hoe gebruik maken van alleen-lezen toegang

Pas op: er is mij bevestigd dat de implementaties van notities via IMAP onvolledig is in &kontact; ouder dan versie 1.01. Deze opzet zal dus niet werken als u een oudere versie hebt. U kunt dan alleen gebruik maken van de eerder uitgelegde opzet.

In de vorige opzet hebben we dezelfde nep-gebruiker genaamd groupware. Deze gebruiker wordt door alle &kontact;-gebruikers gebruikt (&ie; tony, rohn, amanda, &etc;) via het IMAP-account met diens login en wachtwoord. Dit betekent dat elke echte gebruiker dezelfde lees/schrijf-rechten heeft, aangezien iedereen als gebruiker groupware inlogt op de IMAP-server.

Om de toegang van bepaalde gebruikers te beperken (zoals het verlenen van alleen-lezen-toegang) kunnen we gebruik maken van ACL (Acces Control Lists).

Selecteer in &kmail; een submap van office_gwdata inbox, bijvoorbeeld Agenda en klik met de rechter muisknop. Selecteer Eigenschappen, tabblad Acces Control. Hier kunt u de gebruikers invoeren die u toegang tot deze map wilt geven, incl. de handelingen die ze mogen verrichten.

Om te experimenteren met het uitwisselen van evenementen geven we Alle toegangsrechten aan de gebruiker mary

Op Cyrus-niveau (op de pc die de IMAP-server Cyrus draait, met cyrus-hulpmiddelen) moeten we eerst de gebruiker mary aanmaken, zodat ze een door IMAP herkende gebruiker is, en een IMAP-map voor haar aanmaken.

Daarna loggen we in op GNU/Linux als mary en openen we &kontact;. Zoals eerder besproken zullen we een IMAP-account aanmaken in &kmail;, met dezelfde gegevens, maar in plaats van de nepgebruiker groupware gebruiken we nu mary.

In de mappenboom van &kmail; zult u nu deze structuur zien: office_gwdata user groupware Calendar and Tasks. Haal uw e-mail op (Bestand Controleren op nieuwe berichten) en u krijgt een inbox-map onder office_gwdata.

Activeer nu de groupwarefunctionaliteit van &kmail;, en plaats bij Gegevensbronmappen zijn submappen van de inbox die een submap is van office_gwdata.

Activeer nu de groupwarefunctionaliteit van &kmail;, en plaats bij Gegevensbronmappen zijn submappen van de inbox die een submap is van office_gwdata

U hebt nu twee takken met mappen onder office_gwdata.

1. inbox met Calendar, Contacts, Notes, Tasks en Journal, opgeslagen in mary's IMAP-mappen op de IMAP-server

2. user, met de submap groupware en de submappen waar mary toegang tot heeft (in ons voorbeeld, Calendar en Tasks)

Klik met de &RMB; op de user Calendar en controleer of deze van het type Agenda is (zo niet, zet deze op dit type) en ook of user Tasks van het type Taken is.

U hebt nu in uw agenda twee IMAPgegevensbronnen waarin u evenementen kunt plaatsen, dus als u een nieuw evenement maakt zal u worden gevraagd welke u wilt gebruiken. (Als u ook een lokale gegevensbron hebt, dan hebt u 3 keuzes!)

Om geen lokale agenda te gebruiken moet u naar het kleine venster linksonder (die de beschikbare gegevensbronnen toont) in de agenda gaan en de gegevensbronnen die niet verwijzen naar een pad dat eindigt op .groupware.directory uitschakelen.

## Dankbetuigingen

Ik ben een nieuweling, en voor deze uitleg heb ik alleen mijn tijd en wil aangeleverd. Voor de kennis moet ik enkele gasten uit de Freenode-kanalen bedanken voor hun competentie, geduld en behulpzaamheid

### Speciale dank aan:

- Voor het Cyrus IMAP-gedeelte in IRC-kanaal #cyrus:

  - [protagonist] Andy Morgan morgan@orst.edu

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

- Voor het &kontact;-gedeelte in IRC-kanaal #kontact:

  - [till] Till Adam adam@kde.org

  - [dfaure] David Faure faure@kde.org

  - [mdouhan] Matt Douhan matt@fruitsalad.org

Bedankt allen!

Ah, en ik ben er ook nog, [markit] Marco Menardi mmenaz@mail.com

## Verder lezen

### Referentie

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

- &kontact;-website: http://www.kontact.org

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

- &kde; Community Wiki: http://wiki.kde.org

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

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

- Gegevensbronject: http://www.ltsp.org