SOGo—开源群件
自从我上次为 Linux Journal 撰写关于 SOGo 的文章以来,已经过去了两年多。从那时起,该项目已经非常成熟,现在已成功应用于大量的大规模部署中。SOGo 的优势在于可扩展性;组件可重用性(IMAP、LDAP、SMTP 和数据库服务器);符合 CalDAV 和 CardDAV 等标准;以及与流行的应用程序(如 Mozilla Thunderbird、Apple iCal/Address Book 和 Microsoft Outlook)的出色互操作性。后者是通过 SOGo 和 OpenChange 项目之间的密切合作实现的。
自从我的上一篇文章以来,开源群件领域发生了更多的波动,包括
CalDAV 和 CardDAV 协议已获得广泛普及,并且 WebDAV 的集合同步和 WebDAV 的 CalDAV 调度扩展等扩展使这些协议最终可以在大型企业环境中使用。
Mozilla Messaging 最终发布了 Thunderbird 3,其中包含大大改进的 Mozilla Lightning 扩展。
Zimbra 获得了极大的欢迎,但雅虎以巨额亏损将其出售给了 VMware。
OpenGroupware.org、Open-Xchange、Citadel、Kolab、eGroupWare 和 Bedework 正在逐渐衰落。
Chandler 和 Bongo 实际上已经消亡。
苹果正在积极地在其日历和地址簿应用程序中集成开放标准。
DAViCal 和 OpenChange 已经成为值得考虑的优秀解决方案。
Funambol 已将自己定位为最受欢迎的同步中间件。
SOGo 的第一个版本出现在 2009 年 3 月的 v1.0 中,随后很快发布了高达 1.3.2 的版本。本文介绍了 SOGo 的当前状态、其与桌面和移动客户端的集成能力,并提供了快速获得可用安装的简单说明。
安装 SOGo 非常容易,因为软件包可用于各种基于 GNU/Linux 的发行版,例如 Red Hat Enterprise(和 CentOS)、Debian 和 Ubuntu。还有一个基于 Ubuntu 的虚拟设备可用,它提供了完整的 SOGo 开箱即用测试环境。在这里,我提供高级安装和配置说明。有关更深入的说明,请查看官方 SOGo 文档,其中涵盖了所有内容,包括桌面客户端和移动设备的说明。
SOGo 几乎利用了您基础设施的每个部分。它使用了以下内容
您的 LDAP 服务器用于身份验证、公共地址簿和组提取。
您的数据库服务器用于存储事件、任务和联系人。数据库服务器也可以用于身份验证和共享地址簿。支持 MySQL、Oracle 和 PostgreSQL。
您的 IMAP 服务器用于存储/检索电子邮件。如果可用,SOGo 还会利用高级功能,例如 IMAP ACL、Sieve、共享文件夹等。
您的 SMTP 服务器用于发送电子邮件。
您的 HTTP 服务器用于将请求代理到 SOGo 服务器并执行 SSL 加密。
当然,当您的环境中没有此类组件时,可以使用来自免费和开源社区的最佳组件。SOGo 将真正将这些松散耦合的组件转换为一个单一且连贯的群件解决方案,然后可以从您喜欢的 Web 浏览器或各种桌面和移动客户端访问该解决方案。
假设您安装了 Ubuntu 10.04 LTS 并且您更喜欢 MySQL,那么让我们继续安装 SOGo 及其依赖项。首先,将 SOGo 的存储库添加到您的 APT 源列表,并从其源重新同步软件包索引文件
% sudo su - % echo 'deb http://inverse.ca/ubuntu lucid main' ↪>> /etc/apt/sources.list % apt-get update
然后,安装 SOGo、其依赖项、Apache 和 MySQL
% apt-get install sogo sope4.9-gdl1-mysql apache2 mysql-server
如果您在安装后遇到 Apache 启动错误,请忽略它们。接下来,创建 SOGo 数据库和所需的用户
mysql -h localhost -u root -p mysql> CREATE DATABASE sogo CHARSET='UTF8'; mysql> CREATE USER 'sogo'@'localhost' IDENTIFIED BY 'secret'; mysql> GRANT ALL PRIVILEGES ON sogo.* TO 'sogo'@'localhost';
SOGo 的数据库将用于存储事件、任务、联系人和用户首选项。为了使此安装尽可能简单,我们还使用 MySQL 进行用户身份验证。为了实现这一点,创建一个包含用户信息的数据表,并添加三个测试用户,所有用户都使用相同的 MD5 加密密码(“secret”)
mysql> USE sogo; mysql> CREATE TABLE sogo_users (c_uid VARCHAR(10) PRIMARY KEY, ↪c_name VARCHAR(10), c_password VARCHAR(32), ↪c_cn VARCHAR(128), mail VARCHAR(128)); mysql> INSERT INTO sogo_users VALUES ('alice', 'alice', ↪MD5('secret'), 'Alice Thompson', 'alice@acme.com'); mysql> INSERT INTO sogo_users VALUES ('bob', 'bob', MD5('secret'), ↪'Bob Smith', 'bob@acme.com'); mysql> INSERT INTO sogo_users VALUES ('chris', 'chris', MD5('secret'), ↪'Chris Cooper', 'chris@acme.com');
在真实环境中,您的数据库表可能比这复杂得多。它也可能是您现有信息上的数据库视图,并且在许多情况下,将使用 LDAP 服务器进行身份验证和用户信息检索。SOGo 支持多种身份验证源,因此您也可以使用 LDAP 服务器进行身份验证,并结合 CRM 联系人的 SQL 视图,该视图将作为地址簿公开给所有 SOGo 用户。
接下来,让 Apache 将请求代理到 SOGo。由于 SOGo 不是完全兼容的 HTTP 服务器,因此您应该通过启用一些必需的模块在它前面使用 Apache(或任何其他 HTTP 服务器)
% a2enmod proxy % a2enmod proxy_http % a2enmod headers
启用后,您必须配置 SOGo,以便它使用您新创建的 MySQL 数据库。同样,在本示例中,为了使配置尽可能简单,我们不配置 SOGo 的 Web 邮件部分。尽管如此,如果您确实有一个可用的 IMAP 服务器安装(推荐使用 Cyrus IMAP Server 和 Dovecot),如果 SOGo 和您的 IMAP 服务器使用相同的身份验证源,它将开箱即用。
在 “sogo” 用户下继续 SOGo 的配置。这非常重要,因为 sogod dæmon 将在 sogo 用户下运行,因此 defaults 实用程序创建的首选项必须属于 sogo 用户
% sudo su - sogo % defaults write sogod SOGoTimeZone "America/Montreal" % defaults write sogod SOGoMailDomain "acme.com" % defaults write sogod SOGoLanguage English % defaults write sogod SOGoUserSources '({canAuthenticate = YES; ↪displayName = "SOGo Users"; id = users; isAddressBook = YES; ↪type = sql; userPasswordAlgorithm = md5; viewURL = ↪"mysql://sogo:secret@127.0.0.1:3306/sogo/sogo_users";})' % defaults write sogod SOGoProfileURL ↪'mysql://root:secret@127.0.0.1:3306/sogo/sogo_user_profile' % defaults write sogod OCSFolderInfoURL ↪'mysql://root:secret@127.0.0.1:3306/sogo/sogo_folder_info' % defaults write sogod SOGoAppointmentSendEMailNotifications NO % defaults write sogod SOGoLoginModule Calendar % exit
最后,修改 /etc/apache2/conf.d/SOGo.conf 配置文件以使用没有 SSL 的 localhost。因此,替换以下内容
RequestHeader set "x-webobjects-server-port" "443" RequestHeader set "x-webobjects-server-name" "yourhostname" RequestHeader set "x-webobjects-server-url" "https://yourhostname"
为
RequestHeader set "x-webobjects-server-port" "80" RequestHeader set "x-webobjects-server-name" "localhost" RequestHeader set "x-webobjects-server-url" "https://"
然后,重启 Apache 和 SOGo
% /etc/init.d/apache2 restart % /etc/init.d/sogo restart
如果您想使用 IP 地址或真实的 DNS 名称来访问 SOGo,您必须相应地调整此设置。“x-webobjects-server-url”值将成为访问您的 SOGo 系统的官方 URL。现在,从您执行上述步骤的同一台机器上,打开您喜欢的 Web 浏览器并访问 https:///SOGo。您应该能够使用上面创建的三个用户中的任何一个登录。
通过标准的 CalDAV 和 CardDAV 协议,SOGo 很好地支持桌面客户端,例如 Mozilla Thunderbird、Apple iCal 和 Apple Address Book。
Mozilla Thunderbird 与 Lightning 日历扩展相结合,是与 SOGo 一起使用的首选客户端。支持 Thunderbird 的版本 2 和 3.1。Thunderbird 是首选的桌面客户端,因为 SOGo 的 Web 界面与其共享大部分外观、感觉和功能。此外,可以与 Lightning 一起安装两个扩展程序以完善集成:SOGo Connector 和 SOGo Integrator 扩展程序。前者为 Thunderbird 增加了更多功能(例如 CardDAV 支持、CalDAV ACL 等),后者增加了垂直于 SOGo 的功能(例如日历、地址簿共享功能和自动发现、首选项同步等)。
使用 SOGo Integrator 扩展程序需要编辑扩展程序文件子树中的一个文件,以指定 SOGo 服务器的位置。这是手动完成的。在企业环境中,此步骤每个版本只需要执行一次,因为更新有望自动传播。解压缩(使用 ZIP 或 jar 工具)SOGo Integrator XPI,并找到 extensions.rdf 文件。此文件用于定位扩展程序更新服务器和 SOGo 服务器(暂时将它们视为相同)。有一行以Seq标签,并具有一个名为isi:updateURL。将该 URL 的主机部分替换为您要连接的 SOGo 服务器,该服务器应与x-webobjects-server-url相同。例如,有人会替换以下内容
<Seq about="http://inverse.ca/sogo-integrator/extensions" ↪isi:updateURL="http://sogo-demo.inverse.ca/plugins/ ↪updates.php?plugin=%ITEM_ID%&version=%ITEM_VERSION%& ↪platform=%PLATFORM%">
为
<Seq about="http://inverse.ca/sogo-integrator/extensions" ↪isi:updateURL="https://sogo.acme.com/plugins/ ↪updates.php?plugin=%ITEM_ID%&version=%ITEM_VERSION%& ↪platform=%PLATFORM%">
如果可以从 https://sogo.acme.com/SOGo 访问 SOGo 服务器。完成修改配置文件后,保存您的更改并重建 XPI。至于扩展程序更新服务器,可以将其配置为自动安装或卸载 Mozilla Thunderbird 扩展程序。您还可以将 Thunderbird 设置推送到所有用户群。安装和配置记录在“Mozilla Thunderbird—安装和配置指南”中。
在 Mac OS X 上,如果您喜欢 Apple 的闭源应用程序,则可以轻松地将 Apple iCal 3 和 iCal 4 与 SOGo 一起使用。由于 SOGo 与 CalDAV 协议的出色兼容性及其对某些 Apple 特定扩展的实现,所有功能都将可用,包括日历共享和委派。自 Mac OS X 10.6 以来,也可以通过 CardDAV 协议将 Address Book 与 SOGo 一起使用,以便访问您的联系人。当您将这两个应用程序与 Apple Mail 结合使用时,将创建一个具有与其他平台上的其他用户协作可能性的有凝聚力的环境。
CalDAV 和 CardDAV 的普及迅速暴露了这两种协议的根本缺陷,因此创建了 WebDAV 的集合同步和 WebDAV 的 CalDAV 调度扩展来消除这些缺陷。前者引入了一种基于令牌的 DAV 资源同步方法。因此,DAV 客户端实际上发送一个同步令牌,并从集合中返回已更改项目的引用,而不是让 DAV 客户端请求集合中每个项目的 ETag 以查看服务器上发生了哪些更改。这使得大型日历或地址簿的整个同步过程非常快速。
第二个扩展实际上将日历应用程序中所需的所有调度逻辑(邀请与会者、检查可用性等)移动到服务器。这避免了客户端实现错误,并减少了客户端到服务器的通信,这在高延迟连接上可能会很慢。
SOGo 很好地实现了这两个扩展,Mozilla Lightning 同时支持两者,而 Apple iCal 仅限于 WebDAV 的 CalDAV 调度扩展。
为了向 Microsoft Outlook 用户提供 SOGo 连接选项,SOGo 使用了 OpenChange 项目。该项目由 Julien Kerihuel 于 2003 年在其 EPITECH 创新项目背景下创立。OpenChange 解决方案与 Samba 4 紧密集成,分为三个子项目
libmapi:一个客户端库,可用于现有的消息客户端(Evolution、Akonadi、Mailody 等),并提供与 Exchange 服务器的本机兼容性。
mapiproxy:一个透明网关/代理,用于加速 Outlook 客户端和 Exchange 服务器之间的通信。
OpenChange Server:Exchange 协议的完整实现,具有可插拔的存储提供程序。
第三个子项目是这里真正让我们感兴趣的。SOGo 开发人员为 OpenChange 创建了一个存储提供程序,该提供程序利用 SOGo 库来重用与地址簿、日历和电子邮件管理关联的所有业务逻辑。Microsoft Outlook 直接且本地地与 OpenChange 通信(因为它像任何 Microsoft Exchange 服务器一样运行),而 OpenChange 又使用 SOGo 存储提供程序来访问 SOGo 处理的所有信息。
这使得 SOGo 成为真正的、透明的 Microsoft Exchange 替代品,因为它不强制 Outlook 用户使用昂贵且难以维护的 MAPI 连接器,这些连接器在功能方面通常受到限制。概念验证于 2010 年 10 月发布,具有电子邮件、联系人、事件和任务的许多功能。该项目正在积极进行中,到您阅读本文时,应该有一个运行良好的版本可供公众使用。
Samba 在众多组织中非常受欢迎,并且其雄心勃勃地重写为与 Active Directory 兼容的域控制器,最终可能会将 Samba 4、OpenChange 和 SOGo 组合定位为许多需要良好集成的目录服务、文件和打印服务以及在其之上的协作解决方案的组织的统包解决方案。
尽管 Web 界面或桌面客户端应用程序将满足大多数用户,但移动设备的普及、用户移动性的提高以及从任何地方访问事件、任务、联系人或电子邮件的需求是任何群件解决方案都不能忽视的。
通过其 Funambol 连接器,SOGo 可以与任何支持 SyncML 的设备完全同步事件、联系人和任务。Funambol 项目由 SyncML 服务器和客户端组成,适用于没有内置 SyncML 支持的设备,例如 Research in Motion BlackBerry、Microsoft Windows Mobile、Symbian S60 或 Google Android。服务器部分是一个中间件,可以使用 Funambol SOGo Connector 重用来自 SOGo 的所有数据。所有这些免费组件使数十亿支持 SyncML 的设备能够同步到 SOGo 平台。
Funambol 中间件是一个独立的 Java 应用程序。安装非常简单,只需下载 Funambol Server、Funambol SOGo Connector 并创建同步源即可。完整说明在“SOGo—安装和配置指南”中提供。
Apple iPhone 用户可以配置他们的手机以使用 CalDAV 和 CardDAV,并在需要时访问他们的日历和地址簿。在基于 Google Android 的设备上,也可以使用免费提供的 Hypermatix CalDAV 客户端来访问来自 SOGo 的日历信息。
移动设备的配置说明在“移动设备—安装和配置指南”中提供。
正如本文所讨论的,行业正在朝着 CalDAV 和 CardDAV 等开放标准发展,以支持协作应用程序,SOGo 对此提供了良好的支持。希望这种趋势将继续下去,即使没有改善。
SOGo 通过 OpenChange 为 Outlook 用户提供的本机兼容性将是解除微软最大的企业锁定——Exchange 的重要一步。
SOGo 不是一个完成的产品,它将继续发展。开发人员正在积极改进 OpenChange 和 Exchange 集成,实现更多的 Apple 扩展,例如会议的文件附件,以及向 SOGo 添加脚本功能。SOGo 的虚拟设备,称为 ZEG,代表 “零努力群件”(Zero Effort Groupware),是尝试 sogo 应用程序并下载它的一个好方法。
资源
SOGo 及其文档:www.sogo.nu
OpenChange:www.openchange.org
Hypermatix CalDAV Android 客户端:www.hypermatix.com/products/calendar_sync_for_android
WebDAV 的集合同步:tools.ietf.org/html/draft-daboo-webdav-sync-03
WebDAV 的 CalDAV 调度扩展:tools.ietf.org/html/draft-desruisseaux-caldav-sched-08
Funambol:www.funambol.com
Ludovic Marcotte (lmarcotte@inverse.ca) 拥有蒙特利尔大学计算机科学学士学位。目前,他在 Inverse, Inc. 工作,这是一家位于蒙特利尔市中心的开源 IT 咨询公司,专门从事 PacketFence 和 SOGo 的开发和部署,并在那里享受乐趣。