实验失败,原因未知
Top
iRedMail是我目前能找到的最好的开源邮件服务解决方案。其管理端分开源版和pro版,pro版比开源版多了很多功能,但开源版也基本上能满足普通使用需求。
由于它使用ports tree编译所需的包,所以安装过程会很漫长。

iRedMail下载页面
本章主要参考文档为:
Install iRedMail on FreeBSD inside Jail (with ezjail)

按此文档说明,iRedMail需要安装在新的服务器上,否则它会覆盖掉系统上可能已存在的MySQL、OpenLDAP、Postfix、Dovecot、Amavisd等。
UID/GID:2000、2001、2002这三个不能被占用。
按上一章创建一个名为mail.test.org的jail,使用以下命令进入其控制台:
# ezjail-admin console mail.test.org
然后检查时区、是否能ping通外网域名(比如www.baidu.com),检查/etc/pkg/FreeBSD.conf和/etc/make.conf是否进行了合理配置。
由于iRedMail的安装脚本是用bash写的,所以要先安装bash(文档中写的用bash-static):
# pkg install bash-static
然后下载安装包并解压:
fetch https://github.com/iredmail/iRedMail/archive/refs/tags/1.5.2.tar.gz
tar xvf 1.5.2.tar.gz
进入bash环境,到/root/iRedMail-1.5.2/目录,开始安装:
# bash
# cd /root/iRedMail-1.5.2/
# bash iRedMail.sh
由于此次实验是在jail里面安装iRedMail,而jail是建立在独立的zfs上的,所以不需要对zfs进行操作。
如果是在独立主机上安装iRedMail,建议为其单独创建一个zfs。
iRedMail默认的安装路径为/var/vmail,可以在创建zfs时将其挂载点设置到/var/vmail,或者在iRedMail安装过程中指定到对应的路径。

web server选Nginx。
有三种方式可以用来保存邮件账户:OpneLDAP、MariaDB、PostgreSQL。我选MariaDB。
然后为MySQL的root账户设置一个足够强悍的密码。
设置邮箱域名,也就是@后面那一串,比如test.org;并为postmaster@test.org账户设置足够强的密码。
最后选择一些附加选项,其实就是web端的邮箱前台和邮件服务器后台管理界面,再加上一个名为SOGo的webmail、Calendar等整合界面。
以上全部没有问题就可以开始安装了。

安装过程中py38-wcwidth-0.1.8需要内核源码,根据FreeBSD手册第15.6有个例子:
# rm /usr/jails/jailname/usr/src
# mkdir /usr/jails/jailname/usr/src
# mount -t nullfs -o ro /usr/src /usr/jails/jailname/usr/src
以上先从jail中删除链接/usr/src,然后创建/usr/src挂载点,再把宿主机的/usr/src以只读挂载到jail的/usr/src挂载点。宿主机的内核源码就可以被jail读取了。

有一些包要去cpan.metacpan.org下载的,多数无法正常下载。可先按Ctrl+C停止安装过程,将需要的软件包的链接复制到Windows电脑上,借助迅雷等下载工具将其下载后再sftp传到宿主机上,然后复制到对应的位置。
复制完成后再运行安装脚本。
ps:好像都是spamassassin依赖的包。
Install iRedMail with a remote MySQL server这篇文章介绍如何使用远程的数据库。
大致步骤如下:
  • 在MySQL上创建一个名为admin_iredmail的账号
  • 假设安装iRedMail安装在IP为192.168.1.200的服务器上:
    -- Run on remote MySQL server as root user
    GRANT ALL PRIVILEGES ON *.* TO 'admin_iredmail'@'192.168.1.200' IDENTIFIED BY 'admin_password' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    FLUSH HOSTS;
    
  • 如果MySQL服务器上已经已经有iRedMail相关的账号,应该先删除它们
  • -- Run on remote MySQL server as root user
    DROP DATABASE amavisd;
    DROP DATABASE iredadmin;
    DROP DATABASE iredapd;
    DROP DATABASE roundcubemail;
    DROP DATABASE sogo;
    DROP DATABASE vmail;
    
    DROP USER 'amavisd'@'192.168.1.200';
    DROP USER 'iredadmin'@'192.168.1.200';
    DROP USER 'iredapd'@'192.168.1.200';
    DROP USER 'roundcube'@'192.168.1.200';
    DROP USER 'sogo'@'192.168.1.200';
    DROP USER 'vmail'@'192.168.1.200';
    DROP USER 'vmailadmin'@'192.168.1.200';
    
  • 安装iRedMail
  • USE_EXISTING_MYSQL='YES' \
        MYSQL_SERVER_ADDRESS='192.168.1.100' \
        MYSQL_SERVER_PORT='3306' \
        MYSQL_ROOT_USER='admin_iredmail' \
        MYSQL_ROOT_PASSWD='admin_password' \
        MYSQL_GRANT_HOST='192.168.1.200' \
        bash iRedMail.sh
    
    如果不希望iRedMail安装程序初始化任何SQL记录,可以在上面加上一句INITIALIZE_SQL_DATA=NO。
    这样iRedMail安装程序就只会配置相关的配置文件以使用远程MySQL服务器,而不会对数据库中的数据进行操作。