# Współdzielenie danych z &kontact; poprzez IMAP

## Wprowadzenie

Przez długi okres czasu poszukiwałem dla mojego małego biura PIM (organizatora), który pozwoliłby mi udostępniać dane, tak aby moja sekretarka mogła współdzielić ze mną kontakty, przypomnienia i tak dalej. Będąc użytkownikiem &kde; słyszałem o projekcie Kroupware i oczekiwałem na jego ukończenie. Jednak, kiedy zobaczyłem stopień skomplikowania architektury i ustawień programu Kolab server 1.0 (część serwerowa projektu), dałem sobie spokój, oczekując jednocześnie na łatwiejszą do obsługi aplikację Kolab 2.0. W każdym razie Kolab był zdecydowanie zbyt obszerny dla moich potrzeb. Na szczescie w Wiki &kde; znalazłem kawałek rozmowy z IRC gdzie dyskutowane było udostepnianie danych bez infrastruktury projektu Kolab....mmm, to brzmi interesujaco!

Dla małych biur i potrzeb, możesz używać &kontact; w celu współdzielenia danych bez konieczności instalowania serweraKolab lub innego systemu pracy grupowej. Wystarczy tylko serwer IMAP, bardzo łatwo dający się skonfigurować.

W moim scenariuszu występuje serwer działający na Debianie unstable i &kde; 3.3.1. Mam dostęp spod windows do programu &kontact; i pozostałych bajecznych aplikacji GNU/Linux przy użyciu Cygwin/X, w oczekiwaniu aż emulator Wine będzie potrafił uruchamiać najnowsze programy Windows, których potrzebuję, a nie są pod GNU/Linux dostępne. Chcę współdzielić kontakty, zdarzenia, zadania i notatki z moją sekretarką.

## Co to jest IMAP

Definicja pochodzi z ComputerUser.com High-Tech Dictionary:

> Internet Message Access Protocol. Protokół pozwlający użytkownikowi wykonywać pewne funkcje dotyczące poczty elektronicznej na zdalnym serwerze, zamiast na komputerze lokalnym. Poprzez IMAP użytkownik może tworzyć, usuwać lub zmieniać nazwy skrzynek pocztowych, pobierać nowe wiadomości, usuwac wiadomości, oraz wykonywać operację wyszukiwania. Dla wysyłania poczty niezbędny jest oddzielny protokół. Skrót IMAP rozwijany jest też jako Internet Mail Access Protocol.

Więc moze być on uważany za miejsce przechowywania danych. Aby go użyć potrzebujesz serwer IMAP, jak na przykład Cyrus, Courier lub UW.

## Kolab czy IMAP?

Kolab udostępnia możliwość współdzielenia danych pomiędzy różnych klientów. Pozwala on Twojej sekretarce na używanie programu Outlook podczas gdy Ty używasz &kontact;, na przykład.

Dostajesz interfejs konfiguracyjny, obsługujacy zarządzanie użytkownikami, konfigurację konta poczty elektronicznej, scentralizowane dane konfiguracyjne LDAP, serwer książki adresowej, filtry antyspamowe i antywirusowe,skrypty wakacyjne, obsługa list wolny-zajęty, obsługa zasobów (pokoi, samochodów), grupy, listy dystrybucyjne, automatyczna obsługa zaproszeń, &etc;

Jednak może to być powodem problemów z wstępną konfiguracją. Dla nowicjusza, takiego jak ja, oznacza to długi, frustrujący koszmar, i o wiele za dużo skomplikowania, aby tylko zaczeło wszystko działać. Dlatego, nie, dziekuję, wybiorę prostotę - IMAP.

## Jak skonfigurować serwerIMAP Cyrus

Wybrałem program Cyrus, będący częscią pakietu Kolab, więc jeśli przeniosę się na Kolab w przyszłości, będę chociaż z nim zaznajomiony.

Zaczynajmy więc instalację i konfigurację!

Uzyskaj uprawnienia `root'a`.

    # apt-get install cyrus21-imapd cyrus21-common cyrus21-admin cyrus21-client sasl-bin sasl2-bin
    Installing cyrus21-imapd...Instalator zapytał o coś czego nie zrozumiałem, na temat adresu wyszukiwania... Nacisnąłem tylko Enter.

Instalator stworzył także użytkownika `cyrus` będacego członkiem (automatycznie stworzonej) grupy `sasl`, która jest właścicielem wszystkich plików cyrusa. Po zakończeniu operacji, za pomocą polecenia `ps `-A`` możesz odszukać nowe procesy: `cyrmaster` and `notifyd`.

Prawdziwym problemem w konfiguracji programu Cyrus jest autentykacja, a to dlatego że nie jest trywialna, a ja jestem nowicjuszem, posiadającym ograniczoną wiedzę o tym co robię.

Cyrus może używąc róznych mechanizmów SASL (Simple Authentication and Security Layer) , domyślnym jest sasldb (przechowywuje on nazwy użytkowników i hasła w utajnionym pliku SASL `sasldb`), jednakże obsługiwane są również getpwent, kerberos4, kerberos5, PAM, rimap, shadow i LDAP.

Ponieważ nie chcę definiować użytkowników i haseł innych niż te których używam w systemie &Linux;, wybrałem mechanizm shadow, dzięki czemu Cyrus będzie korzystał z haseł &Linux; dla autentykacji.

Aby tego dokonać musimy nakłonić sasl by używał `saslauthd` jako metody autentykacji hasła, a następnie ustawić `saslauthd` aby używał mechanizmushadow (lub getpwent) do celów autentykacji.

OK, do roboty!

Jako `root`, zmień hasło Linux'a użytkownika `cyrus`:

    # passwd cyrus

Wpisz hasło jakie Ci odpowiada (i które zapamiętasz) używane w tym przykładzie cyrus'a jako hasło administracyjne cyrus .

    # vi /etc/imapd.conf

    sasl_pwcheck_method: saslauthd zamiast domyślnej auxprop

usuń znak `#` z linii:

    #admins: cyrus

w ten sposób możesz administrować programem cyrus logując się jako użytkownik `cyrus` (ale mam fantazję!)

    # vi /etc/default/saslauthd

Usuń znak komentarza w linii:

    # START=yes

(w przeciwnym przypadku saslauthd nie uruchomi się podczas bootowania, nawet jeśli jego wywołanie jest zawarte w jednym z plików `/etc/rcx.d`!)

i zamiast `MECHANISMS="pam"` wstaw `MECHANISMS="shadow"` w ten sposób podczas bootowania będzie uruchomiona komenda `saslauthd` `-a `shadow``.

Zaraz po wyjściu z edytora uruchom ponownie programy sasl i cyrus.

Aby przetestować IMAP:

    su cyrus
    $ imtest -m login -p imap localhost

System pyta o hasło użytkownika `cyrus`, więc je wpisz.

Jeśli autentykacja użytkownika `cyrus` powiedzie się, zostaną wyświetone poniższe linie:

    S: L01 OK User logged in
    Authenticated.

Aby wyjśc wpisz `. logout` (tzn. kropka, spacja, logout)

Teraz dodaj użytkownika o nazwie `groupware` i ustaw hasło dla niego za pomocą standardowych narzedzi systemowych. Użytkownik powinien znależć sie w nieuprzywilejowanej grupie, takiej jak `nobody` i nie wymaga domyślnej powłoki logowania ani katalogu domowego.

Teraz musze również utworzyć użytkownika oraz IMAP w programie cyrus:

    # cyradm --user cyrus localhost
    po wprowadzeniu hasła dla administratora cyrus, otrzymasz prompt localhost>
    localhost> cm user.groupware
    localhost> lm  wyświetla właśnie stworzoną skrzynkę poczty
    user.groupware (\HasNoChildren))
    localhost> quit

Możesz wpisać ``help`` aby uzyskać listę dostępnych poleceń.

Możesz sprawdzić co się wydarzyło poprzez:

    # 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

Teraz powinieneś mieć możliwość połaczyć się z klientem IMAP jako użytkownik `groupware` i zobaczyć `INBOX`(wiadomości przychodzące).

Wybór skrzynki `INBOX` w protokole IMAP jest swego rodzaju magicznym słowem, typem aliasu dla powyższej struktury katalogu. Klient widzi `INBOX`, a serwer IMAP mapuje katalog i strukturę plików do `/var/spool/cyrus/mail/...`.

## Jak skonfigurować klientów &kontact;

Łączę się z moim biurowym serwerem GNU/Linux (będącym rodzajem "czarnej skrzynki" bez monitora i klawiatury) z dwóch komputerów z &Windows; 2000 ze środowiskiem Cygwin/X, używając go jako serwera X-Window (w niedalekiej przyszłości mam nadzieję zastąpić je dwoma klientami mini-itx thin używając LTSP). W tej konfiguracji każdy klient uruchamia &kontact; na tej samej maszynie gdzie zainstalowana i uruchomniona jest aplikacja Cyrus (localhost).

Aby sprawić by &kontact; współpracował z IMAP, trzeba podjąć następujące kroki:

1. Utwórz konto IMAP w programie Cyrus dla sztucznego użytkownika `groupware` (już wcześniej zrobione!)

2. Utwórz/konfiguruj konto IMAP w &kmail; aby się logować jako ten użytkownik

3. Użyj kresources by umożliwić współpracę komponentów programu &kontact; z danymi pobranymi ze źródła IMAP

4. Włącz funkcjonalność pracy grupowej i utwórz powiązane podfoldery `INBOX'u` IMAP ) (jeśli nie są już stworzone)

5. I już możesz cieszyć się programem &kontact; i współdzieleniem danych poprzez IMAP Cyrusa

Wieć zaloguj się do &kde; z konta rzeczywistego użytkownika któremu chcesz umożliwić korzystanie z pracy grupowej.

Stwórzmy konto IMAP w &kmail;.

Uruchom &kontact; i wybierz Poczta (komponent &kmail;). Z menu wybierz Ustawienia Konfiguracja KMail Ustawienia sieci Odbieranie, kliknij przycisk Dodaj.... Program zapyta o rodzaj konta poczty elektronicznej, gdzi musisz wybrać rozłączony IMAP (nie samo IMAP). Następnie w zakładce Ogólne wpisz następujące dane:

Nazwa Konta: `office_gwdata`

- Nazwa używana dla folderu lokalnego wskazującego na konto IMAP.

Login `groupware`

- Użytkownik programu Cyrus którego wybraliśmy jako własciciela wszystkich danych biurowych

Hasło:

- Hasło dla użytkownika `groupware` .

Host: `localhost`

- Pamietaj, że w naszym przykładzie klient &kontact; jest uruchomiony na tym samym komputerze co serwer IMAP

Port:`143`

- Domyślny

Zaznacz zapisz hasło IMAP dzięki czemu nie będziesz pytaty o nie następnym razem kiedy uruchomisz &kontact;. Zaznacz Sprawdzanie poczty co pewien czas i ustaw wartość w minutach.

Zauważ że wybraliśmy typ konta rozłączony IMAP . To powoduje że kopia danych pracy grupowej jest przechowywana lokalnie u klienta (w katalogu domowym), i jest synchronizowana za każdym razem gdy klient się łączy. Wygląda to na bardzo niewydajne, gdyż Twoje dane są wiele razy zduplikowane (n.p. jeśli masz 10 klientów używających &kontact;, dane powtórzone są 10+1 razy), jednak jest to jedyna droga, by przyspieszyć działanie, ponieważ przy każdym połączeniu &kontact; musi pobrać dane i dostarczyć je do programów &korganizer; i &kaddressbook; dla interpretacji. Jeśli używaszrozłączony IMAP dane są przechowywane w pamięci podręcznej - lokalnie i tylko delta (n.p. dane które się zmieniły) są przesyłane.

Z drugiej strony jeśli Twoi użytkownicy uruchamiają &korganizer; na tym samym komputerze na którym działa serwer IMAP, byłoby rozsądnie użyć typu IMAP (zwanego połaczonym (online) IMAP) aby oszczędzać miejsce, ponieważ szybkość transferu nie powinna być kwestią problemową. Niestety to nie działa, gdyż &kontact; nie uaktualnia automatycznie katalogu Kalendarz w przypadku użycia typu online IMAP, więc nie otrzymujesz aktualizacji, gdy ktoś dodaje zdarzenia (musisz ręcznie przełączyć się do program &kmail; i kliknąć na katalog Kalenarz). Dodatkowo, przy starcie, kiedy czytany jest katalog Kalnedarz, możesz auważyć ogromne "migotanie" i powolne aktualizacje danych.

Teraz musimy poinformować &kontact; aby używał IMAP jako źródło danych dla różnych swoich komponentów. Z &kmenu;, wybierz Wykonaj polecenie, uruchom ``kcmshell kresources``. Z listy rozwijanej wybierz Kontakty, i kliknij przycisk Dodaj... , następnie wybierz Książka adresowa na serwerze IMAP przez KMail. Po tym zaznacz tą nową linię i kliknij przycisk Użyj jako domyślnego . Powtórz powyższe kroki dla pozycji Kalendarz i Notatki.

Teraz musimy włączyć funkcjonalność pracy grupowej w programie &kmail; (i w konsekwencji w całym &kontact;):

1. Wybierz z menu Ustawienia Konfiguracja KMail Różne Praca grupowa

2. Zaznacz Włącz funkcjonalność zasobu IMAP

3. Wybierz Angielski jako Język folderów grupowych (w przypadku gdy już masz katalogi na serwerze IMAP utworzone za pomocą innego programu w odmiennym języku).

4. Teraz przejdź do Foldery grupowe są podfolderami: i wybierz podfolder inbox folderu office_gwdata.

   Pozostaw Ukryj foldery grupowe na razie odznaczone, dzięki czemu zobaczymy że to działa. Możesz później wrócić i zanaczyć to pole ponownie kiedy wszystko już będzie gotowe.

5. Kiedy klikniesz OK otrzymasz komunikat: `&kmail; utworzy teraz wymagane foldery zasobów IMAP jako podfoldery Inbox`

   Jeśli tego nie chcesz kliknij przycisk Nie, co spowoduje że zasoby IMAP będą wyłaczone. Kliknij Tak (trzeba to zrobić tylko za pierwszym razem z pierwszym rzeczywistym użytkownikiem). Od razu możesz zobaczyć, że w drzewku folderów &kmail; , pod office_gwdata Inbox utworzone zostały powyższe foldery:

   - Kalendarz
   - Kontakty
   - Notatki
   - Zadania
   - Dziennik

   jeśli teraz wykonasz:

       # ls -l /var/spool/cyrus/mail/g/user/groupware/
        drwx------ 2 cyrus mail 144 Oct 31 16:36 Dziennik
       drwx------ 2 cyrus mail 144 Oct 31 16:36 Kalendarz
       drwx------ 2 cyrus mail 144 Oct 31 16:36 Kontakty
       drwx------ 2 cyrus mail 144 Oct 31 16:36 Notatki
       drwx------ 2 cyrus mail 144 Oct 31 16:36 Zadania
       -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

   Jak widzisz office_gwdata Inbox jest przechowywany w folderach IMAP użytkownika `groupware` a nie lokalnie w katalogu domowym bieżacego użytkownika &kontact;.

W tym momencie &kontact; jest już gotowy do pracy i przechowywania w tym miejscu danych. W aplikacji kalendarza, jeśli konto IMAP &kmail; było typu niepodłaczony, okno zasób powinno wyświetlać element zasób Imap z 3 podelementami, będącymi ścieżkami do lokalnych plików "domowych". W przeciwnym wypadku aplikacja Kontakty nie pokazuje podelementów pod zasób Imap.

Możesz teraz zalogować się do &kde; jako inny użytkownik i ustawić jego/jej klienta &kontact; w bardzo podobny sposób:

1. Otwórz &kontact; i w komponencie Poczta dodaj konto IMAP podając jako host komputer gdzie uruchomiony jest serwer Cyrus (w moim przypadku: `192.168.1.3`).

   Pamiętaj aby zaznaczyć Włącz okresowe sprawdzanie poczty i ustawić wartość w minutach. Kiedy potwierdzisz nie będziesz zapytany o tworzenie podfolderów (ponieważ można je znaleźć na serwerze IMAP), natomiast będziesz je widział w drzewku folderów.

2. Aktywuj funkcjonalność pracy grupowej aby mieć możliwość zapisywania danych na serwerze IMAP.

Pamiętaj że w przypadku niepodlączonegoIMAP, dane są transmitowane od klienta na serwer IMAP tylko wtedy, gdy klient łączy się by sprawdzić nową pocztę. Więc jeśli ustawisz programy klienckie &kontact; z parametrem sprawdzanie poczty co pewien czas na, dajmy na to 5 minut, w najgorszym wypadku będziesz miał 10 minut opóźnienia między napisaniem zdarzenia a jego pojawieniem się dla innych użytkowników.

## Jak ustawić Dostęp Tylko Do Odczytu (read-only)

Potwierdziły się moje przypuszczenia że implementacja Notatek IMAP w programie &kontact; w wersji wcześniejszej niż 1.01 jest uszkodzona, więc cała ta konfiguracja dla niego nie zadziała, czyli jeśli chcesz go używać, musisz użyć konfiguracji poprzedniej.

Podczas poprzedniej konfiguracji,mieliśmy tego samego sztucznego użytkownika, nazwanego `groupware`, używanego przez wszytkich rzeczywisty użytkowników programu &kontact; (tzn. `tony`, `rohn`, `amanda`, &etc;) poprzez konto na serwerze IMAP powiązane z loginem i hasłem. Ale w ten sposób każdy rzeczywisty użytkownik ma takie same prawa do zapisu i odczytu ponieważ wszyscy łączą się jako użytkownik `groupware` do serwera IMAP.

Aby ograniczyć dostęp niektórym użytkownikom (zwyczajowo udostępniając im dostęp tylko do odczytu) możemy użyć list kontroli dostępu ACL (Access Control Lists).

Wybierz w &kmail; podfolder w office_gwdata inbox, na przykład Kalendarz, i kliknij na nim prawym przyciskiem myszy. Wybierz Własciwościi zakładkę Kontrola dostępu. Tu możesz wprowadzić użytkowników którym chcesz dać dostęp do tego folderu i określić co mogą robić.

W ramach eksperymentu, próbując wymieniać zdarzenia, damy uprawnienie Wszystko użytkownikowi`mary`

Na poziomie programu cyrus (na komputerze na którym jest uruchomiony serwer cyrus IMAP, z narzędziami cyrusa tools), potrzebujemy wpierw dodać użytkownika `mary`, aby stał się użytkownikiem rozpoznawanym przez IMAP i stworzyć dla niego folder IMAP.

Następnie logujemy się do GNU/Linux jako `mary` i uruchamiamy &kontact;. Jak poprzednio pokazano, ustawimy konto IMAP w &kmail; z tymi samymi danymi lecz z konkretnym użytkownikiem (zamiast sztucznego użytkownika `groupware` i jego hasła, użyjemy użytkownika `mary` i jego hasła).

W drzewku katalogów &kmail; tym razem widać następujacą strukturę: office_gwdata user groupware Kalendarz i Zadania. Sprawdź pocztę (Plik Sprawdź pocztę) i będziesz miał również folder inbox pod office_gwdata.

Teraz włacz funkcjonalność pracy grupowej w &kmail; i w Foldery grupowe są podfolderami: wprowadź inbox który jest subfolderem office_gwdata.

Teraz włacz funkcjonalność pracy grupowej w &kmail; i w Foldery grupowe są podfolderami: wprowadź inbox który jest subfolderem office_gwdata.

Teraz masz dwa rozgałęzienia katalogu pod office_gwdata:

1. inbox z Kalendarzem, Kontaktami, Notatkami, Zadaniami i Dziennikiem, zapisanymi w folderach IMAP `mary` na serwerze IMAP

2. użytkownik, z podfolderem groupware i podfolderami do których `mary` ma dostęp (w tym przykładzie Kalendarz i Zadania)

Kliknij prawym przyciskiem myszy na user Calendar i sprawdź czy jest on typu Kalendarz (jeśli nie ustaw go, by był), również jeśliuser Tasks jest typu Zadania.

W tym momencie w Kalendarzu są dostępne dwa zasoby IMAP dla zapisu, więc jeżeli tworzysz nowe zdarzenie, system zapyta który z nich użyć (jeśli pozostawiłeś jako dostepne zasoby lokalne, masz do wyboru 3!).

Musisz przejść do lewego dolnego okna w Kalendarzu, tego które pokazuje dostępne zasoby i odznaczyć te które nie wskazują na katalog.pracygrupowej (możesz to rozpoznać przez końcową częsć ścieżki każdego zasobu).

## Zasługi

Jestem nowicjuszem i włożyłem w to HOWTO tylko mój czas i dobrą wolę. Chciałbym bardzo podziękować za wiedzę którą posiadam paru ludziom z kanałow freenode za ich kompetencję, cierpliwość i pomoc.

## Specjalne podziękowania dla:

- W sprawach dotyczących programuCyrus IMAP uczestnikom kanału #cyrus:

  - [protagonist] Andy Morgan morgan@orst.edu

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

- W sprawach dotyczących programu &kontact; uczestnikom kanału #kontact:

  - [till] Till Adam adam@kde.org

  - [dfaure] David Faure faure@kde.org

  - [mdouhan] Matt Douhan matt@fruitsalad.org

Dziekuję bardzo, chłopaki!

No i poza tym jestem też ja, [markit] Marco Menardi mmenaz@mail.com

## Wskazana lektura

## Odnośniki

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

- Strona domowa &kontact;: http://www.kontact.org

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

- Wiki Wspólnoty &kde; http://wiki.kde.org

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

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

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