Raspberry Pi2でPHP7のビルド・インストール

はじめに

PHP7が出たので自鯖のPHPを5.3から7へ移行しました
自鯖で稼働しているPHP関連のものはowncloudとWordpressですが移行後特にこれといった問題は起きていません

PHP7のインストールからMySQLの接続確認まで行います
インストールした環境はRaspberry Pi2 Wheezy上になります
Debian系やその他OSでも前提パッケージ名が違う程度だと思います

前提パッケージのインストール

1$ sudo apt-get install libxml2 libxml2-dev pkg-config libssl-dev libreadline5 libreadline-gplv2-dev libpspell-dev apache2-dev

libcurl4-openssl-devもいるかもしれません

コンパイル インストール

適当に公式からアーカイブファイルを落として展開する
その後

 1$ sudo sh ./configure \
 2--with-readline \
 3--enable-pcntl \
 4--with-gettext \
 5--enable-phpdbg \
 6--enable-phpdbg-webhelper \
 7--enable-mbstring \
 8--enable-zip \
 9--enable-bcmath \
10--enable-ftp \
11--enable-exif \
12--enable-calendar \
13--enable-sockets \
14--enable-sysvmsg \
15--enable-sysvsem \
16--enable-sysvshm \
17--enable-wddx \
18--with-curl \
19--with-mcrypt \
20--with-iconv \
21--with-pspell \
22--with-gd \
23--enable-gd-native-ttf \
24--enable-gd-jis-conv \
25--with-openssl \
26--enable-soap \
27--with-zlib-dir=/usr \
28--with-zlib=/usr \
29--with-bz2=/usr \
30--with-apxs2 \
31--with-mysqli=mysqlnd \
32--with-pdo-mysql=mysqlnd \
33--with-mysql-sock=/var/run/mysqld/mysqld.sock
34$ sudo make -j `nproc`
35$ sudo apt-get remove php*
36$ sudo make install

nprocはそのPC上の最大を表すらしい 知らなかった
おそらくconfigureは前提パッケージを全て入れていれば通るはず
トラブった時は以下のページが参考になった
https://blog.flowl.info/2015/how-to-install-php7-on-ubuntu-or-debian/

各種設定

設定ファイルのコピー

パスを調べてからそこにファイルを配置する

1$ php -i | grep php.ini
2$ sudo cp ./hoge/php-7.0.3/php.ini-production /usr/local/lib/php.ini
1$ vi /usr/local/lib/php.ini
2必要な設定をする
3必要な項目を検索して適宜書き換え
4expose_php = On → Offに
5;date.timezone = → date.timezone = 'Asia/Tokyo'
6;error_log = php_errors.log → error_log = "適当なパス/error.log"//対象ファイルの所有者をdaemonに権限を755にしておく
7mysqli.default_socket = → mysqli.default_socket = "パス"
8pdo_mysql.default_socket = → pdo_mysql.default_socket = "パス"
9display_errors = Off → display_errors = stderr

ソケットファイルの位置は/etc/mysql/my.cnfに書いてあるので環境に合わせる

1$ php -v
2PHP 7.0.3 (cli) (built: Feb 15 2016 16:56:09) ( NTS )
3Copyright (c) 1997-2016 The PHP Group
4Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies

インストール出来ていることを確認

Apacheの設定

--with-apxs2の設定をしているため

1$ cat /etc/apache2/mods-available/php7.load
2LoadModule php7_module /usr/lib/apache2/modules/libphp7.so

というファイルが生成されているはず
同じディレクトリにconfファイルを作成する

1$ vi /etc/apache2/mods-available/php7.conf
2SetHandler application/x-httpd-php

一度設定を無効にして再度有効にしてからApacheを再起動する

1$ sudo a2dismod php7
2$ sudo a2enmod php7
3$ sudo service apache2 restart

あとは適当にファイルを作成して

1<?php phpinfo(); ?>

と書いてテスト

MySQLとの接続の確認

1<?php $pdo = new PDO('mysql:dbname=DB名;localhost;charset=utf8', 'ユーザー名', 'パスワード'); ?>

実行してエラーが出ないことを確認する
undefinedだったらコンパイル時のオプション忘れ、No such fileならソケットの位置が怪しいです

以上終わり 半日掛かった
でも引っかかったところ全部メモったから同じ環境の人は特に問題なく出来るはず…

参考サイト

感想

必要なパッケージを探しコンパイルを通しでめんどくさいのでおとなしく誰かの作ってくれたパッケージを感謝しながら使う方が楽です
使うのが目標ならこの辺を参考にすると良いかも
コンパイルはエラー出るから良いですが既に環境が整えてあるowncloudとかWordpressでエラーが出るのがなかなか困りました
Wordpressはwp-config.phpでdebugをtrueにするとエラーが追いやすいです
owncloudはクライアントで一度ユーザーをログアウトさせてからログインさせるとうまく行きます

メモ

記事内容と重複することもあるがエラー内容とかも兼ねてメモ

configure: error: Cannot find OpenSSL's

openssl-devを入れれば良いと出てくるがRaspberry Piには該当パッケージがなかった
代わりにlibssl-devを入れる
https://www.raspberrypi.org/forums/viewtopic.php?f=33&t=14465

途中でbuild/shtoolのパーミッションがないと怒られた場合

1$ chmod 755 build/shtool

php -v できるがデータベースの接続に失敗する

PDOException' with message 'SQLSTATE[HY000] [2002] No such file or directory

mysqlのサービスが立ち上がってるのを確認したあとsockファイルの位置を確認する

1$ php --ri mysqli
2$ php --ri pdo_mysql

php.iniに

1mysqli.default_socket = "パス"
2pdo_mysql.default_socket = "パス"

と記述してからテストする
mysqlはPHP7から無くなったので不要
Apacheもreloadしておく