ソースからPHPをコンパイルする

提供:MoodleDocs
移動先:案内検索

このページでは、Ubuntu やその他の Debian ベースのディストリビューションで PHP をソースからビルドする方法を紹介します。このページは、他のUnixまたはLinuxシステムでPHPをコンパイルするための基礎として使用することができます。

Moodleの最新バージョンでは、PHPの新バージョンが必要となりますが、あなたが使用しているPHPのパッケージ (特に "長期サポート" バージョン) ではサポートされていない可能性があるため、この作業が必要になる場合があります。

このディスカッションは、最新のUbuntu LTSであるUbuntu 10.04をベースにしています(執筆時)。このUbuntu 10.04は、最新のUbuntu LTSですが、Moodle 2.1に対応した新しいPHPバージョンは含まれていません。

前提条件

ここでは、Ubuntu(ここでは10.04)を基本的にインストールしていて、(特に)PHPがインストールされておらず、おそらくApache Webサーバもないことを想定しています。すでにPHPが(パッケージとして)インストールされている場合は、まずそれを削除する必要があります。

sudo apt-get remove php5

Apacheウェブサーバ

ApacheはUbuntuのパッケージからインストールするか(推奨)、ソースからコンパイルするかのどちらかです。ソースからのコンパイルは簡単ですが、デフォルトの設定ではUbuntuパッケージ版とは全く異なるディレクトリ構造になってしまいます。この点については、ここでは詳しく説明しません。

パッケージ版をインストールするには、以下の通りです。

sudo apt-get install apache2 apache2-dev

PHPをビルドするには、-devパッケージが必要です。

追加ライブラリの取得

Moodleは、かなりの数のオプションのPHPモジュールを必要とします。これらのモジュールの多くは、PHPがコンパイルされる前にシステム上で開発用ライブラリが利用可能である必要があります。この点が、PHPをソースからビルドすることを困難にしています。もし、あなたが挑戦したいのであれば、すべてのモジュールをソースパッケージとしてダウンロードし、スクラッチからビルドすることもできますが、パッケージ版を使用する方がはるかに簡単です。これらは以下のようにしてインストールします。

sudo apt-get install \
    libxml2-dev \
    libcurl4-openssl-dev \
    libjpeg-dev \
    libpng-dev \
    libxpm-dev \
    libmysqlclient-dev \
    libpq-dev \
    libicu-dev \
    libfreetype6-dev \
    libldap2-dev \
    libxslt-dev \
    libssl-dev \
    libldb-dev

また、Linuxではrootとして以下のシンボリックリンクを作成する必要があるかもしれません。

ln -s /usr/lib/x86_64-linux-gnu/libldap.so /usr/lib/libldap.so
ln -s /usr/lib/x86_64-linux-gnu/liblber.so /usr/lib/liblber.so

なお、上記には、MySQLとPostgreSQLの両方のデータベース用のクライアントが含まれています。両方をインストールしたくない場合もあるでしょう。PHPのビルドにさらにオプションを追加する場合、他のライブラリを含める必要があるかもしれません。お使いのUbuntuのバージョン、機能、'ライブラリ' または '開発' という単語を使ってGoogle検索をすると、正しいパッケージ名が見つかることがあります。

ビルド環境

Ubuntuには、必要なコンパイラ、リンカ、ライブラリのすべてが標準でインストールされているわけではありません。これまでにソースから何もコンパイルしたことがない場合は、1つのコマンドで解決できます...

sudo apt-get install build-essential

PHPの入手と構築

最新のバージョンは www.php.net からダウンロードできます。この記事を書いている時点では7.2.10ですが、新バージョンはかなり定期的に発表されています。ダウンロードは、.tar.gzファイルとして行われます(例: php-7.2.10.tar.gz)。これを(おそらく)ホームフォルダ内の適当な場所に置き、ファイルを解凍します。

tar -zxvf php-7.x.y.tar.gz
cd php-7.x.y 

次のステップでは、'configure' プログラムを実行します。このプログラムは、あなたのシステムを調査し、特定の構成に基づいて特定のmakeファイルを作成します。また、コンパイルされるすべてのオプションモジュールを指定します。Moodle 2 (および1.9) の最小構成は、以下のとおりです...

./configure \
  --prefix=/usr/local/php \
  --with-apxs2=/usr/local/apache/bin/apxs \
  --enable-mbstring \
  --with-curl \
  --with-openssl \
  --with-xmlrpc \
  --enable-soap \
  --enable-zip \
  --with-gd \
  --with-jpeg-dir \
  --with-png-dir \
  --with-mysqli \
  --with-pgsql \
  --enable-embedded-mysqli \
  --with-freetype-dir \
  --with-ldap \
  --enable-intl \
  --with-xsl \
  --with-zlib

特別な要件がある場合は、他にも必要なものがあるかもしれません。すべての可能性のリストを得るためには...

./configure --help

これは、エラーなしで完了し、ボックス内の明白な著作権表示で終了するはずです。エラーが発生した場合は、ライブラリが不足している可能性が高いです。上述のライブラリがすべて(apt-getで)追加されていることを確認してください。それができなければ、Googleがあなたの友人です。

以上の作業が終わったら、いよいよ実際のコンパイルとリンクを行います。単純に...

make

これには(あなたのマシンの速さにもよりますが)ある程度の時間がかかり、最後にBuild completeというフレーズが表示されます。

あとは、ファイルをインストールするだけです...

sudo make install

注意: PHP_BINDIR は、コンパイル時に設定される値です。パスには、configure で使用されるプレフィックスが設定されます (Linux の場合は: ./configure --prefix <path>)。

ApacheとPHPの設定

最初のステップは、PHP設定ファイル(php.ini)をソース配布物からコピーして、Apacheの起動時に読み込まれるようにすることです。本番システム用と開発システム用の2つのバージョンがあります。後者はより多くのエラーや警告を表示するので、その名が示すように、(セキュリティ上の理由から)開発環境でのみ使用されるべきです。選択したファイルをコピーするには、次のようにします(ソースディレクトリから)。

sudo cp php.ini-production /usr/local/lib/php.ini
sudo ln -s /usr/local/lib/php.ini /etc

2行目はオプションで、/etcにあるiniファイルへのリンクを作成します(/etc/php.iniに記載されています)。この時点で、必要に応じてiniファイルを編集してカスタマイズすることができます。ファイルのアップロード制限やphpのmemory_limitの設定を変更することが考えられます。

PHPファイルを正しく扱うためには、Apacheの設定ファイルを変更する必要があります。UbuntuのAPacheの設定は少し変わっていて、それだけで全体のディスカッションになるかもしれません。基本的には、以下の行を追加する必要があります。

LoadModule php5_module  modules/libphp5.so
AddType application/x-http-php  .php
DirectoryIndex  index.php  index.html

最初の2つは、/etc/apache2/apache2.confの最後に記述し、DirectoryIndexは、mods-available/dir.confをチェックして、index.phpがリストに入っていることを確認すればよいです。厳密に言えば、mods-available にファイルを作成して、a2enmod コマンドで有効にするのですが、これは練習問題として残しておきます

この作業が完了したら、あとはApacheを再起動するだけです...

sudo /etc/init.d/apache2 restart

テスト方法

テストを行う最も簡単な方法は、ウェブサービスを提供するディレクトリのルート(/var/www)に小さなテストファイルを作成し、test.php のような名前をつけることです...

  <?php
    phpinfo();

その後、Webブラウザから http://hostname.of.your.server/test.php を使ってそのページにアクセスします。 すると、PHPの設定についての長いリストが表示されるはずです(これはチェックした方がいいかもしれません)。もし、PHPのコードだけが表示されたら、Apacheの設定の中の3つの設定が何らかの理由で機能していないので、チェックが必要です。それ以外のエラーが出た場合は、この先を読んでください...

トラブルシューティング

一番のアドバイスは、ログを見ることです。Apache のエラーログは /var/log/apache/error.log にあり、最後に最新のエラーが表示されます。必ず最初にここを見てください。ほとんどの問題は、ファイルやディレクトリのパーミッションが正しくないか、Apacheの設定が正しくないことが原因です。

PHPの更新について

実際には2つの可能性があります。まず、追加の設定をしてPHPを再構築する場合と、より新しいバージョンのPHPを構築する場合です。インストールの手順は、上記と全く同じで、sudo make install まで行うことができます。その後、Apacheウェブサーバを再起動すれば完了です。

新しいバージョンでは、古いバージョンで行ったのと同じ ./configure コマンドを使用するだけです(絶対にうまくいくというわけではありませんが、可能性は高いです)。完全なコマンドを思い出せない場合は、(旧バージョンでは)ビルドディレクトリにあるconfig.logというファイルを見るか、上述の 'phpinfo' テストを実行すると、configコマンドが一番上に表示されます。

関連項目