PHP5.4のアップデートの手順をミスって酷い目にあった

手元の開発環境ではPHP5.4を使っていたが、PHP5.4でパフォーマンスが向上しているからWordPressにも恩恵あるかなと思ってサーバの方も更新してみたら酷い目にあった。

DebianでDotdebを利用していたのでInstructionsを見てPHP54のソースを追加するだけだったのに、DotdebでNginxやMySQL入れていることをすっかり忘れていてPHP54のソースに置き換えてしまった。それでパッケージを更新したら見事にNginxとMySQLが削除されてしまい、サイトにアクセスができない状態になった。

サービスが消えているからログが出力されるわけもないし、NginxがPATHから見つからないので気がついた。それでNginxtとMySQLも入れなおしたんだけどそれでもいろいろハマった。

nginx-extras -> nginx-passenger

Nginxを入れなおしても起動ができない。なぜかpassenger向けのディレクティブ知らんといわれる。passengerはRedmineを動かすために入れていた。

nginx: [emerg] unknown directive "passenger_root" in /etc/nginx/nginx.conf:67
nginx: configuration file /etc/nginx/nginx.conf test failed

パッケージを検索してみるとnginx-passengerというのが追加されていた。どうやらpassenger向けにビルドしたものはnginx-extrasからnginx-passengerに変わったようだ。nginx-passengerに入れ直して起動はできた。

nginxからphp-fpmに接続できず502 Bad Gateway

php-fpmではhttp://127.0.0.1:9000でリスニングしていたつもりだったんだけど設定(/etc/php5/fpm/pool.d/www.conf)を見ていくとunix socket(listen = /var/run/php5-fpm.sock)になっていたので

server unix:/var/run/php5-fpm.sock;

にnginxの設定を変更。php-fpmの設定変えた記憶がないんだけど、デフォルトの設定かディストリビューションの設定ファイル変わったんだろうか。

MySQL 5.5が動かない

MySQLも入れなおしたら5.5になっていてmy.cnfがおかしいとか言われて起動しない。

130127 0:18:13 [ERROR] An old style --language value with language specific part detected: /usr/share/mysql/english/
130127 0:18:13 [ERROR] Use --lc-messages-dir without language specific part instead.

my.cnf.dpkg-distと比較して

language= /usr/share/mysql/englishをlc-messages-dir= /usr/share/mysqlに変更した。

起動しようとするとChecking for tables which need an upgradeとか怒られるので

sudo mysqlcheck --check-upgrade --all-databases --auto-repair -u root -p

を実行して復旧。

PukiWikiが動かない

nginx+php-fpm-mysqlの設定をなんとかしてようやくブログが閲覧できたけど、今度はWordPressブログで使っているPukiWiki for WordPressプラグインが動かない。どうやらPukiWikiにPHP5.4との互換性問題があるようだ。

とりあえずhex2bin関数をif (! function_exists(‘hex2bin’)) {で囲った。

おわりに

今のところは無事動いているようだけど、作業を週末にやってよかった。