印刷用表示へ切り替え 通常表示へ切り替え 更新履歴を表示 更新履歴を隠す
Linux PHP4 がインストールできない

IlohaMail を使うには、PHP4 をインストールする必要がある。VinePlus で RPM が提供されているが、一部のライブラリを Vine 以外のパッケージでバージョンアップしてしまっているため、インストールできない。ソースからコンパイルすればインストールはできるが、パッケージ管理ができなくなってしまう。そこで、SRPM の SPEC を編集して RPM を作り、インストールすることにした。

■ ■ ■

Vine Linux のバージョンは 2.6。PHP4 は VinePlus で公開されており、最新版は 4.2.3 である。通常のインストール手順は次の通り。

  1. /etc/apt/sources.list を編集し、plus のある rpm のサイトを有効にする
  2. パッケージのデータベースを更新し、表示されるメッセージに plus のサイトがあるかを確認する
    # apt-get update
  3. 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)
Trackbacks

  • 「手違いで複数トラックバックを送ってしまった!」という場合でも気にしないでください (重複分はこちらで勝手に削除させていただきます)
  • タイムアウトエラーは,こちらのサーバの処理能力不足が原因です (詳細は トラックバック送信時のエラー をご覧ください)
  • トラックバックする記事には,この記事へのリンクを含めてください(詳細は 迷惑トラックバック対策 をご覧ください)
Comments
Post a comment
  • 電子メールアドレスは必須ですが,表示されません (気になる場合は「メールアドレスのような」文字列でもOKです)
  • URL を入力した場合はリンクが張られます
  • コメント欄内ではタグは使えません
  • コメント欄内に URL を記入した場合は自動的にリンクに変換されます
  • コメント欄内の改行はそのまま改行となります
  • 「Confirmation Code」に表示されている数字を入力してください (迷惑コメント対策です)


(必須, 表示されます)


(必須, 表示されません)


(任意, リンクされます)


Confirmation Code (必須)


Remember info (R)?