Ubuntu12.04LTSから14.04LTSにアップグレード(WordPress編)

ようやくZarafaが動作したー、さてブログに記事でも投稿しようかなぁ、とWordPressにアクセスしたところ、このページは存在しないと・・・

いくつか問題があって、順次解決していくしかなかった。




まず、そもそもsiteが有効になっていなかった。site情報に拡張子が必要になっているらしいので、以下の操作でsiteを有効にした。

$ sudo rm /etc/apache2/sites-enabled/maincontents
$ sudo mv /etc/apache2/sites-available/maincontents /etc/apache2/sites-available/maincontents.conf
$ sudo a2ensite maincontents
$ sudo a2dismod deflate
$ sudo service apache2 restart

さぁ、どうだ!→画面真っ白け・・・


結論からすると、libphp5.soというファイルで何か問題が起きているらしく、これはZarafaを入れたから発生した問題かもしれなくて、ちょっと不安になりながらも以下で更新。

$ apt-get install --reinstall libapache2-mod-php5

これでエラーの内容が変わった。

ここに至るまでの調査手順を書き残す。

/var/log/syslog
[Sat Apr 25 19:41:04.291962 2015] [core:notice] [pid 17463] AH00051: child pid 17474 exit signal Segmentation fault (11), possible coredump in /etc/apache2
[Sat Apr 25 19:41:04.292210 2015] [mpm_prefork:notice] [pid 17463] AH00169: caught SIGTERM, shutting down
[Sat Apr 25 19:41:05.339037 2015] [mpm_prefork:notice] [pid 18973] AH00163: Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.9 OpenSSL/1.0.1f configured -- resuming normal operations
[Sat Apr 25 19:41:05.339399 2015] [core:notice] [pid 18973] AH00094: Command line: '/usr/sbin/apache2'

これでエラーが起きていることがわかったので、apache2のエラーログを確認。

/var/log/apache2/error.log
[Sat Apr 25 19:40:30.385256 2015] [mpm_prefork:notice] [pid 17463] AH00163: Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.9 OpenSSL/1.0.1f configured -- resuming normal operations
[Sat Apr 25 19:40:30.385547 2015] [core:notice] [pid 17463] AH00094: Command line: '/usr/sbin/apache2'
[Sat Apr 25 19:41:04.291962 2015] [core:notice] [pid 17463] AH00051: child pid 17474 exit signal Segmentation fault (11), possible coredump in /etc/apache2
[Sat Apr 25 19:41:04.292210 2015] [mpm_prefork:notice] [pid 17463] AH00169: caught SIGTERM, shutting down
[Sat Apr 25 19:41:05.339037 2015] [mpm_prefork:notice] [pid 18973] AH00163: Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.9 OpenSSL/1.0.1f configured -- resuming normal operations
[Sat Apr 25 19:41:05.339399 2015] [core:notice] [pid 18973] AH00094: Command line: '/usr/sbin/apache2'

同じようなことしか書かれていないが、コアを出力していることが分かる。Ubuntuの場合、こうしたエラーはapport君が管理しているらしい。ちょっとpidが違っているのが気にはなるが、クラッシュレポート(拡張子crash)のファイルが出力されたことが分かる。

/var/log/apport.log
ERROR: apport (pid 18944) Sat Apr 25 19:41:03 2015: called for pid 17474, signal 11, core limit 0
ERROR: apport (pid 18944) Sat Apr 25 19:41:03 2015: executable: /usr/sbin/apache2 (command line "/usr/sbin/apache2 -k start")
ERROR: apport (pid 18944) Sat Apr 25 19:41:03 2015: is_closing_session(): no DBUS_SESSION_BUS_ADDRESS in environment
ERROR: apport (pid 18944) Sat Apr 25 19:41:03 2015: apport: report /var/crash/_usr_sbin_apache2.0.crash already exists and unseen, doing nothing to avoid disk usage DoS

けれども、実際にはコアが出力されてない(だったはず)。で、コアを出力するように以下を行う。実際はapache2が起動する際にすぐにエラーが起きるので、ここでコアも出力される。

$ su -
# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 15723
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 15723
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
# ulimit -c unlimited
# ulimit -a
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 15723
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 15723
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
# service apache2 restart

ちなみに、sudoでそれぞれのコマンドを実行すると、どうもこの設定が効力を発揮しないらしいので、suした。

では、コアからどこで問題が起きているのか、ぐらいは見てみよう・・・apport君にはこのレポートからgdbで解析ができる機能が付いているようなので以下を実行したが失敗。

$ sudo apt-get install apport-retrace
$ sudo apport-retrace -g /var/crash/_usr_sbin_apache2.0.crash
ERROR: report file does not contain one of the required fields: CoreDump DistroRelease Package ExecutablePath

なにか必要なファイルがレポートに含まれていない雰囲気。

で・・・仕方がないので、レポートファイルを展開して直接gdbに読ませてみる。

$ su -
# mkdir /var/log/test
# apport-unpack /var/crash/_usr_sbin_apache2.0.crash /var/crash/test
# cd /var/log/test
# gdb /usr/sbin/apache2 -c CoreDump
GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.2) 7.7.1
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later 
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i686-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
.
Find the GDB manual and other documentation resources online at:
.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /usr/sbin/apache2...(no debugging symbols found)...done.
BFD: 警告: /var/crash/test/CoreDump は切り詰められています: 予期されるコアファイルサイズ >= 91213824。見つかったサイズ: 83951616。
[New LWP 6587]
[New LWP 4302]
Failed to read a valid object file image from memory.
Core was generated by `/usr/sbin/apache2 -k start'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0xb76c6424 in ?? ()
(gdb) where
Python Exception <class 'gdb.memoryerror'=""> Cannot access memory at address 0xbfb7183c:
#0  0xb6d6bbfe in ?? () from /usr/lib/apache2/modules/libphp5.so
Cannot access memory at address 0xbfb7183c
(gdb)

どうやら上手く行ってないのはこれか・・・となった。


さて、とアクセスしてみると、相変わらず真っ白け・・・。

/var/log/apache2/error.log
[Tue Apr 21 21:57:03.465318 2015] [:error] [pid 7215] [client 172.16.119.39:51854] PHP Fatal error:  Call-time pass-by-reference has been removed in /usr/share/wordpress/wp-content/plugins/wp-comment-notifier-for-all/wp-comment-notifier-for-all.php on line 90

ということで、以下を編集。suしたまま。このファイルに2箇所修正が必要だった。

/usr/share/wordpress/wp-content/plugins/wp-comment-notifier-for-all/wp-comment-notifier-for-all.php
89:    if ($process==1) {
90:        cnfa_notification_email(&$comment, &$notified_comments);
91:    }
92:    return $comment_ID;
↓
89:    if ($process==1) {
90:        cnfa_notification_email($comment, $notified_comments);
91:    }
92:    return $comment_ID;

112:        if ($process==1)
113:        {
114:            cnfa_notification_email(&$comment, &$options);
115:        }
116:    }
117:    return $comment_ID;
↓
112:        if ($process==1)
113:        {
114:            cnfa_notification_email($comment, $options);
115:        }
116:    }
117:    return $comment_ID;

どうやら、この&を使ったアクセスは廃止される予定だったらしく、これを使ったスクリプトでエラーが起きていた。とりあえず、起動したら色々とブラウザから更新ができるだろうということで、まずは起動するところまで持っていった。


どうにかサイトは表示できるようになったが、プラグインの更新ができない。
なんだろう・・・と悩んだ結果、最終的には wp-config.php が書き換えられていることに気付く。

$ sudo rm /usr/share/wordpress/wp-config.php
$ sudo mv /etc/wordpress/wp-config.php.dpkg-bak /etc/wordpress/wp-config.php
$ sudo ln -s /etc/wordpress/wp-config.php /usr/share/wordpress/wp-config.php
$ sudo service apache2 restart


ということで、とりあえず動くようになった。

お気軽にどうぞ ~ 投稿に関するご意見・感想・他

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です