Ubuntu 12.04 ZarafaでZ-pushな環境の構築

お知らせ
Ubuntu18.04でKopanoを設定する記事を公開しました。

GoogleのExchangeサービスが有料化された。1ヶ月600円、1年一括で6,000円。

日頃からGoogleに情報を預け過ぎていると気になっていたので、自宅でExchangeサービスを立ち上げて運用することを思い立った。
フリーで使えそうなものとして Zarafa opensource community edition というのがあったので導入してみることにした。

月額600円なら、運用の手間を考えると自前は間違っているのかもしれないけど・・・。




■目的
自宅でExchangeサービスを運用する。

  • メールサーバーの開設。メールはリアルタイム通知させたい。
  • アドレス帳などの管理。
  • スケジュールの管理。

今回、上記は達成できたが外部メールサーバーとのメールのやり取りは範囲外となる。
もちろん、サーバーで作成したアカウント同士のメールはやり取りできるし、メールはリアルタイム通知される。

だが、postfix(SMTPサーバー)を外部とやり取りさせることは、セキュリティの面でハードルが高い。これは別の機会に時間をかけてゆっくり設定していく。


■作業概要
実際にZarafaをインストールしようとすると日本語で読める情報はそう多くなく、ココココにものすごくお世話になった。感謝。

で、ざっくりと作業の流れを見ると、

  1. zarafaが使用するユーザーをUbuntuに追加する。
  2. zarafaが連携する各種パッケージ mysql や apache, postfix 等をインストールする。
  3. postfixとmysql、apache2の事前設定をする。
  4. zarafaをダウンロードしてインストールする。
  5. zarafaを動作させるための最終設定をする。
  6. zarafaでユーザーを作ったりグループを作ったりして動作を確認する。
  7. Z-Pushを設定し、httpsで同期ができるようにする。

ってな感じになる見込み。

postfixにmysql、apacheが必要なのか。
想像よりハードルが高いなー。メールサーバーって設定間違えたら蜂の巣だろうなー。
こりゃ、当面ルーターのポートは開けられないなー。
・・・なんて思いつつ作業を開始。


最終的には、以下のユーザーやデーターベースを作ることになる。
同一な名前のユーザーがいたりするので、混乱しないよう先に書いておく。

■Ubuntu

ユーザー vmail を作り、postfix, mysql, www-data が作られる。

ユーザーvmail は zarafa を動作させるシステムユーザーである。
ユーザーpostfix、mysql は何に使われるのかイマイチ分からない。
ユーザーwww-data は apache2 で phpが動くときに使われていた。

■mysql

ユーザー postmaster を作る。
データベース zarafa が作られる。

ユーザー postmaster は postfix がメールをやり取りするときと、zarafaがメールをやり取りするときに使われる。

データベース zarafa はインストール時に mysql の root によって作られる。作成後に mysql の ユーザー postmaster に全権を与える。


以降、行う作業を記す。

■zarafaが使用するユーザーをUbuntuに追加する。

$ sudo adduser -system -no-create-home vmail
システムユーザ `vmail' (UID nnn) を追加しています...
新しいユーザー `vmail' (UID nnn) をグループ `nogroup' に追加しています...
ホームディレクトリ `/home/vmail' を作成しません。
$ sudo gpasswd -a vmail root
ユーザ vmail をグループ root に追加

その後、vmailユーザーによりzarafa関連のログ出力をする際に権限不足になるため、rootグループに入れておく。セキュリティ的にどうなのか?というのは今後の課題。

■zarafaが連携する各種パッケージ mysql や apache, postfix 等をインストールする。

必要となるパッケージは、見たところ postfix, mysql, apache2, php5他 っぽいので、この順で入れてみる。

まずは postfix から。

$ sudo apt-get install postfix

※セットアップの最中、以下の問い合わせがある。

Postfix Configuration画面
インターネットサイト を選択して了解する。
システムメール名: hogeserver.hogeddns.jp にして了解する。

※セットアップにより、Ubuntuにユーザー postfix が追加される。

次に、mysql。

$ sudo apt-get install mysql-server

※Ubuntuにユーザー mysql が作成される。

※インストールの過程で、mysql の rootパスワードを設定するように促されるので、設定する。ひと通り動作し、記事が完成したら以下の操作でそれなりに複雑なものに直す方向。

$ sudo dpkg-reconfigure mysql-server-5.5

次に、apache。

$ sudo apt-get install apache2

最後に、php5等のその他必要パッケージをインストールする。

$ sudo apt-get install php5 libapache2-mod-php5 libcdb1 php5-suhosin postfix-cdb postfix-mysql postfix-pcre php5-mysql php5-imap

一応、サービスの起動設定を見てみる。

$ sudo sysv-rc-conf

service      1       2       3       4       5       0       6       S
----------------------------------------------------------------------------
apache2     [ ]     [X]     [X]     [X]     [X]     [ ]     [ ]     [ ]
mysql       [ ]     [ ]     [ ]     [ ]     [ ]     [ ]     [ ]     [ ]
postfix     [ ]     [X]     [X]     [X]     [X]     [ ]     [ ]     [ ]

結論からすると、再起動してみたら
・mysqlは起動していた
ので上記設定のままでよかった。

■postfixとmysql、apache2の事前設定をする。

エイリアス設定で管理者宛っぽいメールを全てrootで受けられるようにしておく。

/etc/aliases
# See man 5 aliases for format
postmaster: root
webmaster: root
mailer-daemon: root

エイリアスの変更内容を反映させる。

$ sudo newaliases

mysqlの文字コードセットを設定するため、以下のファイルを作成する。

/etc/mysql/conf.d/character-set.cnf
[mysqld]
character-set-server = utf8

[mysql]
default-character-set = utf8

[mysqldump]
default-character-set = utf8

ファイルを作ったらmysqlを再起動して、文字コードセットが変わったことを確認する。

$ sudo service mysql restart
$ mysql -u root -p
mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

mysql> quit;

次に、mysql に postfix というユーザーを作成する。
zarafaインストール時に root でデータベースを作成するので、その後、postmasterユーザーに zarafaデータベースへのすべての権限を与える方針。

$ mysql -u root -p
mysql> create user 'postmaster'@'localhost' identified by '********';
Query OK, 0 rows affected (0.32 sec)

mysql> quit;

※黄色部分がパスワード。

postfixとmysqlを連携させるため3つのファイルを編集する。
1つ目はこれ。

$ sudo vi /etc/postfix/main.cf

以下を修正する。

myhostname = hogeserver.hogeddns.jp
mydestination = hogeserver.hogeddns.jp, localhost.hogeserver.hogeddns.jp, localhost

以下を追記する。

virtual_alias_maps = mysql:/etc/postfix/mysql-aliases.cf
mailbox_transport = zarafa: zarafa_destination_recipient_limit = 1
mailbox_command = /usr/bin/zarafa-dagent "$USER"
debugger_command =
    PATH=/bin:/usr/bin:/usr/local/bin:/usr/bin/X11
    ddd $daemon_directory/$process_name $process_id & sleep 5

2つ目はこれ。

/etc/postfix/mysql-aliases.cf
# The user name and password to log into the mysql server.
user = postmaster
password = ********
hosts = 127.0.0.1 
dbname = zarafa

# For Postfix 2.2 and later The SQL query template.
# See mysql_table(5) for details.
query = select value from objectproperty where objectid=(select objectid from objectproperty where value='%s' limit 1) and propname='loginname';

※localhostとかhogeserverなどと書くと、mysqlとの接続にsocketファイルを使うようになるが、postfixが動作時にchrootしてしまうためアクセスできずにエラーが発生する。postfix側で明示的にchrootを n に設定すれば動作するが、セキュリティ的に良くないとかなんとか。

ファイルの所有権とアクセス権を変えておく。

$ sudo chown postfix:postfix /etc/postfix/mysql-aliases.cf
$ sudo chown root:root /etc/postfix/mysql-aliases.cf
$ sudo chmod 600 /etc/postfix/mysql-aliases.cf

※2013/06/13 オーナーをpostfixにするとチェック時に怒られる。オーナーはrootでも問題はなかった。

さらに以下を編集。

$ sudo vi /etc/postfix/master.cf

最終行にこれを追記

#for zarafa
zarafa    unix  -       n       n       -       10      pipe
  flags=DRhu user=vmail argv=/usr/bin/zarafa-dagent -R ${recipient}

apache2の設定。

/etc/apache2/httpd.conf
ServerName      hogeserver:80
ServerName      hogeserver.hogeddns.jp
DocumentRoot    /var/www
※訂正2013/06/12

ついでに /var/www ディレクトリに favicon.ico という名前でアイコンファイルを置いておくと、サイトのアイコンになる&エラーログが出力されない。アイコンファイル自体はWindows用のものでも使えるみたい。2013/06/12追記

■zarafaをダウンロードしてインストールする

ダウンロードはココからたどっていくと新しいものが入手できるっぽい。
最終的にたどり着いたのはココ
この時点で新しそうな以下の ubuntu 12.04 用ファイルをダウンロード。
http://download.zarafa.com/community/final/7.1/7.1.4-41394/ ※リンク切れ

zcp-7.1.4-41394-ubuntu-12.04-i386-free.tar.gz

ファイルを展開してインストールする。

$ tar -xvf zcp-7.1.4-41394-ubuntu-12.04-i386-free.tar.gz
$ cd zcp-7.1.4-41394-ubuntu-12.04-i386/
$ sudo ./install.sh

インストールの途中でdatabaseへのアクセスについて聞かれるので、rootユーザーを指定してデータベースを作らせる。後から postfix ユーザーでアクセスできるようにする。

Zarafa Collaboration Platform, version 7.1.4-41394
(C) Copyright 2004-2012 Zarafa, The Netherlands
Please visit http://www.zarafa.com/ for more information.

About to install for Ubuntu 12.04 i386

Found MySQL version 5.5

We will now install Zarafa onto your system. You may be
required to install dependencies if the installation fails.

Press <enter> to continue [enter]

Installing packages ...
以前に未選択のパッケージ libvmime0 を選択しています。

~ 必要パッケージがインストールされる

Installation of the software is complete.
We will now configure Zarafa services.

Please answer the following questions:

Serial number must be 25 characters or empty
Server serial number (leave empty for none) []          :[空欄のままenter]

The correctness of the serial will be checked when the server starts.

MySQL Server [localhost]        :[空欄のままenter]
MySQL Port [3306]               :[空欄のままenter]
MySQL User [root]               :[空欄のままenter]
MySQL Password (won't be shown while typing) []         :[パスワードを入力してenter、パスワードは表示されない]
Database name [zarafa]          :[空欄のままenter]
Log method (file or syslog) [file]              :[空欄のままenter]
Log filename [/var/log/zarafa/server.log]       :[空欄のままenter]

Creating spooler configuration ...
The spooler program sends outgoing e-mail using an SMTP server
Please answer the follow questions:

SMTP server [localhost]         :[空欄のままenter]
Log method (file or syslog) [file]              :[空欄のままenter]
Log filename [/var/log/zarafa/spooler.log]      :[空欄のままenter]

Creating monitor configuration ...
The monitor program sends quota warning mails to users who are over quota.
Please answer the follow questions:

Warning e-mail resend interval (in days) [1]    :[空欄のままenter]
Log method (file or syslog) [file]              :[空欄のままenter]
Log filename [/var/log/zarafa/monitor.log]      :[空欄のままenter]

Do you wish to run the Zarafa gateway (POP3/IMAP)
services as well? [y][空欄のままenter]
Log method (file or syslog) [file]              :[空欄のままenter]
Log filename [/var/log/zarafa/gateway.log]      :[空欄のままenter]
POP3 port [110]         :[空欄のままenter]

**Warning: When another service is currently providing POP3 support,
           the gateway may not start because the port is already in use.

IMAP port [143]         :[空欄のままenter]

**Warning: When another service is currently providing IMAP support,
           the gateway may not start because the port is already in use.


Do you wish to run the Zarafa Ical gateway (Ical/CalDAV)
services as well? [y][空欄のままenter]

Do you wish to run the Zarafa search service? [y][空欄のままenter]
Already installed, skipping packages.


Done configuring services

Press <enter> to continue...[enter]

Your server has been configured with the following parameters:
        MySQL server:           localhost
        MySQL port:             3306
        MySQL user:             root
        MySQL password:         ***************
        Log method:             file
        Log file:               /var/log/zarafa/server.log

The server is running on port 236

If you wish to make changes, please edit the file /etc/zarafa/server.cfg
or /etc/zarafa/license/base for the serial number.

If you wish to make changes to the spooler or monitor configuration,
please edit the file spooler.cfg or monitor.cfg in the directory
/etc/zarafa/.

To start Zarafa, you must run

/etc/init.d/zarafa-server start

Do you wish to start the server now? [y][空欄のままenter]
 * Stopping Zarafa server: zarafa-server
No /usr/bin/zarafa-server found running; none killed.
                                                                   [fail]
* Starting Zarafa server: zarafa-server                            [ OK ]


We will now create the public store with the 'zarafa-admin -s' command
Public created.

Use the 'zarafa-admin -c' command to create users.
Read the help or manual page for details, by typing:

man zarafa-admin

Press <enter> to continue...[enter]

For message delivery, 'zarafa-dagent' is available. Please read the
Installation documentation (PDF) on how to configure your mailserver.

To start the dagent, spooler, monitor and gateway services, you must run

/etc/init.d/zarafa-dagent start
/etc/init.d/zarafa-spooler start
/etc/init.d/zarafa-monitor start
/etc/init.d/zarafa-gateway start
/etc/init.d/zarafa-ical start

Do you wish to start the configured services now? [y][enter]
* Stopping Zarafa LMTP dagent: zarafa-dagent                      [ OK ]
* Starting Zarafa LMTP dagent: zarafa-dagent                      [ OK ]
* Stopping Zarafa spooler: zarafa-spooler                         [ OK ]
* Starting Zarafa spooler: zarafa-spooler                         [ OK ]
* Stopping Zarafa monitor: zarafa-monitor                         [ OK ]
* Starting Zarafa monitor: zarafa-monitor
Warning: Terminal locale not UTF-8, but UTF-8 locale is being forced.
         Screen output may not be correctly printed.
                                                                  [ OK ]
* Stopping Zarafa gateway: zarafa-gateway                         [ OK ]
* Starting Zarafa gateway: zarafa-gateway                         [ OK ]
* Stopping Zarafa search: zarafa-search                           [ OK ]
* Starting Zarafa search: zarafa-search                           [ OK ]
* Stopping Zarafa licensed: zarafa-licensed                       [ OK ]
* Starting Zarafa licensed: zarafa-licensed                       [ OK ]
Press <enter> to continue [enter]


Currently the server is configured to accept SOAP connections on port
236. If you wish to connect Outlook clients on port 80,
please setup your web server to proxy HTTP requests with
URI=/zarafa to 236. This can be done in Apache2 with mod_proxy
with the ProxyPass configuration directive:

ProxyPass        /zarafa http://localhost:236
ProxyPassReverse /zarafa http://localhost:236sudo /etc/init.d/zarafa-dagent restart
sudo /etc/init.d/zarafa-spooler restart
sudo /etc/init.d/zarafa-monitor restart
sudo /etc/init.d/zarafa-gateway restart
sudo /etc/init.d/zarafa-ical restart

sudo service apache2 restart
sudo service postfix restart

The modules 'proxy' and 'proxy_http' need to be enabled.

Enter 'a2enmod proxy' to enable the mod_proxy module.
Do not forget to reload apache when you have altered the configuration.

The webaccess may already be available from http://server/webaccess.
The new WebApp may already be available from http://server/webapp.

■zarafaを動作させるための最終設定をする。
ログ出力ができるように権限を変える。

sudo chmod 775 /var/log/zarafa/
sudo chmod 664 /var/log/zarafa/*

zarafaを動作させるユーザーとして vmail を追加する。

/etc/zarafa/server.cfg
#local_admin_users      = root
local_admin_users       = root vmail  ←vmailを追加

#mysql_user             = root
mysql_user              = postmaster

#mysql_password         = root
mysql_password          = ********

タイムゾーン設定。2013/06/20追記

/etc/zarafa/ical.cfg
server_timezone = Asia/Tokyo

mysql の postmasterユーザーだと zarafa にアクセスできないので、アクセス権限を与える。

$ mysql -u root -p
mysql> grant all privileges on zarafa.* to postmaster@localhost identified by '*********';
Query OK, 0 rows affected (0.00 sec)

mysql> quit

パスワード*********の設定は要らないはず。次の確認でデータベースにzarafaが見えないときにはパスワードを設定してみるという感じで。2013/06/20追記

確認。

$ mysql -u postmaster -p
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| test               |
| zarafa             |
+--------------------+
4 rows in set (0.00 sec)

mysql> quit

webappは日本語化されている。が、設定が必要。2013/06/20追記

/etc/zarafa/webapp/config.php

define("ENABLED_LANGUAGES", "cs_CZ;de_DE;en_GB;en_US;fr_FR;he_IL;it_IT;nl_NL;pt_BR;ru_RU;tr_TR;zh_CN;zh_TWi;ja_JP");

全サービスを再起動する。

sudo /etc/init.d/zarafa-dagent restart
sudo /etc/init.d/zarafa-spooler restart
sudo /etc/init.d/zarafa-monitor restart
sudo /etc/init.d/zarafa-gateway restart
sudo /etc/init.d/zarafa-ical restart

sudo service apache2 restart
sudo service postfix restart

■zarafaでユーザーを作ったりグループを作ったりして動作を確認する。

最初にどんなユーザー・グループがいるのか調べてみる。

$ sudo zarafa-admin -l
User list for Default(1):
        Username        Fullname        Homeserver
        ------------------------------------------
        SYSTEM          SYSTEM          Zarafa
$ sudo zarafa-admin -L
Group list for Default(1):
        groupname
        -------------------------------------
        Everyone

システムユーザーだけ。これはパスワードを持たない内部的なユーザーらしいので、気にしない事してユーザーを作ってみることに。

マニュアルによれば、以下が書かれていて、この通りにやればできそう。

8.3.1. DBプラグインでユーザーを作成します。
新規にユーザーを作成するには次のコマンドを実行します。

/usr/bin/zarafa-admin -c <user name> -p <password> -e <email> -f <full name> -a <administrator>

The fields between <> should be filled in as follows:

user name:
ユーザー名。この項目でログインします。

password:
パスワードはデータベース上に暗号化された状態で保存されます。

email:
ユーザーのメールアドレス。

full name:
ユーザーの氏名。フルネームがスペースを含む場合やアルファベット文字でない場合は、
名前をクウォテーションマーク('')を使って入力して下さい。

administrator:
通常、この項目の値は0か1です。もしユーザーが管理者の場合はそのユーザーは
全ユーザーのZarafaデータを開く権限が与えられます。
もし、2を設定した場合、そのユーザーは他の企業のメールボックスにも
アクセスする権限が与えられます。

メール以外の全ての項目は大文字小文字の区別が必要です。
パスワードに-Pを使うこともできます。そのパスワードはコマンドプロンプトで
付与することはできませんが、zarafa-adminツールで必要となります。
パスワードは確認のために2度入力する必要があります。

パラメータに -P を渡せば history に履歴が残らなくて良さそうだなぁ。と思いながらも、とりあえずユーザーを作ってみた。

$ sudo zarafa-admin -c root -p password -e root@hogeserver.hogeddns.jp -f "Administrator" -a 2
$ sudo zarafa-admin -c hogeuser -p password -e hogeuser@hogeserver.hogeddns.jp -f "Hoge User" -a 0
$ sudo zarafa-admin -c hogewife -p password -e hogewife@hogeserver.hogeddns.jp -f "Hoge Wife" -a 0

ユーザーが作られたかどうか確認してみる。

$ sudo zarafa-admin -l
User list for Default(4):
        Username        Fullname        Homeserver
        -----------------------------------------------
        SYSTEM          SYSTEM          Zarafa
        root            Administrator
        hogeuser        Hoge User
        hogewife        Hoge Wife

ユーザーの詳細情報を確認してみる。

$ sudo zarafa-admin --details root
Username:               root
Fullname:               Administrator
Emailaddress:           root@hogeserver.hogeddns.jp
Active:                 yes
Administrator:          yes (system)
Address book:           Visible
Auto-accept meeting req:no
Mapped properties:
        PR_EC_ENABLED_FEATURES
        PR_EC_DISABLED_FEATURES imap; pop3
Current user store quota settings:
 Quota overrides:       no
 Warning level:         unlimited
 Soft level:            unlimited
 Hard level:            unlimited
Current store size:     0.00 MB
Groups (1):
        Everyone
$ sudo zarafa-admin --details hogeuser
Username:               hogeuser
Fullname:               Hoge User
Emailaddress:           hogeuser@hogeserver.hogeddns.jp
Active:                 yes
Administrator:          no
Address book:           Visible
Auto-accept meeting req:no
Mapped properties:
        PR_EC_ENABLED_FEATURES
        PR_EC_DISABLED_FEATURES imap; pop3
Current user store quota settings:
 Quota overrides:       no
 Warning level:         unlimited
 Soft level:            unlimited
 Hard level:            unlimited
Current store size:     0.00 MB
Groups (1):
        Everyone

グループを作成する。

$ sudo zarafa-admin -g Family -e family@hogeserver.hogeddns.jp
Group created.

作成したグループにユーザーを追加する。

$ sudo zarafa-admin -b hogeuser -i Family
User added to group.
$ sudo zarafa-admin -b hogewife -i Family
User added to group.

作成されたグループの状態を見てみる。

$ sudo zarafa-admin --detail Family --type group
Groupname:              Family
Fullname:               Family
Emailaddress:           family@hogeserver.hogeddns.jp
Address book:           Visible
Mapped properties:
        PR_EC_ENABLED_FEATURES
        PR_EC_DISABLED_FEATURES
Users (2):
        Username        Fullname        Homeserver
        -------------------------------------------
        hogeuser        Hoge User
        hogewife        Hoge Wife

うまく登録できているようなので、webapp等の画面からhogeuserでログインし、hogewifeやfamilyグループにメールを出してみる。

設定がうまく行っていれば、
http://localhost/webapp
http://localhost/webaccess
で接続ができるはず。

メールの宛先
To: hogewife@hogeserver.hogeddns.jp
To: family@hogeserver.hogeddns.jp

他のマシンから接続したい場合、Firewallで80/tcpを開けておくこと。


次に、Z-Pushをインストールする。これをインストールして設定できればiPhoneとかでアクセスできるはず。設定はココを参考にしながら行った。

まず、ファイルをダウンロード。
ココからたどって、https://download.z-push.org/final/2.0/ へ。そして、以下をダウンロードしてきた。

z-push-2.0.7-1690.tar.gz

まず、Firewallで 443/tcp を開放する。

ファイルを展開+ディレクトリを作るなどして権限設定をする。

$ sudo tar zxvf z-push-2.0.7-1690.tar.gz
$ sudo mv z-push-2.0.7-1690 z-push
$ sudo mv z-push /usr/share
$ sudo mkdir /usr/share/z-push/state
$ sudo chown www-data:www-data /usr/share/z-push -R

その他に必要となるディレクトリを作成して権限設定する。

$ sudo mkdir /var/log/z-push
$ sudo chown www-data:www-data /var/log/z-push/
$ sudo mkdir /var/lib/z-push
$ sudo chown www-data:www-data /var/lib/z-push/

次に、phpの設定を変更する。マニュアルによれば、これを設定しなければならない。

php.ini または .htaccess
php_flag magic_quotes_gpc = off
php_flag register_globals = off
php_flag magic_quotes_runtime = off
php_flag short_open_tag = on

そこで、以下の新しいファイルを作成。

/usr/share/z-push/.htaccess
# some apache settings
Options -Indexes

# register globals must be off
php_flag register_globals off

# magic quotes must be off
php_flag magic_quotes_gpc off
php_flag magic_quotes_runtime off

# The maximum POST limit. To upload large files, this value must be larger than upload_max_filesize.
php_value post_max_size 31M
php_value upload_max_filesize 30M

# we need short-open-tags
php_flag short_open_tag on

# For debugging only
# make sure apache/php can write this file, or else no errors are logged!
php_flag  log_errors on
php_value error_log errors.txt

作ったら所有者を変えておく。

$ sudo chown www-data:www-data /usr/share/z-push/.htaccess

次に、z-pushの設定。

/usr/share/z-push/config.php
タイムゾーン設定
define('TIMEZONE', 'Asia/Tokyo');

詳細なログが出したいときは以下を設定。(マニュアルとちょっと違ってた)
define('LOGUSERLEVEL', LOGLEVEL_DEVICEID);
$specialLogUsers = array('hogeuser@hogeserver.hogeddns.jp', 'hogeuser');

サーバー用の証明書と自己署名の作成。

$ sudo mkdir /etc/apache2/ssl
$ sudo make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/ssl-cert-hogeserver.cert

作成中にホスト名を聞かれるので以下を入力。

hogeserver.hogeddns.jp

できあがったファイルには 秘密鍵 と 証明書 の両方(テキスト)が入る。

-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCy75sh7uf4f90o
~
3CzeLwQPl6lTE0hen9cY/S8=
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIICwjCCAaoCCQD7GQZ9v0BPoTANBgkqhkiG9w0BAQUFADAjMSEwHwYDVQQDExho
~
c7zwggc3J3W6g7q7qRRDSHPfufyg0dLc9iZZ3H1B/5G/IVipZvo=
-----END CERTIFICATE-----

ということで、以下を実行してファイルを複製し、それぞれ以下の内容に編集し権限設定する。

$ cd /etc/apache2/ssl
$ sudo cp ssl-cert-hogeserver.cert ssl-cert-hogeserver.pem
$ sudo vi ssl-cert-hogeserver.pem
$ sudo chmod 644 ssl-cert-hogeserver.pem
-----BEGIN CERTIFICATE-----
MIICwjCCAaoCCQD7GQZ9v0BPoTANBgkqhkiG9w0BAQUFADAjMSEwHwYDVQQDExho
~
c7zwggc3J3W6g7q7qRRDSHPfufyg0dLc9iZZ3H1B/5G/IVipZvo=
-----END CERTIFICATE-----
$ sudo cp ssl-cert-hogeserver.cert ssl-cert-hogeserver.key
$ sudo vi ssl-cert-hogeserver.key
$ sudo chmod 600 ssl-cert-hogeserver.key
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCy75sh7uf4f90o
~
3CzeLwQPl6lTE0hen9cY/S8=
-----END PRIVATE KEY-----

生成されたファイルを削除し、秘密キーを移動する。

sudo rm 01234567 ← 8桁のリンクが作られているので削除
sudo rm ssl-cert-hogeserver.cert
sudo mv ssl-cert-hogeserver.key /etc/ssl/private

次に、以下の通り apache2 のサイトを作成。

/etc/apache2/sites-available/z-push
#
# Z-push setting
#
<IfModule mod_ssl.c>
<VirtualHost _default_:443>

        Alias /Microsoft-Server-ActiveSync /usr/share/z-push/index.php

        <Directory /var/www/z-push/>
                DirectoryIndex index.php
                Options -Indexes +FollowSymLinks
                AllowOverride Options

                Order allow,deny
                Allow from all
        </Directory>

        SSLEngine on

        SSLCertificateFile    /etc/apache2/ssl/ssl-cert-hogeserver.pem
        SSLCertificateKeyFile /etc/ssl/private/ssl-cert-hogeserver.key

</VirtualHost>
</IfModule>

apacheのSSLを有効化。

$ sudo a2enmod ssl

これにより、/etc/apache2/mods-enabled に以下のリンクが作られる。

ssl.conf
ssl.load

※無効化するときは a2dismod コマンドを使用するとのこと。

z-pushサイトを有効化。

$ sudo a2ensite z-push

※無効化するときは a2dissite コマンドを使用するとのこと。

apacheの再起動(SSL有効化をしたので再起動が必要)。

$ sudo service apache2 restart

ブラウザーで
https://localhost/Microsoft-Server-ActiveSync/
に接続し、以下が表示されればテスト完了。
なお、このアドレスにアクセスする際、「証明書」に関する問い合わせがある。これは自分で作った証明書だから聞かれるのであって、証明書の内容を見て自分の作ったものだとわかったら接続してしまう。

Z-Push - Open Source ActiveSync
Version 2.0.7-1690
GET not supported
This is the Z-Push location and can only be accessed by Microsoft ActiveSync-capable devices


More information about Z-Push can be found at:
Z-Push homepage
Z-Push download page at BerliOS
Z-Push Bugtracker and Roadmap

All modifications to this sourcecode must be published and returned to the community.
Please see AGPLv3 License for details.

接続テスト。今回はこれがラスボス・・・。

iPhone で Exchange の設定を作る。

  1. 設定アプリを開く
  2. メール/連絡先/カレンダー を開く
  3. アカウントを追加… を開く
  4. Microsoft Exchange を選択
  5. メールアドレスに hogeuser@hogeserver.hogeddns.jp
    パスワードに hogeuser のパスワード
    説明に hogeserver 等の接続名を入れて「次へ」をタッチ。
  6. 「サーバの識別情報を検証できません」と言われたら「詳細」を押して証明書を確認し構築中のサーバーとわかったら受け入れる。
  7. メールアドレスは入っている
    サーバーには hogeserver.hogeddns.jp
    ドメインは空欄
    ユーザー名には hogeuser
    パスワードは入っている
    説明には hogeserver 等の接続名が入っている状態で「次へ」をタッチ。
  8. 連携したい情報を選んで「保存」ボタンを押す。

iPhoneでリアルタイム通知をテストする場合、以下に注意すること。

iPhoneやiPadで3GとWifiの接続が可能な場合、リアルタイム通知には3Gしか使われない

iPhoneで初めて接続テストをしていたとき、hogeserverはまだインターネットに公開していなかった。ルーターのNAPTを指定なかったし、Firewallも443tcpを遮断していた。
だが、iPhoneは3G回線を使ってサーバーと同期しようとしていたので、リアルタイム通知がなされない。メールアプリを開くとメールは見られるのにおかしいな・・・と。これに気付くのに半日以上を費やしてしまった。


以上で設定は完了。

思っていた以上に時間がかかってしまったが、得られた成果は大きいと思った。

なんといっても、自分でコントロールできるExchangeサーバーを構築できたってことなわけで、VMwareでもなんでもいいからサーバーとなるマシンさえ用意できれば、いつでもどこでも環境が作れるってことなわけですよ、はい。


■メモ

再起動したら、ユーザーの登録ができない。とか、webappからログインできない等の症状。2013/06/20追記
zarafa-serverが起動していなかった。

$ sudo service zarafa-server start

これは根本解決にならなかった。起動スクリプトにsleepを入れた。2016/11/20追記

vi /etc/init.d/zarafa-server
・
・
・
case "$1" in
  start)
        if [ "$SERVER_ENABLED" = "no" ]; then
                log_warning_msg "Zarafa Server daemon not enabled in /etc/default/zarafa ... not starting"
                exit 0
        fi
#added by hogehoge
sleep 5
        log_begin_msg "Starting $DESC: $NAME"
        export LC_ALL=$ZARAFA_LOCALE
        export LANG=$ZARAFA_LOCALE
        start-stop-daemon --start $QUIETDAEMON --pidfile $PIDFILE --exec $SERVER -- $SERVER_OPTS
        log_end_msg $?
        unset LC_ALL LANG
        ;;
・
・
・

これで、安定して起動するようになった。

ユーザーのフルネームを変更する。

$ sudo zarafa-admin -u hogeuser -f 'hogehoge tarojiro'

パスワードを変更する。

$ sudo zarafa-admin -u hogeuserr -p 'hogehogenewpassword'

apache2がエラー発生時に OS や 自らのバージョンを垂れ流しているのを止めたい。2013/07/15追記。

/etc/apache2/conf.d/security
#ServerTokens Full
ServerTokens Prod

お気軽にどうぞ ~ 投稿に関するご意見・感想・他

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です