FreeBSD 8.1 обновление php5-5.3.3_2 до 5.3.4 и возможные проблемы.
Автор Охальников Олег
27:12:2010 г.
Исходные данные - важный сервер под хостинг, где-то в Нидерландах )))). В ежедневных отчетах по безопасности с недавнего времени неприятная новость:
Checking for packages with security vulnerabilities:
Affected package: php5-5.3.3_2
Type of problem: php -- multiple vulnerabilities.
Reference:
1 problem(s) in your installed packages found.
You are advised to update or deinstall the affected package(s) immediately.
Линк с описанием того, что пофиксили в 5.3.4: http://portaudit.freebsd.org/b2a6fc0e-070f-11e0-a6e9-00215c6a37bb.html Тут собственно обновление в виде 5.3.4 поспело, надо обновлять ибо не секюрно. Запускаем скрипт ./ports.sh, он делает все сам, чистит, обновляет дерево портов, ищет устарелое и пересобирает. Все проходит без ошибок и вроде работает, но не тут то было, запускаем php -v :
# php -v
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/lib/php/20090626/pcre.so' - Cannot open "/usr/local/lib/php/20090626/pcre.so" in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/lib/php/20090626/fileinfo.so' - Cannot open "/usr/local/lib/php/20090626/fileinfo.so" in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/lib/php/20090626/ming.so' - Cannot open "/usr/local/lib/php/20090626/ming.so" in Unknown on line 0
Deprecated: Directive 'register_long_arrays' is deprecated in PHP 5.3 and greater in Unknown on line 0
Deprecated: Directive 'magic_quotes_gpc' is deprecated in PHP 5.3 and greater in Unknown on line 0
PHP 5.3.4 with Suhosin-Patch (cli) (built: Dec 21 2010 12:36:31)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
Эта картина наблюдается на нескольких серверах, один важный, другой домашний, пишу по памяти на важном все сделал. Смотрим на что жалуется пых.
Начнем с конца.
Deprecated: Directive 'register_long_arrays' is deprecated in PHP 5.3 and greater in Unknown on line 0
Deprecated: Directive 'magic_quotes_gpc' is deprecated in PHP 5.3 and greater in Unknown on line 0
В новом пыхе не поддерживаются эти директивы, поэтому лезем в php.ini и комментируем register_long_arrays и magic_quotes_gpc, после чего перезапускаем апач и сново выводим php -v.
# mcedit /usr/local/etc/php.ini
;magic_quotes_gpc = On
;register_long_arrays = On
# apachectl restart
и php -v:
# php -v
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/lib/php/20090626/pcre.so' - Cannot open "/usr/local/lib/php/20090626/pcre.so" in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/lib/php/20090626/fileinfo.so' - Cannot open "/usr/local/lib/php/20090626/fileinfo.so" in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/lib/php/20090626/ming.so' - Cannot open "/usr/local/lib/php/20090626/ming.so" in Unknown on line 0
PHP 5.3.4 with Suhosin-Patch (cli) (built: Dec 21 2010 12:36:31)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
Ну вот, картина уже лучше, остаются модули, чтобы излечить эти ошибки, надо найти порты этих модулей, сделать make deinstall и make install clean, т.е. пересобрать каждый такой кривой модуль. Причем два сервера, одинаковые действия, а вот списки кривых модулей разные, на одном скривил gd.so, тут другой набор. Приступим к пересборке:
# pkg_info | grep fileinfo
pecl-fileinfo-1.0.4 A PECL extension to retrieve info about files
# cd /usr/ports/sysutils/pecl-fileinfo && make deinstall && make install clean
Cмотрим, что получилось:
# php -v
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/lib/php/20090626/pcre.so' - Cannot open "/usr/local/lib/php/20090626/pcre.so" in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/lib/php/20090626/ming.so' - Cannot open "/usr/local/lib/php/20090626/ming.so" in Unknown on line 0
PHP 5.3.4 with Suhosin-Patch (cli) (built: Dec 21 2010 12:36:31)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
Т.е. fileinfo.so отсутствует после пересборки. Остальное пересобираем по аналогии с выше написанным. Бывают случаи посложнее, т.е. пересборки какого то модуля php не достаточно, надо пересобирать еще то, от чего он зависит. В целом думаю можно пересобрать полностью php со всеми зависимостями, но это займет очень много времени.
Будем считать, что с этими проблемами справились, вывод php -v имеет следующий вид, без предупреждений:
# php -v
PHP 5.3.4 with Suhosin-Patch (cli) (built: Dec 21 2010 21:10:53)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
with eAccelerator v0.9.6.1, Copyright (c) 2004-2010 eAccelerator, by eAccelerator
Данная статья не тянет на руководство, которое построено по принципу делай раз, делай два и на выходе готовый положительный результат. Здесь лишь описано направление, в котором надо копать. Повторюсь из двух серверов список проблемных модулей совершенно разный, методы устранения тоже немного разнятся. На удаленном сервере все прошло более менее гладко, на домашнем пришлось попотеть. Если простой пересборкой модулей и портов зависящих от модулей проблему решить не удалось, можно кардинальным способом снести php полностью и пересобрать заново, примерно так:
# pkg_delete -f php5*
# rm -rf php5-extensions/
# rm -rf /usr/local/lib/php/
# rm -rf /usr/local/include/php
# cd /usr/ports/lang/php5 && make install clean
# cd /usr/ports/lang/php5-extensions && make install clean
Первая команда по зависимостям снесет phpmyadmin, тщательно думайте прежде чем что-то делать.
Эту часть статьи заканчиваю, в следующей кратко расскажу о проблемах падения деток httpd, а именно появления большого количества записей следующего вида: