最新の PHP (5.3.3) のカスタム ビルドを一連の pear パッケージでパッケージ化しようとしています。残念ながら、これを行うために与えられたオプションは機能していないようです。仕様ファイルを掲載しています。指定されたバージョンは実際には失敗しませんが、PEAR パッケージを間違った場所にインストールします。/var/tmp/my_php-5.3.3-1-buildroot/usr/local/lib/php に移動する必要がありますが、最終的には /var/tmp/my_php-5.3.3-1-buildroot/var/ になります。 tmp/my_php-5.3.3-1-buildroot/usr/local/lib/php.
また、pear コマンドが渡した include_path 設定 (PHP_PEAR_INSTALL_DIR 環境変数から派生) を完全に無視していたため、pearcmd.php スクリプトをハックしなければならなかった場所もわかります。これは完全に間違っている可能性がありますが、実際に何かをインストールする唯一の方法です。
この仕様の他の多くのバリエーションを試しましたが、それらはすべて独自の方法で「失敗」しているようです。参考までに、Pyrus も使用してみましたが、同様の問題がありました (非 PEAR2 パッケージの問題に加えて)。
%define PHP_PREFIX /usr/local
%define CONF_PREFIX /home/config/php/conf
%define APXS_PATH /usr/local/apache2/bin/apxs
%define ORCL_PATH /usr/local/lib/oracle
%define PHP %{PHP_PREFIX}/bin/php
%define PEAR %{PHP_PREFIX}/bin/pear
%define PEAR_ROOT %{PHP_PREFIX}/lib/php
%define PHP_INSTALL $RPM_BUILD_ROOT%{PHP}
%define PEAR_INSTALL $RPM_BUILD_ROOT%{PEAR}
%define PEAR_ROOT_INSTALL $RPM_BUILD_ROOT%{PEAR_ROOT}
%define PEARCMD %{PEAR_ROOT_INSTALL}/pearcmd.php
%define PECLCMD %{PEAR_ROOT_INSTALL}/peclcmd.php
%define _unpackaged_files_terminate_build 0
Summary: my_php package
Name: my_php
Version: 5.3.3
Release: 1
License: The PHP License, Version 3.01
Vendor: Me
Packager: Me <me@blah.com>
Group: Development/Languages
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot
Source0: php-%{version}.tar.bz2
Requires: my_httpd >= 2.2.0, oracle-instantclient >= 10.2.0.4
BuildRequires: my_httpd >= 2.2.0
Conflicts: php, php5
%description
PHP, My style
%prep
%setup -q -n php-%{version}
%build
LIB_DIR="lib"
if [ "%{_arch}" == "x86_64" ]; then
LIB_DIR="lib64"
fi
./configure \
--prefix=%{PHP_PREFIX} \
--with-libdir=${LIB_DIR} \
--with-pear \
--with-config-file-path=%{CONF_PREFIX} \
--with-apxs2=%{APXS_PATH} \
--with-oci8=instantclient,%{ORCL_PATH} \
--with-mysql \
--with-pgsql \
--enable-sockets \
--with-gd \
--enable-gd-native-ttf \
--with-freetype-dir \
--with-curl \
--with-bz2 \
--with-zlib-dir \
--enable-exif \
--with-ldap \
--with-gmp \
--with-xsl
make clean
make -j
%install
rm -rf $RPM_BUILD_ROOT
# Don't try to change httpd.conf
sed -i.bak -e "s:&& \$(mkinstalldirs) '\$(INSTALL_ROOT)/.\+' \(&& %{APXS_PATH} .\+\)-S SYSCONFDIR='.\+' \(.\+\)-a \(.\+\):\1\2\3:" Makefile
# Install PHP to rpm staging area
make INSTALL_ROOT=$RPM_BUILD_ROOT install
# Modify *cmd.php to use correct include_path
sed -i.bak -e "s:'@'.'include_path'.'@':'%{PEAR_ROOT}':" %{PEARCMD}
sed -i.bak -e "s:'@'.'include_path'.'@':'%{PEAR_ROOT}':" %{PECLCMD}
# Install PEAR packages to rpm staging area
export PHP_PEAR_PHP_BIN="%{PHP_INSTALL}"
export PHP_PEAR_INSTALL_DIR="%{PEAR_ROOT_INSTALL}"
%{PEAR_INSTALL} install -P $RPM_BUILD_ROOT pear/MDB2-beta
%{PEAR_INSTALL} install -P $RPM_BUILD_ROOT pear/MDB2_Driver_oci8-beta
%{PEAR_INSTALL} install -P $RPM_BUILD_ROOT pear/MDB2_Driver_pgsql-beta
%{PEAR_INSTALL} install -P $RPM_BUILD_ROOT pear/MDB2_Driver_mysql-beta
%{PEAR_INSTALL} install -P $RPM_BUILD_ROOT pear/Mail
%{PEAR_INSTALL} install -P $RPM_BUILD_ROOT pear/Mail_Mime
%{PEAR_INSTALL} install -P $RPM_BUILD_ROOT pear/Spreadsheet_Excel_Writer-beta
# Revert *cmd.php
mv %{PEARCMD}.bak %{PEARCMD}
mv %{PECLCMD}.bak %{PECLCMD}
%files
%defattr(-,root,root)
/
%clean
rm -rf $RPM_BUILD_DIR/php-%{version} $RPM_BUILD_ROOT
助けてくれてありがとう!