[devel] PHP 4.3.4 upgrade

Alexey Gladkov =?iso-8859-1?q?legion_=CE=C1_altlinux=2Eru?=
Вт Окт 21 19:04:09 MSD 2003


Приветствую !!!
В Daedalus ушела новая сборка PHP 4.3.4 CVS 20031017. В ней произошли
изменения в расположении конфигурационных файлов, а также в системе
создания модулей. 

Просьба всех заинтересованных лиц протестировать эту сборку и высказать 
свои замечания/пожелания по ней. Эта сборка останется в Daedalus до конца 
недели, если замечаний не последует она переедит в Sisyphus.

bugs: из-за того, что rpm не делает обратную сортировку при удалении
зависимых пакетов php удаляется некорректно.

solution: необходимо сначала удалить все пакеты зависящие от php-common, 
после этого удалить пакет php-common.

Теперь о проведенных изменениях:

Конфигурация.

Интерпретатор PHP имеет модульную структуру - SAPI
(http://php.net/install). 
Модулями SAPI являются расширения каких-либо сервисов.
Модулями расширения (extensions) являются модули добавляющие функциональность
к модулям SAPI.Все эти
модули должны (или могут быть) сконфигурированы независимо друг от
друга. Кроме наличия файла конфигурации должна быть возможность независимого
добавления модулей расширений (extensions) к каждому из
SAPI. Расширения, в свою очередь, должны добавляться без изменения
остальной конфигурации. Поэтому для
конфигурирования PHP (SAPI модулей) была введена следующая структура
каталогов:
/etc/php/<SAPI>/php.ini
/etc/php/<SAPI>/php.d/<EXTENSION>.ini

где SAPI - имя модуля;
    EXTENSION - название расширения.

В начале работы SAPI модуль читает основную конфигурацию из файла
'php.ini', находящегося в директории, отведенной для него
(/etc/php/<SAPI>). После этого модуль просматривает директорию,
содержащую расширения для конфигурационного файла
(/etc/php/<SAPI>/php.d). 

ВАЖНО!: Все расширения должны содержать суффикс 'ini', иначе они
игнорируются и не добавляются к конфигурации.

Сборка модулей.
При создании подобной модульной структуры (см. Конфигурация) возникает
ряд проблем, связанных с расширениями и SAPI модулями. 
Первая проблема заключается в том, что возможна (и весьма вероятна)
ситуация, когда определенное количество расширений было установлено в
систему до того, как был установлен SAPI (еще один) модуль. В этом 
случае, необходимо включить все расширения для новоустановленого SAPI.
Вторая -- это несовместимость некоторых расширений с некоторыми
SAPI. Следовательно, определенные расширения не должны быть
включены для одних SAPI и выключены для других.
Для решения этих проблем был создана следующая структура:
 1. /usr/share/php/extconf/<EXTENSION>/ - директория, содержащая
 конфигурацию для данного расширения.
  1.1 /usr/share/php/extconf/<EXTENSION>/config - в этом файле должна 
  находится конфигурация php, специфичная для этого модуля (например, в
  этом файле указывается директива подключения этого модуля 
  "extension=mysql.so"). 
  1.2 /usr/share/php/extconf/<EXTENSION>/params - здесь находится
  конфигурация, необходимая для включения данного модуля в разных SAPI:
   * exceptions - в этой переменной перечисляются SAPI модули, для
   которых расширение _не_должно_ быть включено.
   * file_ini - здесь необходимо указать имя конфигурационного файла
   (например "file_ini=mysql.ini")
 2. /usr/share/php/service/<SAPI>/ - в этой директории находятся
 скрипт(ы) для перезагрузки конфигурации в сервере, для которого
 предназначен данный SAPI.
 3. /usr/share/php/scripts - содержит скрипты для включения/выключения
 какого-либо расширения.

Создание SAPI модуля.
Для более простого создания пакетов SAPI модулей был создан набор rpm
макросов. 
Исходные тексты всех SAPI модулей официально входящих в проект PHP
находятся в директории: %php_extsapidir .

В SPEC файле SAPI необходимо:
 1. Необходимо определить переменную: php_sapi - она определяет
 название SAPI модуля. Именно это имя будет фигурировать вместо <SAPI>
 в предыдущих пунктах.
 2. Для секций postin/preun необходимо пользоваться специальными
 макросами %php_sapi_postin , %php_sapi_preun. Эти скрипты производят
 включение/выключение модулей расширений для данного SAPI и
 последующий перезапуск сервиса.
 3. Необходимо создать скрипт для перезагрузки конфигурации сервиса
 обслуживаемого этим SAPI. Этот скрипт должен располагаться в
 %php_servicedir/%php_sapi/condrestart
 4. Должны быть созданы директории:
  * %php_sysconfdir/%php_sapi - это директория, в которой хранится вся
  конфигурация php, относящаяся к этому SAPI. В этой директории ищется
  основной файл конфигурации - php.ini .
  * %php_sysconfdir/%name/php.d - в этой директории осуществляется
  поиск расширений для php.ini .

Создание Extension модуля.
Создание модулей расширений во многом похоже на создание SAPI модулей.
Исходные тексты всех SAPI модулей, официально входящих в проект PHP,
находятся в директории: %php_extsrcdir .

В SPEC файле модуля расширения необходимо:
 1. Определить переменную %php_extension - это название модуля,
 которое будет подставлено вместо <EXTENSION>.
 2. Необходимо создать файлы:
  * %php_extconf/%php_extension/config
  * %php_extconf/%php_extension/params
 назначение и содержимое этих файлов было описано выше (см. Сборка
 модулей).
 3. В секциях postin/preun среди всего прочего необходимо добавить
 макросы %php_extension_postin и %php_extension_preun соответственно.

Все rpm макросы описаны в файле %_sysconfdir/rpm/macros.d/php,
принадлежащем пакету php-devel.

---
Rgrds, legion



Подробная информация о списке рассылки Devel