Ubuntu12.04LTSから14.04LTSにアップグレード(Zarafa編)

iPhoneのWordPressでブログの記事を追加する際、WordPressのバージョンが古すぎると怒られていたが、気にせずにいた。しかし、この間から記事を追加することができなくなってしまった。

WordPressだけをバージョンアップすることもできるのだろうが、この際だからとUbuntu12.04LTSを14.04LTSに置き換えることを思い立った。




結論からすると、基本的な機能(bind9,dhcpd,samba等)は問題なく動作するものの、Zarafaが動作しなくなってしまった。他に動いていないものもあるようだが、普通に使い倒している状況なので、最優先で動作させる必要がある。

アップグレード後にZarafaを調べてみたところ、「Ubuntu14.04から64bit版のみ対応」となっており、うちのマシンは32ビットCPUなのでそのままでは動かない。

原因は、php5-mapiというZarafaに同梱されているパッケージに依存関係の問題があることだった。

トライしたのは

  • 12.04LTS用最終バージョンのパッケージとソースコードをダウンロードし、php5-mapiを作り直して使えるようにする。
  • ちょっと古いバージョンだがUbuntu14.04用に有志が作ったphp5-mapiパッケージを使わせていただく。

で、前者はやってみたけどお恥ずかしい話で失敗、後者でどうにか復旧できた。

作り直した時にやったことは最後の方にメモとして残す。いつかはせめて最終バージョンにしたいため。


今回、あまりに試行錯誤しすぎた。恐らく以下の手順でできるんじゃないかと思うが、検証はできていない。

  1. データベースをバックアップする。
  2. Zarafaをアンインストールする(DB削除の問い合わせがあるので注意!)
  3. Ubuntu14.04用に作られたphp5-mapiをダウンロードする。
  4. php5-mapiが作られた当時にパッケージをダウンロードする。
  5. Zarafaをインストールする。
  6. 設定する。

Z-Pushはそのままで動いているっぽい。

以降はそれぞれの詳細。


■データベースをバックアップする。

データベースを丸ごとバックアップするには、どうやら以下のコマンドを実行すれば良いらしい。
もしかしたらやっちまう可能性もあるので、バックアップを取ってから作業を始めよう!

$> mysqldump -u root -p -x --all-databases -r mysqlbackupall.sql

バックアップしたデータを戻すには以下を実行すれば良いらしい。

$>mysql -u root -p < dump.sql

らしいと書いているのは、実際に検証してみたわけじゃないからっす。


■Zarafaをアンインストールする(DB削除の問い合わせがあるので注意!)

まずはパッケージを削除する。

$> cd hoge/zcp-7.1.4-41394-ubuntu-12.04-i386 ← インストールしたパッケージのありか
$> sudo ./uninstall.sh 

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

Are you sure you wish to remove all zarafa related software? [n] y ←削除するので y 回答

Stopping services ...
 * Stopping Zarafa spooler: zarafa-spooler        No /usr/bin/zarafa-spooler found running; none killed.

<省略>

mysql_host	= localhost
mysql_port	= 3306
mysql_user	= postmaster
mysql_pass	= 
mysql_database	= zarafa

Do you wish to remove the database using these settings too? [y] n ←とにかく残す!
Leaving database present

Do you wish to remove the configuration and log files too? [y] n ←とにかく残す!
Uninstall finished.

色々怒られるが、とにかくパッケージはありったけ削除。

もしも依存関係で怒られたりした時には、個別にパッケージをremoveしたり、apt-getが示してくれる解決法

$ sudo apt-get -f install
$ sudo apt-get autoremove

等を実行してどうにかする。


■Ubuntu14.04用に作られたphp5-mapiをダウンロードする。

Zarafaのフォーラムに「Upgrade ubuntu 12.04 to 14.04」があり、ここでUbuntuを12.04から14.04にしたら動かなくなった、というやりとりがあった。

このやりとりの最後の方に php5-mapi を組み直してここに置いたよ!というポストがあるので、ここからdebパッケージをダウンロードする。

この方のポストはこれだけだったりすることとか、気になることはたくさんあるのだけれど、自前で作ることができなかったので、当面はこれを使わせていただくこととする。


■php5-mapiが作られた当時にパッケージをダウンロードする。

見てみると、zcp-7.1.9-44333-ubuntu-12.04-i386 がターゲットらしい。
Zarafaのダウンロードはここから、zcp-7.1.9-44333-ubuntu-12.04-i386-free.tar.gzをダウンロードする。


■Zarafaをインストールする。

ダウンロードした、zcp-7.1.9-44333-ubuntu-12.04-i386-free.tar.gzを展開し、php5-mapiを差し替えてインストールする。


■設定する。

いくつか設定が必要。だけどうろ覚え・・・。

こんなメッセージを見たのだが・・・

Sun Apr 12 18:21:06 2015: WARNING: Database version (46050,63) is newer than the server version (44333,63)
Sun Apr 12 18:21:06 2015:    You can force the server to start with --ignore-database-version-conflict
Sun Apr 12 18:21:06 2015:    Warning, you can lose data! If you don't know what you're doing, you shouldn't be using this option!

どこに設定してよいかいまいちわからず、ここへ。赤文字部分を追加。

/etc/init.d/zarafa-server
#! /bin/sh
#
### BEGIN INIT INFO
# Provides:          zarafa-server
# Required-Start:    $syslog $network $remote_fs
# Required-Stop:     $syslog $network $remote_fs
# Should-Start:      mysql
# Should-Stop:       mysql
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Zarafa Collaboration Platform's Storage Server
# Description:       The Zarafa Server takes MAPI calls in SOAP over HTTP(S) or
#                    the unix socket. It authenticates users using one of three
#                    authentication backends (unix/pam, db, ldap). It stores the data
#                    in a MySQL instance, and optionally stores the attachments directly
#                    on the filesystem.
### END INIT INFO

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
SERVER=/usr/bin/zarafa-server
DESC="Zarafa server"
NAME=`basename $SERVER`
#QUIETDAEMON=--quiet
PIDFILE=/var/run/$NAME.pid

test -x $SERVER || exit 0

# Include zarafa defaults if available
if [ -f /etc/default/zarafa ] ; then
        . /etc/default/zarafa
        export ZARAFA_USERSCRIPT_LOCALE
fi
if [ -z "$ZARAFA_LOCALE" ]; then
        ZARAFA_LOCALE="C"
fi

if [ -e "$SERVER_CONFIG" ]; then
        SERVER_OPTS="--ignore-database-version-conflict $SERVER_OPTS -c $SERVER_CONFIG"
fi
・
・
・

次、必要ファイルが必要な場所にないらしいので、シンボリックリンクを作成。

$ sudo ln -s /etc/php5/conf.d/zarafa.ini /etc/php5/cli/zarafa.ini
$ sudo ln -s /etc/php5/conf.d/zarafa.ini /etc/php5/apache2/conf.d/20-zarafa.ini

次、apache2で各ページを公開設定していたが、apache2側の設定ファイルに拡張子「conf」が必要になったみたいなので、/etc/apache2/sites-available にある設定ファイルに付与する。
その後、有効化する。

$ sudo a2ensite zarafa-webaccess.conf
$ sudo a2ensite zarafa-webapp.conf
$ sudo a2ensite z-push
$ sudo service apache2 restart

色々と設定を変えたので、それぞれを再起動。

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


以降、メモ。全てやりかけ、完了していないが、将来のために。

■参考にさせていただいたサイト

debパッケージを改造して依存関係を直す パッケージの中身を差し替える方法を教えてくれた
Zarafa Forum Thread: PHP-MAPI files Zarafa Forum パッケージを作りなおせばOKと教えてくれた
Ubuntu パッケージ検索 ファイルが含まれるパッケージを探した


コンパイルするために色んなパッケージを入れたり外したりした。もしかしたら間違ったパッケージ名があるかもしれないが、精査するとしたらまた今度。

bison
flex
libclucene-dev
libmysqlclient-dev
libboost-all-dev
libical-dev
libmailutils-dev
libncursesw5-dev
libinetmapi
libpython2.7-dev
libvmime-dev
libxml2
libxml2-dev
php5-dev
python-dev
python2.7-dev
swig
swig-dev
uuid-dev


作ったmapiがちゃんと読み込まれているか確認するための手順。

以下の test.php を作成。

<?php
if (extension_loaded("mapi")) {
        echo phpversion("mapi");
} else {
        echo "extension_loaded faild.";
}
?>

hpにエクステンションを読み込ませつつ実行してバージョンを確認。

$ php -d extension=mapi.so -f test.php

上手くエクステンションが読み込まれない時には faild 表示する。


パッケージを作り直す際のメモ。12.04最終パッケージを対象として頑張ってみたやつ。

パッケージの展開

$ ar x php5-mapi_7.1.9-44334_i386.deb

-rw-r--r-- 1 hogeuser hogeuser   1154  4月  6 21:59 control.tar.gz
-rw-r--r-- 1 hogeuser hogeuser 533132  4月  6 21:59 data.tar.xz
-rw-r--r-- 1 hogeuser hogeuser      4  4月  6 21:59 debian-binary

それぞれの中身

control.tar.gz
./
./conffiles
./md5sums
./control

data.tar.xz
./
./etc/
./etc/php5/
./etc/php5/apache2/
./etc/php5/apache2/conf.d/
./etc/php5/apache2/conf.d/zarafa.ini
./usr/
./usr/lib/
./usr/lib/php5/
./usr/lib/php5/20121212+lfs/
./usr/lib/php5/20121212+lfs/mapi.la
./usr/lib/php5/20121212+lfs/mapi.so
./usr/lib/php5/20090626+lfs/
./usr/lib/php5/20090626+lfs/mapi.so
./usr/share/
./usr/share/doc/
./usr/share/doc/php5-mapi/
./usr/share/doc/php5-mapi/changelog.Debian.gz
./usr/share/doc/php5-mapi/copyright
./usr/share/php/
./usr/share/php/mapi/
./usr/share/php/mapi/class.baseexception.php
./usr/share/php/mapi/class.baserecurrence.php
./usr/share/php/mapi/class.freebusypublish.php
./usr/share/php/mapi/class.mapiexception.php
./usr/share/php/mapi/class.meetingrequest.php
./usr/share/php/mapi/class.recurrence.php
./usr/share/php/mapi/class.taskrecurrence.php
./usr/share/php/mapi/class.taskrequest.php
./usr/share/php/mapi/mapicode.php
./usr/share/php/mapi/mapiguid.php
./usr/share/php/mapi/mapitags.php
./usr/share/php/mapi/mapi.util.php
./usr/share/php/mapi/mapidefs.php

—————————————————————————

それぞれの内容を。

control.tar.gz

./
■./conffiles

/etc/php5/apache2/conf.d/zarafa.ini

■./control

Package: php5-mapi
Source: zarafa
Version: 7.1.11-46050 <書き換え>
Architecture: i386
Maintainer: John van der Kamp <j.vdkamp@zarafa.com>
Installed-Size: 892
Depends: libc6 (>= 2.4), libgcc1 (>= 1:4.1.1), libstdc++6 (>= 4.6), zarafa-client (= 7.1.11-46050), zarafa-libs (= 7.1.11-46050), phpapi-20121212+lfs, libapache2-mod-php5 | php5-cgi | php5-cli <書き換え>
Conflicts: zarafa (<< 7.0)
Replaces: zarafa (<< 7.0)
Section: php
Priority: optional
Description: PHP MAPI bindings
 Using this module, you can create PHP programs which use MAPI
 calls to interact with Zarafa.</j.vdkamp@zarafa.com>

■./md5sums

ec410c9d25433fb51310dd7495e5aeec  usr/lib/php5/20121212+lfs/mapi.la
22c3daba6598251755e16d718ac9068e  usr/lib/php5/20121212+lfs/mapi.so
e0b503a8e8b6dd8572b854d5a02015ba  usr/lib/php5/20090626+lfs/mapi.so
b874d811c5f54aa2218487012f45cfc1  usr/share/doc/php5-mapi/copyright
1ccf4cd9a41f3b62c501dd500c7c8f1b  usr/share/doc/php5-mapi/changelog.Debian.gz
0b977d5ac723dd3bf34e5a383b24a71f  usr/share/php/mapi/mapidefs.php
5511f39bb0b3eb18f228af4305dce940  usr/share/php/mapi/class.taskrequest.php
b580e95f2504eaa129b1327251723d9b  usr/share/php/mapi/class.recurrence.php
f8989d38bf671a7b64d2785acdb89e9d  usr/share/php/mapi/mapitags.php
220bb59d3a265d492fa4444b2f587e4e  usr/share/php/mapi/class.mapiexception.php
4a46666c2dfd9315cf5a58174e51161f  usr/share/php/mapi/class.meetingrequest.php
517e751a90cf067383c92c4eb26f5c6d  usr/share/php/mapi/mapi.util.php
bf1bd39ca46bfea03a4f2d0699da818d  usr/share/php/mapi/class.baseexception.php
28543751546ea3ac39101fa950d2fc9a  usr/share/php/mapi/mapicode.php
0c9875adbc1e54059bc20304bb3ba43e  usr/share/php/mapi/mapiguid.php
90c1e91a4f27040073f05e85a6733a40  usr/share/php/mapi/class.baserecurrence.php
6cf3f6fdd3ad109f80dbdbc3f72c7318  usr/share/php/mapi/class.freebusypublish.php
7c436a77b31457ab6e79e276d990b2e6  usr/share/php/mapi/class.taskrecurrence.php

多分、自動でやる方法があると思うけれども、これはmd5sumコマンドで調べて書き換える。

data.tar.xz
./
./etc/
./etc/php5/
./etc/php5/apache2/
./etc/php5/apache2/conf.d/

■./etc/php5/apache2/conf.d/zarafa.ini

; Enable Zarafa mapi extension module
extension=mapi.so

; Enable debug output for the mapi extension
; Bitmask:
; 1 = Log start of a function
; 2 = Log end of a function
; mapi.debug = 0

./usr/
./usr/lib/
./usr/lib/php5/
./usr/lib/php5/20121212+lfs/

■./usr/lib/php5/20121212+lfs/mapi.la

./php-ext/.libs/mapi.la に差し替え。

■./usr/lib/php5/20121212+lfs/mapi.so

./php-ext/.libs/mapi.so に差し替え。

./usr/lib/php5/20090626+lfs/

■./usr/lib/php5/20090626+lfs/mapi.so

このままにしておいてみる。

./usr/share/
./usr/share/doc/
./usr/share/doc/php5-mapi/

■./usr/share/doc/php5-mapi/changelog.Debian.gz

このままにしておいてみる。

■./usr/share/doc/php5-mapi/copyright

このままにしておいてみる。

./usr/share/php/
./usr/share/php/mapi/

■./usr/share/php/mapi/class.baseexception.php
■./usr/share/php/mapi/class.baserecurrence.php
■./usr/share/php/mapi/class.freebusypublish.php
■./usr/share/php/mapi/class.mapiexception.php
■./usr/share/php/mapi/class.meetingrequest.php
■./usr/share/php/mapi/class.recurrence.php
■./usr/share/php/mapi/class.taskrecurrence.php
■./usr/share/php/mapi/class.taskrequest.php
■./usr/share/php/mapi/mapicode.php
■./usr/share/php/mapi/mapiguid.php
■./usr/share/php/mapi/mapitags.php
■./usr/share/php/mapi/mapi.util.php
■./usr/share/php/mapi/mapidefs.php

./php-ext/include/mapi 配下のファイルに置き換える。

—————–

準備ができたらパッケージに固めていく。

$ tar -zcvf control.tar.gz conffiles md5sums control
$ tar -Jcvf data.tar.xz usr/ etc/
$ ar rc php5-mapi_7.1.11-46050_i386.deb debian-binary control.tar.gz data.tar.xz

—————-

固めたパッケージを差し替えて、インストールを実行。

$> cd zcp-7.1.11-46050-ubuntu-12.04-i386
$> sudo ./install.sh
$> sudo service apache2 restart

——

zarafa-libs の依存関係解決

tar -zcvf control.tar.gz postrm shlibs md5sums postinst control

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

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