Loading ...

筆者特製? RPM紹介


まずいきなりですが筆者が使用しているPHPのRPMを紹介します*1. このRPMはあるディストリビューション付属のRPMの改造ではなく,まったく1から開発したRPMになります.

特徴

標準拡張モジュールの選択

各環境に必要なPHP標準拡張モジュールの種類は異なります.ビルド・メンテナンスの視点からいうと不必要なRPMはそもそも存在しないほうがいいケースもあります.

次に,前述のとおりディストリビューション付属の共有ライブラリの問題などで,異なる環境へSRPMをコピーした後のリビルド*2が出来ない場合があります. このRPMを作成したそもそもの目的は,複数ディストリビューションでなるべく共通に使えるRPMの作成でした*3. このSRPMに付属のSPECはそういう場合に有効です.

日本語環境を意識した設定

./configure時の--zend-multibyteオプションの使用など日本語環境での使用を意識したビルドを行います*4

標準拡張モジュールの複数RPMへの分割

特筆することでもないですが,一般的な標準拡張モジュール単位でのRPMの分割を行っています. 使用目的に応じて必要なRPMをインストールしてください.

RPM名内容
phpPHPコアおよびbzip2・ctype・dba・dbx・dio・exif・ftp・gettext・iconv・mbstring・ncurses(CLIのみ)・openssl・overload・pcntl(CLIのみ)・pcre・posix・readline(CLIのみ)・session・sockets・standard・sysvmsg・sysvsem・sysvshm・tokenizer・xml・zlib標準拡張モジュール
php-curlCURL標準拡張モジュール
php-develヘッダファイルやphpizeなど開発用コマンド
php-domxmlDOM-XML,XSLT標準拡張モジュール
php-gdGD標準拡張モジュール(PHPバンドル版)
php-imapIMAP標準拡張モジュール(IMAP/SSL対応)
php-ldapLDAP標準拡張モジュール
php-mysqlMySQL標準拡張モジュール
php-odbcODBC標準拡張モジュール
php-pearPEARライブラリ関連
php-pgsqlPostgreSQL標準拡張モジュール
php-recodeRecode標準拡張モジュール
php-snmpSNMP標準拡張モジュール
php-xmlrpcXML-RPC標準拡張モジュール

その他

サブパッケージ化された標準拡張モジュールは通常php,iniなどで「extension=mysql.so」などしなければ有効になりません. そこを筆者は「/etc/php.d」という,いわば設定ファイル置き場に各サブパッケージ用の「extension=xxx.so」を記述したiniファイルを設置するようにしています*5

用途が用途なので,%config指定していないので,手動でファイルを修正してもアップデートなどを行うと綺麗に元に戻りますので注意してください;-)

モジュール選択の方法

まずSPECファイル(php.spec)をエディタで開きます. そうすると10行目位から20行前後の%defineというものがあります.

%define bzip2_enable      1
%define curl_enable       1
%define domxml_enable     1
%define domxslt_enable    1
%define gd_enable         1
%define  freetype_enable  1
%define gettext_enable    1
%define iconv_enable      1
%define imap_enable       1
%define imapssl_enable    1
%define ldap_enable       1
%define libedit_enable    1
%define mm_enable         1
%define mysql_enable      1
%define ncurses_enable    1
%define odbc_enable       1
%define pgsql_enable      1
%define readline_enable   1
%define recode_enable     1
%define snmp_enable       1
%define xmlrpc_enable     1

これらはそれぞれ標準拡張モジュールに対応し,「1」を「0」にすることで無効にすることが出来ます.

インストール

ディストリビューション付属のPHPをアンインストール

それではインストールしましょう…と思いますが,あわてないでください. ディストリビューションに付属のPHPは削除しましたか? rpmコマンドで確認し,既にインストール済みなら削除から始めてくださいね.

phpのパッケージが入っていないか確認
[root@phpmook root]# /bin/rpm -qa|grep -E '^php'
php-mysql-4.3.6-1.3
php-4.3.6-1.3

この場合phpとphp-mysqlがインストールされているので,この2つをアンインストールします. また,ディストリビューションが配布している設定ファイルも一応削除します.

phpのアンインストール
[root@phpmook root]# /bin/rpm -e php-mysql php
[root@phpmook root]# /bin/rm -f /etc/php.ini

PHPの削除時に別のRPMからの依存関係が出てくる場合があります.例えばSquirrelMailなどがそれにあたります. その場合,SquirrelMailも一度削除するか,rpmコマンドにさらに--nodepsオプションを指定してPHPの削除を行ってください.

謹製PHPをインストール

さてそれではインストールです.RPMは「RPMS/i386」ディレクトリに作成されているはずです.

phpのインストール
[root@phpmook root]# rpm -ihv /home/elf/RPMS/i386/php-4.3.7-1.i386.rpm

ディレクトリパス・バージョン番号やリリース番号などは各自が指定したものを使用してください.

インストールできたらphpinfo()関数を記述したPHPスクリプトやCLIなら-vオプションや-mオプションで動作を確認してみてください.

CLI版は特に「type php」などを実行し,自分がインストールしたPHPかどうかを確認することをお勧めします. また,「BUILD/php-VERSION」ディレクトリにある「sapi/cli」ディレクトリにもCLI版PHPがありますので,md5subコマンドなどでこのPHPとインストール済みのPHPを比較するなどしてもいいでしょう.

yumからアップデート対象をはずす

今の状態だとyumを用いると,phpがディストリビューションのものと置き換えられてしまう可能性があります. それを回避するために/etc/yum.confにexcludeという項目を追加します.

項目exclude追加例
exclude=php*

既に存在している場合は半角空白文字を区切りに「exclude=kernel* php*」といったように追加してください.

筆者の使い方

php.iniの調整をする

まずphp.iniはtarballに付属のものとほぼ同じなので各自下記の調整が必要です(苦笑

  • PEARのディレクトリをinclude_pathに追加していません.筆者はシステムのPEARは使わない(php-pearは使わない)こともあり,修正するようにしていません.必要な方はphp.iniに追加してください.
  • mbstring関連の設定もまったくされていません.筆者はmbstringの設定はすべてPHPスクリプト側で行う方針で実装していますが,「php.ini」に直接書きたい方は修正してください.

PEARはRPMでインストールしない

前述のとおり筆者はPEARをRPMでインストールしません. 理由はRPMの管理システムとPEARの管理システムが衝突するからです. 例えばPEARをRPMでインストールしたとします.

# /usr/bin/rpm -ihv php-pear-4.3.7-1.ELF.i386.rpm

そして,pearコマンドでPEARパッケージのアップデートを行います.

# /usr/bin/pear upgrade-all

その後仮に PHP バージョン4.3.8 がリリースされたとして, php-pear パッケージのアップデートを行ってみましょう.

# /usr/bin/rpm -Fhv php-pear-4.3.8-1.ELF.noarch.rpm

この時点でpearコマンドでアップデートしたPEARパッケージは PHP バージョン 4.3.8に置換されてしまいます. また,PEARパッケージの追加など行っている場合,そのパッケージの状態がどうなるか不明瞭です.

これらを回避するために筆者はPEAR環境のみRPMでインストールしないようにしています.

PEARの個別インストール方法

PEARのインストールは公式サイトを参考に*6インストールします.

lynxでインストーラーを読み込み実行
$ lynx -source http://go-pear.org/ | /usr/bin/php -Cq
w3mでインストーラーを読み込み実行
$ w3m -dump_source http://go-pear.org/ | /usr/bin/php -Cq
w3mでインストーラーを読み込み実行
$ wget -O go-pear.php http://go-pear.org/ ; php -Cq go-pear.php
PHP自身でインストーラーを読み込む
$ php -r 'require 'http://go-pear.org'

質問は基本的に[Enter]キーを押していき,そのままの状態でインストールします.

いくつか作業状態が表示されつつインストールが完了すると思います. 作業を終了したらpearコマンドを実行してインストールの完了を確認してください.

それでは次に,PHPのRPMを自作するための基礎知識と手順を説明していきます.



*1 厳密にはapache 1.3用のものを今回apache 2用に改変したものです
*2 rpmbuild --rebuild <SRPM-FILE>とすることでSRPMをそのままビルドすることが出来ます
*3 対象がapache1かapache2かなどの違いの大きな溝もありますが
*4 これを指定しなければSHIFT JISで記述されたスクリプトは問題が出る可能性があります
*5 今時はそういうRPM増えてきましたが
*6 http://pear.php.net/manual/ja/installation.getting.php
リロード   新規 編集 凍結 差分 添付 複製 改名   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS
最終修正日時: Sun, 08 May 2005 12:17:59 JST (2571d)
文字数(HTML): 4693
文字数(Wiki): 5078
人気ブログランキング - よくきた wiki