IlohaMail を使うには、PHP4 をインストールする必要がある。VinePlus で RPM が提供されているが、一部のライブラリを Vine 以外のパッケージでバージョンアップしてしまっているため、インストールできない。ソースからコンパイルすればインストールはできるが、パッケージ管理ができなくなってしまう。そこで、SRPM の SPEC を編集して RPM を作り、インストールすることにした。
■ ■ ■
Vine Linux のバージョンは 2.6。PHP4 は VinePlus で公開されており、最新版は 4.2.3 である。通常のインストール手順は次の通り。
- /etc/apt/sources.list を編集し、plus のある rpm のサイトを有効にする
- パッケージのデータベースを更新し、表示されるメッセージに plus のサイトがあるかを確認する
# apt-get update
- PHP4 のパッケージをインストールする (必要なパッケージが不足している場合は、自動的にインストールされる)
# apt-get install php
通常はこれだけで作業が完了する。しかし、このサイトでは次のようなメッセージが表示され、インストールができなかった。
# apt-get install php
パッケージリストを読みこんでいます... 完了
依存情報ツリーを作成しています... 完了
幾つかのパッケージをインストールすることができませんでした。不可
能な状態を要求していたり、パッケージの不足していたり Incoming から
の移動が間に合っていないような不安定なディストリビューションを使用
しようとしていませんか?
単純な操作だけを行った場合で、そのパッケージがインストールできない状態
あるいは壊れていると思われる場合は、バグレポートをしてみてください
以下の情報がこの問題を解決するために役立つかもしれません:
以下のパッケージの依存関係を解消することができませんでした:
php: Depends: libgd.so.1.8
E: 壊れたパッケージです
メッセージにあるように、PHP パッケージには gd-1.8 が必要だが、これより新しい別のバージョン gd-2.0.12 がインストールされている。Vine 以外のパッケージを入れてしまってあるのだ。
# rpm -q gd
gd-2.0.12-1
いっそ削除してしまい、gd-1.8 をインストールしようと思ったが、すでに別のパッケージで利用されており、削除することができない。
# rpm -e gd
エラー: これらのパッケージを削除すると依存性を破壊します:
gd >= 2.0.5は perl-GD-2.07-1 に必要とされています
gd = 2.0.12は gd-progs-2.0.12-1 に必要とされています
gd = 2.0.12は gd-devel-2.0.12-1 に必要とされています
libgd.so.2は perl-GD-2.07-1 に必要とされています
libgd.so.2は gd-progs-2.0.12-1 に必要とされています
libgd.so.2は webalizer-2.01_10-1tpu3 に必要とされています
gd-1.8 と gd-2.0 が両方インストールできないか試したが、失敗した。
# rpm -ivh gd-1.8.3-0vl2.i386.rpm
パッケージ gd-2.0.12-1 (gd-1.8.3-0vl2よりも新しいもの) はすでにインストールされています
SRPM を取り寄せ、コンパイルをしようとしたが上手くいかない。
# rpm --rebuild php-4.2.3-0vl5.src.rpm
php-4.2.3-0vl5.src.rpm をインストール中
エラー: ビルド依存性の欠如:
MySQL-devel は php-4.2.3-0vl5 に必要とされています
postgresql-devel は php-4.2.3-0vl5 に必要とされています
unixODBC-devel は php-4.2.3-0vl5 に必要とされています
libxml2-devel は php-4.2.3-0vl5 に必要とされています
expat-devel は php-4.2.3-0vl5 に必要とされています
pcre-devel は php-4.2.3-0vl5 に必要とされています
libxslt-devel は php-4.2.3-0vl5 に必要とされています
libsablotron0-devel は php-4.2.3-0vl5 に必要とされています
openldap-devel は php-4.2.3-0vl5 に必要とされています
postgresql-devel = 7.2.3は php-4.2.3-0vl5 に必要とされています
postgresql-libs = 7.2.3は php-4.2.3-0vl5 に必要とされています
必要なパッケージが不足しているのである。このリストには、gd のパッケージは表示されていない。不足しているパッケージの中で、必要そうなものを選択してインストールする。
# apt-get install libxml2-devel expat-devel pcre-devel libxlt-devel libsablotron0-devel
それぞれのパッケージの役割は以下の通り。
- libxml2: XMLライブラリ
- expat: XML 1.0 パーサ
- pcre: PHP が使う Perl互換の正規表現ライブラリ
- libxlt: libxml2 用の XSLT サポートライブラリ
- libsablotron0: XSLT プロセッサ
rpm/SPEC/php.spec を編集し、上で選択しなかったパッケージの記述を思い切って削除する。
php パッケージの管理に関する記述を更新する。取り寄せた PHP のパッケージ名は php-4.2.3-0vl5 で、php.spec の中では次のように記述されている。
Name: php
Version: 4.2.3
Release: 0vl5
このパッケージが更新されるとすれば、その名前は恐らく php-4.2.3-0vl5.1 となるので、パッケージの更新が分かるようなリリース番号をつけたい。php-4.2.3-0vl5.0.1 とすればいいのではないだろうか(あまり自信がない)。そこで、リリース番号を書き換えておく。
Name: php
Version: 4.2.3
Release: 0vl5.0.1
パッケージの番号を変えておかないと、apt-get したときに警告が出るので注意。
# apt-get update
...
注意: 'php' は異なる依存情報を持った2つのパッケージが存在します。おそらくパッケージのバグと思われます。
Vine プロジェクトは悪くない。こちらが勝手にパッケージをエンバグさせただけである。
php-spec.0.1.patch は次のコマンドで作ったパッチである。
$ diff -u php.spec.orig php.spec > php-spec.0.1.patch
パッチを適用する。
$ cd rpm/SPEC
$ patch -p1 < php-spec.0.1.patch
ビルドする。
$ cd
$ rpm -bb rpm/SPECS/php.spec
...
書き込み中: /root/rpm/RPMS/i386/php-4.2.3-0vl5.0.1.i386.rpm
書き込み中: /root/rpm/RPMS/i386/php-devel-4.2.3-0vl5.0.1.i386.rpm
書き込み中: /root/rpm/RPMS/i386/php-imap-4.2.3-0vl5.0.1.i386.rpm
書き込み中: /root/rpm/RPMS/i386/php-manual-4.2.3-0vl5.0.1.i386.rpm
出来上がった RPM をインストールして完了。
# rpm -ivh rpm/RPMS/i386/php-4.2.3-0vl5.0.1.i386.rpm
# rpm -ivh rpm/RPMS/i386/php-devel-4.2.3-0vl5.0.1.i386.rpm
# rpm -ivh rpm/RPMS/i386/php-imap-4.2.3-0vl5.0.1.i386.rpm
# rpm -ivh rpm/RPMS/i386/php-manual-4.2.3-0vl5.0.1.i386.rpm
2005年1月17日追記:
「パッチ適用」の手順を追加しました。
Posted by n at 2004-08-13 10:15 | Edit | Comments (0) | Trackback(0)