3. 获取和安装软件

大多数软件都包含在你的 Linux 发行版中。据我所知,例如 SuSE 从 7.1 版本开始就发布 Cyrus。自 SuSE 8.1 起,cyrus-imap 2.1 和 sasl2 已包含在内,并且可以正常工作。但仍然建议您自行编译 Cyrus。SuSE 不发布启用 MySQL 的 Postfix。

TipDebian stable 和 testing 中已弃用的软件包
 

Debian 用户可能想要安装 Debian 提供的软件包。不幸的是,Debian stable (Woody) 和 testing (sarge) 使用的是本 HOWTO 中已弃用的软件版本。我测试了 Debian unstable (sid) 中的相应软件包,它们可以正常工作。请注意,Debian 的维护者非常保守。“postfix-mysql”、“libsasl2”和“cyrus21-imapd”软件包是稳定的,即使它们仅在“unstable”树中可用。

3.1. 获取和安装 MySQL

3.1.1. 下载

原始站点: https://mysqlserver.cn/downloads/

3.1.2. 构建和安装

cd /usr/local
tar -xvzf mysql-4.0.18.tar.gz
cd mysql-4.0.18

./configure \
--prefix=/usr/local/mysql \
--enable-assembler \
--with-innodb \
--without-debug

make
make install

/usr/local/mysql/bin/mysql_install_db
echo /usr/local/mysql/lib/mysql >> /etc/ld.so.conf
ldconfig

ln -s /usr/local/mysql/include/mysql /usr/include/mysql
ln -s /usr/local/mysql/lib/mysql /usr/lib/mysql

为了提高安全性,在您的系统上添加一个 mysql 用户,例如“mysql”,然后

chown -R mysql /usr/local/mysql/var

如果您想在启动时自动启动 MySQL,请复制/usr/local/mysql/share/mysql/mysql.server/etc/init.d/对于 SuSE,对于 Redhat 则是/etc/rc.d/init.d代替/etc/init.d/。此外,您需要添加符号链接到/etc/init.d/rc3.d对于 SuSE 和/etc/rc.d/rc3.d对于 Redhat。

以下示例适用于 SuSE Linux,并且应该很容易为 Redhat 和其他 Linux 发行版以及商业 Unix 系统进行更改。

cp /usr/local/mysql/share/mysql/mysql.server /etc/init.d/
ln -s /etc/init.d/mysql.server /etc/init.d/rc3.d/S20mysql
ln -s /etc/init.d/mysql.server /etc/init.d/rc3.d/k08mysql

3.2. 获取和安装 Berkeley DB

Berkeley DB 是构建 Cyrus-SASL 和 Cyrus-IMAP 的先决条件。某些系统附带了最新版本,但未安装头文件。请查看您的发行商 CD/DVD,以查看是否可以从软件包安装头文件。通常,此软件包称为 bdb-devel。

GNU/Debian Linux 附带的版本已过时,您将需要编译最新的版本。如果您已经在 Debian Box 上安装了 Berkeley DB,请卸载它以防止冲突。

同样非常重要的是,Cyrus-SASL 和 Cyrus-IMAP 使用相同版本的 Berkeley DB 进行编译,否则您可能会遇到问题。

TipBerkeley DB 版本
 

我只测试了 bdb 的 4.0.x 版本。如果您成功使用了更新的版本,请告诉我。

3.2.2. 构建和安装 Berkeley DB

cd dist

./configure --prefix=/usr/local/bdb

make
make install

echo /usr/local/bdb/lib >> /etc/ld.so.conf
ldconfig

3.3. 获取和安装 OpenSSL

3.3.1. 下载 OpenSSL

原始站点 http://www.openssl.org

3.3.2. 构建和安装

cd /usr/local
tar -xvzf openssl-0.9.7d.tar.gz

cd openssl-0.9.7d

./config shared

make
make test
make install

echo "/usr/local/ssl/lib" >> /etc/ld.so.conf
ldconfig

Tip选择您的 CPU 以提高速度
 

默认情况下,Makefile 为 i486 CPU 生成代码。您可以通过编辑以下内容来更改此设置Makefile在运行 config shared之后。搜索-m486并将其替换为,例如-march=athlon

3.4. 获取和安装 Cyrus SASL 和 IMAP

从源代码构建 Cyrus SASL 和 IMAP 并非易事。有一些先决条件需要满足,并且有很多与身份验证相关的难题需要考虑。

3.4.2. 创建 cyrus 用户

在大多数系统中,默认情况下没有 cyrus 用户和 mailgroup。检查一个空闲的 UID,通常守护程序使用小于 100 的 UID 运行。例如,我使用 UID 96,这是 SuSE 在默认情况下使用的 UID/etc/passwd.

groupadd mail
useradd -u 96 -d /usr/cyrus -g mail cyrus
passwd cyrus

3.4.3. 构建和安装 Cyrus SASL

tar -xvzf cyrus-sasl-2.1.18.tar.gz
cd cyrus-sasl-2.1.18

./configure \
--enable-anon \
--enable-plain \
--enable-login \
--disable-krb4 \
--disable-otp \
--disable-cram \
--disable-digest \
--with-saslauthd=/var/run/saslauthd \
--with-pam=/lib/security \
--with-dblib=berkeley \
--with-bdb-libdir=/usr/local/bdb/lib \
--with-bdb-incdir=/usr/local/bdb/include \
--with-openssl=/usr/local/ssl \
--with-plugindir=/usr/local/lib/sasl2


make
make install

mkdir -p /var/run/saslauthd

cd saslauthd
make testsaslauthd
cp testsaslauthd /usr/local/bin

echo /usr/local/lib/sasl2 >> /etc/ld.so.conf
ldconfig

SASL 库安装在/usr/local/lib/sasl2但有些程序期望 SASL 在/usr/lib/sasl2中。因此,创建一个符号链接是个好主意:ln -s /usr/local/lib/sasl2 /usr/lib/sasl2

3.4.4. 构建 Cyrus-IMAP

tar -xvzf cyrus-imapd-2.2.3.tar.gz
cd cyrus-imapd-2.2.3

export CPPFLAGS="-I/usr/include/et" 

./configure \
--with-sasl=/usr/local/lib \
--with-perl \
--with-auth=unix \
--with-dbdir=/usr/local/bdb \
--with-bdb-libdir=/usr/local/bdb/lib \
--with-bdb-incdir=/usr/local/bdb/include \
--with-openssl=/usr/local/ssl \
--without-ucdsnmp \

make depend
make
make install

3.4.5. 自动启动脚本

如果您希望在启动后自动启动 Cyrus IMAP 守护程序,则需要一个启动脚本。将以下脚本放置在/etc/init.d/。对于 Redhat,它是/etc/rc.d/init.d代替/etc/init.d/.

#!/bin/bash
#
# Cyrus startup script

case "$1" in
    start)
        # Starting SASL saslauthdaemon
        /usr/local/sbin/saslauthd -c -a pam&

        # Starting Cyrus IMAP Server
        /usr/cyrus/bin/master &
        ;;

    stop)

        # Stopping SASL saslauthdaemon
        killall saslauthd

        # Stopping Cyrus IMAP Server
        killall /usr/cyrus/bin/master

        ;;

    *)
        echo "Usage: $0 {start|stop}"
        exit 1
        ;;

esac

如果我有时间,我将提供一个更完善的脚本,但是这个脚本可以工作。

现在在运行级别目录中创建符号链接 (SuSE)

ln -s /etc/init.d/cyrus /etc/init.d/rc3.d/S20
ln -s /etc/init.d/cyrus /etc/init.d/rc3.d/K10

对于 Redhat

ln -s /etc/rc.d/init.d/cyrus /etc/rc.d/rc3.d/S20cyrus
ln -s /etc/rc.d/init.d/cyrus /etc/rc.d/rc3.d/K10cyrus

3.4.6. 更新 Cyrus IMAPd

本节介绍了如何将 IMAPd 从版本 2.1.x 更新到 2.2.x

Caution更新至关重要,可能意味着完全的数据丢失
 

请先在测试/预生产服务器上测试此过程。还要仔细查看install-upgrade.html该文件随 cyrus-imapd 发行版一起提供。请注意,您应该为生产服务器计划停机时间,以便有时间解决问题。另请注意,对于此处提供的更新过程,我无法承担任何责任

Cyrus 更改了用于内部存储邮箱列表标志等的 dbd 数据库的格式。

发行版附带了一个转换脚本。最重要的数据库是/var/imap/mailboxes.db。没有该数据库,cyrus-imapd 将无法运行。这需要备份。让我们对数据库进行转储和备份。

/etc/init.d/cyrus stop # be sure no cyrus process is running

lsof /var/imap/mailboxes.db # be sure NO process is accessing the mailbox file

su - cyrus
/usr/cyrus/bin/ctl_mboxlist -d > /tmp/mailbox.db.dump
cp /var/imap/mailboxes.db /var/imap/mailboxes.db.old

转换/var/imap/mailboxes.db
/usr/cyrus/bin/cvt_cyrusdb /var/imap/mailboxes.db berkeley /var/imap/mailboxes.db.new skiplist
mv /var/imap/mailboxes.db.new /var/imap/mailboxes.db

转换所有“seen”数据库

find /var/imap/user -name \*.seen -exec /usr/cyrus/bin/cvt_cyrusdb \{\} flat \{\}.new skiplist \; -exec mv \{\}.new \{\} \;

转换 sieve 脚本

/usr/local/cyrus-imapd-2.2.3/tools/masssievec /usr/cyrus/bin/sievec

3.5. 获取和安装 Postfix

3.5.1. 下载

原始站点: http://www.postfix.org/ftp-sites.html

3.5.2. 为 postfix 创建用户 ID (UID) 和组 ID (GID)

在构建和安装 postfix 之前,请确保创建“postfix”和“postdrop”用户和组(如果系统上不存在)。首先检查组。您可以通过 grep postfix /etc/groupgrep maildrop /etc/group 来检查。

如果没有这样的组和用户,您只需创建它们。搜索一个空闲的数字 UID 和 GID。在以下示例中,我将为 Postfix 使用 UID 和 GID 33333,为 maildrop UID 和 GID 使用 33335。这些 ID 与其他文档相对应。

groupadd -g 33333 postfix
groupadd -g 33335 postdrop

useradd -u 33333 -g 33333 -d /dev/null -s /bin/false postfix

3.5.3. 构建和安装

以下部分显示了如果您按照上述说明从源代码安装 MySQL,您必须执行的操作。如果您从二进制软件包(例如 rpm 或 deb)安装了 MySQL,则必须将 include 和 library-flags 更改为 -I/usr/include/mysql 和 -L/usr/lib/mysql。

Caution需要卸载旧的 MTA
 

重要的是,您要从基于 RPM 的系统中卸载任何 sendmail 版本。我建议您删除 sendmail,然后安装 Postfix。至少 SuSE RPM 需要 MTA。安装 Postfix-RPM 后,只需按照 HOWTO 在 RPM 安装之上安装 Postfix 即可。

tar -xvzf postfix-2.0.19.tar.gz

cd postfix-2.0.19

make makefiles 'CCARGS=-DHAS_MYSQL \
-I/usr/local/mysql/include/mysql -DUSE_SASL_AUTH \
-I/usr/local/include/sasl -I/usr/local/bdb/include' \
'AUXLIBS=-L/usr/local/mysql/lib/mysql \
-lmysqlclient -lz -lm -L/usr/local/lib -lsasl2 -L/usr/local/bdb/lib'
make
make install

make install 期间,会问几个问题。只需按 Enter 应该就能满足您的需求。对于 Redhat 用户,输入/usr/local/share/man

可能很有用。现在您需要创建一些符号链接以在系统启动时自动启动 Postfix。该示例适用于 SuSE Linux,请查阅您的供应商手册以了解其他发行版。

ln -s /usr/sbin/postfix /etc/init.d/rc3.d/S14postfix
ln -s /usr/sbin/postfix /etc/init.d/rc3.d/K07postfix

3.6. 获取和安装 PAM

默认情况下,几乎所有 Linux 发行版都安装了 PAM。我不描述如何自行编译 PAM,因为它可能会破坏您的系统。相反,我将描述如何安装软件包。

基于 RPM 的发行版的用户可以发出以下命令

rpm -i pam-devel.rpm

Debian 用户可以使用以下命令安装 devel 软件包

apt-get install libpam0g-dev

3.7. 获取和安装 pam_mysql

3.7.2. 安装

tar -xvzf pam_mysql-0.5.tar.gz

cd pam_mysql

如果您自己编译了 mysql,请检查Makefile并输入 mysql 库的正确路径并添加编译器标志CFLAGS -I/path/to/mysql/include.

ifndef FULL_LINUX_PAM_SOURCE_TREE
export DYNAMIC=-DPAM_DYNAMIC
export CC=gcc
export CFLAGS=-O2 -Dlinux -DLINUX_PAM \
       -ansi -D_POSIX_SOURCE -Wall -Wwrite-strings \
       -Wpointer-arith -Wcast-qual -Wcast-align -Wtraditional \
       -Wstrict-prototypes -Wmissing-prototypes -Wnested-externs -Winline \
       -Wshadow -pedantic -fPIC -I/usr/local/mysql/include
export MKDIR=mkdir -p
export LD_D=gcc -shared -Xlinker -x -L/usr/local/mysql/lib/mysql -lz
endif

在自定义该文件后,您可以继续进行 pam_mysql 编译。

make

cp pam_mysql.so /lib/security

[[ ! -d /var/lib/mysql ]] && mkdir /var/lib/mysql
ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock

3.8. 获取和安装 Web-cyradm

3.8.1. 下载

原始站点: http://www.web-cyradm.org

3.8.2. 安装

cd /usr/local/apache/htdocs

tar -xvzf web-cyradm-0.5.4.tar.gz

touch /var/log/web-cyradm.log
chown nobody /var/log/web-cyradm.log

解压缩 web-cyradm 后,将其移动到您的 Web 服务器文档根目录中的某个位置。

就这样。现在您需要配置整个软件堆栈。

Web-cyradm 0.5.4 被认为是稳定的,并于 2003-12-05 发布

由于 web-cyradm 使用 PEAR 作为其数据库抽象层,因此您还需要 PEAR 的最新副本。这包含在最新的 PHP 版本中。我强烈建议将 PHP 更新到 4.3.4,因为已经修复了很多重要的错误。

一个常见的错误是忘记触摸日志文件并将所有者更改为 Apache UID。这通常是“nobody”或“wwwrun”。

3.8.3. 创建数据库和表

现在我们需要为 Postfix 和 Web-cyradm 创建数据库和表,并向数据库添加用户。

Web-cyradm 附带了几个 MySQL 脚本insertuser_mysql.sqlcreate_mysql.sql。“第一个”将数据库用户插入到数据库“mysql”中,并创建数据库“mail”。“第二个”创建所需的表,并使用初始管理员用户和 cyrus 用户填充数据库。

其他脚本用于从旧版本进行增量升级。

在本示例中,数据库用户“mail”的密码为“secret”。请插入您喜欢的任何用户和密码。

初始超级用户的用户名是“admin”,密码是“test”。

Caution更改默认密码!
 

如果恶意用户想要获得对系统的未授权访问,则第一次尝试始终是供应商提供的默认用户名和密码。重要的是,您要在应用脚本之前在脚本中更改它们。

自定义用户名和密码后,应用脚本

/usr/local/mysql/bin/mysql -u root -p < \
/usr/local/apache/htdocs/web-cyradm/scripts/insertuser_mysql.sql

/usr/local/mysql/bin/mysql mail -u mail -p < \
/usr/local/apache/htdocs/web-cyradm/scripts/create_mysql.sql

3.8.4. 从 0.5.3 升级到 0.5.4

在 0.5.4 版本中,有一个小的数据库增强功能。您可以通过发出发行版附带的 MySQL 脚本来升级数据库。

mysql mail -u mail -p < \ 
scripts/upgrade-0.5.3-to-0.5.4_mysql.sql

自 0.5.3 版本以来,web-cyradm 完全支持 DES 加密密码。您可以使用 php 脚本migrate.php将用户密码从纯文本转换为 unix 兼容的 crypt (DES)。

Caution从纯文本到 crypt 的迁移无法撤消
 

在对迁移脚本执行任何操作之前,请务必备份最新的数据库。