2010-08-30 99 views
1

我试图用一套梨软件包打包最新PHP(5.3.3)的自定义版本。不幸的是,这样做的选择似乎并不奏效。我正在发布spec文件,因为我认为它应该是。给定的版本实际上并没有失败,但它将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。RPM PHP和PEAR软件包

您还可以看到我不得不破解pearcmd.php脚本的位置,因为它完全忽略了pear命令传递它的include_path设置(派生自PHP_PEAR_INSTALL_DIR环境变量)。这可能是完全错误的,但它是我能够实际安装任何东西的唯一方式。

我已经尝试过这个规范的许多其他变体,但他们都似乎以自己的方式“失败”。仅供参考,我也试过使用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 <[email protected]> 
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 

感谢您的帮助!

+0

serverfault.com – ajreal 2010-12-03 18:04:45

回答

0

您的路径问题来自%{PEAR_INSTALL}开始的行。您定义PHP_PEAR_INSTALL_DIR并添加包装目录-P。结果是梨在安装包$RPM_BUILD_ROOT/$PHP_PEAR_INSTALL_DIR,这是$RPM_BUILD_ROOT/$RPM_BUILD_ROOT/$PHP_PREFIX/lib/php解释时。

你那么有两种解决方法:

  • 删除梨-P选项安装
  • PEAR_ROOT_INSTALL

为了您的sed线定义中删除$RPM_BUILD_ROOT,我会看看-i选项:

 
     -i[SUFFIX], --in-place[=SUFFIX] 
       edit files in place (makes backup if extension supplied) 
+0

如果我尝试删除-P,它会尝试安装在/而不是$ RPM_BUILD_ROOT,它似乎忽略这些env vars。如果我从PEAR_ROOT_INSTALL中删除了$ RPM_BUILD_ROOT,那么pear脚本会尝试在/ ...中找到pearcmd.php,而不是/ var/tmp/my_php ... – citrusmoose 2010-12-03 18:26:57

+0

嗯没有什么意义,我尝试了我的解决方案来构建一个包它的工作。我会尝试再次使用您的软件包版本进行测试。 – sberder 2010-12-07 12:22:51

+0

这可能是因为您已经安装了PHP/PEAR,因此它使用这些文件而不是来自构建的文件。 – citrusmoose 2011-07-07 19:11:20