From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Tue, 21 Oct 2003 19:04:09 +0400 From: Alexey Gladkov To: ALT Devel discussion list , Sisyphus mailing list Message-ID: <20031021150409.GC20723@legion.office.altlinux.ru> Mail-Followup-To: Alexey Gladkov , ALT Devel discussion list , Sisyphus mailing list Mime-Version: 1.0 Content-Type: text/plain; charset=koi8-r Content-Disposition: inline Content-Transfer-Encoding: 8bit Organization: ALTLinux Cc: Subject: [devel] PHP 4.3.4 upgrade X-BeenThere: devel@altlinux.ru X-Mailman-Version: 2.1.2 Precedence: list Reply-To: ALT Devel discussion list List-Id: ALT Devel discussion list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Oct 2003 15:05:18 -0000 Archived-At: List-Archive: List-Post: Приветствую !!! В 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//php.ini /etc/php//php.d/.ini где SAPI - имя модуля; EXTENSION - название расширения. В начале работы SAPI модуль читает основную конфигурацию из файла 'php.ini', находящегося в директории, отведенной для него (/etc/php/). После этого модуль просматривает директорию, содержащую расширения для конфигурационного файла (/etc/php//php.d). ВАЖНО!: Все расширения должны содержать суффикс 'ini', иначе они игнорируются и не добавляются к конфигурации. Сборка модулей. При создании подобной модульной структуры (см. Конфигурация) возникает ряд проблем, связанных с расширениями и SAPI модулями. Первая проблема заключается в том, что возможна (и весьма вероятна) ситуация, когда определенное количество расширений было установлено в систему до того, как был установлен SAPI (еще один) модуль. В этом случае, необходимо включить все расширения для новоустановленого SAPI. Вторая -- это несовместимость некоторых расширений с некоторыми SAPI. Следовательно, определенные расширения не должны быть включены для одних SAPI и выключены для других. Для решения этих проблем был создана следующая структура: 1. /usr/share/php/extconf// - директория, содержащая конфигурацию для данного расширения. 1.1 /usr/share/php/extconf//config - в этом файле должна находится конфигурация php, специфичная для этого модуля (например, в этом файле указывается директива подключения этого модуля "extension=mysql.so"). 1.2 /usr/share/php/extconf//params - здесь находится конфигурация, необходимая для включения данного модуля в разных SAPI: * exceptions - в этой переменной перечисляются SAPI модули, для которых расширение _не_должно_ быть включено. * file_ini - здесь необходимо указать имя конфигурационного файла (например "file_ini=mysql.ini") 2. /usr/share/php/service// - в этой директории находятся скрипт(ы) для перезагрузки конфигурации в сервере, для которого предназначен данный SAPI. 3. /usr/share/php/scripts - содержит скрипты для включения/выключения какого-либо расширения. Создание SAPI модуля. Для более простого создания пакетов SAPI модулей был создан набор rpm макросов. Исходные тексты всех SAPI модулей официально входящих в проект PHP находятся в директории: %php_extsapidir . В SPEC файле SAPI необходимо: 1. Необходимо определить переменную: php_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 - это название модуля, которое будет подставлено вместо . 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