このページでは、UbuntuまたはそのほかのDebian系ディストリビューションで、ソースからPHPをビルドする方法を説明します。ほかのUnixまたはLinuxシステムでPHPをコンパイルする際の基礎としても、間違いなく利用できるでしょう。
これが必要になる可能性があるのは、最新バージョンのMoodleには比較的新しいバージョンのPHPが必要であり、使用しているPHPのバージョンのパッケージ(特に「長期サポート」バージョン)ではそれがサポートされていない場合があるためです。
この説明は、(執筆時点で)最新のUbuntu LTSであるUbuntu 10.04に基づいています。Ubuntu 10.04には、Moodle 2.1に必要な新しさのPHPバージョンが含まれていません。
前提条件
Ubuntu(この場合は10.04)が基本的な構成でインストールされており、(特に)PHPはインストールされておらず、場合によってはApacheウェブサーバもインストールされていないことを前提としています。すでに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のバージョン、機能、および「library」または「development」という単語を組み合わせて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で使用したprefixに設定されます(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の設定は少し変わっていて、それだけで1つの議論になるほどです。基本的には、次の行を追加する必要があります:
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();
次に、ウェブブラウザから http://hostname.of.your.server/test.php を使用してページにアクセスします。PHPのセットアップに関する長い一覧が表示されるはずです(確認するとよいでしょう)。PHPのコードがそのまま表示される場合は、何らかの理由でApache設定の3つの設定が機能しておらず、確認が必要です。そのほかのエラーが表示される場合は、続きをお読みください……
トラブルシューティング
筆者からの最善のアドバイスは、ログを確認することです。Apacheのエラーログは/var/log/apache/error.logにあり、最新のエラーは末尾にあります。常に最初にここを確認してください。ほとんどの問題は、ファイルやディレクトリのパーミッションの誤り、またはApacheの設定の誤りが原因です。
PHPの更新
実質的に2つのケースがあります。1つ目は、追加の設定でphpを再ビルドしたい場合、2つ目は、より新しいバージョンのPHPをビルドしたい場合です。上記のインストール手順に、sudo make installまで(これを含めて)そのまま従うことができます。その後、Apacheウェブサーバを再起動するだけで完了です。
新しいバージョンの場合は、古いバージョンで使用したものと同じ./configureコマンドを使用するだけです(必ず動作するとは限りませんが、その可能性は非常に高いです)。完全なコマンドを思い出せない場合は、(古いバージョンの)ビルドディレクトリにあるconfig.logというファイルを確認するか、上記の「phpinfo」テストを実行すると、一番上に使用されたconfigコマンドが表示されます。