PHP7をビルドする

■Dockerによるアプリケーションレベルの仮想化というか、実行空間の分離が簡単にできるようになり、早速適当な事例としてPHP7の先行ビルドをやってみることにしました。コンテナ内でapache+php7の環境を作り、bridge接続で外部からアクセスしてウェブページの表示確認を目的としてみます。もちろん、ウェブサイト本体の表示は維持することは前提です。

 最初はZendのPHP7ページからDockerのコンテナ空間に直接マウントできるtar.gzファイルがあったのだけど、Fedora21環境ではライブラリ環境が新しすぎて駄目でした。結局git cloneでソースをコピーしてビルドすることにしました。

git clone https://git.php.net/repository/php-src.git

 fedoraのコピーに手元にあるapacheの実行バイナリを取り込んでベースになるテスト環境を取り込み、そのパッケージ空間内部でgit cloneを実行しました。そのあとbuild confするわけですが、前提のモジュールが諸々足りないため、yumで追加インストールしました。

yum -y install autoconf
yum -y install gcc gcc-c++
yum -y install re2c
yum -y install bison
yum -y install libxml2-devel
yum -y install openssl-devel
yum -y install bzip2-devel
yum -y install libcurl-devel
yum -y install libjpeg-devel
yum -y install libXpm-devel
yum -y install freetype-devel
yum -y install t1lib-devel
yum -y install gmp-devel
yum -y install mysql-devel
yum -y install aspell-devel
yum -y install recode-devel

configureはPHPNGにあるように以下のオプションで実行しました。

./configure \
    --prefix=$HOME/tmp/usr \
    --with-config-file-path=$HOME/tmp/usr/etc \
    --enable-mbstring \
    --enable-zip \
    --enable-bcmath \
    --enable-pcntl \
    --enable-ftp \
    --enable-exif \
    --enable-calendar \
    --enable-sysvmsg \
    --enable-sysvsem \
    --enable-sysvshm \
    --enable-wddx \
    --with-curl \
    --with-mcrypt \
    --with-iconv \
    --with-gmp \
    --with-pspell \
    --with-gd \
    --with-jpeg-dir=/usr \
    --with-png-dir=/usr \
    --with-zlib-dir=/usr \
    --with-xpm-dir=/usr \
    --with-freetype-dir=/usr \
    --with-t1lib=/usr \
    --enable-gd-native-ttf \
    --enable-gd-jis-conv \
    --with-openssl \
    --with-mysql=/usr \
    --with-pdo-mysql=/usr \
    --with-gettext=/usr \
    --with-zlib=/usr \
    --with-bz2=/usr \
    --with-recode=/usr \
    --with-mysqli=/usr/bin/mysql_config

 apacheへ取り込みにあたりapr, apr-utilと、apahceに含まれるbuildディレクトリにあるツールが必要になります。
 httpd.confの設定ではphp5の代わりにphp7を指定するだけになります。既存空間だとapacheを別ディレクトリにインストールしたり、ポートを付け替える必要があったりいろいろ工夫が必要になりますが、コンテナ空間だとそこは気にしなくて済むのが楽でした。

#LoadModule php5_module  modules/libphp5.so
LoadModule php7_module  modules/libphp7.so

php.iniはとりあえずショートタグを禁止にしないと不便ということもあり、最小限の設定です。

short_open_tag = Off
max_execution_time=600
memory_limit=128M
error_reporting=0
display_errors=0
log_errors=0
user_ini.filename=
realpath_cache_size=2M
cgi.check_shebang_line=0

zend_extension=opcache.so
opcache.enable_cli=1
opcache.save_comments=0
opcache.fast_shutdown=1
opcache.validate_timestamps=1
opcache.revalidate_freq=60
opcache.use_cwd=1
opcache.max_accelerated_files=100000
opcache.max_wasted_percentage=5
opcache.memory_consumption=128
opcache.consistency_checks=0

 パッケージの起動では、ネットワークをデフォルトの"bridge"として、ポートマッピングでウェブサイト本体と棲み分けを行います。

docker run -p 20000:80 -d -t php7:test entry.sh

 ウェブサイトの表示は大したことをやっていなくて、せいぜいxmlドキュメントを読み込んで加工するだけで、さすがにその程度で支障はないようです。ただ、うちの場合はdioを使っているシリアルポートへのアクセスがどういうことになるのか、そこは気になります。ただ、シリアルIOについてはサーバーの物理リソースを用意しなければテストできないのでそこは工夫が必要になります。

Copyright (C) 2008-2015 Satosh Saitou. All rights reserved.
戻る
日記::一覧展開
2016.06
2016.05
2015.12
2015.11
2015.08
2015.07
2015.06
2015.05
NTPを整備する (2015.05.02)
2015.04
2015.03
2015.02
2015.01
2014.12
PHPでDMC (2014.12.13)
jouornald (2014.12.07)
2014.11
2014.10
2014.09
RaspberryPi B+ (2014.09.06)
2014.08
2014.07
2014.06
2014.05
2014.04
2014.03
2014.02
2014.01
ISCP (2014.01.11)
2013.12
2013.11
2013.10
2013.09
2013.08
2013.07
Fedora19 (2013.07.20)
2013.06
Google Cloud Print (2013.06.30)
wiringPi (2013.06.01)
2013.05
2013.04
2013.03
Fedora18 (2013.03.09)
2013.02
Backupその後 (2013.02.24)
Backup (2013.02.17)
2013.01
2012.12
2012.11
2012.10
2012.09
2012.08
2012.07
2012.06
2012.05
2012.04
2012.03
2012.02
2012.01
2011.12
2011.11
2011.10
2011.09
2011.08
2011.07
2011.06
2011.05
2011.04
2011.03
2011.02
2011.01
2010.12
2010.11
2010.10
2010.09
2010.08
2010.07
2010.06
2010.05
2010.04
2010.03
2010.02
2010.01
2009.12
2009.11
2009.10
2009.09
2009.08
2009.07
2009.06
2009.05
2009.03
2009.02
2009.01
2008.12
2008.11
2008.10
2008.09
2008.08
2008.07
2008.06
2008.05
2008.04
2008.03
音が小さい (2008.03.30)
2008.02
1998.11
作成:2015.04.19
公開:2015.04.25

Valid XHTML 1.1

loading image reserved place