RPM пакеты PHP и PEAR - PullRequest
       31

RPM пакеты PHP и PEAR

1 голос
/ 30 августа 2010

Я пытаюсь упаковать пользовательскую сборку последней версии 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.

Вы также можете увидеть, где мне пришлось взломать скрипт pearcmd.php, потому что он полностью игнорировал параметр 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 <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

Спасибо за любую помощь!

1 Ответ

0 голосов
/ 23 ноября 2010

Ваша проблема с путями проистекает из ваших строк, начинающихся с %{PEAR_INSTALL}.Вы определяете PHP_PEAR_INSTALL_DIR и добавляете каталог упаковки с помощью -P.В результате Pear устанавливает ваши пакеты в $RPM_BUILD_ROOT/$PHP_PEAR_INSTALL_DIR, что составляет $RPM_BUILD_ROOT/$RPM_BUILD_ROOT/$PHP_PREFIX/lib/php при интерпретации.

У вас есть два решения:

  • удалить параметр -P из pearустановить
  • удалить $RPM_BUILD_ROOT из определения PEAR_ROOT_INSTALL

Для ваших строк sed я бы посмотрел на параметр -i:

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