Bug 22083 - PHP не может загрузить MySQL extension после обновления
: PHP не может загрузить MySQL extension после обновления
Status: CLOSED FIXED
: Sisyphus
(All bugs in Sisyphus/php-base)
: unstable
: all Linux
: P3 normal
Assigned To:
:
:
:
:
:
  Show dependency tree
 
Reported: 2009-10-27 17:15 by
Modified: 2010-01-27 19:12 (History)


Attachments


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2009-10-27 17:15:11
Где-то месяц назад при прыжке с branch 5.0 на Платформу5 (Сизиф ?) обновил всё
что могло обновляться. И сейчас у меня сизиф актуальный. PHPMyAdmin стал после
этого ругаться : "cannot load MySQL extension, please check PHP Configuration".

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

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

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

как я понимаю за этим сейчас скрывается сизиф.
------- Comment #3 From 2009-10-27 18:40:26 -------
Пакет : php5-5.2.11.20090722-alt1
------- Comment #4 From 2009-10-28 07:34:58 -------
А что творится в /php.d/ ? 
У меня достаточно регулярно при обновлении (и при начальной установке тоже)
наблюдается появление там файлов <extension>.rpmnew с загрузкой внутри совсем
отличных от <extension> модулей. Т.е., например, может появится suhosin.rpmnew
с содержимым "extension=dom.so". И отсутствием файла dom.ini. Или наоборот.
Системы пока я не нашёл, увы. Началось такое где-то начиная с 5.2.7.
------- Comment #5 From 2009-10-28 13:26:39 -------
В 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 From 2009-10-28 14:15:57 -------
(В ответ на комментарий №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 From 2009-10-28 15:08:36 -------
(В ответ на комментарий №6)
> Где-то сбоит создание файлов *.ini в /php.d/. 
> Причём случайным образом, и результаты зависят от того, какие и в каком порядке
> ставились расширения, и сколько их ставилось в одном вызове apt-get.

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

P.S: 
В оставшемся у меня /etc/php/5.2.7/apache-mod_php/php.d mysql.ini присутствует,
так же как mcrypt.ini
------- Comment #8 From 2009-10-29 03:05:31 -------
(В ответ на комментарий №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 From 2009-10-29 06:01:11 -------
(В ответ на комментарий №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 From 2009-12-25 21:36:39 -------
(В ответ на комментарий №9)

> Т.е., dom.ini отсутствует; то, что должно быть dom.ini - suhosin.ini.phpnew.
Подтверждаю.
------- Comment #11 From 2010-01-27 17:25:17 -------
Проверьте это на свежем Sisyphus

У меня вроде как нормально.
------- Comment #12 From 2010-01-27 17:35:57 -------
У меня всё так же как и в комментарии №5 или мне надо удалить phpmyadmin, php и
mysql и поставить заново?
------- Comment #13 From 2010-01-27 17:52:58 -------
Да, здесь нужна именно переустановка.
------- Comment #14 From 2010-01-27 17:57:35 -------
Единственное, вылезает проблема:
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 From 2010-01-27 18:30:24 -------
Да, подтверждаю что 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 From 2010-01-27 18:49:55 -------
Пересоздавать новую не будем, исправление уже у меня в git'е:
http://git.altlinux.org/people/rider/packages/php5.git?p=php5.git;a=commitdiff;h=750956351920505430be36ba1bc56affc3bfe2d8

Эта ошибка исправлена в php-base-2.4-alt2
------- Comment #17 From 2010-01-27 19:01:18 -------
Хорошо.
------- Comment #18 From 2010-01-27 19:09:22 -------
(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 From 2010-01-27 19:12:11 -------
да, как временное решение - сделай пожалуйста.

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