Bug 22083 - PHP не может загрузить MySQL extension после обновления
Summary: PHP не может загрузить MySQL extension после обновления
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: php-base (show other bugs)
Version: unstable
Hardware: all Linux
: P3 normal
Assignee: Anton Farygin
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2009-10-27 17:15 MSK by Anatoly Lyutin
Modified: 2010-01-27 19:12 MSK (History)
8 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Anatoly Lyutin 2009-10-27 17:15:11 MSK
Где-то месяц назад при прыжке с branch 5.0 на Платформу5 (Сизиф ?) обновил всё что могло обновляться. И сейчас у меня сизиф актуальный. PHPMyAdmin стал после этого ругаться : "cannot load MySQL extension, please check PHP Configuration".

P.S: Я даже не знаю на кого вешать багу точно, на php, mysql или pma. Решил, что раз php не смог найти после обновления extensions, то виноват он. Все необходимые пакеты, по-моему, стоят.
Comment 1 Alexey Gladkov 2009-10-27 17:25:02 MSK
Я не знаю, что такое Платформу5 (Сизиф ?). Это новое имя сизифа ? Если это какой-то дистрибутив, то обращайтесь к мантейнерам в этом дистрибутиве.

Какая версия php ?
Comment 2 Anatoly Lyutin 2009-10-27 18:39:36 MSK
php 5.2.11

Платформа 5 - это http://ftp.altlinux.org/pub/distributions/ALTLinux/p5/branch/

как я понимаю за этим сейчас скрывается сизиф.
Comment 3 Anatoly Lyutin 2009-10-27 18:40:26 MSK
Пакет : php5-5.2.11.20090722-alt1
Comment 4 Nikolay A. Fetisov 2009-10-28 07:34:58 MSK
А что творится в /php.d/ ? 
У меня достаточно регулярно при обновлении (и при начальной установке тоже) наблюдается появление там файлов <extension>.rpmnew с загрузкой внутри совсем отличных от <extension> модулей. Т.е., например, может появится suhosin.rpmnew с содержимым "extension=dom.so". И отсутствием файла dom.ini. Или наоборот.
Системы пока я не нашёл, увы. Началось такое где-то начиная с 5.2.7.
Comment 5 Anatoly Lyutin 2009-10-28 13:26:39 MSK
В 5.2.11

В apache_mod_php/php.d есть только mysqli.ini
В cgi/php.d нет ничего с mysql*
В cli/php.d есть mysql.ini и mysqli.ini

P.S:
Кстати, у меня php так же перестал загружать mcrypt. Это сюда же или в отдельную багу?

P.P.S:
mcrypt.ini есть только в cli/php.d
Comment 6 Nikolay A. Fetisov 2009-10-28 14:15:57 MSK
(В ответ на комментарий №5)
> В 5.2.11
> 
> В apache_mod_php/php.d есть только mysqli.ini

Значит, mysql.ini не создался при установке пакета. Соответственно, расширение не загружается.

> ...
> Кстати, у меня php так же перестал загружать mcrypt. ...
> mcrypt.ini есть только в cli/php.d

Это то же самое.

Где-то сбоит создание файлов *.ini в /php.d/. 
Причём случайным образом, и результаты зависят от того, какие и в каком порядке ставились расширения, и сколько их ставилось в одном вызове apt-get.
Comment 7 Anatoly Lyutin 2009-10-28 15:08:36 MSK
(В ответ на комментарий №6)
> Где-то сбоит создание файлов *.ini в /php.d/. 
> Причём случайным образом, и результаты зависят от того, какие и в каком порядке
> ставились расширения, и сколько их ставилось в одном вызове apt-get.

Я тогда правильно всё в этой баге описал? Или она трудновоспроизводимая и, следовательно, починке не подлежит?

P.S: 
В оставшемся у меня /etc/php/5.2.7/apache-mod_php/php.d mysql.ini присутствует, так же как mcrypt.ini
Comment 8 Alexey Gladkov 2009-10-29 03:05:31 MSK
(В ответ на комментарий №6)
> Где-то сбоит создание файлов *.ini в /php.d/. 
> Причём случайным образом, и результаты зависят от того, какие и в каком порядке
> ставились расширения, и сколько их ставилось в одном вызове apt-get.

$ rpmquery --lastchange php-base |sed -e 's/altlinux//'
* Птн Окт 10 2008 Alexey Gladkov <legion@.ru> 2.4-alt1

- Create .phpnew only if config file changed.
- Change license.
- Fix Requires.

Пакет реализующий механизм создания *.ini не менялся очень давно (предполагаю, что это было даже до branch-5.0). Если что-то и сломалось, то вокруг него.
Comment 9 Nikolay A. Fetisov 2009-10-29 06:01:11 MSK
(В ответ на комментарий №8)
> ...
> Пакет реализующий механизм создания *.ini не менялся очень давно (предполагаю,
> что это было даже до branch-5.0). Если что-то и сломалось, то вокруг него.

В branch-5.0 проблема с потерей *.ini уж есть.

На текущем Sisyphus, для x86_64, воспроизводится при установке в пустую VE пачки пакетов:

# apt-get install apache2-httpd-prefork apache2 apache2-mod_php5 \
apache2-mod_rpaf apache2-mod_security \
php5-bz2 php5-calendar php5-curl php5-dba php5-dom \
php5-exif php5-gd2 php5-gmp php5-mbstring php5-mcrypt \
php5-mhash php5-mysql php5-mysqli php5-simplexml \
php5-soap php5-suhosin php5-xmlrpc php5-xsl php5-zip

В итоге
# ls /etc/php/5.2.11/apache2-mod_php/php.d
bz2.ini       curl.ini  exif.ini  gmp.ini       mcrypt.ini  mysql.ini   simplexml.ini  suhosin.ini         xmlrpc.ini  zip.ini
calendar.ini  dba.ini   gd.ini    mbstring.ini  mhash.ini   mysqli.ini  soap.ini       suhosin.ini.phpnew  xsl.ini

Где
# cat /etc/php/5.2.11/apache2-mod_php/php.d/suhosin.ini.phpnew
extension=dom.so

Т.е., dom.ini отсутствует; то, что должно быть dom.ini - suhosin.ini.phpnew.

В ходе установки:
...
 1: php-base
...
22: php5-libs
23: php5-suhosin
24: php5                                       
25: php5-dom
...
50: apache2-mod_php5
warning: /etc/php/5.2.11/apache2-mod_php/php.d/suhosin.ini created as /etc/php/5.2.11/apache2-mod_php/php.d/suhosin.ini.phpnew
...
53: php5-bz2
... и остальные php5-* ...
Comment 10 Vitaly Lipatov 2009-12-25 21:36:39 MSK
(В ответ на комментарий №9)
 
> Т.е., dom.ini отсутствует; то, что должно быть dom.ini - suhosin.ini.phpnew.
Подтверждаю.
Comment 11 Anton Farygin 2010-01-27 17:25:17 MSK
Проверьте это на свежем Sisyphus

У меня вроде как нормально.
Comment 12 Anatoly Lyutin 2010-01-27 17:35:57 MSK
У меня всё так же как и в комментарии №5 или мне надо удалить phpmyadmin, php и mysql и поставить заново?
Comment 13 Anton Farygin 2010-01-27 17:52:58 MSK
Да, здесь нужна именно переустановка.
Comment 14 Anton Farygin 2010-01-27 17:57:35 MSK
Единственное, вылезает проблема:
15: php5-suhosin                          ################################################################################################### [ 28%]
cp: cannot create regular file `/etc/php/5.2.11/cli/php.d/suhosin.ini': No such file or directory
error: execution of %post scriptlet from php5-suhosin-0.9.27-alt3 failed, exit status 1

Это связано с тем, что  /usr/share/php/5.2.11/service/cli
 запакован в php5-libs, а не в php5
Соответственно пытается запускаться настройка для suhosin.ini.
Comment 15 Anatoly Lyutin 2010-01-27 18:30:24 MSK
Да, подтверждаю что mysql.ini и mcript.ini появляются в /etc/php/5.2.11/apache-mod_php/php.d/ после переустановки пакетов.

Наверное эту багу можно закрыть.

>Это связано с тем, что  /usr/share/php/5.2.11/service/cli
> запакован в php5-libs, а не в php5
>Соответственно пытается запускаться настройка для suhosin.ini.

В другую багу? Я не сталкивался с ней, поэтому прошу пересоздать заинтересованное лицо.
Comment 16 Anton Farygin 2010-01-27 18:49:55 MSK
Пересоздавать новую не будем, исправление уже у меня в git'е:
http://git.altlinux.org/people/rider/packages/php5.git?p=php5.git;a=commitdiff;h=750956351920505430be36ba1bc56affc3bfe2d8

Эта ошибка исправлена в php-base-2.4-alt2
Comment 17 Anatoly Lyutin 2010-01-27 19:01:18 MSK
Хорошо.
Comment 18 Sergey Kurakin 2010-01-27 19:09:22 MSK
(In reply to comment #14)
> 15: php5-suhosin                         
> cp: cannot create regular file `/etc/php/5.2.11/cli/php.d/suhosin.ini': No such
> file or directory
> error: execution of %post scriptlet from php5-suhosin-0.9.27-alt3 failed, exit
> status 1
> 
> Это связано с тем, что  /usr/share/php/5.2.11/service/cli
>  запакован в php5-libs, а не в php5
> Соответственно пытается запускаться настройка для suhosin.ini.

Именно так. Объясню подробнее.

Несколько дней назад я отправил в Сизиф новую сборку php-base (2.4-alt2), которая должна была закрыть (и закрыла) эту багу в том числе. По существу, в старой версии alt1 была путаница с именами файлов, которую я устранил. Вот этот коммит:

http://git.altlinux.org/people/kurakin/packages/?p=php-base.git;a=commitdiff;h=0b7862f83d88a9b17764b216559cd6234d33bc19

Кроме того, я сделал еще одно изменение:

http://git.altlinux.org/people/kurakin/packages/?p=php-base.git;a=commitdiff;h=b7e292e9561f4e595c4f11cd9aaef6935fe746b2

Суть его в том, чтобы получать список установленных sapi не через /etc/php/5.2.11/sapi_name, а через /usr/share/php/5.2.11/service/sapi_name. Что, вообще говоря, правильнее, поскольку /etc/php/5.2.11/sapi_name может оставаться и после удаления sapi, например, из-за лежащего там php.ini.rpmsave.

Но я не обратил внимание, что /etc/php/5.2.11/cli и /usr/share/php/5.2.11/service/cli оказались в разных пакетах. Как заметил Антон, они должны бы оба быть запакованы в php5.

Сейчас сделаю временный костыль (дополнительную проверку существования директории) для обхода этой проблемы в php-base.
Comment 19 Anton Farygin 2010-01-27 19:12:11 MSK
да, как временное решение - сделай пожалуйста.

Вообще, корректное исправление - это перенос каталога. Я уже начал набивать task с новым PHP, постараюсь закончить как можно быстрее.