artykuły
Powrót do listy artykułów

Temat artykułu: Poczta przez WWW - Instalacja systemu webmail-owego
Tekst napisał pitt2k dnia 08-01-2004

Tym razem zajmiemy się instalacją oprogramowania służącego do obsługi poczty przez przeglądarkę WWW. Będziemy to robili na systemie Debian Woody, ale nic nie stoi na przeszkodzie wykorzystać inny system operacyjny np. Linux RedHat czy Windows. Bez zbędnych wstępów przechodzimy do konkretów.

Co nam jest potrzebne ?

- Debian Woody ;)
- Sendmail (w miare nowy)
- Apache z obsługą PHP
- MySQL


No, wiec kiedy już mamy powyższy soft zainstalowany i działający ;) możemy przejść do instalacji systemu webmail-owego.

Musimy zaopatrzyć się w następujący soft:

- HORDE 2.2.3 - http://ftp.horde.org/pub/horde/horde-latest.tar.gz
- PEAR 1.1 - http://ftp.horde.org/pub/pear/pear-1.1.tar.gz
- IMP 3.2.1 - http://ftp.horde.org/pub/imp/imp-latest.tar.gz
- TURBA 1.2 - http://ftp.horde.org/pub/turba/turba-latest.tar.gz

Pobranie softu z netu:

mkdir /opt/download
cd /opt/download
wget http://ftp.horde.org/pub/horde/horde-latest.tar.gz
wget http://ftp.horde.org/pub/pear/pear-1.1.tar.gz
wget http://ftp.horde.org/pub/imp/imp-latest.tar.gz
wget http://ftp.horde.org/pub/turba/turba-latest.tar.gz

Instalacja PEAR 1.1

UWAGA: Z tego co pamiętam, to PEAR w systemie RedHat (i jemu podobnych) leży w katalogu /usr/local/lib/php !!!

cd /usr/share/pear
tar xzf /opt/download/pear-1.1.tar.gz
mv pear-4.1.0 pear


Najlepszą metodą instalacji PEAR w systemie jest wydanie polecenia:

lynx -source http://go-pear.org | php

Oczywiście, aby polecenie się wykonało musimy mieć zainstalowaną przeglądarkę LYNX oraz kompilator PHP ;)

Instalacja HORDE 2.2.3

Rozpakowujemy pakiet do katalogu, do którego możemy się dostać z poziomu Apache-a (czyli przez naszą przeglądarkę WWW). U mnie jest to /opt/apache/htdocs, ale u Was może (i pewnie jest) inaczej – zależy to od konfiguracji serwera WWW.

cd /opt/apache/htdocs
tar xzf /opt/download/horde-latest.tar.gz
mv horde-2.2.3 horde
cd horde/scripts/db/
mysql --user=root -p < mysql_create.sql
cd /opt/apache/htdocs/horde/config
for foo in *.dist; do cp $foo `basename $foo .dist`; done


Edytujemy plik konfiguracyjny horde.php. Musimy zmienić ustawienia dotyczące naszej bazy MySQL. Poniżej znajduje się zrzut mojego polecenia diff, które obrazuje co i gdzie należy zmienić w pliku:

# diff horde.php horde.php horde.php.dist

134c134
< $conf['prefs']['driver'] = 'sql';
---
> $conf['prefs']['driver'] = 'none';
143,148c143,148
< $conf['prefs']['params']['phptype'] = 'mysql';
< $conf['prefs']['params']['hostspec'] = 'localhost';
< $conf['prefs']['params']['username'] = 'horde';
< $conf['prefs']['params']['password'] = 'secretsecret';
< $conf['prefs']['params']['database'] = 'horde';
< $conf['prefs']['params']['table'] = 'horde_prefs';
---
> // $conf['prefs']['params']['phptype'] = 'mysql';
> // $conf['prefs']['params']['hostspec'] = 'localhost';
> // $conf['prefs']['params']['username'] = 'horde';
> // $conf['prefs']['params']['password'] = '*****';
> // $conf['prefs']['params']['database'] = 'horde';
> // $conf['prefs']['params']['table'] = 'horde_prefs';


Edytyjemy plik registry.php, w którym znajdują się informacje na temat doinstalowanych dodatków do HORDE (dla nas IMP i TURBA). Poniżej wynik polecenia diff.

# diff registry.php registry.php.dist

23,24c23,24
< $this->registry['auth']['login'] = 'imp';
< $this->registry['auth']['logout'] = 'imp';
---
> // $this->registry['auth']['login'] = 'imp';
> // $this->registry['auth']['logout'] = 'imp';
77,93c77,93
< $this->applications['imp'] = array(
< 'fileroot' => dirname(__FILE__) . '/../imp',
< 'webroot' => $this->applications['horde']['webroot'] . '/imp',
< 'icon' => $this->applications['horde']['webroot'] . '/imp/graphics/imp.gif',
< 'name' => _("Mail"),
< 'allow_guests' => false,
< 'show' => true
< );
<
< $this->applications['turba'] = array(
< 'fileroot' => dirname(__FILE__) . '/../turba',
< 'webroot' => $this->applications['horde']['webroot'] . '/turba',
< 'icon' => $this->applications['horde']['webroot'] . '/turba/graphics/turba.gif',
< 'name' => _("Addressbook"),
< 'allow_guests' => false,
< 'show' => true
< );
---
> // $this->applications['imp'] = array(
> // 'fileroot' => dirname(__FILE__) . '/../imp',
> // 'webroot' => $this->applications['horde']['webroot'] . '/imp',
> // 'icon' => $this->applications['horde']['webroot'] . '/imp/graphics/imp.gif',
> // 'name' => _("Mail"),
> // 'allow_guests' => false,
> // 'show' => true
> // );
>
> // $this->applications['turba'] = array(
> // 'fileroot' => dirname(__FILE__) . '/../turba',
> // 'webroot' => $this->applications['horde']['webroot'] . '/turba',
> // 'icon' => $this->applications['horde']['webroot'] . '/turba/graphics/turba.gif',
> // 'name' => _("Addressbook"),
> // 'allow_guests' => false,
> // 'show' => true
> // );


Instalacja IMP 3.2.1

Zainstalujemy IMP-a w katalogu z HORDE /opt/apache/htdocs/horde/:

cd /opt/apache/htdocs/horde
tar xzf /opt/download/imp-latest.tar.gz
mv imp-3.2.1 imp
cd /opt/apache/htdocs/horde/imp/config
for foo in *.dist; do cp $foo `basename $foo .dist`; done


Edytujemy plik konfiguracyjny IMP-a config.php, gdzie dodajemy do jego menu pakiet TURBA (czyli naszą książkę adresową):

# diff conf.php conf.php.dist

37c37
< $conf['menu']['apps'] = array('turba');
---
> $conf['menu']['apps'] = array();
57c57
< $conf['user']['allow_resume_all'] = true;
---
> $conf['user']['allow_resume_all'] = false;
63c63
< $conf['user']['allow_resume_all_in_drafts'] = true;
---
> $conf['user']['allow_resume_all_in_drafts'] = false;


Edytujemy plik servers.php, w celu podania informacji o naszym systemie mailowym:

# diff servers.php servers.php.dist

88c88
< 'server' => 'localhost',
---
> 'server' => 'imap.example.com',
93,95c93,95
< 'maildomain' => 'eboks.net',
< 'smtphost' => 'localhost',
< 'realm' => 'eboks.net',
---
> 'maildomain' => 'example.com',
> 'smtphost' => 'smtp.example.com',
> 'realm' => 'example.com',


I na koniec edytujemy pliczek prefs.php, aby nasi użytkownicy mogli zapisywać swoje kontakty w książce adresowej:

# diff prefs.php prefs.php.dist

763,764c763,764
< // 'value' => '',
< 'value' => 'localsql',
---
> 'value' => '',
> // 'value' => 'localsql',

Instalacja TURBA 1.2

Tak jak IMP-a instalujemy pakiet TURBA w katalogu z HORDE. Turba jest naszym menedżerem kontaktów – lub po ludzku – książką adresową ;)

cd /opt/apache/htdocs/horde
tar xzf /opt/download/turba-latest.tar.gz
mv turba-1.2/ turba
cd /opt/apache/htdocs/horde/turba/config/
for foo in *.dist; do cp $foo `basename $foo .dist`; done


Jeżlei już wcześniej zarejestrowaliśmy ten pakiet w HORDE i IMP, to wystarczy teraz tylko wyedytować plik config.php

# diff conf.php conf.php.dist
32c32
< $conf['menu']['apps'] = array('imp');
---
> $conf['menu']['apps'] = array();


Wyedytujemy jeszcze tylko plik sources.php aby Turba korzystała tylko z naszej bazy MySQL:

# diff sources.php sources.php.dist

43,71c43,71
< // $cfgSources['netcenter'] = array(
< // 'title' => 'Netcenter Member Directory',
< // 'type' => 'ldap',
< // 'params' => array(
< // 'server' => 'memberdir.netscape.com',
< // 'port' => 389,
< // 'root' => 'ou=member_directory,o=netcenter.com',
< // 'dn' => array('cn'),
< // 'objectclass' => 'person',
< // 'filter' => ''
< // ),
< // 'map' => array(
< // '__key' => 'dn',
< // 'name' => 'cn',
< // 'email' => 'mail',
< // 'alias' => 'givenname'
< // ),
< // 'search' => array(
< // 'name',
< // 'email',
< // 'alias'
< // ),
< // 'strict' => array(
< // 'dn'
< // ),
< // 'public' => true,
< // 'readonly' => true,
< // 'export' => false
< // );
---
> $cfgSources['netcenter'] = array(
> 'title' => 'Netcenter Member Directory',
> 'type' => 'ldap',
> 'params' => array(
> 'server' => 'memberdir.netscape.com',
> 'port' => 389,
> 'root' => 'ou=member_directory,o=netcenter.com',
> 'dn' => array('cn'),
> 'objectclass' => 'person',
> 'filter' => ''
> ),
> 'map' => array(
> '__key' => 'dn',
> 'name' => 'cn',
> 'email' => 'mail',
> 'alias' => 'givenname'
> ),
> 'search' => array(
> 'name',
> 'email',
> 'alias'
> ),
> 'strict' => array(
> 'dn'
> ),
> 'public' => true,
> 'readonly' => true,
> 'export' => false
> );
73,98c73,98
< // $cfgSources['bigfoot'] = array(
< // 'title' => 'Bigfoot',
< // 'type' => 'ldap',
< // 'params' => array(
< // 'server' => 'ldap.bigfoot.com',
< // 'port' => 389,
< // 'root' => ''
< // ),
< // 'map' => array(
< // '__key' => 'dn',
< // 'name' => 'cn',
< // 'email' => 'mail',
< // 'alias' => 'givenname'
< // ),
< // 'search' => array(
< // 'name',
< // 'email',
< // 'alias'
< // ),
< // 'strict' => array(
< // 'dn'
< // ),
< // 'public' => true,
< // 'readonly' => true,
< // 'export' => false
< // );
---
> $cfgSources['bigfoot'] = array(
> 'title' => 'Bigfoot',
> 'type' => 'ldap',
> 'params' => array(
> 'server' => 'ldap.bigfoot.com',
> 'port' => 389,
> 'root' => ''
> ),
> 'map' => array(
> '__key' => 'dn',
> 'name' => 'cn',
> 'email' => 'mail',
> 'alias' => 'givenname'
> ),
> 'search' => array(
> 'name',
> 'email',
> 'alias'
> ),
> 'strict' => array(
> 'dn'
> ),
> 'public' => true,
> 'readonly' => true,
> 'export' => false
> );
100,123c100,123
< // $cfgSources['verisign'] = array(
< // 'title' => 'Verisign Directory',
< // 'type' => 'ldap',
< // 'params' => array(
< // 'server' => 'directory.verisign.com',
< // 'port' => 389,
< // 'root' => '',
< // ),
< // 'map' => array(
< // '__key' => 'dn',
< // 'name' => 'cn',
< // 'email' => 'mail',
< // ),
< // 'search' => array(
< // 'name',
< // 'email'
< // ),
< // 'strict' => array(
< // 'dn'
< // ),
< // 'public' => true,
< // 'readonly' => true,
< // 'export' => false
< // );
---
> $cfgSources['verisign'] = array(
> 'title' => 'Verisign Directory',
> 'type' => 'ldap',
> 'params' => array(
> 'server' => 'directory.verisign.com',
> 'port' => 389,
> 'root' => '',
> ),
> 'map' => array(
> '__key' => 'dn',
> 'name' => 'cn',
> 'email' => 'mail',
> ),
> 'search' => array(
> 'name',
> 'email'
> ),
> 'strict' => array(
> 'dn'
> ),
> 'public' => true,
> 'readonly' => true,
> 'export' => false
> );
140c140
< 'password' => 'secretsecret',
---
> 'password' => '*****',
176,213c176,213
< // $cfgSources['localldap'] = array(
< // 'title' => 'Shared Directory',
< // 'type' => 'ldap',
< // 'params' => array(
< // 'server' => 'ldap.example.com',
< // 'port' => 389,
< // 'root' => 'dc=example,dc=com',
< // 'bind_dn' => 'cn=admin,ou=users,dc=example,dc=com',
< // 'bind_password' => '********',
< // 'dn' => array('cn'),
< // 'objectclass' => 'person',
< // 'version' => 3
< // ),
< // 'map' => array(
< // '__key' => 'dn',
< // 'name' => 'cn',
< // 'email' => 'mail',
< // 'homePhone' => 'telephonenumber',
< // 'workPhone' => 'workphonenumber',
< // 'cellPhone' => 'cellphonenumber',
< // 'homeAddress' => 'homeaddress'
< // ),
< // 'search' => array(
< // 'name',
< // 'email',
< // 'homePhone',
< // 'workPhone',
< // 'cellPhone',
< // 'homeAddress'
< // ),
< // 'strict' => array(
< // 'dn'
< // ),
< // 'public' => true,
< // 'readonly' => false,
< // 'admin' => array(),
< // 'export' => true
< // );
---
> $cfgSources['localldap'] = array(
> 'title' => 'Shared Directory',
> 'type' => 'ldap',
> 'params' => array(
> 'server' => 'ldap.example.com',
> 'port' => 389,
> 'root' => 'dc=example,dc=com',
> 'bind_dn' => 'cn=admin,ou=users,dc=example,dc=com',
> 'bind_password' => '********',
> 'dn' => array('cn'),
> 'objectclass' => 'person',
> 'version' => 3
> ),
> 'map' => array(
> '__key' => 'dn',
> 'name' => 'cn',
> 'email' => 'mail',
> 'homePhone' => 'telephonenumber',
> 'workPhone' => 'workphonenumber',
> 'cellPhone' => 'cellphonenumber',
> 'homeAddress' => 'homeaddress'
> ),
> 'search' => array(
> 'name',
> 'email',
> 'homePhone',
> 'workPhone',
> 'cellPhone',
> 'homeAddress'
> ),
> 'strict' => array(
> 'dn'
> ),
> 'public' => true,
> 'readonly' => false,
> 'admin' => array(),
> 'export' => true
> );