Ubuntu 12.04のPHPを最新にする
GMO VPSのUbuntu 12.04に入っているPHPのバージョンが古いので、バージョンアップを試みました。
更新前のバージョン
OS
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=12.04
DISTRIB_CODENAME=precise
DISTRIB_DESCRIPTION="Ubuntu 12.04.3 LTS"
PHP
$ php -v
PHP 5.3.10-1ubuntu3.8 with Suhosin-Patch (cli) (built: Sep 4 2013 20:00:51)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies
インストール
リポジトリの追加
公式では5.3.10-1以降はリリースされていないようなので、PPA(Personal Package Archive)リポジトリにあるものを入れることになるようです。
ググったらadd-apt-repository
コマンドでリポジトリが足せるらしい。
$ sudo add-apt-repository ppa:ondrej/php5
sudo: add-apt-repository: command not found
しかし、そんなコマンドは無いらしい。
リポジトリを追加するコマンドを入れる
python-software-properties
パッケージを入れると、add-apt-repository
コマンドが使えるようになるらしい。
$ sudo aptitude install python-software-properties
ちなみに、12.10以降だとパッケージが変わっているようです。
$ sudo aptitude install software-properties-common
先にこちらを入れて、not foundとか出たのでどうしようかと思った。
リポジトリの追加
$ sudo add-apt-repository ppa:ondrej/php5
今度は追加できました。
アップデート
$ sudo aptitude update
$ sudo aptitude upgrade
途中、php.iniを上書きしていいか?というダイアログが出てきたので、大して書き換えてないのでOKする。
$ php -v
PHP 5.5.7-1+sury.org~precise+1 (cli) (built: Dec 12 2013 21:37:40)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2013 Zend Technologies
with Zend OPcache v7.0.3-dev, Copyright (c) 1999-2013, by Zend Technologies
これでアップデートできました。
が、なんかWordPressが動かなくなった。
error.logを見る
[Mon Dec 30 16:09:43.037018 2013] [:error] [pid 8572] [client ...:51733] PHP Parse error: syntax error, unexpected 'add_action' (T_STRING), expecting function (T_FUNCTION) in /var/www/wp-content/themes/mytheme/functions.php on line 113, referer: http://wordpress.local/wp-admin/widgets.php
お前が作ったテーマのfunctions.php
が悪いんじゃボケ!と言われているので、該当行を見てみると、
add_action('widgets_init', create_function('', 'return register_widget("SidePanelItem");'));
作ったウィジェットを登録しているだけでした。なぜここで落ちる?
PHP5.5からMySQLとの接続絡みで何か変わったらしいのでその影響かもとは思うのですが、今日は元気がなかったので5.5を使うのは諦めた。
PHP5.4へダウングレードする
というわけで、PHP5.4を入れることにします。
PHP5.5の残骸を消す
$ sudo apt-add-repository -r ppa:ondrej/php5
リポジトリを消して、
$ sudo aptitude remove php5 php5-cli php5-common php5-curl php5-gd php5-intl php5-json php5-mysql
Remove the following packages:
1) libapache2-mod-php5
2) libphp-phpmailer
3) libphp-simplepie
4) libphp-snoopy
いったん削除。依存パッケージも消えるのであとで入れる。
リポジトリの追加
$ sudo apt-add-repository ppa:ondrej/php5-oldstable
php5-oldstable
とすると5.4系になるみたいです。
PHP5.4をインストールする
$ sudo aptitude install php5 php5-cli php5-common php5-curl php5-gd php5-intl php5-json php5-mysql
Remove the following packages:
1) apache2
2) apache2-bin
3) apache2-data
さっき消したものをインストール。 Apache2は互換性が無いため、消して入れ直すもよう。
* Starting web server apache2 apache2: Syntax error on line 210 of /etc/apache2/apache2.conf: Syntax error on line 1 of /etc/apache2/mods-enabled/access_compat.load: Cannot load /usr/lib/apache2/modules/mod_access_compat.so into server: /usr/lib/apache2/modules/mod_access_compat.so: cannot open shared object file: No such file or directory
Action 'start' failed.
The Apache error log may have more information.
[fail]
しかし、起動しなかった。
$ php -v
PHP 5.4.23-1+sury.org~precise+1 (cli) (built: Dec 12 2013 09:24:16)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
PHP5.4はインストールされている。
Apache2の残骸を消す
ここから個別にファイルを直して復旧を試みたのですが、結局うまくいかずApache2を再インストールすることに。
$ cp /etc/apache2/sites-available/000-default.conf ~/
設定ファイルを退避。
$ sudo aptitude purge apache2
Apache2を設定ごと削除。
$ sudo aptitude instal apache2
再度インストール。
$ sudo cp ~/000-default.conf /etc/apache2/sites-available/
設定ファイルを戻して、
$ sudo service apache2 start
今度は起動しました。
依存パッケージを入れ直す
$ sudo aptitude install libapache2-mod-php5 libphp-phpmailer libphp-simplepie libphp-snoopy
先ほど削除されたパッケージを入れ、
$ cd /etc/apache2/mods-enabled
$ sudo ln -s ../mods-available/php5.load .
$ sudo ln -s ../mods-available/php5.conf .
Apache2のPHPモジュールを有効にさせる。
$ sudo service apache2 restart
Apache2を再起動したら完了。
長かった…