PHPのエッジなバージョン (例えば今の時点だと 8.0.0alpha3) を使いたい場合,多くの場合はソースコードからビルドする必要があります.その他にもランタイムのオプションをいじりたいだとか,そういった様々な理由からPHPをソースコードからビルドしなければならないことがあります.あるでしょう.
ソースコードからビルドするのはまあ良いんですが,そのビルド成果物 (つまりPHPランタイム) のデプロイ対象が多い場合に都度都度その環境でビルドをするのは時間がかかってしまいますし,計算機リソースの無駄遣いです.
というわけでDebianやUbuntuを利用している場合だとdebパッケージを一度こさえて,それをばら撒くようにすると経済的です.
以下はミニマムな例:
$ curl -LO https://downloads.php.net/~carusogabriel/php-8.0.0alpha3.tar.gz $ tar zxf php-8.0.0alpha3.tar.gz $ cd php-8.0.0alpha3 $ ./configure $ make $ INSTALL_ROOT="/path/to/php-dist" make install
というふうにしておき, /path/to/php-dist/DEBIAN/control に
Package: php8 Maintainer: moznion <moznion@gmail.com> Architecture: amd64 Version: 8.0.0alpha3 Description: php 8 binary
というようなcontrolファイルを置いて,
fakeroot dpkg-deb --build /path/to/php-dist/ .
というふうにしておくと良い感じでdebパッケージが作成されます.
特記事項としては
./configureの際に--prefixを付与してはならない--prefixの代わりにmake installの際にINSTALL_ROOT環境変数を付加する
というあたりです.
というのも ./configure に --prefix を付けてしまうと,build / install された成果物がそのprefixの内容に依存してしまうため,ビルドした環境の構成 (特にpath) とdebパッケージの展開先の環境構成が異なるときにうまく動作しなくなる場合があります.
例えば,./configure --prefix=/tmp/dist として make と make install すると,成果物は /tmp/dist 以下に展開されます.その状態でdebパッケージを作成し,そのパッケージを利用して別の環境にインストールすると,モノ自体は /usr/local 以下にインストールされますが,インストールされたモノたちは /tmp/dist に依存しています (例えば php.ini の場所は /tmp/dist/usr/local/lib/php.ini にあることが期待されてしまう).びみょう.
というわけで --prefix を渡さないようにしておきつつ (つまりデフォルトの /usr/local が利用される),しかしそのまま make install するとそのまま /usr/local 以下にモノがインストールされてしまいdebパッケージを作成するには具合が悪いので,INSTALL_ROOT 環境変数によって「インストール先だけを変える」ことにより,そのディレクトリに対してdebパッケージを作るといい感じに作成できます (つまりこの場合だと php.ini の場所は /usr/local/lib/php.ini になる).
良かったですね.