2010-08-30 5 views
1

J'essaie de compiler une version personnalisée du dernier PHP (5.3.3) avec un ensemble de paquets pear. Malheureusement, les options données pour le faire ne semblent pas fonctionner. Je poste le fichier spec comme je le vois il devrait être. La version fournie n'échoue pas réellement, mais installe les paquets PEAR au mauvais endroit. Alors qu'ils devraient aller dans /var/tmp/my_php-5.3.3-1-buildroot/usr/local/lib/php, mais ils se retrouvent dans /var/tmp/my_php-5.3.3-1-buildroot/var/ tmp/my_php-5.3.3-1-buildroot/usr/local/lib/php.Packages RPM PHP et PEAR

Vous pouvez également voir où j'ai dû pirater le script pearcmd.php car il ignorait complètement le paramètre include_path que la commande pear lui avait transmis (dérivé de la variable d'environnement PHP_PEAR_INSTALL_DIR). Cela pourrait être complètement faux, mais c'est la seule façon de l'installer.

J'ai essayé beaucoup d'autres variantes de cette spécification, mais elles semblent toutes "échouer" à leur manière. Pour info, j'ai aussi essayé d'utiliser Pyrus, mais il avait des problèmes similaires (en plus des problèmes avec les paquets non-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 

Merci pour toute aide!

+0

serverfault.com – ajreal

Répondre

0

Votre problème de chemin provient de vos lignes commençant par %{PEAR_INSTALL}. Vous définissez PHP_PEAR_INSTALL_DIR et ajoutez un répertoire d'emballage avec -P. Le résultat est que pear installe vos paquets dans $RPM_BUILD_ROOT/$PHP_PEAR_INSTALL_DIR, qui est $RPM_BUILD_ROOT/$RPM_BUILD_ROOT/$PHP_PREFIX/lib/php lorsqu'il est interprété.

Vous avez alors deux solutions:

  • supprimer l'option -P de pear install
  • supprimer $RPM_BUILD_ROOT de la définition de PEAR_ROOT_INSTALL

Pour vos lignes sed, je prendrais un coup d'oeil l'option -i:

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

Si j'essaie de supprimer -P, il essaie d'installer dans/au lieu de $ RPM_BUILD_ROOT, il semble ignorer ces variables d'env. Si je supprime $ RPM_BUILD_ROOT de PEAR_ROOT_INSTALL, le script pear essaie de trouver pearcmd.php dans/... au lieu de/var/tmp/my_php ... – citrusmoose

+0

Hmm n'a pas vraiment de sens, j'ai essayé ma solution pour construire un paquet et ça a marché. Je vais essayer de tester à nouveau avec votre version de paquet. – sberder

+0

Il se peut que vous ayez déjà PHP/PEAR installé, donc il utilise ces fichiers au lieu de ceux qui proviennent de la construction. – citrusmoose